写文章
点击打开用户名的主页
BP(反向传播算法)公式推导及例题解析

BP(反向传播算法)公式推导及例题解析

297 人 赞同了该文章

写在前面:最近赶上《模式识别》课程考试,就把BP重新复习了下。猜测老师可能会出这方面的计算题(hhh,也是不知道我哪里来的自信),就学习了Matt Mazur博客的例题。

(再加一句废话:其实在我之前,已经有前辈

写过了,觉得还是有必要自己推,所以就画蛇添足了)


这里我们使用两个输入、隐含层两个神经元、两个输出,其中隐含层和输出层都有偏置,结构如下:

为了能够保证传播过程的顺利进行,这里对参数进行了初始化:

前向传播

隐含层

这里我们先计算 [公式] 的输入:

之后将输入传递给激活函数(这里使用的是sigmoid激活函数),得到:

同理,可以得到 [公式] 的结果:

输出层

将隐含层的输出作为输入,对输出层的神经元重复上述过程。

[公式] 的输出如下:

同理可以得到 [公式] 的输出:

误差计算

这里我们均方误差作为目标函数:

有了output,之后分别计算 [公式][公式] 的误差:

则,总误差为:

反向传播

反向传播是根据链式求导法则对参数( [公式][公式] )进行更新。

输出层-->隐含层

(1) [公式] 的更新

进一步解释:

为了求出 [公式] 的梯度,我们需要计算上式的每个因子。

首先计算对 [公式] 的梯度:

其次计算对 [公式] 的梯度:

之后计算对 [公式] 的梯度:

最后得到的 [公式] 的梯度就是上式三个因子的乘积:

这里将学习率设为0.5,更新之后的 [公式] 为:

同理,可对 [公式] 完成一次更新:

(2) [公式] 的更新

(结构图显示每层共用一个偏置,但是个人觉得每个神经元的偏置计算结果应该是不一样的,故应该分别进行更新,这里只对第一个神经元的偏置更新进行说明,下同)

得到一个更新之后的 [公式] 为:

隐含层-->输入层

(1) [公式] 的更新

对于 [公式] 的梯度,我们需要计算出:

更进一步说明:

根据上图,我们知道 [公式][公式] 都有作用,因此:

先计算上式第一个因式

所以

将它们相乘得到:

同理,对第二个因式

因此

之后,我们可以得到

这样,就得到了 [公式] 的梯度

更新之后的 [公式]

同理,我们可以得到其余更新后的w

(2) [公式] 的更新

可得 [公式] 的梯度

则,完成一次更新后的 [公式]

这样,我们就完成了一次前向传播和反向传播。


注:除偏置更新的图片外,其余图片均来自Matt Mazur博客。

发布于 2018-01-10 21:44
神经网络
机器学习
赞同 297​
25 条评论
微信二维码分享
喜欢 ​ 收藏 ​ 申请转载
赞同 297
分享

文章被以下专栏收录

  • 深度学习与我的那些事

    深度学习与我的那些事

    分享深度学习的学习过程

推荐阅读

  • BP反向传播矩阵推导图示详解

    BP反向传播矩阵推导图示详解

    神经网络BP算法推导

    2019-6-28——更新: https://github.com/yjh0410/NeuralNetwork简单说明一下: NeuralNetwork.py是核心代码,实现了神经网络的定义,包括前向传播和反向传播,训练代码等等。 三个demo文件…

    神经网络BP反向传播算法推导

    本文详细给出了用于神经网络训练的反向传播(Back Propagation)算法的证明推导过程。过程虽然有点繁琐,却并未涉及到复杂的数学变换,所需要的仅是基本的导数和矩阵运算知识,以及耐心。 …

    BP神经网络公式推导(含代码)

    什么是BP神经网络BP(Back Propagation)神经网络是一种按误差反向传播(简称误差反传)训练的多层前馈网络,它的基本思想是梯度下降法,利用梯度搜索技术,以期使网络的 实际输出值和期望输…

25 条评论

切换为时间排序
  • 726805
    726805 2020-06-21

    说实话,写得一般般。应该从误差定义,反传,再梯度更新开始讲。注重逻辑啊。不要陷入细节。

  • 姜根佳
    姜根佳 2020-05-13
    虽然不那么精致,但是确实是让我看懂反向传播的一篇文
  • SnowCoDC
    SnowCoDC 2020-08-25
    😂这篇文章让我终于理解了反向传播
  • showmaker
    showmaker 2019-01-24

    b2更新有问题吧

  • 丘野
    丘野 2021-09-24
    感谢!琢磨了挺久
  • 会飞的猪
    会飞的猪 2021-02-01
    赞 深入浅出
  • 金琮
    金琮 2020-10-24

    写的非常棒

  • 算法爱好者
    算法爱好者 2020-06-09

    在每一轮迭代过程中,可以理解为权重w以及阈值b是并行更新的

  • 赫斯提亚
    赫斯提亚 2020-06-08
    感谢
  • 0X404
    0X404 2019-12-09
    太棒了
  • 渔夫
    渔夫 2019-11-22

    很详细的推导,手动点赞

  • fc恶心
    fc恶心 2019-10-09
    谢谢分享
  • showmaker
    showmaker 2019-01-24

    Eo2对b2的导数怎么没算? 还有你计算的0.138,下面咋成了0.039

  • WILL
    WILL (作者) 回复 showmaker 2019-01-24
    感谢指出错误。
    偏导公式中Eo1应该换为Etotal,对b2的偏导结果不变,仍为0.13838;最后更新后的b2值应为0.6-0.5*0.13838=0.53081。
    稍后会在正文中进行更正。
  • drla
    drla 回复 WILL (作者) 2021-11-13
    你这还是没回答他指出的第一个问题啊,b2对o1和o2都会产生影响的
  • Kusunoki
    Kusunoki 2018-03-11
    2个输入层? 2个隐含层? 应该表述为2个神经元的xx层
  • WILL
    WILL (作者) 回复 Kusunoki 2018-03-11

    感谢指正,表述是有些不当,现已更正。