土法炼钢兴趣小组的算法知识备份

【Transformer 与注意力机制】36|训练稳定性:损失尖峰、混合精度与梯度爆炸

文章导航

分类入口
transformer
标签入口
#transformer#training-stability#loss-spike#mixed-precision#gradient-clipping#mup

Transformer系列导航

按系列顺序继续阅读,而不是停在单篇。

系列目录上一篇:【Transformer 与注意力机制】35|数据工程:为什么数据质量常常比数据量更重要下一篇:【Transformer 与注意力机制】37|BERT:MLM、NSP 与 Encoder-only 路线的代价

目录

如果说 34|Scaling Laws 告诉我们模型、数据和算力应该怎么配,35|数据工程 告诉我们该把什么样的 token 喂给模型,那么接下来的问题就更接近真实训练现场:配方看起来都对,为什么训练还是会突然崩?

这不是一句修辞式的开场。PaLM 的最大模型在训练中出现过大约 20 次 loss spike,而且是在梯度裁剪已经开启的情况下;OPT-175B 团队公开的训练日志里,反复出现”loss scale 崩到 0、activation norm 飙升、只能回滚重训”的记录;GLM-130B 团队发现,训练崩溃往往滞后于 embedding 层梯度范数的异常尖峰只有几步——留给人反应的时间窗口很短。这些不是三家团队各自撞上的运气问题,而是同一类现象在不同工程实现下的复现:大模型训练不是一条平滑下降的曲线,而是一段需要持续判断”还能不能继续走”的过程。

本篇要把这件事拆成可核对的部分:训练不稳定在监控面板上具体长什么样、什么时候必须停训;warmup、Pre-LN、BF16、梯度裁剪这四件常见工具分别修复的是哪一条被打破的假设;loss spike 的三类根因分别对应哪些真实案例;以及为什么在小模型上调好的超参,放大之后经常直接失效——这背后有一篇专门研究”如何在小模型上复现大模型训练不稳定性”的论文,值得展开讲。


一、训练不稳定在监控面板上是什么样子,什么时候必须停

先把四类现象和对应的停训判据放在一起看,因为孤立地描述”loss 变高了”没有工程意义,真正有用的是症状 + 伴随指标 + 判断动作这三件套。

1.1 短暂 spike:先看伴随指标,再决定要不要停

loss 在某一步或某几步显著升高,随后回落,这是最常见的形态。PaLM 论文第 5.1 节记录,其最大模型训练中观察到约 20 次这类 spike,出现间隔不规律,甚至发生在训练后期;而且这些 spike 是在梯度裁剪已经启用的情况下发生的,说明裁剪防住的是”一步走多远”,防不住”这一步的方向本身就有问题”。

判断要不要停训,不能只看 loss 曲线本身,要同时看:

GLM-130B 团队的经验更进一步:他们发现梯度范数的异常尖峰通常领先于训练崩溃仅仅几个训练步,也就是说,等到 loss 真正炸掉才反应已经太晚,梯度范数才是有效的早期预警信号,而且这类异常尖峰的来源被他们定位到 embedding 层——训练早期,embedding 层的梯度范数经常比其他层大出几个数量级,且波动剧烈。

1.2 loss divergence:趋势性失控,通常应该停

这不是一次尖峰,而是 loss 不再围绕下降趋势波动,转为持续变大。OPT-175B 团队在训练日志中记录了多次这类发散,并总结出可操作的止损标准:回滚到 loss scalar 仍然”健康”(不低于 1.0)、且激活范数呈下降趋势的检查点,而不是简单回滚到最近一个检查点。这条标准的价值在于它把”要不要回滚”“回滚到哪”从直觉判断变成了可以对照日志核实的规则。

1.3 NaN / Inf:几乎总是根因传播后的最终结果,必须停

NaN 是最容易被发现、但也最晚被发现的信号。一次 softmax 分母异常、一次梯度累加溢出,都可能先在某个张量里产生 Inf,再经过后续矩阵乘法扩散成 NaN——这个扩散过程通常只需要几步。等到 NaN 出现在 loss 里,往往已经错过了排查根因最好的时间窗口,此时唯一合理的动作是停训并回滚,而不是继续观察。

