Open-MOPD:诊断并修复多教师 On-Policy 蒸馏中的能力失衡

多教师 On-Policy Distillation(M-OPD)想把多个领域专精的 RL 教师融进一个通才学生模型,听起来很美,但实践中往往”融着融着就把某个领域能力融没了”。来自清华大学 AIR SIA-Lab 与 ByteDance Seed 的团队首次系统诊断了这一病理:标准 M-OPD 只能恢复 35.6% 的可用 headroom,而问题根本不在人们惯常怀疑的”梯度冲突”,而在 token 级优化预算的严重错配。

他们提出的 Open-MOPD 用三个机制把 headroom 恢复率从 35.6% 拉到 83.4%,将单学生与”领域路由集成”的差距从 3.50 分压到 0.31 分。更难得的是,整套 pipeline 跑在单台 8×A100-80GB 上,训练轨迹、recipe、评测套件全部开源(CC BY-SA 4.0)。


背景:M-OPD 与”能力集成鸿沟”

单领域 On-Policy Distillation 已经是 Qwen3、MiMo、GLM-5 等主流模型后训练的标配(参见 On-Policy Distillation 综述)。但工业界真正想要的是把多个领域专精教师(数学、代码、IF)合并进一个可部署学生——这就是 Multi-Teacher OPD。

论文用一个干净的控制实验来暴露问题。他们在 SmolLM3-3B-Base(3B、64K 上下文)上构建了三阶段 pipeline:

阶段 做什么 产物
Stage I 三域混合 SFT(OpenR1-Math-93k / OCR-50k / Instruction-Nemotron) π_mixed_sft
Stage II 从 π_mixed_sft 分叉,每域独立 RL 训练教师(DAPO-Math-17k / DeepScaler-24k / Nemotron-IF-RL-46k) π_{φ_math}, π_{φ_code}, π_{φ_IF}
Stage III 三教师冻结,联合训练一个共享学生 Open-MOPD 学生

关键设计是 oracle routing(硬路由):每个训练/评测样本都带已知领域标签 \(d(x)\),直接选对应领域的冻结教师。这把”路由歧义”从研究中剥离出去——这样测出来的差距,纯粹来自能力集成本身,而不是路由器没学好。

评测覆盖六个基准:AIME24/AIME25(数学,mean@64)、LiveCodeBench v5/v6(代码,mean@10)、IFEval/IFBench(IF,mean@1),总分取三域宏观平均。

然后定义两条上界参考线

  • RouteRL:每个评测样本路由到对应域的 RL 专家——这不是”一个学生”,是上界,recovery 记为 100%。
  • RouteOPD:路由到对应域的 OPD 学生,recovery 88.0%。

朴素 M-OPD(一个共享学生、三教师联合 OPD)只能拿到 28.05 分 / 35.6% recovery。这就是”能力集成鸿沟”——把多个专家揉进一个学生,损失掉的那一大块。


诊断:不是梯度冲突,是预算错配

面对”多教师为什么融不好”,社区第一反应总是”教师之间梯度打架”。论文先用一个反直觉的实验把这个假设否掉了。

教师冲突不是瓶颈

用逐 token 的教师分歧度衡量:

\[c_t = \max_{d \in \mathcal{D}} \log \pi_{\phi_d}(y_t | x, y_{<t}) - \min_{d \in \mathcal{D}} \log \pi_{\phi_d}(y_t | x, y_{<t})\]

实测均值只有 0.126 nat,整个 300 步训练里都没超过 0.27 nat;只有 0.62% 的 token 超过 1 nat(IF 上 3.9%,数学上仅 0.31%)。更决定性的是:把这些高分歧 token mask 掉、或者换成教师共识目标,总分反而掉了 0.52–0.83 分

结论:token 级教师分歧是可测的,但不是瓶颈。真正的病根在别处。

病根:token 级优化预算的错配

论文的真正洞察是:M-OPD 的失败不来自梯度方向冲突,而来自每个领域实际拿到的”优化预算”严重失衡。而这个失衡由三个正交因素叠加造成。

