十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

02_梯度消失和梯度爆炸

02_梯度消失和梯度爆炸 深度网络的核心痛点梯度消失与梯度爆炸在反向传播过程中梯度需要从输出层一层一层往前传递。在某些网络中随着网络深度的增加梯度在隐藏层反向传播时倾向于变小。这意味着前面隐藏层中的神经元要比后面的学习起来更慢甚至几乎不更新参数。这种现象被称为“梯度消失”。与之对应如果我们为了解决梯度消失刻意增大初始权重又会导致另一个问题梯度反向传播时前面层的梯度会变得非常大导致网络参数更新剧烈震荡模型不稳定无法再从训练数据中学习。这种现象被称为“梯度爆炸”。 对于梯度消失和梯度爆炸一个容易理解的解释是反向传播在多层传递时每一层都会对前一层的梯度乘以一个系数。 当这个系数小于1时梯度越往前传递就会越小最终趋近于 0导致梯度消失 当这个系数大于 1时梯度越往前传递就会越大最终指数级放大导致梯度爆炸。梯度消失和梯度爆炸是深度神经网络训练中最常见的两个难题它们都源于反向传播时梯度的连乘效应但表现和影响正好相反。下面我为你详细解释这两个问题。 基本概念在深度神经网络中我们通过反向传播计算损失函数对每个参数的梯度然后更新参数。这个过程需要从输出层一直传播到输入层每经过一层就要乘以该层的权重和激活函数的导数。当网络很深时这个连乘过程会导致梯度要么指数级缩小消失要么指数级放大爆炸。 梯度消失 (Vanishing Gradients)什么是梯度消失梯度消失是指反向传播过程中梯度值随着层数增加指数级减小最终趋近于 0。靠近输入层的参数几乎得不到更新网络无法学习到底层特征。常见原因原因说明激活函数选择不当Sigmoid和Tanh在两端饱和导数接近 0如Sigmoid导数最大仅 0.25网络层数过深超过 10 层后梯度多次相乘指数级衰减权重初始化不当初始化过小使得每层传播的梯度都很小典型表现靠近输出层的参数更新明显靠近输入层的参数几乎不变训练前期损失下降缓慢深层网络的性能反而不如浅层网络解决方案方法说明使用 ReLU 及其变体ReLU、Leaky ReLU、ELU 等激活函数在正半轴导数为 1缓解梯度消失更好的权重初始化He 初始化配合 ReLU或 Xavier 初始化配合 Sigmoid/TanhBatch Normalization每层输出归一化防止进入激活函数饱和区残差连接 (ResNet)通过跳跃连接让梯度可以直接回流到浅层使用更短的网络适当减少网络深度 梯度爆炸 (Exploding Gradients)什么是梯度爆炸梯度爆炸是指反向传播过程中梯度值随着层数增加指数级增大变得非常大可能达到NaN。参数更新步长过大导致模型发散。常见原因原因说明权重初始化过大初始权重大于 1连乘后梯度指数级增长网络层数过深深层网络中权重与梯度的连乘效应放大了梯度学习率过高叠加了大的梯度参数更新过于剧烈典型表现损失值变成NaNNot a Number权重值变得非常大甚至溢出训练震荡剧烈无法收敛解决方案方法说明梯度裁剪 (Gradient Clipping)限制梯度最大值防止爆炸对 RNN 尤其有效更好的权重初始化使用较小的初始权重如 He 初始化或 Xavier 初始化降低学习率使用更小的学习率避免参数更新过于剧烈Batch Normalization限制每层输出的尺度间接控制梯度大小使用更短的网络适当减少网络深度 两者对比对比维度梯度消失梯度爆炸梯度的变化趋近于 0趋近于无穷大权重变化几乎不更新更新剧烈可能溢出损失变化下降极其缓慢变成 NaN 或剧烈震荡常见于深层网络 Sigmoid/Tanh深层网络 初始化过大激活函数的影响强烈依赖较弱 简单可视化理解假设网络有 100 层每层权重为w如果w 0.5则 100 层后梯度为0.5^100 ≈ 7.8e-31→梯度消失如果w 1.2则 100 层后梯度为1.2^100 ≈ 8.2e-7已经开始放大如果w 1.5则 100 层后梯度为1.5^100 ≈ 4.0e-17→梯度爆炸这就是为什么权重初始化如此重要 实用建议现代深度学习中的默认配置组件推荐选择激活函数ReLU 或 Swish避免 Sigmoid/Tanh权重初始化He 初始化配合 ReLU归一化Batch Normalization 或 Layer Normalization梯度裁剪在 RNN / LSTM 训练中强烈建议网络架构使用残差连接ResNet或 Transformer 结构如何判断是哪种问题损失值是 NaN→ 大概率是梯度爆炸尝试降低学习率或添加梯度裁剪训练极慢损失不降→ 可能是梯度消失检查激活函数和初始化方式浅层网络训练好深层网络效果差→ 梯度消失问题
返回列表