1.4 边缘稳定:同一配方时好时坏

loss 没有明显炸掉,但同一套超参在不同随机种子、不同数据顺序下有时能训完、有时会发散。这说明训练轨迹离不稳定区域很近,值不值得停训取决于你能否接受”这次成功可能只是运气好”——第七节会讲为什么这种边缘稳定在大模型上比小模型更容易出现。

小结成一句可执行的判据:梯度范数是比 loss 更早的预警信号;loss scale 和激活范数的趋势比它们的绝对值更重要;出现 NaN/Inf 不要犹豫,先停后查。


二、warmup 修的是哪个假设:Adam 早期统计量的方差

warmup 经常被当成经验玄学,但它对应的是一个具体、可推导的问题。

Adam / AdamW 用梯度的一阶矩和二阶矩估计来构造自适应学习率,本质上假设:当前的二阶矩估计已经足够稳定,可以拿来给学习率打折扣。 Liu 等人在 “On the Variance of the Adaptive Learning Rate and Beyond”(ICLR 2020,RAdam 论文)里指出,这个假设在训练极早期是不成立的——此时用于估计二阶矩的样本数量太少,自适应学习率的方差在理论上是无界的。他们给出一个简化情形:若把早期梯度 \(g_1, \dots, g_t\) 近似看作独立同分布的高斯变量,\(t=1\) 时自适应比例 \(\sqrt{1/g_1^2}\) 服从 scale-inv-\(\chi^2\) 分布,其方差是发散的。

warmup 的作用就是利用 \(\operatorname{Var}[\alpha x] = \alpha^2 \operatorname{Var}[x]\):在方差本身发散或过大的阶段,用较小的学习率 \(\alpha\) 把这个方差压下去,等二阶矩估计积累了足够多样本、方差自然收窄之后,再把学习率抬到目标值。RAdam 则是把这个诊断反过来用:不再用固定 step 数的 warmup 去”猜”方差什么时候降下来,而是显式计算方差的自由度并据此校正学习率,从而不再需要手工调 warmup 步数。

这也解释了原论文《Attention Is All You Need》里 warmup 和 Adam 一起出现不是偶然——只要用自适应优化器,就天然继承了这条”早期统计量不可靠”的假设,warmup 只是修复它最直接的手段之一。

warmup 修复的假设:优化器的二阶矩统计量已经收敛到可信区间。 一旦这个假设在早期被违反,无论模型架构和精度策略多稳,第一批更新都可能已经把参数推向不合理的区域。


三、Pre-LN 修的是哪个假设:主路径必须是近似恒等映射

这条已经在 25|Layer Normalization 里从公式和梯度路径的角度讲过,这里只从”训练稳定性诊断”的角度补一层:Post-LN 隐含的假设是残差主路径可以承受在每个子层输出处被重新归一化,而不破坏梯度沿深度方向的传递。Xiong 等人(ICML 2020)的分析表明,这个假设在层数不多(原论文是 6 层)时基本成立,代价是需要更谨慎的 warmup 和初始化配合;层数一旦变深,主路径的梯度必须反复穿过 LayerNorm 的 Jacobian,训练对学习率和初始化的容错空间会明显收窄。

Pre-LN 把假设换成了:主路径应该尽量保持为近似恒等映射,每个子层只贡献一个可控增量。 这个假设更弱、更容易在深层网络里维持,所以 Pre-LN 成为现代大模型的默认选择。但它不是免费的:Pre-LN 在实践中会让残差流的方差随深度累积增长(后文第七节引用的 Wortsman 等人的研究会说明,这种增长会连带引发 attention logits 的数值增长问题),因此 Pre-LN 缓解的是深层优化难度,不等于消灭了所有数值风险。

工程上要记住的边界:Pre-LN 换的是”更容易训练”,不是”更不容易溢出”——第四、七节讲的数值溢出问题,Pre-LN 本身并不能自动解决。


四、BF16 与 FP16 修的是哪个假设:数值动态范围,不是速度

