计算机视觉是人类希望机器可以像人眼一样去“看”,而机器学习(深度学习)是希望机器可以像人的大脑一样“思考”。
既然要机器拥有人类的大脑,那就要从人类的大脑结构出发。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有1000亿个神经元之多。前人对神经的结构进行了数学建模,进而通过计算机进行数学映射,得到了神经网络。神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。
1958年,计算科学家Rosenblatt提出了由两层神经元组成的神经网络。他给它起了一个名字--“感知器”(Perceptron)(有的文献翻译成“感知机”,下文统一用“感知器”来指代)。每个神经元都是一个结构相似的独立单元,它接受前一层的输入,并将加权和输入非线性作用函数,最后输出结果传递给后一层。下图为单层感知机:
函数**:一般采用sigmoid和tanh函数,主要是将数据进行非线性变换,将输入压缩到(0,1)和(-1,1)之间。
# 激活函数deftanh(x): returnnp.tanh(x) deflogistic(x): return1/(1+np.exp(-x))
**学习规则**:设置学习率learning_rate和学习轮次epochs,机器学习是一个不断迭代优化的过程,需要学习率来调整实际输出和期望输出的差别。
# 学习率self.weights[i] +=learning_rate*layer.T.dot(delta)
**目标函数**:主要采用均方误差,几乎所有的机器学习算法最后都归结为求解最优化问题,以达到我们想让算法达到的目标。为了完成某一目标,需要构造出一个“目标函数”来,然后让该函数取极大值或极小值,从而得到机器学习算法的模型参数。如何构造出一个合理的目标函数,是建立机器学习算法的关键,一旦目标函数确定,接下来就是求解最优化问题,这在数学上一般有现成的方案。
# cost/loss functioncost=-tf.reduce_mean(Y*tf.compat.v1.log(hypothesis) + (1-Y) *tf.compat.v1.log(1-hypothesis))
**梯度下降算法**:主要采用SGD、Mini-batch GD,目的就是求解目标函数的最小值。这个过程可以理解为蒙着眼睛下山,每次都朝着梯度下降最快的方向往下走。当然随着不断的发展,之后深度学习还有更好的最优化算法,如Adam。
# 调用Tensorflow的API函数GradientDescentOptimizer实现train=tf.compat.v1.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(cost)
**BP算法**:即误差反向传播算法,BP算法中核心的数学工具就是微积分的链式求导法则。
#开始反向计算误差,更新权重 forlinrange(len(a) -2, 0, -1): # we need to begin at the second to last layer deltas.append(deltas[-1].dot(self.weights[l].T)*self.activation_deriv(a[l])) deltas.reverse() foriinrange(len(self.weights)): layer=np.atleast_2d(a[i]) delta=np.atleast_2d(deltas[i]) self.weights[i] +=learning_rate*layer.T.dot(delta)