误差反向传播(BP)算法中为什么会产生梯度消失?

------------------  原文  https://www.zhihu.com/question/49812013   -----------------

梯度消失指的是  权重不断更新,直观上看是从最后一层到第一层权重的更新越来越慢,直至不更新

其本质原因是反向传播的连乘效应,导致最后对权重的偏导接近于零。

另外一个网友的解释:sigmod函数的导数----x*(1-x) 反向传播的时候是一个链式偏导,神经元经过前向传播sigmod函数激活后就是一个0到1之间的数,现在还乘以1-x,两个小数相乘,乘的多就趋于0了,梯度就是0了。

另外一个比较完整的公式推导的解释如下:

简单地说,根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话([公式] ),那么即使这个结果是0.99,在经过足够多层传播之后,误差对输入层的偏导会趋于0([公式] )。下面是数学推导推导。

假设网络输出层中的第[公式] 个神经元输出为[公式],而要学习的目标为[公式] 。这里的[公式] 表示时序,与输入无关,可以理解为网络的第[公式] 层。


若采用平方误差作为损失函数,第[公式] 个输出神经元对应的损失为 [公式]

将损失[公式] 对输出[公式]求偏导 [公式]

根据链式法则,我们知道,第[公式] 层的梯度可以根据第[公式] 层的梯度求出来

[公式]

这里用[公式] 表示第[公式] 层的第[公式] 个神经元,[公式] 表示第[公式] 层的第[公式] 个神经元。

进一步,第[公式] 层的梯度可以由第[公式] 层的梯度计算出来

[公式]

这实际上是一个递归嵌套的式子,如果我们对[公式] 做进一步展开,可以得到式子

[公式]

最终,可以一直展开到第[公式] 层。

把所有的加法都移到最外层,可以得到

[公式]

[公式] 表示的是第[公式] 层中神经元的下标(即第[公式] 层第[公式] 个神经元),[公式] 表示第[公式] 层的下标。[公式] 对应输出层,[公式] 对应第[公式] 层。实际上展开式就是从网络的第[公式] 层到[公式] 层,每一层都取出一个神经元来进行排列组合的结果。这个式子并不准确,因为[公式] 时实际是损失[公式] 对输出层的偏导,即

[公式]

并没有应用权重[公式],把它修正一下

[公式]

这样,我们就得到了第[公式] 层和第[公式] 层的梯度之间的关系

[公式]

在上面的式子中,由于加法项正负号之间可能互相抵消。因此,比值的量级主要受最后的乘法项影响。如果对于所有的[公式]

[公式]

则梯度会随着反向传播层数的增加而呈指数增长,导致梯度爆炸。

如果对于所有的[公式]

[公式]

则在经过多层的传播后,梯度会趋向于0,导致梯度消失。

LSTM就是为了解决以上两个问题提出的方法之一,它强制令[公式]LSTM如何来避免梯度弥撒和梯度爆炸? - 知乎

有兴趣可以参考Long Short Term Memory 一文 。上面的推导过程大体上也参考自这篇论文。

Reference:

Graves, Alex. Long Short-Term Memory. Supervised Sequence Labelling with Recurrent Neural Networks. Springer Berlin Heidelberg, 2012:1735-1780.

 

posted @ 2020-02-24 11:00  大大的海棠湾  阅读(793)  评论(0)    收藏  举报