混合精度带来的不是免费加速,而是把”激活、梯度、softmax 中间量的取值范围”这条隐含假设摆到了台面上。

IEEE 754 half-precision(FP16)用 1 位符号、5 位指数、10 位尾数,能表示的正常值范围大约是 \(6.10 \times 10^{-5}\)\(65504\),更小的值只能落进 subnormal 区间(最小约 \(5.96 \times 10^{-8}\))或直接 underflow 成 0;超出上限则 overflow 成 Inf。也就是说,FP16 训练隐含假设:模型里所有需要保留精度的中间量,绝对值都落在这个不到 6 个数量级的窗口内。 这个假设对浅层小模型通常没问题,但深层 Transformer 训练很长时间之后很容易被打破——尤其是 attention logits,第七节会讲到它们的数值大小和参数范数呈二次关系,训练越久越容易顶到上限。

Micikevicius 等人(ICLR 2018,Mixed Precision Training)提出的 loss scaling 正是为了缓解 FP16 这个窗口偏窄导致的 underflow:反向传播前把 loss 乘上一个 scale 因子,让本来会被 underflow 掉的小梯度抬到 FP16 能表示的范围,更新参数前再把梯度除回去;如果检测到梯度里出现 Inf,就说明 scale 选得太大,需要下调。后续的工程实现(例如 NVIDIA Apex AMP)把这套逻辑做成了动态调整——每步检查是否 overflow,自动升高或降低 scale——这样训练系统就多了一个必须监控的动态变量:loss scale 本身的走势和 OPT-175B 案例里提到的”loss scalar 崩到 0”一样,是判断训练是否健康的关键信号。

BF16 换了一条完全不同的路:它同样是 1 位符号、8 位指数,和 FP32 共享指数范围(约 \(1.18 \times 10^{-38}\)\(3.39 \times 10^{38}\)),但尾数只有 7 位,比 FP16 的 10 位更粗。也就是说,BF16 隐含的假设是:训练中真正致命的是 overflow / underflow,不是尾数最后几位的精度损失。 因为它的动态范围几乎和 FP32 一样宽,很多在 FP16 下需要 loss scaling 才能压住的溢出问题,在 BF16 下不需要额外机制就自然规避了。这也是为什么”BF16 更稳”不是一句空话,而是有具体的指数位数差异支撑的结论。

但 BF16 不是万能替身。GLM-130B 团队在训练中发现,即使主体用 FP16/BF16,softmax 这类对精度敏感的算子仍然需要提升到 FP32 计算,否则容易在长链路训练里累积误差;他们同时发现 embedding 层的梯度异常是引发 loss spike 的关键源头,最终采用的 Embedding Layer Gradient Shrink(EGS)——用 \(\text{word\_embedding} = \text{word\_embedding} \times \alpha + \text{word\_embedding.detach()} \times (1-\alpha)\) 的方式衰减 embedding 层梯度——本质上和精度选择无关,是在数值层面直接限制一个已知的异常梯度来源。这说明混合精度策略和”某一层梯度天生不稳定”是两类不同的问题,BF16 能缓解前者,不能替代对后者的专门诊断。


五、gradient clipping 修的是哪个假设:它是保险丝,不是病灶修复

梯度裁剪限制梯度的全局范数,本质假设是:绝大多数训练 step 的梯度范数落在一个可预期的分布里,只有极少数 step 会显著偏离,而这些偏离是可以被截断而不影响整体训练方向的稀疏事件。

这个假设在大部分时间是合理的,但它决定了 clipping 的能力边界:它能防止”一次异常梯度把参数推得太远”,防不住”梯度异常的根源持续存在”。PaLM 的例子已经说明这一点——梯度裁剪全程开启,最大模型依然出现约 20 次 spike。OPT-175B 团队的应对更直接地体现了 clipping 阈值本身也是需要调的超参:他们在训练早期把梯度裁剪阈值从 1.0 降到 0.3 来换取更好的稳定性,这个调整本身说明”裁剪”不是一次性设置好就一直有效的开关,而是要跟着训练阶段和模型状态动态判断的保险丝粗细。