先看 M-OPD 的目标。对学生采样的轨迹 \(y \sim \pi_\theta(\cdot|x)\),路由到教师 \(\pi_{\phi_{d(x)}}\),在每个位置取学生 top-k(默认 \(k=16\))token 集 \(S_t\),构造逐 token 密集奖励(无 critic,直接进 PPO advantage 槽):

\[S_t = \text{TopK}_k\big(\pi_\theta(\cdot | x, y_{<t})\big)\]

\[\delta_t(v) = \text{sg}\big[\log \pi_{\phi_{d(x)}}(v | x, y_{<t}) - \log \pi_\theta(v | x, y_{<t})\big]\]

\[r_t(v) = \delta_t(v) \cdot \tilde{\pi}_\theta(v | x, y_{<t}), \quad \tilde{\pi}_\theta(v) = \text{softmax}_{u \in S_t}\big[\log \pi_\theta(u)\big](v)\]

\[r_t = \sum_{v \in S_t} r_t(v)\]

关键性质:学生生成每条响应,监督分布跟随学生当前策略——这正是 OPD 区别于离线 SFT 的核心。也正是这个”跟随学生”的特性,引出了下面的失衡。


三个正交的失衡来源

来源一:结构性序列长度差异

三域响应长度天差地别。数学和代码平均约 10,500 token,IF 只有约 409 token——相差 25 倍以上。

领域的原始 token 份额为:

\[s_d^{\text{tok}} = \frac{n_d \cdot L_d}{\sum_j n_j \cdot L_j}\]

实测:prompt 份额是 39.8% / 39.8% / 20.3%(数学/代码/IF),但 token 份额却是 49.7% / 49.3% / 0.99%。IF 在全部 300 步里从未超过 1.65%、从未低于 0.44%。

核心洞察:prompt 频率不决定每个领域在梯度 token 中的份额。

如果只按 prompt 数量均衡采样,IF 域几乎拿不到梯度信号。要让 IF 拿到 1/3 的 token 预算,需要对 IF 做 33.6 倍的 prompt 过采样——这在数据效率和训练成本上都不现实。

来源二:非均匀学习率下的收敛漂移

即使把 token 份额强行拉平(每域 1/3),预算还是会漂移。因为每个领域关闭教师-学生差距的速度不同。

一个领域的实际更新预算近似为:

\[B_d \propto s_d^{\text{tok}} \cdot \bar{m}_d, \quad \bar{m}_d = \mathbb{E}_{t \in d}[|r_t|]\]

即 token 份额乘以平均绝对奖励。\(\bar{m}_d\) 是”剩余教师-学生差距”的运行度量。

训练初期,\(\bar{m}_d\) 分别是 0.019(数学)/ 0.063(代码)/ 0.091(IF)——最大是最小的 4.9 倍。IF 起始差距最大(因为最短、SFT 后提升空间大),所以初始预算占比最高。但三域收缩速度不同:IF 缩 2.4 倍、数学 2.1 倍、代码 1.9 倍。

后果触目惊心:当 \(s_d^{\text{tok}}\) 固定为 1/3 时,25 步内 IF 的预算份额从 48.7% 暴跌到 ~9%(最终 11.4%),代码则从 39.6% 涨到 63.8%

也就是说:即便名义上”给了每域 1/3 token”,IF 也会因为奖励衰减太快而迅速被代码挤出预算——哪怕它按其他域的剩余差距衡量仍有大量学习可做。

来源三:异步策略更新带来的多步奖励陈旧

要把三域 rollout 进一个大 mixed-domain batch 来估、再切分成 \(K\) 个 PPO minibatch 内更新。轨迹采样时是 on-policy 的,但第一次内更新之后学生策略变了、冻结教师没变。于是用”rollout 时刻学生概率”算出的密集奖励,和当前策略对不上了。

论文用 KL(rollout ‖ current) 量化策略漂移:

K(内更新数) KL(rollout ‖ current) PPO clip token 占比
1 0 0
4 0.059 中等
32 0.216 0.86

\(K=32\) 时,86% 的 token 被裁剪——奖励信号(依赖师生 log-prob 之差)在内更新间越来越不准,梯度估计质量崩塌。

