,博客翻译员又翻译了一篇比较简单的计算过程示例,链接如下:
https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/
先上一个图,这是一个横图,输出在右边:
为了实际对这个神经网络进行计算,先对其中的权值啊,偏置什么的进行了初始化,比如下面的w1=0.15
先正向计算,比较容易得到:
总误差:
前馈过程(倒过来,用上述输出作为训练样本,其中学习率设为0.5)
由上一篇这个式子
(上面第一个式子漏了个负号,下面的计算加上了这个负号)其中k是隐含节点号,i是输出节点号,所以
w5(新) = 0.4-0.5*(0.01-0.75136507)*0.75136507*(1-0.75136507)*xk (梯度下降的方向)
w5=0.4-0.74136507*0.1868156*xk (xk指的是隐层的输出,作为输出层的原始输入)
xk的计算:
w5(新) = 0.4-0.5*0.74136507*0.1868156*0.593269992=0.35891648
倒数第二层(参照上一篇中的倒数第二层的公式):
先算
首先上一层的刚才已经计算出来了w5对应的0.74136507*0.1868156=0.138498562,uk就是上一层的计算过的out1对于中间节点h1,的值计算为
0.138498562*0.4+w7*?=0.036350306
可以求出=0.036350306*0.59326999*(1-59326999)*0.05 =0.000438568 (0.05就是b1,第一个输入点)
接下来 求w1(新)就很容易了,w1(新) = 0.15-0.5(学习率)*0.000438568=0.149780716
同理可求得w2,w3,w4的值,每个权值的更新就算完了。
总结如下(方便实现成代码):
1、反馈过程第一步,计算正向值,正向输出以及隐层输出
2、计算最后一层的权值(利用正向过程中隐层输出和最终输出)更新值
3、计算第一层权值更新值
整体来说还是比较简单的
代码参见上述原文的代码:https://github.com/mattm/simple-neural-network