把这一点和 GLM-130B 的 EGS 对比会更清楚:clipping 是在梯度已经算出来之后、送进优化器之前做全局截断,是通用、不针对具体来源的保险丝;EGS 是针对”已经定位到是 embedding 层”这一具体病灶做的定向抑制。两者不是互相替代关系——GLM-130B 训练里两者是同时使用的——而是保险丝防止单次异常烧穿系统,定向修复消除异常反复出现的根源。只依赖 clipping 而不去追查梯度异常的来源,往往意味着同样的 spike 会以不同强度反复出现。


六、loss spike 的三类根因与三个真实案例

把三类根因和三个公开的大模型训练案例对照来看,比抽象罗列”可能是 A、可能是 B”更有用。

案例 观察到的现象 关键诊断线索 采取的措施 局限
PaLM(Chowdhery et al., 2022,最大模型) 训练中约 20 次不规则间隔的 loss spike,梯度裁剪全程开启 对照实验:把 spike 附近的 batch 从更早的检查点重新训练,不复现 spike 回滚到 spike 前约 100 步的检查点,跳过约 200–500 个 batch 论文明确承认”未能找到一套有原则的缓解策略”,属于事后补丁
OPT-175B(Zhang et al., 2022) 多次 loss divergence,伴随 loss scalar 崩到 0、最后一层激活范数飙升 loss 发散、loss scalar 归零、激活范数增长三者同时出现 回滚到 loss scalar ≥ 1.0 且激活范数呈下降趋势的检查点;学习率降到 GPT-3 用值的 2/3;梯度裁剪阈值由 1.0 降到 0.3 期间还试过切换纯 SGD、重置 loss scalar 等方案,多数只能部分缓解
GLM-130B(Zeng et al., 2023) 训练崩溃前几步出现梯度范数尖峰,尖峰源头集中在 embedding 层 embedding 层梯度范数比其他层大出数个数量级,且早期波动剧烈 Embedding Layer Gradient Shrink(\(\alpha = 0.1\) 起步,训练中动态调整) 训练全程仍出现 3 次后期 loss divergence,需要现场调整 \(\alpha\) 并重启

三类根因对应地看:

数值类根因:FP16 overflow、attention logits 过大、归一化分母异常,都会先在某个张量上产生 Inf,再扩散成 NaN。这类问题的诊断线索是 loss scale 下调、梯度范数尖峰,GLM-130B 的 EGS 就是针对这一类根因的定向修复。

优化类根因:学习率过高、warmup 太短、AdamW 的 \(\beta\)\(\epsilon\) 设置不合适、checkpoint 恢复后优化器状态和当前参数不匹配,都可能让某些 step 的更新过大。OPT-175B 反复调整学习率和裁剪阈值,正是在这个维度上试错。

数据类根因:异常 batch、极长样本、分布突然切换,理论上可能让单步 loss 明显升高。但 PaLM 的对照实验值得反复强调:他们把 spike 附近的数据 batch 单独拿出来,从一个更早的检查点重新训练,没有复现 spike。这说明 spike 是”特定 batch 与特定参数状态的组合”,不是数据本身有问题就能解释的——第八节会把这个结论落到一套具体的排查流程上。

第四类是系统类根因(分布式梯度同步、混合精度通信、不同硬件路径上的非确定性),本系列不展开,属于并行训练与集群工程的范畴,留给后续 llm-infra 系列处理。


七、小模型稳定的超参,为什么放大后会失效

这是这篇文章里最值得展开的学术脉络,因为它直接回答”为什么按小模型调好的配方放大就崩”这个问题,而不是停留在”大模型更娇气”这种没有解释力的说法上。

7.1 两类具体的不稳定性,先在大模型上被观察到

Dehghani 等人在把 Vision Transformer 扩展到 220 亿参数时(“Scaling Vision Transformers to 22 Billion Parameters”,arXiv:2302.05442,2023)报告了一种现象:训练过程中 attention logits(即 \(z_{ij} = \langle q_i, k_j \rangle / \sqrt{d_h}\))会持续增长,导致 softmax 输出的注意力权重坍缩为近似 one-hot 向量。Zhai 等人(ICML 2023)把这种坍缩现象命名为attention entropy collapse,并证明注意力熵的下界随注意力 logits 的谱范数呈指数下降,为这个现象提供了理论支撑。Dehghani 等人提出的修复是 qk-layernorm:在计算 attention logits 之前,先对 query 和 key 分别做一次 LayerNorm。

