深度学习(一):神经网络和反向传播
从这一节开始,将介绍神经网络的相关内容。
博客不以介绍基本概念为主,而是注重一些浅显的推到和证明过程,以帮助理解。
如果你对神经网络一窍不通,你应该去看神经网络与深度学习
该博客可以看做是对于该文章的摘要。
概念图
上述图片显示了神经网络的数据流动。
其中的每一个圆圈表示一个神经元。
一般对于神经元的描述如下:
一个神经元有几个输入和一个输出,多个输入和其权重相乘后在相加,其和通过和一个权重比较来决定输出的值。
用公式来表示就是:
即x为输入,w为权重,b是一个实数,代表偏置,
如果你阅读过前面机器学习的内容机器学习(二):逻辑回归或者机器学习(四):损失函数,就知道了可以使用跃阶函数和sigmoid函数作为判断输出值的标准,并会明白一般我们喜欢使用sigmoid函数。
同样的,一般来说,神经网络也采用sigmoid函数作为从输入到输出的决定标准。
代价函数
义同损失函数,我们需要一个标准来优化神经网络。
神经网络的代价函数如下:
y是对应于x的label,a是对应于x的神经网络输出值。
a是用过一系列的矩阵相乘,和sigmoid函数计算出来的。
目标是使得C(w,b)最小,其中w,b是参数变量,参考前一篇博客机器学习(三):梯度下降法,我们将使用梯度下降方法。
若能得到
那么接下来的重点就是对于中间的结果,如何求解梯度了。
反向传播(backpropagation)
在介绍这一节前,将详细规定一下各参数。
一个神经网络中的所有参数如下:
从
则第
为了简洁,可以使用矩阵的表示形式:
同时引入一个中间变量:
下面将开始反向传播中梯度的推导。
梯度推导
再推倒前,先引入一个中间结果,因为最后的形式会用到这个中间结果,即:
该定义可以理解为第
公式1
注意到这里的
公式2
根据公式1,可以求得最后一层的误差,那么知道知道了各层误差间的关系,就能求得所有层的误差项了。
然后展开,因为知道z之间的前后关系(具体过程可能有点复杂,这里先不贴出详细的推到了),因此可以找出最后的化简结果:
公式3
因为
同理可得:
公式4
到最后根据公式3和公式4,终于可以得到梯度的公式了。
因为梯度的推到是从后往前,因此称为反向传播。