这三个来源是正交的:长度差异是结构性的、收敛漂移是动态的、奖励陈旧是算法机制性的。朴素 M-OPD 同时踩中三坑,于是 IF 域尤其惨——朴素 M-OPD 在 IF 上比 RouteOPD 低 6.16 分,而数学只低 1.89 分,IF 的退化是数学的 3.3 倍


Open-MOPD:三个机制对症下药

针对上面三个来源,Open-MOPD 给出三个机制,且一一对应、正交叠加

机制一:Token-Share Balancing(治来源一)

让每个领域拿到相等的 token 级优化预算,与响应长度无关。对领域 \(d\),设 \(s_d\) 为当前 batch 中该域响应 token 占比,取目标预算 \(g_d^*\)\(\sum g_d^* = 1\),主 recipe 用 \((1/3, 1/3, 1/3)\)无需语料调参):

\[w_d^{\text{share}} = \frac{g_d^*}{s_d^{\text{tok}}}\]

加权后,每域恰好拿到 \(g_d^*\) 的 token 预算。实测主 recipe 下权重为 0.69(数学)/ 0.66(代码)/ 32.7(IF)——每个 IF token 被放大约 48 倍,正好补偿它 25 倍的长度劣势。

机制二:Gap-Aware Dynamic Budget Allocation(治来源二)

把预算动态再分配给”还有显著差距要关闭”的领域。用 \(\bar{m}_d\) 的 EMA 作剩余差距度量,引入 gap-following 因子:

\[\tilde{w}_d = w_d^{\text{share}} \cdot \text{Clamp}\Big((m_d / m_{\text{ref}})^\alpha,\ 0.05,\ 20\Big)\]

\[w_d^{\text{gap}} = \tilde{w}_d \Big/ \Big(\sum_j \tilde{w}_j \cdot s_j^{\text{tok}}\Big)\]

其中 \(m_{\text{ref}}\) 是当前 batch 各域 \(m_d\) 的均值,\(\alpha\) 控制 gap-following 强度,clamp 防止单域权重爆炸,归一化保证总 batch-loss 尺度不变。\(\alpha > 0\) 时差距大的域拿更多预算;随着某域差距收缩、\(m_d\) 下降,其预算份额自动回落,转向剩余差距更大的域。

论文还给了反向验证:取 \(\alpha < 0\)(反归一化)会形成不稳定正反馈——IF 权重从 26.7 飙到 90.7,代码权重从 0.44 跌到 0.27,训练在第 74 步崩掉。这反向印证了正向 gap-following 的必要性。

机制三:Reward Refresh(治来源三)

消除 PPO 内更新间的奖励陈旧。每次内更新 \(k\) 前,用当前学生策略重算 token 级奖励

\[\delta_t^{(k)}(v) = \text{sg}\big[\log \pi_{\phi_{d(x)}}(v | x, y_{<t}) - \log \pi_\theta^{(k)}(v | x, y_{<t})\big]\]

\[r_t^{(k)}(v) = \delta_t^{(k)}(v) \cdot \tilde{\pi}_\theta^{(k)}(v | x, y_{<t}), \quad v \in S_t,\ k = 0, \ldots, K-1\]

教师 log-prob 每次 rollout 只算一次并缓存;学生 log-prob 复用 PPO actor 已有的前向。Reward refresh 不增加额外学生前向、不增加额外教师前向——dense-reward 计算开销从 2.12% 降到 2.10%(一次 outer step 占比)。\(K=1\) 时它自然退化为基线目标。

完整算法

1
2
3
4
5
6
7
8
9
10
11
输入: 领域混合采样器, 学生 π_θ, 教师 {π_{φ_d}}, 内更新数 K
1: for each training step t do
2: 从 π_θ 采样 rollout batch R_t, 按 prompt 领域标签路由
3: 计算教师 log-prob(每次 rollout 一次 prefill,缓存)
4: 计算 s_d^tok 与 w_d^share (Eq. 8)
5: 更新奖励均值 m_d, 计算 gap 权重 w_d (Eq. 9)
6: for k = 0,...,K−1 do
7: 重算学生 log-prob, 刷新 r_t^(k) (Eq. 10)
8: 用 w_d · r_t^(k) 做 PPO 更新 θ
9: end for
10: end for

