梯度消失和爆炸
在训练深度网络时,误差信号在向后传播多个层时会缩小到零或放大到无穷大。
概述
This makes deep and recurrent models painfully slow or impossible to train without specific fixes.
深入探讨
神经网络通过反向传播进行学习,反向传播使用链式法则将梯度逐层相乘。当您堆叠许多层时,这些每层因素会相乘。如果每个因子始终小于 1,则乘积会呈指数级收缩,并且早期层几乎不会更新——即梯度消失问题。如果每个因子都大于 1,产品就会爆炸,产生巨大的不稳定更新或 NaN 值。 sigmoid 和 tanh 等饱和激活函数的导数最大值为 0.25 和 1,是典型的罪魁祸首。这个问题在深度前馈网络和处理长序列的循环网络(RNN)中最为严重,其中在每个时间步都重新应用相同的权重矩阵,从而显着地复合了效果。
技术洞察
在反向传播中,早期层的梯度是许多雅可比行列式和权重项的乘积。粗略地说,信号的缩放比例就像提升到深度的每层因子一样。低于 1 的值向零衰减;超过 1 的值无限增长。对于在 T 个步骤上展开的 RNN,主项的行为类似于循环权重的 T 次幂的最大特征值,因此即使与 1 的微小偏差也会在长序列上消失或爆炸。
战略影响
成本与预算
多年来,架构决策决定着性能和运营成本。
更清晰的判决
技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。
质量控制
更好的工程选择可以减少生产中的可靠性事故。
梯度消失和爆炸的未来
核心缓解措施——残差(跳过)连接、归一化、门控和仔细初始化——现在已成为标准,因此消失的梯度很少会阻碍现代架构的训练。变形金刚完全通过使用对序列的注意力而不是重复重新应用一个矩阵来回避循环复合。对数千层深度的训练网络、稳定的超长上下文模型以及神经切线核等在单个训练步骤运行之前预测信号传播的理论工具的研究仍在继续。
现实世界的实施
早期的 RNN 语言模型很难连接长句子中的单词,因为梯度在许多时间步长中消失,从而激发了 LSTM 和 GRU。
ResNet 通过添加跳跃连接来训练 100 多层图像分类器,为梯度提供直接、未稀释的向后路径。
开发人员发现训练损失突然变为 NaN(梯度爆炸的明显迹象),并添加梯度裁剪来稳定它。
PyTorch 或 TensorFlow 中的监控工具绘制每层梯度范数,以便工程师可以发现梯度已崩溃至接近零的层。
风险与防护栏
优化一项基准测试可以隐藏更广泛的系统弱点。
基础设施和维护成本常常被低估。
随着系统变得更加复杂,安全性和可观察性差距可能会扩大。
实施路线图
在实施之前定义延迟、质量和成本目标。
在实际负载和数据条件下进行基准测试。
仪器监控错误、漂移和用户影响。
在扩展之前准备回滚和事件响应路径。
不断探索
Free newsletter
Get the daily AI briefing
Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.
One email each weekday. Unsubscribe in one click. We never sell or share your address.
Test yourself
Take the Vanishing and Exploding Gradients quiz
Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.
Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation
常见问题
What is Vanishing and Exploding Gradients?
在训练深度网络时,误差信号在向后传播多个层时会缩小到零或放大到无穷大。这使得深度和循环模型的训练速度非常缓慢,或者在没有特定修复的情况下不可能进行训练。
反向传播中的什么数学运算是梯度消失和爆炸的根本原因?
反向传播应用链式法则,将许多每层因子相乘;值小于 1 的产品消失,大于 1 的产品爆炸。
为什么 sigmoid 和 tanh 激活特别容易出现梯度消失?
Sigmoid 导数峰值为 0.25,tanh 导数峰值为 1;在饱和区域中,两者都接近于零,因此将它们堆叠起来会导致梯度趋于零。
哪种架构受长序列梯度问题的影响最严重?
RNN 在每个时间步重新应用相同的循环权重矩阵,因此在长序列上,效果会像矩阵的特征值提升到序列长度一样复合。
看到训练损失突然变成 NaN 最有可能表明哪个问题?
爆炸梯度产生巨大的更新,溢出到无穷大或 NaN; vanishing gradients instead cause loss to stall.
残余(跳过)连接如何帮助解决梯度消失问题?
跳过连接添加了一条恒等路径,因此梯度可以向后流动,而不会被中间层反复衰减。