1. 背景
本篇文章将通过具体例子理解神经网络中的向前传播以及向后传播过程。
假设我们的神经网络结构如下图所示:
对于输入 i1=0.05 和 i2=0.10,我们想让神经网络的输出分别为 o1=0.01 和 o2=0.99
2. 向前传播
首先,计算在当前的权重下,对于给定输入,神经网络的输出是多少。神经网络中激活函数为sigmoid 函数。
h1节点的输入值为:
经过sigmoid函数后,h1节点的输出值为:
同样,h2节点的输出值为:
类比于隐藏层每个节点的计算,对于输出层,我们有:
接下来,我们计算当前输出与预期输出之间的误差,我们用均方误差来表示这种差别。
这里为了便于之后的计算,我们乘以一个系数1/2
我们想让o1的输出为0.01,目前o1的输出为0.75136507,所以我们有:
同样:
总的误差为两者之和:
3. 向后传播
我们的目标是通过向后传播的过程,更新权重值,以使o1,o2的输出接近预期值。
首先我们来求总误差对w5的偏导数,根据链式法则,我们有:
所以计算总误差对w5的偏导数的表达式为:
我们来求表达式中的第一项:
对于 sigmoid 函数:
所以表达式中的第二项为:
表达式中的第三项为:
我们把如上计算结果放到一起,得到最终总误差对w5的偏导数:
现在我们来更新w5:
同样的方式,更新w6,w7,w8:
接下来,我们继续向前更新w1,w2,w3,w4,以w1为例:
首先:
根据之前计算的值,我们有:
所以:
同样:
两者相加:
最终,总误差对w1的偏导数为:
更新w1:
同样的方式,更新w2,w3,w4:
至此,我们已经完成了一遍向前和向后传播的计算,继续迭代算法,更新权重,以便最终得到预期输出值。
Be First to Comment