另一种不稳定性来自 PaLM(Chowdhery et al., 2022):输出 logits 会偏离对应的 log 概率,PaLM 用一个辅助的 z-loss 项(鼓励 softmax 归一化常数接近 0)来抑制这种偏离。

7.2 关键发现:这两种不稳定性可以在小模型上被复现

Wortsman 等人(“Small-Scale Proxies for Large-Scale Transformer Training Instabilities”,ICLR 2024,arXiv:2309.14322)做的事情,是把这两种”看起来只在大模型上出现”的不稳定性,用足够高的学习率在小得多的模型上复现出来,并证明大规模场景下的缓解手段(qk-layernorm、z-loss)在小模型的高学习率区间同样有效。他们引入了一个”学习率敏感度”(LR sensitivity)指标,衡量学习率在三个数量级范围内变化时,最终 loss 相对最优值的偏离程度。

这个结果的含义很直接:这些不稳定性不是”大模型独有的诡异现象”,而是某个量(attention logits)随参数范数增长而增长这一通用数值属性,在任何规模下、只要学习率相对当前规模”足够高”就会出现。 大模型更容易撞上它,不是因为它们更娇气,而是因为随着模型规模(尤其是深度)增大,能够稳定训练的学习率窗口本身在收窄——论文观察到,扩展深度比扩展宽度更快地提高学习率敏感度。也就是说,你在小模型上找到的”稳定学习率”,在标准参数化下换到更深的模型里,很可能已经落在了那个收窄后的窗口之外,而你并不知道窗口已经变窄了。

这也是”小模型稳定超参放大后失效”最具体、最可核对的解释:不是模型变大之后规律变了,而是判断”多高的学习率算高”这件事本身随规模漂移,而大多数团队调参时用的是绝对学习率数值,不是这个会漂移的相对量。

7.3 μP:把”最优学习率随规模漂移”这件事直接修掉

Yang 等人(“Tensor Programs V: Tuning Large Neural Networks via Zero-Shot Hyperparameter Transfer”,NeurIPS 2021 / arXiv:2203.03466)提出的 Maximal Update Parametrization(μP),处理的正是这个漂移问题:在标准参数化下,Transformer 的最优学习率会随模型宽度变化而明显偏移;μP 按 fan-in / fan-out 重新标定每一层的初始化尺度和学习率,让每层参数更新的量级在不同宽度下保持一致,从而使”最优学习率”在宽度变化时基本保持稳定。论文用这套方法把从 1300 万参数模型上调好的超参零样本迁移到接近 BERT-large(3.5 亿参数)规模,效果超过公开数字;把从 4000 万参数模型上调好的超参迁移到 GPT-3 6.7B 量级,调参总成本只有直接预训练成本的 7%。

μP 解决的是”最优学习率随规模漂移”,不等于解决”数值溢出”。Wortsman 等人的实验里专门验证了这一点:在没有 qk-layernorm 的情况下,即使叠加了完整的 μP,模型在高学习率下依然会发散——μP 稳住的是”最优点在哪”,qk-layernorm 稳住的是”逼近这个最优点时会不会因为 attention logits 增长而炸”。这是两类不同层面的修复:参数化解决的是超参迁移问题,数值层面的架构改动解决的是溢出问题,二者不能互相替代,这也是理解”为什么调完参数化配方,训练还是可能因为别的原因崩”的关键假设链。


八、异常 batch 的排查思路

