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