梯度消失/爆炸:原因,影响,解决方案,误区。

BP算法中的梯度值——梯度消失/爆炸的起因!

常规的前馈网络具有以下的单层形式:
在这里插入图片描述

而对于某层权值的梯度计算,采用以下公式:
在这里插入图片描述

其中E代表损失值;O代表网络输出层;h代表隐藏层;w为根据梯度值更新的权重。

通过BP算法的观察发现,梯度的计算与以下几个因素有关(不理解这一点可以尝试将梯度的偏导计算展开):

  1. (y-y’):预测与真实值的偏差。
  2. 激活函数求导。
  3. W:权重值。
  4. 神经元(输入)的值。

根据梯度链式传递法则,可以发现,激活函数的求导值(2)和权重值(3)会以连乘的形式参与到该层权重的梯度计算中,而预测值与真实值的偏差(1)以及神经元的输入值(4)只是以常数的形式参与计算。

梯度消失/爆炸是什么?

梯度消失/爆炸是反向传播训练法则的先天性不足,本质是梯度反向传播中的连乘效应。
梯度消失/爆炸的产生原因在于神经网络的更新中,梯度的传递是采用连乘函数的形式。众所周知,指数级别的增长是爆炸式的,因此可能引起深层网络的浅层节点更新使用一个过小或者过大的梯度值,这种深度学习现象叫做梯度消失/爆炸。

怎么引起的?

梯度消失:采用不合适的激活函数(类似于Sigmoid激活函数,梯度值恒小于一);网络初始权重过小。

梯度爆炸:网络初始权重过大。

梯度消失/爆炸带来了什么影响?
梯度消失:接近输入层的权重更新缓慢,导致网络更多的依靠更深层的学习,而浅层网络难以学习到有用的知识。

梯度爆炸:接近输入层的权重更新太快,致使模型不稳定,更新过程中损失函数显著变化;且训练权重的值变得异常大。

梯度消失/爆炸解决方案。

适用于梯度爆炸/梯度消失:

  1. 更合理的初始化权重。如采用预训练获得一个更优的初始化权重。
  2. 使浅层网络Layer跨层连接到更深层的Layer——Shortcut连接(残差网络)。需要注意的是,残差网络的引入主要是为了解决网络退化问题,其次才是梯度消失/爆炸问题。
  3. BatchNorm具有缓解梯度消失/爆炸的功能,BatchNorm的主要思想可以浓缩为缩放与平移,其中缩放操作会使反向传播的梯度值更加平稳。

单独适用于梯度爆炸:

  1. 通过权重(L1/L2)正则化,限制权重的大小。
  2. 梯度裁剪:将梯度限制在阈值以下。

单独适用于梯度消失:选择更优的激活函数(如Relu等),控制因为激活函数引起的梯度消失现象。

RNN和DNN的梯度消失/爆炸是一样的东西吗?

是不一样的,但本质上都是由于BP性质引起的。RNN的梯度消失,会使网络无法适用于长期依赖场景——即当前节点的损失,很难影响到很久之前的节点权重的更新,这使当前状态下的输出更多的依靠近期状态与当前输入。

而类似的,RNN梯度爆炸会产生严重的长期依赖,或者由于网络不稳定而无法学习到有效知识。

长期依赖是NLP中的经典问题,而解决梯度消失是解决长期依赖的关键点。LSTM、GRU、Transformer等模型可以有效解决RNN的梯度消失问题。

关于RNN的梯度消失/爆炸原因(计算原理)可以参考以下链接:​RNN的梯度消失/爆炸原理详解

梯度消失与梯度爆炸一些小误区。

Error:使用Sigmiod激活函数会出现梯度消失,使用Relu等不会。
A:梯度值同样受到权重的影响,所以这种说法是不成立的。而Sigmiod激活梯度值恒小于0.25,这种性质使得深层网络中如果使用Sigmoid作为每层的激活函数,该网络极大概率会出现梯度消失现象,但需要说明,由于梯度值是收到两个因素的指数级影响的,所以极大概率≠一定。

Error:梯度消失/爆炸会受到当前神经元输入的影响。
A:梯度值会受到当前神经元的影响,但这种常数级别的影响基本不会是导致梯度消失/爆炸的根本原因。

Error:梯度消失/爆炸在深层网络中是一定发生的。
A:并不,但是网络层数加深,极大地增加了引起梯度消失/爆炸的可能性。

循环神经网络(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、付费专栏及课程。

余额充值