Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Exploding Gradient

梯度爆炸会在反向传播过程中呈指数级增长,导致权重更新幅度过大、损失激增和 NaN 值。涵盖原因、迹象和解决方法。

梯度爆炸是一种训练故障:在梯度通过深层或循环神经网络向后传播时,反向传播计算出的梯度会呈指数级增长。梯度下降随后会对模型权重执行巨大的更新,损失函数会突然飙升,或变成 NaN 或 inf,导致训练发散。这与梯度消失问题正好相反。Pascanu、Mikolov 和 Bengio分析了循环神经网络中的这两种问题,并提出通过梯度范数裁剪来处理梯度爆炸;如今,这仍是深度学习训练中的标准保护措施。

梯度为何会爆炸#

根据链式法则,到达早期层的梯度是所有后续层中每个因子的乘积;对于循环网络,则是每个时间步中因子的乘积。如果这些因子始终大于 1,乘积就会随着网络深度呈指数级增长:因子 1.5 重复 30 层,会使信号放大约 190,000 倍。常见诱因包括权重初始化不当、过高的学习率、未归一化的输入、循环模型中的长序列,以及混合精度训练中的溢出;在这种情况下,超过 65,504 的 FP16 值会变成 inf。典型迹象包括损失曲线突然飙升或变成 NaN、梯度范数日志中的数值在几个步骤间增长数个数量级,以及权重变成 NaN。

预防与缓解#

大多数现代训练流水线会结合使用其中几种防护措施。

  • 梯度裁剪:当所有梯度的全局 L2 范数超过阈值时,会按相同的比例缩小每个梯度。更新方向保持不变,只有长度会受到限制。
  • 批归一化:批归一化和层归一化会重新缩放每一层的激活值,使信号在各层之间保持稳定的尺度,并让损失曲面更加平滑。
  • 谨慎初始化:Xavier (Glorot) 和 He 初始化会缩放初始权重,使激活值方差在各层之间大致保持不变。
  • 残差连接:跳跃连接为梯度提供一条绕过各个模块的恒等路径,因此反向信号是多条路径的和,而不是单个长乘积。
  • 学习率预热:先从较小的学习率开始,并在最初几个步骤中逐渐提高,可避免权重和优化器统计量尚未稳定时出现巨大的早期更新。

下面的代码片段构建了一个 30 层的堆栈,每层都会将输入放大 1.5 倍,然后使用 PyTorch 对得到的梯度进行裁剪:

import torch
from torch import nn

torch.manual_seed(0)

# 30 stacked linear layers, each initialized to amplify its input by 1.5x
layers = [nn.Linear(64, 64, bias=False) for _ in range(30)]
for layer in layers:
    nn.init.orthogonal_(layer.weight, gain=1.5)
model = nn.Sequential(*layers)

loss = model(torch.randn(8, 64)).pow(2).mean()
loss.backward()

# clip_grad_norm_ rescales all gradients in place and returns their norm before clipping
norm_before = nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
norm_after = nn.utils.get_total_norm([p.grad for p in model.parameters()])
print(f"Gradient norm before clipping: {norm_before:.2e}, after: {norm_after:.2f}")

原始梯度范数为 9.90e+10,裁剪后为 1.00,因此无论原始梯度有多大,下一次优化器更新都不会超出限制。

Ultralytics YOLO26训练会在每一步执行这项保护措施:训练器会对混合精度梯度进行反缩放,将其全局范数裁剪到 10.0,并让梯度缩放器跳过仍包含 inf 或 NaN 值的任何更新。自定义训练器可以修改这一限制,例如将 RT-DETR 的阈值收紧到 0.1。

梯度爆炸与梯度消失#

这两个问题都源于反向传播中各层因子的乘积。大于 1 的因子会导致梯度爆炸,产生不稳定的更新、数值溢出和训练发散,通常通过裁剪来解决。小于 1 的因子会使梯度趋近于零,导致早期层停止学习,通常的解决方法是使用 ReLU 等非饱和激活函数、残差连接,以及 LSTM 等门控循环单元。归一化和谨慎初始化有助于同时缓解这两种问题。

实际应用#

大型语言模型会在长文本序列上训练数十万步,期间损失突然飙升是一种已知风险,因此它们的训练方案会使用梯度裁剪:GPT-3使用 Adam 训练,并将全局梯度范数裁剪到 1.0。

在计算机视觉中,深度目标检测网络会在 COCO规模的数据集上以较高学习率和混合精度进行训练,因此梯度裁剪和损失缩放有助于避免罕见的极端批次破坏权重。基于 Transformer 的检测器更为敏感,因为梯度在经过解码器交叉注意力时可能会飙升,因此 RT-DETR 和 DINO 等 DETR 系列模型通常将最大范数裁剪到 0.1。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来