神经网络中的反向传播算法算例

  • A+
所属分类:深度学习
摘要这一篇文章会使用一个实例来讲述神经网络中的反响传播算法。会代入具体的数字进行计算,来方便理解。

这一篇文章我们来讲一下神经网络中的反向传播算法,我们看一个具体的例子来看一下反向传播算法是如何工作的。

我是参考的这篇文章来进行举例的,一文弄懂神经网络中的反向传播法——BackPropagation,但是原文没有用矩阵的方式来表达,我想重新用矩阵的方式来表达一遍,然后就把步骤在这里记录一下。

更新,重新写了一下, 可以参考这篇文章 : Backpropagation(反向传播)方法介绍

这一篇会写得更加详细一些。这一篇可以不用往下看了. 这一篇就不更新了。

更多关于深度学习的可以参考这篇介绍机器学习文章总结,之后更新都会写在这里。

系数初始化

好了,下面就开始讲一下算例。

神经网络中的反向传播算法算例

这个网络就是上面的链接里是一样的,我们进行初始化,为了最后比对我们计算是否正确,我们就使用和原文一样的初始化数据。

神经网络中的反向传播算法算例

为了方便计算,我们就使用Mathematic来验证我们计算的结果,我们首先先初始化一些参数。

  1. w1 = 0.15;
  2. w2 = 0.2;
  3. w3 = 0.25;
  4. w4 = 0.3;
  5. w5 = 0.4;
  6. w6 = 0.45;
  7. w7 = 0.5;
  8. w8 = 0.55;
  9. i1 = 0.05;
  10. i2 = 0.1;
  11. b1 = 0.35;
  12. b2 = 0.6;
  13. o1 = 0.01;
  14. o2 = 0.99;

前向传播算法

接下来我们看一下向前传播的算法:

神经网络中的反向传播算法算例

同样的,我们使用Mathematica来实现向前传播算法:

  1. {{netH1}, {netH2}} = {{w1, w2}, {w3, w4}}.{{i1}, {i2}} + {{b1}, {b1}}
  2. >> {{0.3775}, {0.3925}}
  3. {{outH1}, {outH2}} = 1/(1 + E^(-({{netH1}, {netH2}})))
  4. >> {{0.59327}, {0.596884}}
  5. {{netO1}, {netO2}} = {{w5, w6}, {w7,  w8}}.{{outH1}, {outH2}} + {{b2}, {b2}}
  6. >> {{1.10591}, {1.22492}}
  7. {{outO1}, {outO2}} = 1/(1 + E^(-({{netO1}, {netO2}})))
  8. >> {{0.751365}, {0.772928}}

放一张完整的图片

神经网络中的反向传播算法算例

到这里先前传播算法就结束了,接下来要计算误差和进行反向传播了。

反向传播算法

神经网络中的反向传播算法算例

我们首先按照上面的图把每一步的梯度计算出来

  1. dx1 = {{outO1}, {outO2}} - {{o1}, {o2}}
  2. >> {{0.741365}, {-0.217072}}
  3. dx2 = (E^(-({{netO1}, {netO2}})))/(1 + E^-({{netO1}, {netO2}}))^2
  4. >> {{0.186816}, {0.17551}}
  5. dx3 = {{outH1}, {outH2}}
  6. >> {{0.59327}, {0.596884}}
  7. dx4 = (E^(-({{netH1}, {netH2}})))/(1 + E^-({{netH1}, {netH2}}))^2
  8. >> {{0.241301}, {0.240613}}
  9. dx5 = {{i1}, {i2}}
  10. >> {{0.05}, {0.1}}

我们放一张完整的图片

神经网络中的反向传播算法算例

参数更新

下面我们就要开始更新参数了,下面我们看一下更新w5,w6,w7,w8的参数的步骤

神经网络中的反向传播算法算例
  1. {{w5, w6}, {w7, w8}} - 0.5*(dx1*dx2).Transpose[dx3]
  2. >> {{0.358916, 0.408666}, {0.511301, 0.56137}}

接着我们更新w1,w2,w3,w4

  1. {{w1, w2}, {w3, w4}} -  0.5*( Transpose[{{w5, w6}, {w7, w8}}].(dx1*dx2)*dx4).Transpose[dx5]
  2.  >> {{0.149781, 0.199561}, {0.249751, 0.299502}}

完整过程

最后我们看一下一个完整的过程吧,还是用我的手写推导:

神经网络中的反向传播算法算例

一些话

到这里,我们就完成了一个例子的推导。所有的公式都是拿手写的,然后计算使用Mathematica来代替,感觉最近Mathematica有点失宠了,我已经好久没用她来做什么好玩的事情了。

最近自己正在整理电脑上的一些文件,之前还发了两篇之前参加建模留下的文件的照片。最近应该会把一些关于Mathematica的文件整理一下的,之后的话看看要看一些什么东西。

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: