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 | |
实验结果
主结果:六基准全对比
| 方法 | 数学 | 代码 | 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 分本身,而是它把一个模糊的”多教师蒸馏不好做”的工程体感,拆解成了三个可定位、可量化、可正交修复的机制性病因。尤其是两个反直觉结论:
- 梯度冲突不是瓶颈——教师分歧实测只有 0.126 nat,mask 高分歧 token 反而掉分。社区长期把多教师蒸馏的困难归因于”教师打架”,这条诊断直接推翻了这个默认假设,把注意力导向预算分配。
- 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 预算没分对;按”长度-收敛-陈旧”三个正交来源各下一剂药,一个学生就能逼近路由集成上界。
参考文献
- Open-MOPD: Diagnosing and Fixing Capability Imbalance in Multi-Teacher On-Policy Distillation(arXiv 2608.19098)
- 项目主页:https://bytedtsinghua-sia.github.io/Open-MOPD/
- On-Policy Distillation 综述(arXiv 2604.00626)
- PowerOPD:用有界幂变换稳定 On-Policy Distillation
论文作者: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)
点赞与评论
喜欢这篇文章?点个赞,或留下你的想法。登录 GitHub 后即可参与。
如果评论无法加载,请检查网络连接后刷新页面。