摘要:
经过前面3篇文章的BP推导,相信大家对Bp的推导应该不陌生了,今天我们尝试展开我们推导得到的公式,来看看能否得到一个直观的解释。
在BP算法心得体会一文中,我们推导得到多层神经网络的误差信号的公式,具体如下:(假设损失函数
E
为均方误差)
对于输出层:
输出层前的一个隐藏层(假设为第
h
个
其余隐藏层
δ(h−1)i=∑N(h)j=1(δ(h)j∗vji)∗f′(neti)
。
假设我们有以下的网络结构(有一些线没有连,但实际是存在,太多线影响观看):
结合这个图和公式。我们尝试来求
v12
这个权重的梯度。
即
∂E∂v12=δ(2)1∗h(1)2
。
h(1)2
表示第一个隐藏层中第2个神经元经过激活函数之后的输出。
δ(2)1
第二个隐藏层中第1个神经元的误差信号。
根据公式:
δ(2)1=(w11∗δ(o)1+w12∗δ(o)2+w13∗δ(o)3)∗f′(net(2)1)
其中
f′(net(2)1)
表示第二个隐藏层中第1个神经元其净输入经过激活函数后的导数值。(这个值我们并不关心)
我们把注意放在这个式子:
(w11∗δ(o)1+w12∗δ(o)2+w13∗δ(o)3)
从图上我们就可以看得出,其实这个式子中体现的就是三条深蓝色的线分别乘以各自连接的神经元所产生的误差信号,而且进一步的可以理解为
w11,w12,w13
给误差信号进行加权。
上式的误差最后积累给了三条蓝线共同连接的神经元即
δ(2)1
。所以有了这个基本认识之后,我们就可以快速的写出网络任意一个神经元的误差信号。
比如对于第一个隐藏层中的第2个神经元我们有:
δ(1)2=(v11∗δ(2)1+v22∗δ(2)1)∗f′(net(1)2)
.
能够容易地写出误差信号我们就够很快的求出每个权重其偏导。这也有助于我们理解所谓的误差反向传播在网络中是如何流动的。
比较特殊的就是输出层,其实这个主要是因为输出层直接和损失函数挂钩。所以很多时候需要单独进行处理。
回头看看RNN
如果你有看过RNN训练与BP算法,你应该对这一条公式有点印象:
δthi=(∑N(o)k=1(δtyk∗wki)+∑N(h)s=1(δt+1hs∗usi))∗f′(netthi)
。
当时我们在推导隐藏层的误差信号的时候,还需要考虑一项来自于下一个时刻的误差信号。其实我们从下面这个图里面就能够很直观写出其表达式。
这里画一个非常简陋的版本:
假设蓝色框里面的是来下一个时刻的状态。那么对于
第二层隐藏的第1个神经元其误差信号为
δ(t,2)1=(w11∗δ(t,o)1+w12∗δ(t,o)2+w13∗δ(t,o)3+r11∗δ(t+1,2)1+r12∗δ(t+1,2)2)∗f′(net(2)1)
。
总结
对于BP算法,告一段落,从公式到后面的用网络来直观解释,希望大家对bp有一点了解。