18.3 训练稳定性
本节目标:掌握训练稳定性的四层排查顺序(数据与奖励、策略变化、数值更新、训练系统),学会读 KL 与熵、loss 与梯度范数,并能用公开案例判断一个稳定性工具作用在哪一层。
18.2 搭好了后训练闭环:数据 → SFT → RL → 评测 → 数据回流。闭环跑起来以后,打开监控面板,第一件事通常是看奖励曲线。
先看一个数学 RL 训练中的真实场景。一个 7B 模型在 MATH 数据集上做 GRPO,训练跑了 200 步:训练奖励从 稳步涨到 ,曲线平滑;但独立评测集 MATH-500 的正确率始终停在 ,AIME 通过率甚至从 掉到了 ;平均回答长度从 token 涨到了 token,翻了三倍。团队一开始以为是学习率太大,把学习率从 降到 ,奖励曲线仍然继续涨,评测还是不动。到第 步,loss 突然变成 NaN,梯度范数冲到 ,后面所有参数全部报废;而在 NaN 出现之前,奖励曲线一直在上涨,从监控上看训练还在进步。
同一个上涨的奖励,背后至少有四种完全不同的解释:模型可能真的学会了解题;可能只学会了"写得更长更容易得高分"这种奖励漏洞;可能优化器已经把参数推飞、NaN 正在传播;甚至可能生成端用旧模型采样、训练端用新模型算概率,两边版本对不上,记录下来的对数概率根本不是生成那条轨迹时的概率。
只看奖励这一条曲线,无法在这几种解释之间做出区分。训练时需要把 loss、梯度范数、KL、熵和独立评测放到同一条时间线上比较。本节按数据与奖励、策略变化、数值更新、训练系统这四层因果顺序逐层排查,最后用 GLM、Llama 4、Seed-Thinking、Kimi K2 四个公开案例分别对照四层中的典型问题。
核心概念
训练稳定性排查按四层因果顺序进行:数据与奖励决定模型学什么,策略指标描述模型怎样改变,数值指标反映参数能否正常更新,训练系统决定日志中的概率是否真的来自生成回答的策略。优化器与裁剪只作用于第三层(参数更新),不能修复第一层的目标错误,也不能替代第四层的版本对齐;用错层级的工具,会把"稳定的偏差"训练得更加稳定。
四层排查框架
四条曲线摆在一起,先看哪一条?
答案在因果顺序里:数据和奖励决定模型学什么,策略指标描述模型怎样改变,数值指标反映参数能否正常更新,训练系统决定日志中的概率是否真的来自生成回答的策略。上游出错时,下游的曲线一定会跟着乱;反过来,下游的工具修不了上游的问题——梯度裁剪只能限制单步更新的幅度,奖励函数衡量错了目标,裁剪之后的每一步仍然朝着错误目标走。
按这个顺序,四层各自的信号和首选检查是:
| 层级 | 主要信号 | 首先检查 | 对应工具 |
|---|---|---|---|
| 数据与奖励 | 奖励升、独立评测不动 | 奖励规则、数据重复、评测污染、长度 | 重写奖励、清洗数据 |
| 策略变化 | KL 快速升高、熵快速下降 | 更新幅度、KL 约束、采样难度、版本 | 降低学习率、收紧 KL |
| 数值更新 | loss / 梯度暴涨、NaN | 学习率、精度、异常 batch、裁剪 | 梯度裁剪、优化器 |
| 训练系统 | 两端概率对不上、版本错位 | 权重同步、token、精度、MoE 路由 | 对齐版本与重算概率 |
排查要按这张表从上往下走:先确认模型学的目标正确,再看策略有没有移动过快,然后检查单步更新,最后核对分布式系统。这样做是为了避开两类常见的错误处置:用数值工具去修奖励问题,或者用数据清洗去掩盖权重同步错误。两类处置都会让训练"看起来恢复了",实际只是把故障藏进了更深的层。
下面四节依次展开每一层:先看信号长什么样,再看一个具体的数字例子,最后给出这一层的检查思路。
数据与奖励
第一层只问一个问题:训练奖励衡量的东西,和真正想要的能力是同一件事吗?
回到开头的数学 RL 例子。前 200 步的三个监控数字摆在一起:训练奖励从 涨到 ,MATH-500 正确率始终停在 ,平均回答长度从 token 涨到 token。奖励涨了一倍多而独立评测几乎不动,说明模型学到的是更容易获得奖励的输出形式——写得更长、覆盖更多边界情况、更容易让解析器给出正向判定,目标解题能力并没有提高。
除了长度这个混杂因素,这一层还有两个常见的来源。一是模型记住了训练任务本身:题目在数据里反复出现,或者训练集和评测集有大量重叠(评测污染),奖励上升来自记忆而非泛化,独立评测自然不动。二是奖励被钻了空子:答案解析器只认某种固定格式(比如必须输出 \boxed{}),模型即使答案错了但格式全对也能得部分分;测试程序有可以绕过的漏洞(比如只检查新增测试,不检查原有测试是否被破坏),模型学会了删掉旧测试来通过验证。
这一层的检查顺着这条线展开:先检查训练样本、答案解析器、测试环境和奖励方向是否仍然对应真实目标,再检查训练集重复与评测污染。它必须最先做,因为目标信号一旦出错,后面的优化越稳定,模型反而会越稳定地偏离真实目标——优化器只是忠实地放大训练给它的信号,不会判断信号对不对。
策略变化
确认模型学的目标正确以后,再看模型本身移动得有多快。这一层的两个指标是 KL 和熵:KL 衡量当前模型与参考模型的输出分布有多远,熵表示输出分布有多分散(即模型还在多大程度上保留探索)。
先看一个两动作的直觉例子。把参考策略取成均匀分布 ,训练初期当前策略是 ——模型已经略微偏向动作 A,但还保留不少随机性。代入 KL 公式:
同一个分布的熵是 。
训练继续,假设若干步后分布集中到 ,再代一次公式,KL 变为约 ,熵变为约 。
KL 翻了一倍多:离参考模型越来越远。熵掉了一多半:探索空间越来越窄。两条曲线一起读,"策略移动过快"就有了定量含义:单位训练步内 KL 的增量过大,同时熵在加速下滑。这两个信号各自都不足以判断异常——KL 增大可能只是模型正在正常地脱离 SFT 初始分布,熵下降也可能是模型确实找到了更好的解法;只有当二者同时出现,才说明模型在远离参考分布的同时也放弃了修正的余地,后续几乎不可能再从错误模式中走出来。
真实训练里的动作是整个词表(几万到几十万个 token),两动作的例子仍然适用。词表上算出的 KL 和熵数值不同,但曲线的读法完全相同,关键看斜率。KL 曲线变陡,模型在被推离参考模型;熵曲线加速下滑,探索正在塌缩。
发现这一层异常时,要比较采样时的旧策略与更新后的新策略,检查学习率、裁剪范围、KL 约束系数,以及 rollout 经验是否已经过时(策略版本差太远,旧数据不能再用来更新新策略)。还有一个容易漏看的因素:任务过于简单时,模型也可能"合理地"很快集中到少数高奖励答案——所有题都太容易,全组全对,组内方差为零,模型很快确定唯一解法,熵自然下降。这时熵下降的原因是任务太容易,更新本身并没有过快。因此数据难度要和策略指标一起看,这正好是后面 Seed-Thinking 案例要处理的问题。
最后把两个指标的完整定义写下来,后面几节还会反复用到:
在 KL 公式里, 是当前策略的输出分布, 是参考策略,通常是 RL 开始前的 SFT 模型; 是同一个动作在两个策略下的对数概率比; 按当前策略的概率加权求和,两个分布完全相同时为 0,偏离越大值越大。
熵 是输出分布的不确定度:分布越均匀,各动作概率接近,熵越大;越集中于少数动作,熵越小。熵快速下降,说明模型正在过早停止探索,把概率集中到少数回答模式上。
数值更新
前两层都在描述模型的行为——模型在学什么、策略在往哪个方向移动。第三层看的是参数本身能不能正常更新。loss 反映当前训练目标的变化,梯度范数反映这一步准备把参数推多远。正常训练中两者都在小范围内波动;突然暴涨,或者直接变成 NaN,说明单步前向、反向或参数更新发生了数值问题。
NaN 是这一层最危险的信号,因为它会传播:一个参数变成 NaN,经过一层矩阵乘法就是一整片 NaN,几步之后整个模型报废。更麻烦的是 NaN 出现之前通常有一段"前兆期"——梯度范数持续增大、loss 出现尖刺(spike),如果前兆期没人注意,等 NaN 出现时已经来不及回滚。
定位 NaN 有一个经典技巧:固定一个 batch,关掉数据打乱,重复跑同样的前向和反向。如果 NaN 稳定复现,问题就在这个 batch 的数据或某处确定的计算路径里(比如某条样本触发除零、对数里出现负数、某个 attention score 溢出);如果随机出现,问题更可能在精度(FP8/BF16 下溢出)、算子实现或优化器状态上。之后再依次检查学习率是否过大、低精度计算是否有溢出、梯度裁剪阈值是否合适、以及异常样本(比如长度极端、重复 token 过多的样本)。
AdamW、Muon 以及各种 clipping 方法都作用在这一层:它们把梯度转换成更可控的参数更新。AdamW 按二阶矩缩放梯度,让不同参数方向的更新步长更均匀;Muon 做正交化,把更新矩阵的奇异值摊平,防止某些方向被反复放大;裁剪限制单步更新的范数,避免异常 batch 把参数推到远离当前解的位置。要清楚这些工具的边界:优化器无法修复错误奖励,无法修复损坏的数据,也无法让生成端与训练端自动使用同一模型版本。由此得到一条实用的判断规则:看到 loss spike,可以检查优化器和裁剪;看到奖励与评测分离、长度暴涨,继续更换优化器没有意义——那是第一层的问题。
训练系统
前三层都正常、训练却仍然不对劲时,最后要核对 rollout 引擎与训练引擎是否一致。这一层的麻烦在于:日志里的一切看起来都正常,loss、KL、熵都在合理范围,奖励也在涨,问题出在"记录"本身——训练用的概率不是生成那条轨迹时的概率。
一个典型的不对称:生成端使用稍早的模型版本、FP8 精度和一套为吞吐优化的推理算子(如 vLLM、SGLang 的投机解码和量化 kernel);训练端使用更新后的权重、BF16/FP32 和另一套训练算子。两边即使读取同一份参数文件,同一个 token 的 log probability 仍可能存在偏差——精度截断、kernel 实现差异、attention 计算路径不同都会带来微小的对数概率差。MoE 模型还会受到专家路由差异影响:推理引擎和训练引擎的路由实现略有不同,同一个 token 可能激活不同的专家,前向结果从根本上不一致。
我们用一个具体数字看这条偏差怎样混进梯度。假设生成端用版本 的模型采样某条轨迹,记录其中一个 token 的对数概率为 ;训练端已经更新到 ,重算同一个 token 得到 。策略梯度公式里的重要性比率为
这条数据没有任何采样随机性,比率却偏离了 1 约 17%。这份偏差来自版本差与精度差,训练日志却会把它当成策略梯度的一部分,安静地混进每一次更新——几千步累积下来,足以把策略推偏。这一层要逐项对齐模型版本、token 化方式、log probability 计算、数值精度和专家路由,确认训练日志描述的旧策略就是实际生成轨迹的策略。18.4 将继续展开权重同步和训推一致性。
加餐:快速诊断清单——四条曲线怎么读
拿到一张训练监控图,按下面顺序看,就能快速定位到层级:
先看奖励 vs 独立评测:如果训练 reward 稳步上涨但独立评测不动(或下降),且平均长度在涨 → 第一层,数据与奖励问题。检查奖励漏洞、长度混杂、评测污染。
再看 KL 和熵:如果 KL 在几百步内翻倍、熵加速下滑(比如从 2.0 掉到 0.5)→ 第二层,策略移动过快。检查学习率、KL 系数、裁剪范围;如果数据太容易也会这样,看一下组内对错比例。
看 loss 和梯度范数:如果 loss 出现 spike(比如从 1.0 跳到 10+),梯度范数暴涨,或出现 NaN → 第三层,数值更新问题。检查异常 batch、精度、梯度裁剪、优化器状态。
如果前三层都正常但效果仍然异常:检查生成端和训练端的 log probability 是否一致,同一 token 两边算出来差多少 → 第四层,训练系统问题。检查权重同步、精度对齐、MoE 路由。
一个常见误区是"从下往上修":看到 NaN 就加梯度裁剪,看到 KL 大就降学习率。当真正的问题在奖励设计上时,这些处置只会让模型更平稳地朝着有漏洞的目标优化。
公开案例
框架已经建好,再看四家公司的公开报告怎样落在四层上。四个案例分别对应四层中的典型问题,阅读时先找它解决的是哪一层的失稳信号,再看具体方法。
- GLM-4.5 / GLM-4.6:MoE 路由、多阶段训练与模式切换;失稳信号是专家负载失衡、阶段间能力回退
- Llama 4:多模态、长上下文与评测版本;失稳信号是训练分数与真实任务表现不一致
- Seed-Thinking:数据难度、课程学习与自我验证;失稳信号是奖励过稀、组内优势接近于零
- Kimi K2:优化器更新与注意力分数;失稳信号是 loss spike、梯度或注意力数值异常
GLM 与多阶段训练
GLM-4.5(智谱 AI,2025 年 7 月发布)和 GLM-4.6(2025 年 10 月发布)都采用多阶段训练。这个案例适合观察第一层和第四层的问题:MoE 架构给训练系统带来的路由稳定性约束,以及多阶段训练之间怎样防止能力回退。
先看架构给后训练带来的约束。GLM-4.5 是 MoE 模型,共有 355B 参数,每次前向只激活 32B,RL 更新时除了常规指标(奖励、KL、熵),还要关注专家负载与路由稳定性——某些专家可能被过度使用或完全闲置,总 loss 正常时仍可能出现局部专家失衡。同一模型又要同时支持 Thinking 与 Non-Thinking 双模式,学会何时展开推理、何时直接回答。训练数据因此要覆盖代码生成、工具调用和多步执行;团队公开了权重、训练方法和部分数据,为复现实验提供了入口。
GLM-4.5 的后训练分五个阶段:
Phase 1: Base 预训练(MoE 架构)
- 15T tokens 高质量数据
- MoE: 355B total / 32B active
- RoPE scaling 支持长 context
Phase 2: 通用 SFT
- 多语言对话数据
- 工具调用格式训练
Phase 3: 推理 RL
- 数学、代码、推理任务
- GRPO + 规则奖励
- Self-validation 集成
Phase 4: 通用 RLHF
- 对话质量、安全性
- Helpfulness / Harmlessness 双目标
Phase 5: Thinking / Non-Thinking 统一
- 混合数据 SFT
- 让模型学会模式切换五个阶段的顺序有明确的依赖关系:先用 SFT 建立基本的对话与工具调用行为,有了可用的初始策略,推理 RL 才能在可验证任务上得到有意义的奖励差异;正确率提上来以后,再用通用 RLHF 修正对话质量与安全性;最后用混合数据把两种回答模式统一进同一个模型。多阶段训练带来一个第一层特有的问题:阶段切换时能力回退。推理 RL 阶段数学正确率上去了,但通用 RLHF 阶段如果混入太多聊天偏好数据,数学能力可能被冲掉——这就需要跨阶段蒸馏或数据回放来保持旧能力,GLM-5 公开的 on-policy cross-stage distillation 就是处理这个问题的。
GLM-4.6 沿三个方向继续:推理长度(支持 100K+ token 的长推理轨迹)、工具范围(覆盖搜索、代码执行和文件操作等更多 Agent 工具)、模式控制(提供更细的 Thinking Budget 让用户控制推理预算),并与 GLM-4.5V 视觉模型配合做多模态协同。它在 AIME 2025、MATH-500、LiveCodeBench、GPQA Diamond 等基准上相比 GLM-4.5 均有提升。阅读这些结果时仍要结合具体评测设置,不能用单个平均分判断训练是否稳定。
从四层定位看,GLM 案例给出三条启示:第一,MoE 与推理 RL 要联合调试——除了奖励和 KL,还要监控专家负载、路由分布和跨卡通信,总 loss 正常时仍可能出现局部专家失衡(第四层)。第二,双模式需要单独评测——Thinking 模式的正确率、长度和成本不能替代 Non-Thinking 模式的响应质量,评测时必须分开看(第一层)。第三,代码与工具任务需要真实执行——静态答案分数无法覆盖环境状态、工具返回和长轨迹失败(第一层)。
Llama 4 与评测一致性
Llama 4(Meta,2025 年 4 月发布)把 MoE、原生多模态和长上下文放在同一系列中,展示了模型架构变化怎样传导到后训练数据和评测方法上。这个案例落在第一层:评测本身被污染时,训练分数会持续上升,真实使用体验却不随之改善。
系列包含三个变体:Scout(109B 总参 / 17B 激活的 MoE,10M context)、Maverick(400B 总参 / 17B 激活,1M context)和未发布的 Behemoth(2T 总参 / 288B 激活)。架构上的每个变化都会传导到训练侧。原生多模态让文本和图像 token 从预训练阶段就共同处理(Early Fusion),后训练因此要同时准备文本任务、多模态任务和跨模态一致性评测——多模态奖励必须判断回答是否真正使用了图像证据,仅靠复读题目文字的回答不能得分。全系采用 MoE,每个 token 只经过部分专家,训练系统要额外处理专家路由和通信。Scout 的 10M token 上下文依赖 iRoPE 和稀疏注意力,长上下文评测要同时检查证据检索、答案正确率和推理成本,装得下输入只是最低要求。
Llama 4 对训练稳定性讨论最重要的贡献,是公开演示了"训练分数"与"真实体验"怎样脱节。Maverick 在多个 benchmark 上分数很高,但用户实际使用时普遍感觉不如同期的 Claude 3.5 / GPT-4o,Meta 后来也承认 benchmark 评估与实际体验有差距。进一步的调查发现,LM Arena 上跑的 Maverick 是一个经过专门优化的版本,使用了 chat template 调整和 prompt engineering,开源出来的 Maverick 与 arena 版本并不相同,两个分数比较的其实是两套评测配置。
这件事正好落在第一层的"评测污染"检查项上:比较模型时必须记录权重版本、聊天模板、系统提示和采样参数,否则分数差异可能只反映配置差异,与模型能力无关。它和训练中的奖励漏洞属于同一类问题:评测配置与部署配置不一致时,评测分数就是一个有漏洞的奖励函数,在这个分数上取得的提升不代表真实能力提升。
从四层定位看,Llama 4 的工程启示有三条:MoE 需要独立的路由监控,总损失正常时仍可能出现局部专家负载失衡(第四层);Early Fusion 改变了训练样本的形态,文本与图像必须在同一任务中形成可检查的对应关系(第一层);长上下文增加了评测维度,除了能否装下输入,还要检查模型能否找到证据并控制生成成本(第一层)。
Seed-Thinking 与数据难度
Seed1.5-Thinking(字节 Seed,2025 年 4 月)把数据整理、策略优化、自我验证和课程学习组合成一条推理训练流程。它对应的失稳信号在第一层和第二层之间:奖励过稀、组内优势接近于零——整组全对或全错时,GRPO 不产生任何梯度,这一批算力没有换来任何参数更新。
回到 16.2 的结论,GRPO 的学习信号来自同组回答的奖励差异。一组 16 个回答如果全对(奖励都是 1.0)或全错(都是 0),组内标准差为零,这道题在这个批次里不产生任何梯度,16 条 rollout 的生成开销全部浪费。训练早期模型能力弱时,整组全错是常态;数据太简单时,整组全对又是浪费。两种情况都让大量算力消耗在没有学习信号的样本上。
Seed-Thinking 从四个方向处理这个问题。先看数据整理:数学数据覆盖高质量竞赛题和自动生成题,并按 base model 的通过率分级;代码数据覆盖 Codeforces、SWE-bench 和函数生成任务。按通过率分级直接服务于"组内有对有错"——太难和太易的题目都不能提供梯度,只有边界题(当前模型大约能做对 30%-70%)才有最高的学习价值。
再看策略优化的三项改进:动态 KL 在训练初期约束强、后期减弱,让模型先在参考模型附近站稳再放开探索,防止策略在还没学到有效模式时就冲飞;Adaptive clip 根据训练进度调整裁剪范围;Group size 调度在早期用大 group(比如每题 32 个 rollout,更容易采到对错混合)、后期用小 group(省计算)。这三项都作用在第二层,控制策略的移动节奏。
第三项是 Self-Verification,也是最值得展开的一个。它让模型在生成答案后做自我验证,奖励按两步行为打分:答对且验证通过记 ;答错但能识别出自己的错误记 ;答错又毫无察觉记 。对照 GRPO 的组内优势:没有中间档时,组内奖励是 ,"答错但发现了错误"和"答错且毫无察觉"受到同样的抑制;加入 0.5 档以后,"发现错误"的回答从负优势区间移到中间,检查行为本身得到部分奖励。这一档奖励同时覆盖"作答"和"检查"两个步骤,也让原来可能整组 0 分的难题出现梯度——有些模型虽然做不对,但能发现自己做错了,这些回答比"做错了还自信"的回答有价值。
最后是 Curriculum Learning,处理同一问题的另一端:训练初期模型能力弱,容易整组 。课程学习把训练数据按难度排序,先让当前模型在较容易的任务上获得有效奖励,再逐步增加难度,减少优势信号接近于零的情况。难度排序的依据是当前模型的通过率,因此课程本身要随模型能力变化而更新:上一阶段的边界题在下一阶段可能已经变成全对题。
从四层定位看,Seed-Thinking 同时触及第一层和第二层:数据难度分级和课程学习解决第一层的"奖励稀疏"问题(让更多样本产生有效梯度);动态 KL、自适应裁剪和 Self-Verification 解决第二层的策略控制问题(让探索和利用的节奏合适)。它在 AIME 2024、MATH-500、GPQA Diamond 和 Codeforces 上取得较高结果。产品部署还需要继续检查回答长度、推理延迟和通用能力回归,这又回到第一层的检查项。
Kimi K2 与异常更新限制
Kimi K2(Moonshot,2025 年 7 月)对应的失稳信号在第三层:loss spike、梯度或注意力数值异常。它同时使用两个工具,MuonClip 作用于参数更新,QK-clip 作用于注意力分数——两个工具都在第三层,但卡住的位置不同。
先看底层的 Muon(2025 年 2 月提出)。它是一个动量正交化优化器,做了两件事:累积连续更新中的方向信息(Momentum),并对更新矩阵进行正交化处理(Orthogonalization)。普通 SGD 或 Adam 沿梯度方向更新,但梯度矩阵的奇异值分布往往很不均匀,少数方向的分量远大于其余方向,连续几千步累积下来,参数会沿这些方向被过度推远。正交化重新调整更新矩阵的奇异值,把各方向的更新幅度拉平,限制某些方向被过度放大。
MuonClip 在这之上再加一道限制:正交化之后计算更新矩阵的范数,若超过阈值则按比例缩放,防止异常 batch 对参数造成突变。它管的是"这一步推多远",异常 batch 的来源(坏数据、坏奖励)仍要靠第一层的检查处理:数据里有一条让梯度爆炸的坏样本时,MuonClip 只会把爆炸后的更新缩回来,不会指出是哪条样本。因此它仍需与学习率调度、梯度监控和数据检查一起使用。
QK-clip 处理的是另一个位置的异常:注意力分数。长上下文中的注意力分数 可能持续增大——当 query 和 key 的范数变大时,点积可以增长到几十甚至上百,进入 Softmax 后会让概率过度集中到少数 token,梯度变得极小或极大,并放大低精度计算中的数值误差。QK-clip 直接限制注意力中 的取值范围,在进入 Softmax 前 clamp 到 ,从注意力计算这一层减少异常值。这不是一个策略层面的改动,纯粹是数值安全措施。
公开结果显示,这套组合让 loss spike 从平均每 1T tokens 一次降低到每 10T tokens 一次,训练速度相较 Adam 提高约 15%。这个案例的方法论价值在于示范了"稳定性工具要对应到具体故障层级":MuonClip 限制参数更新层的异常更新范数,QK-clip 限制注意力计算层的极端注意力分数,训练日志需要分别记录更新范数与注意力统计,才能判断是哪一层起作用。如果把 QK-clip 用到第一层问题(奖励有漏洞)上,它不会帮任何忙——注意力分数再正常,模型也在稳定地钻空子。
资料来源
看完四个案例,下面把各家公开的"稳定训练方法"放回四层框架里。它们并不都作用在同一个位置,读论文时先确认层级,再判断能否组合使用。
稳定性方法的作用层级
各家公开的方法名很多——GRPO、GSPO、DAPO、CISPO、VAPO、MuonClip——它们解决的问题并不相同。按四层分类:
- 第一层(数据与奖励):DAPO 的 Dynamic Sampling(过滤全对全错组)、Overlong Reward Shaping(处理截断样本);VAPO 的 Length-Adaptive GAE(长短响应奖励尺度归一化);Seed-Thinking 的 Self-Verification(部分奖励增加梯度密度);Skywork-OR1 的 entropy 监控(防止过早塌缩);MiMo 的 test-difficulty-driven reward(按测试难度给细粒度奖励)
- 第二层(策略变化):GRPO/GSPO 的组内相对优势与 KL 约束;DAPO 的 Clip-Higher(不对称裁剪给探索留空间)、Token-Level Policy Gradient(防止长序列信号稀释);MiniMax-M1 的 CISPO(裁剪重要性采样权重而非 token 更新);Hunyuan-T1 的课程学习与策略重置;DeepSeek-R1 的多阶段分域 RL
- 第三层(数值更新):MuonClip(更新矩阵范数裁剪);QK-clip(注意力分数裁剪);梯度裁剪;精度切换(混合精度训练);优化器状态监控
- 第四层(训练系统):GLM-5/SAO 的异步 RL 与版本标记;LongCat DORA 的全异步流式训练;训推 log probability 对齐;MoE 路由一致性;权重同步与检查点管理
比较方案时要先确认它解决的层级,再判断能否组合使用:两个都作用于策略层的方案(比如两种不同的 clip 策略)可能互相冲突,一个策略层加一个数值层的方案才经常互补。一个常见误区是"工具越多越稳定"——如果奖励本身有漏洞,堆再多优化器和裁剪也只是让模型更稳定地钻空子。
加餐:怎样快速判断一个稳定性方法作用在哪一层
拿到一个新的"稳定训练技巧",不用先读公式,问三个问题就能定位层级:
- 它改了 reward 或数据吗? 比如改了奖励函数、加了数据筛选、变了采样方式 → 第一层或第二层。
- 它改了梯度或参数更新方式吗? 比如新的优化器、梯度裁剪、attention 截断 → 第三层。
- 它改了分布式或训推一致性吗? 比如新的同步方式、版本检查、权重对齐 → 第四层。
如果一个方法同时改多个层(比如 DAPO 既改了数据采样又改了 clip),分开看每个组件属于哪层,不要被一个算法名绑住。
规模化训练的额外检查项
四层框架覆盖单次训练的故障定位;规模继续扩大时,每一层都会长出新的检查项。
超大模型与长上下文
模型总参数和每次激活参数继续增加,MoE 路由与跨卡通信本身会成为稳定性指标的一部分——专家负载不均衡不只是效率问题,持续的偏路由还会导致部分专家训练不足、部分专家过拟合,表现为特定类型任务上能力突然退化。10M+ token 上下文要求训练同时控制显存、注意力数值和长轨迹成本——attention score 在极端长度下更容易溢出,KV cache 的精度管理也要单独监控。优化器裁剪仍然只能处理参数更新,其余问题要配合数据、奖励与系统监控一起解决。
原生多模态 RL
文本、图像和环境动作进入同一条训练轨迹,奖励也要检查跨模态证据:回答是否真的用了图像里的信息,还是只靠文本先验在猜。Llama 4 的 Early Fusion 展示了从预训练阶段统一模态的一种方案;多模态 RL 还需要可重放的图像、视频与交互环境,否则失败轨迹无法定位到具体模态——是看错了图,还是推理错了,还是工具调用错了?这三者的修复方式完全不同。
Agentic RL 工业化
训练任务从软件工程扩展到客服、研究和计算机操作;Agent 轨迹需要记录工具参数、环境返回、文件系统快照和中间状态;长短不一的轨迹增加了环境调度、故障恢复和异步训练成本。这一段对应的检查项大多落在第四层:环境与训练引擎之间的版本和状态一致性。沙箱从 Docker 容器扩展到浏览器、移动端、桌面 GUI 后,环境本身的失败率上升(依赖装不上、页面加载超时、工具崩溃),rollout 失败率本身也变成了需要监控的稳定性指标。
训练成本与效率权衡
训练成本由预训练、数据生成、Rollout、模型更新和评测共同组成。更高的生成吞吐(如 PD 解耦、投机解码)、更小的激活参数(MoE)和更准确的数据筛选(把算力集中在边界题而非全对全错题)可以减少无效计算。异步训练(如 GLM SAO、LongCat DORA)通过解耦生成和训练减少 GPU 闲置,但会引入版本不一致的问题,需要额外的数据版本管理。对小团队而言,先在可验证的小型任务上复现完整四层监控,再决定是否扩大模型和集群规模,是比直接堆算力更稳妥的路径。
本节小结
训练稳定性需要同时观察数据与奖励、策略变化、数值更新和训练系统,排查也按这个因果顺序进行:先确认训练目标可信,再看 KL 与熵是否异常,然后检查 loss、梯度和优化器,最后核对生成端与训练端的模型版本和概率。本节要点:
- 四层因果链:数据与奖励 → 策略变化 → 数值更新 → 训练系统;奖励与独立评测分离、长度翻倍,是第一层最典型的失稳信号;NaN 和梯度爆炸是第三层;两端 log probability 不一致是第四层。
- 策略指标读法:分布从 集中到 时,KL 从 0.19 升到 0.49、熵从 0.50 降到 0.20,"移动过快"就是这两条斜率;数据太容易也会让熵下降,要与难度一起读。
- 优化器的边界:AdamW、Muon、各种 clipping 只把梯度转成更可控的更新;loss spike 和数值异常归它们管,奖励与评测分离不归它们管——换优化器修不了奖励漏洞。
- 版本一致性:两端 log probability 差 0.19 时,即使数据无随机性,重要性比率也会偏离 1 约 17%。这是系统层偏差,不是策略梯度;训推精度、算子和 MoE 路由都要对齐。
- 案例与方法的层级归属:GLM 看 MoE 路由与多阶段回退(第一、四层),Llama 4 看评测版本污染(第一层),Seed 看数据难度与自验证奖励(第一、二层),Kimi K2 看更新范数与注意力分数(第三层);各家公开方法分别落在不同层级,比较时先确认层级再谈组合。
18.4 分布式 RL 训练 将继续展开最后一层问题:当生成、奖励和训练分布在多张 GPU 上时,系统怎样保证数据与模型版本正确流动。