实验结果

主结果:六基准全对比

方法 数学 代码 IF 总分 Recovery
SmolLM3-3B-Base 1.90 4.79 14.54 7.08
MixSFT e4 17.95 17.60 41.46 25.67
RouteRL(上界) 24.24 21.73 51.08 32.35 100%
RouteOPD 23.15 21.71 49.80 31.55 88.0%
RFT 23.44 19.21 36.87 26.51 12.6%
MixRL 21.64 18.78 46.45 28.96 49.3%
ParamMerge-Avg 19.95 19.79 43.86 27.87 32.9%
ParamMerge-TA 22.34 22.44 46.60 30.46 71.7%
Naive M-OPD 21.26 19.26 43.64 28.05 35.6%
Open-MOPD 22.42 21.73 49.58 31.24 83.4%

Recovery = (该行总分 − SFT) / (RouteRL − SFT),以 MixSFT e4 为 SFT 基线。

几个值得注意的点:

  • 朴素 M-OPD 其实不如 MixRL 和 ParamMerge-TA——说明”多教师联训”本身没有自带优势,不做诊断修正时甚至会被更朴素的参数平均反超。这正解释了为何社区长期缺可复现 recipe。
  • Open-MOPD 把总分从 28.05 提到 31.24(+3.19),recovery 从 35.6% 提到 83.4%。
  • 相对 RouteOPD(31.55)的集成鸿沟,从 Naive 的 3.50 分 压到 Open-MOPD 的 0.31 分——几乎追平了”路由到专门学生”的上界。
  • 每域看,IF 提升最猛(43.64 → 49.58,+5.94),这与”IF 受失衡毒害最深”的诊断完全自洽。

消融:三机制一一对应、正交叠加

配置 Share Gap Refresh K 总分 Δ
Naive M-OPD 1 28.05
+ token-share 1 29.22 +1.17
+ gap-following 1 29.94 +1.89
Naive M-OPD(对照) 4 29.28 +1.23
+ share + gap 4 30.43 +2.38
Open-MOPD 4 31.24 +3.19

读这张表的方式:

  • token-share 的 +1.17 几乎全部来自 IF(43.64→47.53),数学和代码几乎不动——因为它治的就是”IF 被长度劣势饿死”。
  • gap-following 再加 +0.72,主要也落在 IF(47.53→49.50)。实测中代码预算被 gap 分配拿到平均 55.4%、峰值 87.6%;数学从 15.1% 涨到 32.6%,IF 从 34.5% 降到 17.1%——动态再分配确实把预算从”已经快学完的 IF”挪给了”还有差距的代码/数学”。
  • reward refresh 在 K=4 时再加 +0.81,而且零额外运行时。它正是为了支撑更大 \(K\)(更高效利用每次 rollout)而存在:没有 refresh 时加大 \(K\) 反而会因奖励陈旧而伤害训练。

三个机制的增益彼此正交、各司其源,这与”三个失衡来源正交”的诊断闭环对应。

基座选择的合理性

论文特意解释了为何选 SmolLM3-3B-Base 而非更小/更大模型:诊断必须排除”上下文截断”这个混淆因素。

  • Qwen3-1.7B-Base:AIME24 仅 7.08%,即便给到 31K 预算,截断率仍高达 69–80%——截断会污染诊断。
  • Qwen2.5-7B-Base:AIME24 达 31.25%、截断 12.92%,但成本远高。
  • SmolLM3-3B-Base:在”单台 8×A100-80GB 可跑”和”容量足以闭合长推理轨迹、不让截断主导结果”之间取了平衡点。

这个选型本身也是论文方法论的一部分:做机制诊断,先保证基座不会因为容量不足而把现象归因错。


我的解读

这篇论文真正值钱的是什么

