深度学习-前向传播&后向传播

假设我们要更新w1的值。

根据梯度下降法,我们需要计算一个偏导数\frac{\partial C}{\partial w}.   其中C为你定义的Loss函数。

再使用公式  w_{2}=w_{1}-\eta\frac{\partial C}{\partial w}  更新w。此处w2不同于上图w2.

那么我们怎么计算\frac{\partial C}{\partial w}呢?

 

根据链式求导法则:

\frac{\partial C}{\partial w}=\frac{\partial z}{\partial w}\frac{\partial C}{\partial z}

z=wx+b

可以很容易求出\frac{\partial z}{\partial w}=x.即箭头前面的值。事实上,我们可以预先计算所有神经元的这个值。

 

\frac{\partial C}{\partial z}=\frac{\partial a}{\partial z}\frac{\partial C}{\partial a}           (其中a为你选取的激活函数)

其中\frac{\partial a}{\partial z}可以很容易的计算出来。

\frac{\partial C}{\partial a}我们无法直接计算出来。因为C我们是不知道的。

其中{z}'=a_{1}w_{3}+a_{2}w_{6}+...

显然\frac{\partial {z}'}{\partial a}=w_{3}.

可以使用这个公式向后传导。

而输出层的C我们是知道的。

其中\frac{\partial y}{\partial z}取决于你选取的激活函数,\frac{\partial C}{\partial y}取决于你的Loss函数。

这样我们可以计算出\frac{\partial C}{\partial z}.  

然后根据上面的式子向前传导,就可以计算出\frac{\partial C}{\partial w}的值了。

而计算\frac{\partial C}{\partial z}的过程我们不需要从前面递归,完全可以从后面开始向前计算,这就是后向传播。

 

梯度消失

如果我们使用sigmoid函数作为激活函数,函数图像为

导数最大为0.25.

而梯度下降是基于链式求导法则,也就是多个导数的乘积。可以发现网络层次越深,后向传播到第一层时的偏导值已经变得很小,无法进行有效更新。这就是梯度消失。而ReLu等函数则不会出现这种情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值