MoE RL 训练不稳定性再思考:训推不一致,还是采样噪声?

来自快手的 KAT-Coder-V1 Pro 重磅升级,揭秘强化学习训练稳定性关键因素 - KwaiPilot[1],直接给出了让人惊讶的发现:

RL 训练不稳定的主导因素并不是训推不一致,而是采样噪声本身

他们发现,当显式抑制噪声强度后,即使存在明显的训推差异,训练依旧保持稳定,并能获得更快的收敛速度。

这可真是——玄之又玄啊。

重要性采样

off-policy 下,

J(θ)=Eaπrollout [R(a)πtrain (a)πrollout (a)θlogπtrain (a)]\nabla J(\theta)=\mathbb{E}_{a \sim \pi_{\text {rollout }}}\left[R(a) \frac{\pi_{\text {train }}(a)}{\pi_{\text {rollout }}(a)} \nabla_\theta \log \pi_{\text {train }}(a)\right]

理论上,两个 π 应该是策略的真实动作概率分布,不过实际我们只能得到观测值:

π^rollout | train=πrollout | train+ϵ\hat{\pi}_{\text{rollout | train}} = \pi_{\text{rollout | train}} + \epsilon

噪声由数值精度、并行原子操作、kernel 选择的不确定性等因素共同导致。这个重要性采样系数的比值其实包含了额外的方差,采样噪声 ϵ 成为 RL 训练不稳定的主要来源之一

对 rollout 和 train 两个策略输出 logprob 统计如下:

为了降低采样噪声,主流 RL 方法都会在 rollout 后用训练引擎重新计算一次 logprob,这个 π_recompute 会作为重要性采样系数的分母,对 dense 模型来说,方差为 0。但 MoE 模型上不行!这也是《稳定压倒一切:MoE RL 训推不一致问题及解决策略 | 长琴[2]》中提到的,当时根本就没有提重算 logprob,就是因为重算也没用,因为路由关系,策略分布都(偷偷地)变了。

也就是说,在 Dense 模型中,使用训练引擎重新计算 logprob 是一种有效的降噪手段;但在 MoE 模型中,由于路由路径在训推阶段发生变化,recompute logprob 不再是对 rollout policy 的无偏估计,而是引入了系统性的 off-policy 偏差,因此无法从根本上解决 RL 训练的不稳定性。

进而就是说,MoE 模型的路由选择会让偏差和方差(尤其是 rollout)增大,而偏差的增大会随着训练累计,导致训练崩溃。因此,MoE RL 稳定训练的关键是:如何获得一个偏差和方差都尽可能小的 rollout 估计器

其实这里我是有问题的:偏差应该是训练和推理策略之间的偏差,不能只考虑 rollout 呀,所以上面的描述应该是不太准确的。

策略方案

真是够简单,多次采样平均估计:

π^rollout =1ni=1nπinference (i)\hat{\pi}_{\text {rollout }}=\frac{1}{n} \sum_{i=1}^n \pi_{\text {inference }}^{(i)}

优点:

  • 不依赖 routing replay,无需复杂缓存机制。
  • 无需使用训练引擎重算 π_recompute
  • 异步框架下,多次采样与 rollout 时间重叠,且 KV-Cache 命中率接近 100%。

重新审视已有方案:

  • R3:在大规模 agentic 场景下难以保证 prefix cache 始终命中。
  • TIS:表面上缓解方差爆炸问题,而且对截断上下界的选取十分敏感。
  • 确定性推理:从 infra 层消除噪声,推理端在相同输入下输出完全一致的 logits 与 logprob,同时保证训练和推理 logprob 的比特级一致。

效果如下:

看起来相当不错。但是,如我们前面所言,这其实只是降低了推理估计器的方差,并没有降低训推不一致带来的偏差。也就是说,它解决的是“rollout 估计器的方差问题”,而不是“策略不一致问题”。

原因猜想

那为什么还有效果呢?

最直接的答案:多次 inference 平均 ≈ routing 平均,路由的熵很低,Top-1 expert 几乎确定,MoE 几乎退化为 Dense!

也就是说,这里平均的不是噪声,而是“不同策略实例”。

换句话说,MoE 本来使用的是条件策略:π(a | x,e*),多次平均后估计的是边缘 policy(对隐变量做边缘化):π(a | x)

回到本文前面的假设——采样噪声(和训推不一致其实是正交的),在这里其实是“路由抖动”的工程表现。而本文针对这个噪声的解决方案本质上是在工程实践中通过“暴力平均”抹平了由于计算扰动带来的路由抖动。工程上虽然“能 work”,但并没有理论保证。

另外,虽然训推不一致和采样噪声看起来正交,但本文的策略其实很难与我们在《稳定压倒一切:MoE RL 训推不一致问题及解决策略 | 长琴[2]》中的策略一起使用,因为多次平均这个操作已经在重新定义行为策略(平均出了一个新的 policy)。而在前文中,我们假设 policy 已经定义清楚,rollout 分布是固定的。

小结

KAT 的工作指出,RL 训练不稳定在工程上往往首先表现为采样噪声主导,而非单纯的训推不一致;通过多次 inference 平均,可以显著降低 rollout 估计器的方差,从而稳定训练。然而,在 MoE 场景下,这种做法本质上是对路由隐变量做边缘化,等价于重新定义了行为策略,而非真正消除了训推策略之间的偏差。因此,它更像是一种“工程降噪”的有效技巧,而不是从理论上解决 MoE RL 中的 off-policy 不一致问题,稳定性的根本挑战依然存在。

Reference

[1] KAT-Coder-V1 Pro 重磅升级,揭秘强化学习训练稳定性关键因素 - KwaiPilot: https://kwaikat.github.io/kwaikat-blog/posts/katcoder_1201/
[2] 稳定压倒一切:MoE RL 训推不一致问题及解决策略 | 长琴: https://yam.gift/2026/01/17/NLP/LLM-Training/2026-01-17-RL-MoE-Stable/