返回 深度学习 思维导图
中文·English
🧠 深度学习ID: gradient-clipping-amp

梯度裁剪

Gradient Clipping
🎯核心定义
梯度裁剪 = 在优化器 step 之前限制梯度范数,防止梯度爆炸。两种方式: ① 逐参数(值)裁剪 giclip(gi,c,c)g_i \leftarrow \text{clip}(g_i, -c, c),即 gigimin(1,cgi)g_i \leftarrow g_i \cdot \min\left(1, \frac{c}{|g_i|}\right)——只约束单个分量的幅值,各分量被不同比例缩放,梯度方向被扭曲,且全局范数仍可能超限;② 全局范数裁剪: 先算全体参数的总范数 G=g2=igi2G = \Vert g \Vert_2 = \sqrt{\sum_i g_i^2}(逐层归一化版本 G=lgl22/nlG = \sqrt{\sum_l \Vert g_l\Vert_2^2 / n_l},其中 nln_l 为该层参数量,防止层参数量差异导致大层主导),当 G>cG > c 时统一缩放 ggcGg \leftarrow g \cdot \frac{c}{G}——保持梯度方向不变、把步长范数硬性界在 cc(等价于在半径为 cc 的球上做投影;PyTorch clip_grad_norm_ 常用 c=1.0c = 1.0)。裁剪时机: 梯度同步(DDP All-Reduce)之后、优化器 step 之前;混合精度训练中在 FP32 主权重对应的梯度上裁剪(低精度梯度裁剪会丢失精度)。Loss Spike(NaN/Inf)处理流程: 训练中 loss 突跳为 NaN/Inf 的标准处置——① 诊断: 学习率过大?数据含异常样本(损坏图像/无标签)?梯度溢出?② 只要梯度含 NaN/Inf 就必须跳过本次优化器 step——NaN 梯度会写坏 FP32 主权重,污染后续所有训练;③ AMP 场景先查 Loss Scaling: FP16 前向/反向上溢 → 梯度 Inf → 动态 loss scale 减半(SS/2S \leftarrow S/2)并跳过/重放该步,连续若干步无溢出则 SS 翻倍;④ 从最近的正常 checkpoint 回滚,降低学习率、检查数据管线,必要时收紧裁剪;⑤ 长期监控: 记录 grad norm 曲线(loss 爆炸的前兆是梯度范数持续飙升)与 loss 曲线,设置 NaN 检测自动暂停训练。
💡使用场景
RNN/LSTM 与长序列 Transformer 训练的标准保护(长程梯度连乘最易爆炸),大 batch 训练与混合精度训练的常规配置;面试高频追问“clip 为什么用全局范数而不是逐参数”“Loss Spike 怎么处理”“裁剪与 AMP/DDP 的先后关系”。
解决的核心痛点
梯度爆炸会让参数一步跳出正常区域(loss → NaN、训练报废),裁剪把最坏步长限制住,让病态时刻训练仍可推进。相比逐参数裁剪,全局范数裁剪保持梯度方向且范数可控,是工程默认。注意裁剪只治标: 若频繁触发(clip 缩放比 c/Gc/G 经常远小于 1),说明学习率过大或模型/数据有实质问题,应降学习率或修数据,而非依赖裁剪兜底。
🎯5 个高频面试考点 (Exam Points)
1
写出全局范数裁剪公式: 先算 G=g2G = \Vert g \Vert_2,当 G>cG > cggcGg \leftarrow g \cdot \frac{c}{G};为什么统一缩放能保持方向并把步长范数界在 cc?
2
逐参数裁剪 gigimin(1,c/gi)g_i \leftarrow g_i \cdot \min(1, c/|g_i|) vs 全局范数裁剪: 各自的缺点(方向扭曲、全局范数不可控),什么场景用哪个?
3
在 DDP 中裁剪的时机是什么(梯度 All-Reduce 之后、step 之前)?为什么必须先完成梯度同步再裁剪?混合精度下为什么在 FP32 梯度上裁剪?
4
Loss Spike(NaN/Inf)的完整处理流程: 为什么必须跳过含 NaN 梯度的 step、AMP 下 loss scale 减半(SS/2S \leftarrow S/2)并重放、checkpoint 回滚与降 lr 的次序。
5
裁剪阈值 cc 太小/太大分别有什么影响?如何从监控数据判断“裁剪过于频繁”说明学习率过大(缩放比 c/Gc/G 长期远小于 1)?
更新于 2026-08-12
🎯
检验攻克程度:针对「梯度裁剪」专属刷题排雷
做单选排雷题、推导选项机制,答错自动收录进专属错题本。
🚀 开始本考点专项刷题
上一个知识点Kaiming 初始化方差推导下一个知识点混合精度 FP16/BF16/FP8

🔗 更多 深度学习 知识点卡片

激活函数演进Adam/AdamWAutograd 动态图BatchNorm 批归一化