前言
在讲述RNN与LSTM的时候曾经说过, RNN一个最大的缺陷就是梯度消失与梯度爆炸问题, 由于这一缺陷,使得RNN在长文本中难以训练, 这才诞生了LSTM及各种变体。
梯度消失与梯度爆炸问题不仅仅在RNN中存在, 在其余深层网路中同样普遍存在, 本文先从梯度消失与梯度爆炸谈起, 然后再回到具体的RNN梯度问题中, 最后, 再探讨LSTM是通过什么技术来解决RNN中的这一问题的。
浅谈神经网路中的梯度爆炸问题
机器学习总结(二):梯度消失和梯度爆炸
神经网路训练中的梯度消失与梯度爆炸
1. 什么是梯度消失,梯度爆炸?
首先,你得知道梯度是什么, 不了解的可以看看我关于梯度下降的那篇文章。
从那篇文章中就可以看出对于神经网路的训练,梯度在训练中起到很关键的作用。 如果在训练过程中发生了梯度消失,这也就意味著我们的权重无法被更新,最终导致训练失败。而梯度爆炸所带来的梯度过大,从而大幅度更新网路参数,造成网路不稳定(可以理解为梯度步伐太大)。在极端情况下,权重的值变得特别大,以至于结果会溢出(NaN值)
注意,梯度消失和梯度爆炸只会造成神经网路中较浅的网路的权重无法更新(毕竟神经网路中是反向传播)
2. 这会造成哪些问题?
- 梯度消失会导致我们的神经网路中前面层的网路权重无法得到更新,也就停止了学习。
- 梯度爆炸会使得学习不稳定, 参数变化太大导致无法获取最优参数。
- 在深度多层感知机网路中,梯度爆炸会导致网路不稳定,最好的结果是无法从训练数据中学习,最坏的结果是由于权重值为NaN而无法更新权重。
- 在循环神经网路(RNN)中,梯度爆炸会导致网路不稳定,使得网路无法从训练数据中得到很好的学习,最好的结果是网路不能在长输入数据序列上学习。
3. 原因何在?
让我们以一个很简单的例子分析一下,这样便于理解。