大模型训练时,loss 曲线突然冲上天的那个瞬间,多半是梯度爆炸。梯度爆炸和梯度消失正好相反:误差信号往回传时没有被削弱,反而被一层层放大,传到某些层时梯度已经大到离谱,参数一步跨出可行区,损失瞬间失控。
loss 飞天的发生过程
同样按三步看。进来的是损失值,这一轮模型预测得离谱,损失自然很大。发生的是反传:大损失分摊回各层时,链式求导的连乘系数整体偏大,乘几十层之后梯度被放大成庞然大物。出去的是参数更新:按这个巨型梯度调参数,一步就跳出合理范围,下一轮前向更糟,损失曲线垂直拉升。
这个过程有自我强化的恶性循环。参数跳错导致下一轮损失更大,损失更大意味着梯度更大,梯度更大让参数跳得更离谱。梯度消失是信号衰减到停机,它是信号放大到失控,两个方向的问题,排查时看损失曲线形状就能分辨。
反传路上的放大效应
放大效应的根源和消失同源,都是连乘。每层梯度等于后层梯度乘以本层的权重和激活导数,这些系数只要整体大于一,乘积就朝大滚,层数越多滚得越夸张。权重矩阵的某些方向天生容易放大,一旦某个批次踩中这些方向,梯度就会瞬间膨胀。
哪些方向容易放大,和权重的谱特性有关。简单说,权重矩阵在某些输入方向上会把信号成倍放大,这些方向就像管道里的狭窄段,流量一大就喷涌。训练初期权重随机,这些方向是碰运气;数据分布偏移时,就容易被反复踩中。
批次的构成在这里是关键变量。一个异常样本、一段极端长度、一次偶发的脏数据,都可能把某个批次的梯度推向爆表。数据质量过滤因此不只是效果工程,也是稳定性工程,上游的脏数据会以 loss 飞天的形式在下游爆发。
触发条件有哪些
常见的触发条件有四类。学习率设得偏大,等于给更新步长上杠杆,小问题也容易放大成爆炸。权重初始化不当,起始状态就落在容易放大的方向。网络深且缺少归一化,层间尺度失控,梯度在链路里自由膨胀。数据里混入异常批次,一次性把梯度推到峰值。
还有一个容易被忽略的触发点:任务切换。模型在旧任务上训得稳定,换新数据后分布突变,原本平稳的梯度分布被打破。语料配比剧烈调整的时期,正是爆炸高发期,需要盯紧曲线。
稳住训练的几招
应对办法按优先级排。第一是梯度裁剪,给梯度设上限,超幅就截断,这是最直接的刹车。第二是降学习率,从源头压缩步长。第三是加归一化层,把层间输出尺度稳住,掐断放大的传导路径。第四是查数据,定位异常批次并回炉清洗,别让同一颗雷炸两次。
四招按优先级排,先止血再治根,下手的位置各不相同。
| 处置手段 | 优先级 | 具体做法 | 作用在哪 |
|---|---|---|---|
| 梯度裁剪 | 第一 | 给梯度设上限,超幅就截断 | 最直接的刹车,先压住爆表那一下 |
| 降学习率 | 第二 | 从源头压缩步长 | 压缩每一步的跨度,减少跳出可行区的机会 |
| 加归一化层 | 第三 | 把层间输出尺度稳住 | 掐断放大的传导路径 |
| 查数据 | 第四 | 定位异常批次并回炉清洗 | 别让同一颗雷炸两次 |
这些配置在主流框架里都是现成开关。用通义千问或文心一言的开放实现做实验时,默认训练脚本通常已经带上裁剪和归一化。真正需要人工介入的场景,是曲线莫名异常时,你能顺着这条链路逐一排查,而不是盲目重启训练。
速查表:梯度爆炸=反传时梯度被连乘放大;触发条件=学习率大、初始化差、缺归一化、脏数据;应对=梯度裁剪优先,其次降学习率、加归一化、查数据。
换个问法再问梯度爆炸三句
- 爆炸和消失会同时出现吗?会,同一网络不同层可能一边衰减一边放大,通常先处理爆炸,因为它直接中断训练。
- 梯度裁剪会拖慢收敛吗?极端批次会被压平,但正常批次的更新几乎不受影响,整体是划得来的交易。
- 曲线抖一下就一定是爆炸吗?不一定,也可能是学习率偏大或验证集波动,看是否持续飙升才能定性。


