概述
为了想清楚这个问题真心不容易,感谢这个知乎大佬
我尝试从另一个角度——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,所以这条路径上存在全连接层的串联,有可能会导致梯度爆炸。
最后
以上就是眼睛大斑马为你收集整理的【深度学习】LSTM为什么会可以解决梯度消失问题的全部内容,希望文章能够帮你解决【深度学习】LSTM为什么会可以解决梯度消失问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复