反向传播是神经网络训练的一个重要步骤,通过以下简单实例,一步步推导计算,加深对其原理的理解。
如下图我们构建了一个简单的神经网络,其中绿色方框(1,2)代表输入,蓝色圆点(3,4)代表隐藏层,蓝色圆点(5,6)代表输出层,红色原点(0)是偏置。在进行前向传播(feed-forward)之前,我们对所有权重和偏置进行初始化。其中Wij下标i,j代表的是从点i到点j的权重。初始输入是0.05和0.10, 目标输出是0.01和0.99,学习率为0.5。
符号定义如下:
1.前向传播:
先计算点3的输入:
经过激活函数后的输出:
同理我们可以得到点4的输出:
将隐藏层的输出作为输出层的输入,重复计算,得出圆点5和圆点6经过激活函数后的输出:
计算总错误:
2.后向传播:
后向传播的目的就是要更新权重使得实际输出和目标输出更接近,从而最小化每个输出层神经元的错误。
首先我们考虑W35改变多少能影响到总错误,也就是求总错误E对W35的偏微分。根据求导链式法则:
具体计算如下:
Logistic function求导:
则:
以及:
最后汇总如下:
不妨令:
则更新W35如下
同理可得:
接下来继续计算W13,W14,W23,W24。例如W13的改变受到来自E1和E2的错误影响。
要计算上式子,需要分别计算三部分,第一部分如下:
(1)该部分由两部分误差所组成,需要再细分计算如下:
同理我们可以得出E2相应部分的结果:
综上,第一部分的计算结果是:
(2)接下来,第二和第三部分的结果易得:
(3)整合得总错误对权重W13的偏微分是:
(4)相应的权重更新结果是:
其余权重更新结果是:
附上伪代码:
领取专属 10元无门槛券
私享最新 技术干货