第六节引用的 PaLM 对照实验已经说明:把 spike 归咎为”这批数据本身有问题”,往往是过度简化的结论。一套更严谨的排查流程应该是:

  1. 对齐时间线:先精确定位是哪一个或哪几个 step 触发了异常,把这些 step 的 loss、梯度范数、loss scale、学习率取值列在一起看,而不是只看 loss 曲线的形状。
  2. 单独重放:取出触发异常的 batch,从一个更早、更”干净”的检查点重新跑这批数据。如果不复现异常,说明问题不是数据本身独立造成的,而是这批数据和当前参数状态的组合触发的——这正是 PaLM 团队得出的结论。
  3. 检查该批次的统计特征:token 长度分布是否有极端 outlier、是否存在大段重复或模板化片段、是否恰好落在某次数据配比切换、分片边界或 tokenizer 边界情况附近。这一步是在假设”确实是数据侧异常”的前提下继续缩小范围,不是排查的第一步。
  4. 排除系统性因素:同一批数据在不同并行切分、不同 rank 上重跑,观察异常是否稳定复现。如果异常只出现在特定的并行路径或硬件位置上,更可能是数值不确定性或系统问题,而不是数据问题。
  5. 只在确认数据侧异常后才做数据处理:把确认有问题的 batch 加入跳过列表或补充过滤规则,而不是无差别调低学习率去掩盖问题——第十节的常见误解会再展开这一点。

这套流程的核心是先做对照实验再下结论,而不是直觉性地把不好解释的 spike 都归因为”脏数据”。


九、监控仪表盘:没有它就是在猜

前面几节反复用到”梯度范数领先于 loss 异常”“loss scale 走势比绝对值重要”“激活范数趋势能预示发散”这类结论,它们能成立的前提是训练系统本来就在记录这些指标。一个成熟的训练系统至少要持续记录:

  1. loss 与 smoothed loss;
  2. gradient norm(全局与关键层,例如 embedding 层);
  3. activation norm(尤其是最后一层,OPT-175B 案例里的关键信号);
  4. learning rate 与 loss scale;
  5. NaN / Inf 计数;
  6. 数据源与 batch 元信息(方便后续单独重放);
  7. checkpoint 恢复点与对应的优化器状态健康度。

没有这些信息,“调稳定性”就会退化成看着最终 loss 猜前因——这正是 GLM-130B、OPT-175B 两份公开训练记录反复强调的经验:能被诊断的不稳定性,前提是它先被记录下来。


十、争论与开放问题

这一节把研究台账里最值得留意的争论摆出来,而不是把已经解决的问题也包装成”仍有争议”。

争论点:这些不稳定性是可以被架构级手段一次性修复的数值缺陷,还是大模型训练里避免不了的涌现性质?

支持”可修复”一方的证据相当扎实:Dehghani 等人的 qk-layernorm、PaLM 的 z-loss、Zhai 等人的 σReparam,都在各自的实验里几乎消除了对应的不稳定性;Wortsman 等人进一步证明这些不稳定性可以在小模型上用高学习率复现和研究,并且通过观察激活、梯度范数随规模变化的趋势,在不稳定性真正出现之前就预测到它。这条证据链说明:至少对”attention logits 增长”和”输出 logits 偏离对数概率”这两种已经被命名、被研究过的不稳定性,工程上已经有了具体、可验证的修复手段,不是玄学。

但一线千亿参数级训练团队的现实提供了另一面证据:PaLM 团队明确写道,面对最大模型上约 20 次不规则的 spike,他们”未能确定一套有原则的缓解策略”,只能靠”回滚 + 跳批”这种事后补丁;GLM-130B 即使用 EGS 压住了大部分 spike,训练全程仍然经历了 3 次后期的 loss divergence,需要现场调整衰减系数并重启。这说明当前被充分研究、被命名的不稳定性类型,可能只是前沿规模训练里会遇到的问题的一个子集——还有没被归类、没有现成架构级补丁的新模式存在。

