如何确定梯度消失/爆炸和解决梯度消失/爆炸

0、出现梯度消失与梯度爆炸的原因以及解决方案

  1. https://blog.csdn.net/qq_25737169/article/details/78847691

1、梯度消失的原因和表现

1.1、梯度消失的原因:

在深层网络中,如果激活函数的导数小于1,根据链式求导法则,靠近输入层的参数的梯度因为乘了很多的小于1的数而越来越小,最终就会趋近于0,例如sigmoid函数,其导数f′(x)=f(x)(1−f(x))的值域为(0,1/4),极易发生这种情况。

所以梯度消失出现的原因经常是因为网络层次过深,以及激活函数选择不当,比如sigmoid函数。

1.2、梯度消失的现象

模型无法从训练数据中获得更新,损失几乎保持不变。

2、梯度爆炸的原因和表现

2.1、梯度爆炸的原因

梯度爆炸就是由于初始化权值过大,前面层会比后面层变化的更快,就会导致权值越来越大,梯度爆炸的现象就发生了。

在深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。在极端情况下,权重的值变得非常大,以至于溢出,导致 NaN 值。

网络层之间的梯度(值大于 1.0)重复相乘导致的指数级增长会产生梯度爆炸。

在深度多层感知机网络中,梯度爆炸会引起网络不稳定,最好的结果是无法从训练数据中学习,而最坏的结果是出现无法再更新的 NaN 权重值。 在循环神经网络中,梯度爆炸会导致网络不稳定,无法利用训练数据学习,最好的结果是网络无法学习长的输入序列数据。

2.2、梯度爆炸的现象

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

  1. 模型无法从训练数据中获得更新(如低损失)。

  1. 模型不稳定,导致更新过程中的损失出现显著变化。

  1. 训练过程中,模型损失变成 NaN。

如果你发现这些问题,那么你需要仔细查看是否出现梯度爆炸问题。

以下是一些稍微明显一点的信号,有助于确认是否出现梯度爆炸问题。

  1. 训练过程中模型梯度快速变大。

  1. 训练过程中模型权重变成 NaN 值。

  1. 训练过程中,每个节点和层的误差梯度值持续超过 1.0。

3、解决办法

3.1、重新设计网络模型

  1. 在深度神经网络中,梯度爆炸可以通过重新设计层数更少的网络来解决。

  1. 使用更小的批尺寸对网络训练也有好处。

  1. 在循环神经网络中,训练过程中在更少的先前时间步上进行更新(沿时间的截断反向传播,truncated Backpropagation through time)可以缓解梯度爆炸问题。

3.2、使用 ReLU 激活函数

  1. 在深度多层感知机神经网络中,梯度爆炸的发生可能是因为激活函数,如之前很流行的 Sigmoid 和 Tanh 函数。

  1. 使用 ReLU 激活函数可以减少梯度爆炸。

3.3、使用长短期记忆网络

  1. 在循环神经网络中,梯度爆炸的发生可能是因为某种网络的训练本身就存在不稳定性,如随时间的反向传播本质上将循环网络转换成深度多层感知机神经网络。

  1. 使用长短期记忆(LSTM)单元和相关的门类型神经元结构可以减少梯度爆炸问题。

3.4、使用梯度截断(Gradient Clipping)

  • 在非常深且批尺寸较大的多层感知机网络和输入序列较长的 LSTM 中,仍然有可能出现梯度爆炸。如果梯度爆炸仍然出现,你可以在训练过程中检查和限制梯度的大小。这就是梯度截断。

  • 处理梯度爆炸有一个简单有效的解决方案:如果梯度超过阈值,就截断它们。
    具体来说,检查误差梯度的值是否超过阈值,如果超过,则截断梯度,将梯度设置为阈值。

3.5、使用权重正则化(Weight Regularization)

  • 如果梯度爆炸仍然存在,可以尝试另一种方法,即检查网络权重的大小,并惩罚产生较大权重值的损失函数。该过程被称为权重正则化,通常使用的是 L1 惩罚项(权重绝对值)或 L2 惩罚项(权重平方)。
    对循环权重使用 L1 或 L2 惩罚项有助于缓解梯度爆炸。

3.6、使用残差模块,避免梯度消失

汇总:

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
循环神经网络(RNN)中的梯度消失/爆炸问题是由于反向传播过程中链式法则导致的,当网络深度增加时,激活函数的导数可能非常小(如sigmoid),使得浅层单元的权重更新极其微弱(梯度消失),而如果导数很大(如ReLU的导数在正值区域恒定),则深层单元可能会经历异常大的权重更新(梯度爆炸)。 为解决这个问题,RNN引入了几种策略: 1. **长期短期记忆(LSTM, Long Short-Term Memory)**[^4]:LSTM通过门控机制(包括输入门、遗忘门和输出门)来控制信息的流动,特别是通过一个称为细胞状态的记忆单元,可以有效地缓解梯度消失问题。 2. **门控循环单元(GRU, Gated Recurrent Unit)**[^5]:与LSTM类似,GRU减少了部分门的数量,但同样利用门来控制信息流,从而减少梯度消失的可能性。 3. **梯度裁剪(Gradient Clipping)**[^6]:这是一种简单的方法,设置一个阈值,当梯度的范数超过这个阈值时,将其缩放到该阈值以内,以防止梯度过大导致爆炸。 4. **初始化权重**:合适的权重初始化策略,如Xavier或He初始化,可以帮助网络更稳定地学习。 5. **残差连接(Residual Connections)**[^7]:虽然不直接针对梯度问题设计,但在深度RNN中添加跨层的直接路径,可以让梯度更容易通过网络传递。 \[ ^4 \] Hochreiter, S., & Schmidhuber, J. (1997). Long short-term memory. Neural computation, 9(8), 1735-1780. \[ ^5 \] Cho, K., Van Merriënboer, B., Gulcehre, C., Bahdanau, D., Bougares, F., Schwenk, H., & Bengio, Y. (2014). Learning phrase representations using rnn encoder-decoder for statistical machine translation. arXiv preprint arXiv:1406.1078. \[ ^6 \] Pascanu, R., Mikolov, T., & Bengio, Y. (2013). On the difficulty of training recurrent neural networks. International conference on machine learning, 1319-1327. \[ ^7 \] He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep residual learning for image recognition. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 770-778).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值