不是 +3.19 分本身,而是它把一个模糊的”多教师蒸馏不好做”的工程体感,拆解成了三个可定位、可量化、可正交修复的机制性病因。尤其是两个反直觉结论:

  1. 梯度冲突不是瓶颈——教师分歧实测只有 0.126 nat,mask 高分歧 token 反而掉分。社区长期把多教师蒸馏的困难归因于”教师打架”,这条诊断直接推翻了这个默认假设,把注意力导向预算分配。
  2. prompt 频率 ≠ 梯度 token 份额——IF 只占 0.99% 的 token 却占 20.3% 的 prompt。这个 25 倍的长度落差,是任何”按 prompt 数量均衡采样”的 pipeline 都会踩的坑,但之前没人系统量化过。

与本博客其他 OPD 工作的关系

Open-MOPD 处理的是多教师场景的预算分配,和单教师场景的方差/稳定性工作正交互补:

  • PowerOPD 治的是单教师 log-ratio 奖励的无界性导致的梯度方差爆炸——用 Box-Cox 幂变换内建有界性。
  • SAO 治的是单 rollout 异步优化的效率问题。
  • Open-MOPD 治的是多教师 token 级预算的错配——三个失衡来源。

三者放在同一张 OPD 诊断地图上:PowerOPD 管”奖励本身的数值稳定性”,Open-MOPD 管”多域预算怎么分”,SAO 管”rollout 怎么省”。它们不冲突,理论上可以叠加。

值得注意的一个细节:Open-MOPD 的 reward refresh 其实和”异步策略更新导致奖励陈旧”这条病因,本质上和 SAO 关心的”on-policy 约束在多步内更新下被破坏”是同一类问题——只要 \(K>1\),on-policy 的前提就在自我违背。Open-MOPD 选择了”重算奖励”这个低成本修补(零额外前向),而非 SAO 那种更彻底的单 rollout 重构,因为它的瓶颈在预算不在效率。

一个值得追问的点

Open-MOPD 的 oracle routing 把路由歧义完全剥离了——这是干净诊断的必要前提,但也意味着真实部署还得自己解决路由。论文证明了”能力集成本身可以做到 83.4%“,但没告诉你怎么在没有领域标签的开放输入上选教师。把 Open-MOPD 的预算平衡机制和一个学出来的路由器叠在一起,会不会重新引入新的失衡?这是个自然的后续方向。另外 \(g^* = (1/3, 1/3, 1/3)\) 是”无调参”的代价——如果下游对某域有非平等偏好,这个目标预算该怎么定,论文没有展开。


小结

Open-MOPD 的核心贡献是把”多教师蒸馏融不好”从一句工程抱怨,变成了三个正交、可量化、可对症修复的机制性病因

  • 结构性长度差异 → token-share balancing,让每域拿到平等 token 预算
  • 收敛漂移 → gap-aware 动态预算,把预算挪给还有差距的域
  • 奖励陈旧 → reward refresh,每次内更新重算奖励、零额外前向

三机制各治一源、正交叠加,把 headroom 恢复率从 35.6% 提到 83.4%,把与路由上界的差距从 3.50 分压到 0.31 分。更难得的是整条 pipeline 跑在单台 8×A100 上、轨迹和评测全开源——给后续多教师蒸馏研究留下了一个可复现的诊断基准

一句话总结:多教师蒸馏的瓶颈不是教师打架,是 token 预算没分对;按”长度-收敛-陈旧”三个正交来源各下一剂药,一个学生就能逼近路由集成上界。


参考文献


论文作者:Huan-ang Gao, Haohan Chi, Yong Yan, Shiyuan Feng, Hanlin Wu, Zheng Jiang, Bingxiang He, Wei-Ying Ma, Ya-Qin Zhang, Hao Zhou(清华大学 AIR SIA-Lab & ByteDance Seed)


Open-MOPD:诊断并修复多教师 On-Policy 蒸馏中的能力失衡
https://kissshhot.github.io/2026/08/20/open-mopd-capability-imbalance/
作者
丁一帆
发布于
2026年8月20日
许可协议

点赞与评论

喜欢这篇文章?点个赞,或留下你的想法。登录 GitHub 后即可参与。

如果评论无法加载,请检查网络连接后刷新页面。