目录
一、梯度消失/爆炸是什么
01、梯度消失
02、梯度爆炸
二、为什么会出现梯度消失/爆炸
01、梯度的乘积累积特性
02、激活函数的选择
03、权重初始化方式
三、梯度消失/爆炸解决方案
01、优化激活函数
02、合理初始化权重
03、改进网络结构
04、优化训练技巧
五、总结
在深度学习模型训练过程中,很容易遇到这些问题:模型训练很久却迟迟不收敛,甚至停滞不前?或者loss值突然飙升到无穷大,训练直接崩溃?
其实,这很有可能是遭遇了梯度消失与梯度爆炸。今天,我们就从概念、成因、识别方法到解决策略,全方位拆解这两个问题,帮你轻松避坑!
一、梯度消失/爆炸是什么
在神经网络训练中,模型通过反向传播计算来更新参数。当梯度出现异常时,参数更新就会失控,进而导致模型训练失败。二者的本质是梯度在反向传播过程中的极端变化,但表现却截然相反。
01、梯度消失
随着反向传播的进行,梯度值逐渐变小,最终趋近于0。
出现以下现象时,就要考虑是否出现梯度消失了。模型训练后期,loss值几乎不再下降,参数更新陷入停滞,浅层网络(靠近输入层)的参数几乎不更新,只有深层网络(靠近输出层)的参数在微调,对于分类任务,模型准确率始终卡在较低水平。
02、梯度爆炸
随着反向传播的进行,梯度值逐渐变大,最终趋近于无穷大。
出现以下现象时,就要考虑是否出现梯度爆炸了。训练初期,loss值突然飙升,数值接近无限大,计算机无法计算,出现NaN。参数值急剧增大,导致模型输出溢出。训练过程直接中断,无法继续迭代。
如下图,由于梯度爆炸模型第一次迭代的loss为 581283289759744,第二次迭代loss 溢出(NaN),训练终止。所以没有图像。
二、为什么会出现梯度消失/爆炸
梯度消失与梯度爆炸的核心原因都高度相似,都与反向传播中的梯度乘积效应密切相关。
01、梯度的乘积累积特性
在反向传播中,每一层的梯度需要通过 链式法则计算,即当前层的梯度=后一层的梯度×激活函数的导数×权重矩阵。
假设有一个10层的网络,若每一层的 梯度贡献因子(后一层梯度 × 激活函数导数 × 权重)的绝对值小于1(比如 0.9),那么经过10层累积后,浅层的梯度会变成 0.9¹⁰≈0.35,若网络有50层,梯度会变成 0.9⁵⁰≈0.005,直接趋近于0(梯度消失);
反之,若每一层的 “梯度贡献因子” 绝对值大于1(比如 1.1),50层后浅层梯度会变成1.1⁵⁰≈117,100 层后则会变成 1.1¹⁰⁰≈13780,直接飙升到极大值(梯度爆炸)。
02、激活函数的选择
不同激活函数的导数范围差异极大,直接影响梯度的乘积效应。
Sigmoid 函数:导数范围是(0,0.25],即使取最大值0.25,经过10层后梯度也会变成0.25¹⁰≈9.5×10⁻⁷,妥妥的梯度消失。
Tanh函数:导数范围是(0,1],虽然比 Sigmoid好,但仍容易因 “多层乘积” 导致梯度消失。
ReLU函数:导数在正区间是1,负区间是0(神经元死亡)。若网络中大量神经元处于负区间,会导致梯度消失;若权重初始化过大,正区间的梯度会因乘积累积特性导致爆炸。
03、权重初始化方式
若权重初始化不合理,会直接放大梯度乘积效应.
1.权重初始化过小:比如将权重都初始化为0.001,每层的权重×激活函数导数会远小于1,多层后梯度消失。
2.权重初始化过大:比如将权重初始化为10,每层的权重×激活函数导数会远大于1,多层后梯度爆炸。
三、梯度消失/爆炸解决方案
针对梯度消失与梯度爆炸的成因,目前深度学习领域已形成一套成熟的解决方案。
01、优化激活函数
可以根据实际情况选择ReLU变种来代替ReLU。
Leaky ReLU:在负区间保留一个小的斜率(如 0.01),避免神经元 “死亡”,缓解梯度消失;
ELU:负区间采用指数形式,不仅避免神经元死亡,还能使激活值的均值接近0,加速训练;
GELU:结合了ReLU和Dropout的特性,在Transformer模型中广泛使用,梯度传递更稳定。
Sigmoid/Tanh仅在输出层(如二分类任务的 Sigmoid)使用,隐藏层尽量避免这两种函数。
02、合理初始化权重
不妨尝试以下三种初始化权重的方法来优化模型。
1.Xavier初始化:适用于Tanh激活函数,将权重初始化为均匀分布,确保每层的输入和输出方差一致,避免梯度过大或过小。
2.He初始化:适用于ReLU及其变种,权重方差是Xavier的 2 倍,适配ReLU一半神经元可能死亡的特性;
3.正交初始化:将权重矩阵初始化为正交矩阵,确保梯度在反向传播中不被放大或缩小,常用于RNN等循环结构。
03、改进网络结构
1.残差网络:引入跳跃连接,让梯度可以直接从深层传递到浅层,跳过中间层的乘积累积,从根本上解决深层网络的梯度消失问题。
2.密集连接网络:每一层都与所有前层连接,进一步增强梯度传递,同时提升特征复用率。
3.门控循环单元/ 长短期记忆网络:针对 RNN的梯度问题,通过门控机制(输入门、遗忘门、输出门)控制梯度的传递与遗忘,避免时间维度的梯度消失/爆炸。
04、优化训练技巧
以下是三种经常在模型训练中使用的技巧,简单好用。
1.批量归一化:对每一层的输入进行标准化,使激活函数始终处于非饱和区,导数保持较大值,缓解梯度消失。同时,还能降低权重初始化的敏感性,间接减少梯度异常。
2.调整学习率:使用学习率衰减,避免训练后期因学习率过大导致梯度爆炸;
3.使用 Adam等优化器:Adam 优化器会自适应调整学习率,并通过动量加速梯度下降,间接减少梯度异常的概率。
五、总结
梯度消失与梯度爆炸的本质是梯度在反向传播中的极端累积,解决问题的核心思路是减少梯度的衰减/膨胀,增强梯度的传递能力。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.youkuaiyun.com/febwww/article/details/151191485
4960

被折叠的 条评论
为什么被折叠?



