2. DNN神经网络的反向更新(BP)

Posted huangyc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2. DNN神经网络的反向更新(BP)相关的知识,希望对你有一定的参考价值。

1. DNN神经网络的前向传播(FeedForward)

2. DNN神经网络的反向更新(BP)

1. 前言

DNN前向传播介绍了DNN的网络是如何的从前向后的把数据传递过去的,但是只有这个过程还不够,我们还需要想办法对所有参数进行一个梯度的更新,才能使得网络能够慢慢的学习到新的东西。

在神经网络中有一种通用的方法来更新参数,叫做反向更新BP

2. DNN反向更新过程

根据前面的前向传播的过程我们得到了一个传播公式,其中(sigma)是激活函数,对具体的函数不做要求,可以是线性激活函数,也可以是非线性激活函数。

[ a^l = sigma(z^l) = sigma(W^la^{l-1} + b^l);;;;;;(0) ]
我们假设DNN的损失函数是MSE,其中(a^L)是输出层的输出:

[ J(W,b,x,y) = frac{1}{2}||a^L-y||_2^2 ]
对低(l)层的(W,b)求导数有:

[ frac{partial J(W,b,x,y)}{partial W^l} = frac{partial J(W,b,x,y)}{partial z^l} frac{partial z^l}{partial W^l};;;;;;(1) ]

[ frac{partial J(W,b,x,y)}{partial b^l} = frac{partial J(W,b,x,y)}{partial z^l} frac{partial z^l}{partial b^l};;;;;;(2) ]
我们令

[ delta^l =frac{partial J(W,b,x,y)}{partial z^l};;;;;;(3) ]

把(3)带入(1)(2)得到下式(4)(5)
[ frac{partial J(W,b,x,y)}{partial W^l} = delta^{l}(a^{l-1})^T;;;;;;(4) ]

[ frac{partial J(W,b,x,y)}{partial b^l} = delta^{l};;;;;;(5) ]
我们只要求出(delta^l)的表达式,就能求出每一层的(W^l,b^l)的梯度,就能对每层进行梯度更新。

由(3)不难得出

[ delta^{l} = frac{partial J(W,b,x,y)}{partial z^l} = frac{partial J(W,b,x,y)}{partial z^{l+1}}frac{partial z^{l+1}}{partial z^{l}} = delta^{l+1}frac{partial z^{l+1}}{partial z^{l}};;;;;;(6) ]
又因为有

[ z^{l+1}= W^{l+1}a^{l} + b^{l+1} = W^{l+1}sigma(z^l) + b^{l+1};;;;;;(7) ]
根据(6)(7)我们得出

[ delta^{l} = delta^{l+1}frac{partial z^{l+1}}{partial z^{l}} = (W^{l+1})^Tdelta^{l+1}odot sigma^{'}(z^l);;;;;;(8) ]
现在我们有了一个(delta^{l})(delta^{l+1})的递推公式,我们只要求出最后一层的(delta^{L}),就能算出所有层的(delta^{l}),然后根据(4)(5)可以算出每层的参数的梯度并进行更新。

如果理解了上面的过程,相比读者对计算(delta^{L})已经不在话下了:
[ delta^L = frac{partial J(W,b,x,y)}{partial z^L} = (a^L-y)odot sigma^{'}(z^L) ]

到此为止,我们已经能成功的更新了每层的梯度,整个网络在理论上已经能够跑通了。不过在此说明两点。

  1. 上面的推理过程是在MSE的假设下进行的,如果换一个损失函数,那需要对计算输出层(delta^{L})进行相应的修改。
  2. 因为方便推理过程,前面都使用同一个激活函数(sigma),但是其实每一层可以有自己相应的激活函数,只要计算过程中使用相应的相应激活函数的导数即可。

3. 总结

由于梯度下降法有批量(Batch),小批量(mini-Batch),随机三个变种,为了简化描述,这里我们以最基本的批量梯度下降法为例来描述反向传播算法。实际上在业界使用最多的是mini-Batch的梯度下降法。不过区别仅仅在于迭代时训练样本的选择而已。

(欢迎转载,转载请注明出处。欢迎沟通交流: [email protected]com)

以上是关于2. DNN神经网络的反向更新(BP)的主要内容,如果未能解决你的问题,请参考以下文章

深度学习系列经典博客收藏

DNN的BP算法Python简单实现

手写BP(反向传播)算法

反向传播神经网络(BP)

深层BP神经网络的训练过程

卷积神经网络前向传播和BP后向传播计算步骤