梯度爆炸

什么是梯度爆炸

梯度爆炸是指神经网络在训练过程中大的误差梯度不断积累,导致模型权重出现重大更新,造成模型不稳定,无法利用训练数据学习。
误差梯度是神经网络训练过程中计算的方向和数量,用于以正确的方向和合适的量更新网络权重。在深层网络中,误差梯度可在更新中积累,变成非常大的梯度,这样会导致网络权重的大幅更新,使得网络变得非常不稳定,在极端的情况下,权重值变得非常大,以至于溢出,导致NaN值。在深层感知机网络中,梯度爆炸会导致网络不稳定,最好的结果是无法从训练数据中学习,最坏的结果是出现无法再更新的NaN权重值。在RNN中,梯度爆炸最好的结果是网络无法学习长的输入序列数据。

怎样判定是否出现了梯度爆炸

训练过程中出现梯度爆炸会伴随一些细微的信号:

  • 模型无法从训练数据中获得更新(如低损失)
  • 模型不稳的,在更新过程中损失值变化比较明显
  • 训练过程中,损失值变成NaN

梯度爆炸出现比较明显一点的信号:

  • 训练过程中模型梯度快速变化
  • 训练过程中模型权重变成NaN值
  • 训练过程中, 每个节点和层的误差梯度值持续超过1.0

如何解决梯度爆炸问题:

  • 重新设计网络层更少的网络,在循环神经网络中,训练过程中在更少的先前时间步上进行更新。(沿时间的截断反方向传播)来缓解梯度爆炸问题。
  • 使用ReLU激活函数
  • 使用LSTM网络
    LSTM(长短期记忆),是一种特殊的RNN, 在循环神经网络中,梯度爆炸发生可能是因为某种网络的训练本身存在不稳定性,如随时间的反向传播本质上是将循环网络转换成深层神经网络。
    使用LSTM单元和相关的门类神经元结构可以减少梯度爆炸问题。
  • 使用梯度截断, 在训练过程中检查和限制梯度的大小,当梯度超过阈值就截断。
  • 对权重使用正则化。惩罚产生较大权重的损失函数。

梯度爆炸和梯度消散

  • 梯度消散
    靠近输出层的hidden layer 梯度大,参数更新快,收敛快; 而靠近输入层的hidden layer梯度小, 参数更新的慢,几乎和初始状态一样随机分布。
  • 梯度爆炸
    靠近输入层的hidden layer梯度通过训练变大, 而靠近输出层的hidden layer梯度呈指数级增大。

你可能感兴趣的:(梯度爆炸)