开放问题(具体、可检验):

  1. Wortsman 等人在论文中明确说明,他们的可预测性分析主要针对导致缓慢发散的不稳定性,而没有覆盖”快速 spike 后自动恢复”这一类现象(原文第 4 节脚注特别注明了这一范围限制)。PaLM、GLM-130B 观测到的大多数 spike 恰恰属于这种快速尖峰类型。这类 spike 是否存在类似”观察某个量的 scaling 趋势即可提前预警”的规律,目前没有和缓慢发散同等程度的研究覆盖。可读入口:Wortsman et al., ICLR 2024 第 4 节及其引用的 slingshot mechanism 相关讨论(Thilak et al., 2022)。
  2. Wortsman 等人观察到梯度范数会随模型规模和学习率增大而下降,这会使 AdamW 的默认 \(\epsilon\)(通常 \(10^{-8}\))相对变得过大,导致更新量偏小;论文把这个现象与 attention logits 增长、参数范数增长之间的因果关系称为”假设”(hypothesis),而非给出了严格证明。这条因果链是否成立、在多大范围内成立,仍然开放。
  3. μP 目前对”宽度”方向的超参迁移证据比较充分,但论文自己也提到深度方向的迁移需要更多注意事项;μP 和 qk-layernorm / z-loss 这类数值层面修复手段的组合效应,目前缺少跨越多个数量级、多种架构变体的系统验证——这意味着”调好参数化就能一路顺利放大”目前还不能当作已证明的结论。

十一、关键概念回顾


十二、常见误解

12.1 “NaN 一定是代码 bug”

不一定。NaN 也可能来自正确实现在不稳定数值区间里产生的结果,例如 attention logits 持续增长最终 overflow。GLM-130B 和 OPT-175B 的训练记录都不是因为代码错误才出现异常,而是数值/优化层面的已知问题。

12.2 “loss spike 都是数据脏”

PaLM 的对照实验直接反驳了这一点:把 spike 附近的数据从更早的检查点重新训练,并不会复现 spike,说明它是特定数据与特定参数状态的组合触发的,不是数据单独造成的。把所有不稳定都归咎于数据,会掩盖真正的数值和优化问题。

12.3 “BF16 只是更快,跟稳定性无关”

不对。BF16 相对 FP16 的核心差异是 8 位指数(等同 FP32 动态范围)对 5 位指数,这直接决定了它能容纳的激活/梯度数值区间宽了多个数量级,是很多场景下不需要复杂 loss scaling 就能训稳的直接原因。

12.4 “调小学习率能解决所有不稳定”

调小学习率有时确实能压住梯度范数和激活范数(OPT-175B 案例里多次这样做),但如果根因是 embedding 层梯度天生异常(GLM-130B 案例)或 attention logits 随参数范数结构性增长(Wortsman 等人的分析),只调学习率是在回避需要架构级或数值级修复的问题,代价是训练效率下降。

12.5 “小模型没出问题,配方放大后大概率也没问题”

这正是本篇第七节要纠正的误解。Wortsman 等人的研究表明,不稳定性本质上取决于学习率相对当前规模是否”足够高”,而这个安全窗口会随模型(尤其是深度)增大而收窄;小模型上”看起来很稳”的绝对学习率数值,换到更深的模型里可能已经落在收窄后的窗口之外,这件事无法仅凭”小模型没崩”来验证。


十三、下一步

到这里,现代 Transformer 训练范式的主线已经从 tokenization、预训练目标、微调、指令微调、RLHF、scaling laws、数据工程走到了训练稳定性。下一步要换一个视角:同样基于 Transformer,为什么有些模型选择 Encoder-only,有些选择 Decoder-only?我们先从 BERT 开始。


十四、参考文献

核心论文:

  1. Micikevicius, P. et al. “Mixed Precision Training.” ICLR 2018. FP16 混合精度训练与 loss scaling 的系统讨论。
  2. Xiong, R. et al. “On Layer Normalization in the Transformer Architecture.” ICML 2020. Pre-LN 与 Post-LN 对优化稳定性影响的分析。
  3. Liu, L. et al. “On the Variance of the Adaptive Learning Rate and Beyond.” ICLR 2020. RAdam 论文,给出 warmup 作为方差缩减手段的理论解释。
  4. Yang, G. et al. “Tensor Programs V: Tuning Large Neural Networks via Zero-Shot Hyperparameter Transfer.” NeurIPS 2021 / arXiv:2203.03466. μP 与 μTransfer,处理最优学习率随模型规模漂移的问题。
  5. Dehghani, M. et al. “Scaling Vision Transformers to 22 Billion Parameters.” arXiv:2302.05442, 2023. 报告 attention logit growth 现象并提出 qk-layernorm。
  6. Zhai, S. et al. “Stabilizing Transformer Training by Preventing Attention Entropy Collapse.” ICML 2023. 命名 attention entropy collapse,提出 σReparam。
  7. Wortsman, M. et al. “Small-Scale Proxies for Large-Scale Transformer Training Instabilities.” ICLR 2024 / arXiv:2309.14322. 在小模型上复现、研究并预测大规模训练不稳定性,评估 qk-layernorm、z-loss、μP 的效果。

