神经网络反向传播Backpropagation(李弘毅机器学习)
神经网络反向传播Backpropagation
一、深度学习三部曲:
- 定义一个函数model
- 评估这个函数model
- 选出最好的函数
二、定义神经网络
本次学习使用的是全连接前馈神经网络(Fully Connect Feedforward Network)
以上图为例,此处所采用的sigmoid函数是。也就是节点的activation是sigmoid函数。从上图可以看出我们输入1对应的权重为1和-1,下一层节点对应的bias(偏置值)为1,输入-1对应的权重为-2和1,下一层节点对应的偏置值为0。我们可以通过11+(-1)(-2)+1=4,然后对sigmoid(4)进行计算得到0.98.
依次类推,第二个节点也可以这样计算。因此我们将其写成如上的矩阵表示形式。
由此一来,我们可以将算出的**值当作下一层的输入进行类似的计算。即可以得到y=f(x)=()。对于多层运算,我们将依次类推得到上图所示。
三、评估函数好坏
这里,我们定义交叉熵(Cross Entropy)来评估。
首先定义真实值(target)和训练值的交叉熵:
=- ln
对于整个网络来说,total loss:L=
在这里,我们通过最小化total loss来求得评估model。如何评估呢,我们就通过梯度下降(Gradient Descent)
四、选择最好的函数Model
通过梯度下降最小化total loss选择最好的函数。
这里,我们需要计算梯度: 。
也就是后向传播(Backpropagation)的问题。根据链式法则(chain rule),我们将求解 的问题进行分解: = 。显然,我们就可以分成两部分进行求解:首先是forward pass(前向传播),也就是对于 的求解。对于来说,z是第一层sigmoid函数的输入。那么 ,也就是输入,那么我们很容易可以计算出,也就是每个权重的那个输入端的值。
计算完,我们开始计算,也就是后向传播(backford pass)
相比之下,的计算就要难很多。首先我们利用链式法则,进行分解:=其中a=sigmoid(z)=。同样,我们分别对每个部分进行求解。=(d的一阶导数)。则就比较复杂。我们再次利用链式法则,=+。而其实就是w,因此,同理。因此=(+)。
为了理解这个过程,我们可以假设和都是已知的,那么我们就可以得到,根据Forward pass我们已经计算得出了,两者相乘,我们就可以得到 了。
但事实是和都是并不是已知的。那如何求解呢。我们分两种情况:第一种情况是和对应的是输出层,也就是说经过一个sigmoid函数就可以输出结果了。这个情况,我们可以再次进行链式法则:= 。我们可以简单快速的计算出,而就是一个。这样我们就可以计算出最终答案。
第二种情况就比较复杂,我们需要一步步展开。就是一层一层计算,和第一种情况一样,我们算出结果来之后:=(+。依次类推计算。
这样计算非常麻烦,于是我们想到可以采用第一种情况的方法进行计算。也就是如下倒推:
也就是从末尾计算出相应的值,然后累乘就可以。
五、总结
当我们使用Backpropagation计算出所有的 就可以采用梯度下降的办法进行计算。利用梯度值更新参数w,直到收敛。