【深度学习】LSTM为什么会可以解决梯度消失问题

为了想清楚这个问题真心不容易,感谢这个知乎大佬

我尝试从另一个角度——sigmoid函数值分布与导数值分布的差异,来解释LSTM的gate怎么起作用。

对于RNN来说,前后两个step的hidden state中间经过了一层sigmoid,所以后向传播的时候梯度会乘上一个sigmoid的导数值;对于LSTM来说,前后两个step的hidden cell没有经过一个sigmoid层,而是乘了一个sigmoid的函数值 / 激活值(即LSTM的forget gate),所以后向传播的时候梯度也会乘上一个sigmoid的函数值

也就是说,RNN在后向的时候梯度是不断乘以sigmoid的导数值,LSTM在后向的时候梯度是不断乘以sigmoid的函数值,而这两者的数值分布存在着显著差异。

为了简化分析,我们可以假设sigmoid之前的输入分布是一个高斯分布,固定均值为0,方差不定(应该是挺一般的假设了),然后画出在不同的方差下,sigmoid函数值和导数值的分布情况,下图横轴为函数值 / 导数值,纵轴为概率密度,sigma为高斯分布的标准差:




从上图可以看出:

  • 如果前面的输入比较集中(小sigma),则sigmoid函数值大概率为0.5,导数值大概率为0.25,此时梯度都会衰减,但是乘以0.5衰减得慢一些;
  • 如果前面的输入比较分散(大sigma),则sigmoid函数值大概率为0或1,导数值大概率为0,梯度乘以函数值基本上要么完整保留要么完全消失,梯度乘以导数值则只会消失了。

所以,在RNN中,每乘以一次sigmoid的导数值都会让后向传播的梯度衰减一次,需要靠全连接层的矩阵拉回来,但是如果拉得过头了又会导致梯度爆炸,而如果sigmoid前面的方差大的话还会导致梯度直接消失,全连接层救都救不回来;在LSTM中,每乘以一次sigmoid的函数值都可以让后向传播的梯度保留或者衰减消失,非常灵活,而且前后两个hidden cell可以走forget gate这条捷径直达,不需要经过全连接层,而全连接层是梯度爆炸的根源,因此在这条路径上LSTM不需要担心梯度爆炸的问题。

不过cell这条路径不爆炸不代表别的路径不爆炸,比如从hidden cell经过output gate到hidden state中间就又有全连接层,而这一步hidden state又会接到下一步hidden cell,所以这条路径上存在全连接层的串联,有可能会导致梯度爆炸。

  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值