生产实践与事故复盘:

  1. Vaswani, A. et al. “Attention Is All You Need.” NeurIPS 2017. 原始 Transformer 的 warmup 学习率调度来源。
  2. Chowdhery, A. et al. “PaLM: Scaling Language Modeling with Pathways.” JMLR 2023. 第 5.1 节记录约 20 次 loss spike 及”回滚 + 跳批”缓解策略,提出 z-loss。
  3. Zeng, A. et al. “GLM-130B: An Open Bilingual Pre-trained Model.” ICLR 2023 / arXiv:2210.02414. 记录梯度范数尖峰领先训练崩溃的现象,提出 Embedding Layer Gradient Shrink。
  4. Zhang, S. et al. “OPT: Open Pre-trained Transformer Language Models.” arXiv:2205.01068, 2022. 公开训练日志记录 loss divergence、loss scalar 崩溃与激活范数飙升的关联,以及学习率、梯度裁剪阈值的现场调整。

← 上一篇:35|数据工程 | 下一篇:37|BERT

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-08-08 · transformer

【Transformer 与注意力机制】33|RLHF:从 PPO 到 DPO,再到 GRPO

SFT 的似然目标画不出相对偏好,只能到一个由数据规模决定的天花板。RLHF 用奖励模型把偏好压成标量再接 PPO,代价是 KL 约束、采样成本和可实测的奖励黑客曲线;DPO 从同一个 KL 目标解出隐式奖励绕开在线采样,GRPO 在可验证奖励场景把 critic 也省掉。工程细节外链 rl-posttraining 系列。

2026-08-08 · transformer

【Transformer 与注意力机制】34|Scaling Laws:Kaplan 与 Chinchilla 之争,以及算力预算怎么分配

Kaplan(2020)第一次把 loss 随参数、数据、算力的幂律关系钉成经验规律,却因为训练配方设计的一个隐藏 bug 把配比钉歪了;Chinchilla(Hoffmann et al., 2022)用三种独立方法纠正过来,结论是很多大模型不是不够大,是每个参数看过的 token 不够多。本文用两篇论文的原始公式、Epoch AI 的复现危机和“过训/欠训”的真实工程后果,讲清楚 compute-optimal 到底在优化什么,以及这套规律正在被哪些新事实推着往前走。

2026-08-08 · transformer

【Transformer 与注意力机制】37|BERT:MLM、NSP 与 Encoder-only 路线的代价

BERT 的每个设计选择都有可核对的实测代价。本文钉住 BERT 这一条路线本身:80/10/10 掩码策略真正缓解了多少 pretrain-finetune mismatch、NSP 为什么被 RoBERTa 的受控实验指出可能是输入格式而非目标函数在起作用、BERT 为什么在数学上是一个可以生成文本的 Markov Random Field 却没人拿它做生成模型,以及 2024 年之后 ModernBERT 一类工作为什么还在升级这条路线。三条路线的横向比较见 40|三大路线之争。

2026-08-08 · transformer

【Transformer 与注意力机制】38|GPT 系列:从续写到助手,每一代到底改变了什么

GPT-1 到 GPT-4 四次跃迁里,next-token prediction 这个目标函数从未换过,真正变化的是任务接口、参数规模和对齐机制。本文只用公开论文与技术报告拆解每代的改与不改,并摆开 in-context learning 机制、涌现能力是否为度量假象、能力该归因 scale、数据还是对齐这几个仍在争论的问题。


By .