全连接神经网络的反向传播算法(BP)

一、预热篇

参考链接:http://colah.github.io/posts/2015-08-Backprop/

要理解的主要点:路径上所有边相乘,所有路径相加

反向传播算法(Backpropagation)已经是神经网络模型进行学习的标配。但是有很多问题值得思考一下:

反向传播算法的作用是什么? 神经网络模型的学习算法一般是SGD。SGD需要用到损失函数C关于各个权重参数w_{jk},b_j的偏导数\frac{ \partial C }{ \partial w_{jk} } , \frac{ \partial C }{ \partial b_j}。一个模型的参数w,b是非常多的,故而需要反向传播算法快速计算\frac{ \partial C }{ \partial w_{jk} } , \frac{ \partial C }{ \partial b_j}。也就是说反向传播算法是一种计算偏导数的方法。

为什么要提出反向传播算法? 在反向传播算法提出之前人们应该想到了使用SGD学习模型,也想到了一些办法求解网络模型的偏导数,但这些算法求解效率比较低,所以提出反向传播算法来更高效的计算偏导数。(那时的网络模型还比较浅只有2-3层,参数少。估计即便不适用反向传播这种高效的算法也能很好的学习。一旦有人想使用更深的网络自然会遇到这个偏导数无法高效计算的问题,提出反向传播也就势在必行了)

反向传播怎么样实现高效计算偏导数的? 请先回顾一下当初我们学习微积分时是如何计算偏导数的? (链式法则,具体看下面)

1 用计算图来解释几种求导方法:

1.1 计算图

式子 e=(a+b)*(b+1) 可以用如下计算图表达:

preview

令a=2,b=1则有:

preview

如何在计算图上表达“求导”呢? 导数的含义是 因变量随自变量的变化率,例如 \frac{\partial y }{\partial x} = 3 表示当x变化1个单位,y会变化3个单位。 微积分中已经学过:加法求导法则是 \frac{\partial}{\partial a}(a+b) = \frac{\partial a}{\partial a} + \frac{\partial b}{\partial a} = 1 乘法求导法则是 \frac{\partial}{\partial u}uv = u\frac{\partial v}{\partial u} + v\frac{\partial u}{\partial u} = v 。 我们在计算图的边上表示导数或偏导数:\frac{ \partial e }{ \partial c } , \frac{ \partial e }{ \partial d }, \frac{ \partial c }{ \partial a }, \frac{ \partial c }{ \partial b }, \frac{ \partial d }{ \partial b } 如下图:

preview

那么 \frac{ \partial e  }{ \partial b } 如何求呢? \frac{\partial c }{ \partial b} = 1告诉我们1个单位的b变化会引起1个单位的c变换,\frac{\partial e }{ \partial c} = 2告诉我们 1 个单位的c变化会引起2个单位的e变化。所以 \frac{ \partial e  }{ \partial b } =   \frac{ \partial c }{ \partial b } * \frac{ \partial e  }{ \partial c }   = 1*2 =2 吗? 答案必然是错误。因为这样做只考虑到了下图橙色的路径,所有的路径都要考虑:

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值