从 SFT、RL 到 On-Policy Distillation:后训练的第三种范式

从 SFT 与 GRPO 的局限出发,为什么 OPD 成为 Qwen3、DeepSeek-V4、MiMo-V2-Flash、Kimi K3 与 GLM-5 的共同选择

English 中文

自 DeepSeek-R1 发布以来,GRPO 成为了 post-training 的默认选项,“SFT + RL"的范式几乎写进了每一份技术报告。然而,从 2025 年的 Qwen3 开始,各家旗舰模型中不约而同地在主线上引入了同一种方法——On-Policy Distillation(OPD)。

最早把它写进旗舰报告的是 Qwen3。它的用法是 strong-to-weak distillation:旗舰模型照常走完四阶段 post-training;而 0.6B 到 14B 的轻量模型则不再各自重跑一遍上述过程,而是改为从 Qwen3-32B 或 Qwen3-235B-A22B 蒸馏。报告中提到这样做在性能更高的同时,只消耗了四阶段训练约 1/10 的 GPU 时数。

半年后,小米的 MiMo-V2-Flash 在报告中把它命名为 MOPD (Multi-Teacher On-Policy Distillation),并明确定位为一种 post-training 范式。它的 post-training 明确划分为三个阶段:通用 SFT、用 RL 或 SFT 分别训出各领域 teacher、最后用 MOPD 把这些 teacher 合并回同一个学生。它的 teacher 由 Stage 2 独立 RL 训出的领域专家构成。

Moonshot 的 Kimi K3 把同样的思路又推进了一步:它不只按 domain 拆分专家,还按 reasoning effort 拆,三个领域各训 low / high / max 三档,共九个专家模型,最后同样用 MOPD 合并成一个模型。

智谱的 GLM-5走的是另一条思路。它的 teacher 既不是更大的模型,也不是领域专家,而是它自己在前序训练阶段留下的 checkpoint;OPD 被放在整条 post-training 流水线的最后一步,用来修复串行 RL 带来的能力退化。

最激进的是 DeepSeek-V4。它在报告里直接写明,V3.2 时代的 mix RL 阶段被整体替换成了 OPD:先为数学、代码、agent、指令跟随等十余个 domain 各训一个 specialist,再用多教师 OPD 把它们合并回一个统一模型。

五家使用的位置、teacher 的来源、KL 的粒度都不一样,但底层配方完全一致:学生自己采样轨迹,teacher 对轨迹上的每一个 token 打分。 一个原本只出现在蒸馏文献中的方法,两年之内进入了五份旗舰报告的主干。本文尝试回答三个问题:SFT 与 GRPO 各自卡在哪里、OPD 的数学形式是什么、以及这几份报告各自用它解决了什么问题。

一、SFT:监督密集,但存在 Exposure Bias

2023年是大模型的元年,随着大模型一同出圈的是SFT,也是众多大模型从业者所从事的第一项任务。SFT 作为把一个只会续写的预训练模型变成可用助手的第一道工序。这套做法的普及大致有两条线索:

  • 一是 2021 年的 FLAN 等工作证明,在多任务指令数据上微调可以让模型零样本地听懂指令,“指令微调"由此成为标准环节;

  • 二是 2023 年 Alpaca、Vicuna 这批开源工作把标注数据换成了更强模型的输出——用 Self-Instruct 从 GPT-3.5 生成几万条回答直接训小模型,以极低成本得到可用的助手。第二条线索正是本文关心的蒸馏场景。

用在蒸馏场景时,SFT 的过程是这样的:

  1. teacher 先把一条高质量回答整条生成出来,得到完整的 token 序列 $y$;
  2. 训练时取其中每一个位置 $t$,把来自 teacher 的前缀喂给学生,学生在这个前缀下输出下一个 token 的 logits;
  3. 用 teacher 在该位置的真实 token $y_t$ 作为标准答案,与学生的分布做交叉熵。

写成损失就是:

$$ \mathcal{L}_{\mathrm{SFT}}(\theta) = -\,\mathbb{E}_{(x, y) \sim \mathcal{D}_T} \sum_{t=1}^{|y|} \log \pi_\theta(y_t \mid x, y_{\lt t}) $$

这里有两个细节值得记住:前缀来自 teacher,监督目标是 teacher 的那一个硬 token。

由这个形式可以直接体现出SFT的核心优势——监督密集:长度为 $T$ 的序列提供 $T$ 个梯度信号,学生在某个位置偏离得越远,该位置的损失与更新幅度就越大。加之目标是标准的极大似然估计、训练期间无需采样、结果稳定可复现,从 DeepSeek-R1-Distill 到 Qwen3 的轻量版本,蒸馏 pipeline 的第一步至今仍普遍是它。

但随着大规模使用,几个问题逐渐暴露出来。

第一个是分布偏移。 训练时喂给学生的每一个前缀都来自 teacher 的完美轨迹,而推理时它续写的前缀是自己刚刚生成的内容。一旦学生在某步犯了 teacher 不会犯的错误,就进入了训练数据中从未出现过的状态,后续 token 只能自由发挥,误差沿序列累积。这个现象在序列生成里被称为 exposure bias,在模仿学习里叫 compounding error——DAGGER 早在 2010 年就指出,解决它的唯一办法是让学徒自己走,然后在学徒实际到达的状态上获取专家标注。这个差别是有量级的:腾讯今年的 A Survey of On-Policy Distillation 把它形式化为,off-policy 模仿的复合误差大致随序列长度的平方增长,而在学生自己的分布上取反馈可以把它压到线性

第二个是模仿的表层性。 Gudibande 等人在 The False Promise of Imitating Proprietary LLMs 中给出了实证:模仿训练容易让学生习得 teacher 的风格与自信度,而非其事实准确性。原因不难理解——teacher 能写出那段回答,背后是整套知识与推理能力在支撑,而学生只观测到 token 序列本身,能模仿的只有"长得像"的部分。

第三个是 mode covering,即学生被迫覆盖 teacher 分布的每一个众数,最终哪一个都没有学像。

具体而言,设想一道题有两条完全不同的解题路线,一条是先列方程再求解,一条是直接枚举验证,teacher 在这两个 mode 上分别分配了 20% 和 80% 的概率。SFT 的损失是在 teacher 分布上取期望的,也就是说 teacher 采样到的每一种解法都会被拿来考学生。因此,学生如果干脆放弃解法 A、把它的概率压到 0,那么在 teacher 生成 A 的那些位置上 $\log \pi_\theta(\text{A}) = -\infty$,损失直接发散。

于是学生别无选择,只能给每一个 mode 都留一份概率:

forward KL 下学生被迫覆盖 teacher 的两个众数
Forward KL — mode covering:学生被迫在两个众数上都分配概率,连中间地带也留下了质量。

参数容量充裕时这未必是坏事,但学生的参数容量恰恰有限:它无法同时精通两条路线,最终收敛到二者的插值。推理时采样出的既不是完整的方程解法,也不是完整的枚举解法,而是左右脑互搏、逻辑不自洽的混合体。

这一行为的根源是 forward KL 的 zero-avoiding 性质:只要 $\pi_T(x) > 0$,学生就不允许令 $\pi_\theta(x) \to 0$,否则损失发散。换言之,这是由散度方向本身决定的——SFT 的交叉熵在形式上就是一个 forward KL,第四节会展开这一点。MiniLLM 在 2023 年正是据此论证:蒸馏小模型时应改用具有 zero-forcing 性质的 reverse KL,令学生收敛到单一众数而非覆盖全部众数。

二、GRPO:无分布偏移,但奖励稀疏

DeepSeek-R1 之后,RL 这一侧的默认选项变成了 GRPO。相比 PPO 需要额外训练一个与策略同规模的 value network 来估计优势,GRPO 直接把 critic 删掉了:对同一个 prompt 采样一组 $G$ 条回答,用组内归一化的回报作为优势。

$$ \hat{A}_{i} = \frac{R_i - \mathrm{mean}(\{R_1, \dots, R_G\})}{\mathrm{std}(\{R_1, \dots, R_G\})} $$

这个简化契合 RLVR 的场景:每条轨迹只有一个最终的、可验证的标量奖励。数学任务只需检查答案是否正确,代码任务只需检查是否通过预设的单元测试,奖励函数的设计因此可以非常简单。

更重要的是,RL 从根上解决了 SFT 的分布偏移:轨迹由模型自己生成,训练时的状态分布与推理时完全一致,不存在 exposure bias。

但这条路线的代价同样明确,而且集中在一处:它只在一条轨迹的末尾给出一个标量。

具体而言,学生写了 500 个 token 的推理链,而 verifier 只回一句"答案错误,reward = 0”。Thinking Machines Lab 给出过一个信息论视角的对比(出自 LoRA Without Regret):强化学习每个 episode 只能教给模型 $O(1)$ 比特,而蒸馏每个 episode 能教 $O(N)$ 比特,其中 $N$ 是 token 数。

由此产生的第一个后果是不知道错在哪。 既然这 1 比特要摊回 500 个 token 上做 credit assignment,学生就只知道自己输了,却无法定位是第 17 步算错了、第 200 步推理跳跃太大,还是最后一步符号写反了。结果是它唯一能做的就是把整条轨迹的概率一起压低——包括那些原本正确的中间步骤。

第二个后果是时间和算力。 既然单次反馈的信息量固定,要把一个能力练出来就只能靠反复采样去堆总量:同一道题采几十条 rollout、跑几十万条 prompt,让统计上的差异慢慢显现出来。值得注意的是,这些算力的大头并没有花在梯度更新上,而是花在采样和试探上。比如,Qwen3 报告中的 8B 模型在数学与代码 RL 花了 17,920 GPU 小时。

针对这一问题,一条正面的思路是把奖励本身变稠密。OpenAI 的 Let’s Verify Step by Step 证明了过程监督优于结果监督,做法是训练一个 process reward model 给每一步打分,等于人为地把稀疏奖励变稠密;代价是要先标注大量步骤级数据,而且 PRM 自身同样会被 hack。

把两条路线并排看,对比如下:

方法采样来源反馈密度
SFT / Off-policy 蒸馏off-policydense(每个 token)
强化学习On-policysparse(每条轨迹一个标量)
On-Policy DistillationOn-policydense

三、OPD:On-policy 轨迹上的密集奖励

On-policy 蒸馏的构造直接来自上表的空缺:轨迹由学生采样,打分由 teacher 逐 token 给出。

OPD 在采样来源与反馈密度两个维度上的位置

相对于 SFT,OPD 的步骤如下:

  1. 学生先按自己当前的策略把回答整条生成出来,得到轨迹 $\hat{y}$;
  2. 训练时取每一个位置 $t$,把来自学生自己的前缀同时喂给学生和 teacher,两边各输出一个下一个 token 的分布;
  3. 监督目标不再是某一个硬 token,而是 teacher 在这个前缀下的整个条件分布,用 KL 衡量两个分布的差距。

也就是说,OPD 相对 SFT 只换了两样东西:前缀从 teacher 的换成了学生自己的,监督目标从一个硬 token 换成了 teacher 的完整分布。 第一处改动消除了分布偏移,第二处让每个位置携带的信息量从 1 个 token 变成了整个词表上的一条分布。

每个位置的 reward 相应定义为负的 reverse KL:

$$ R_t = -\,\mathrm{KL}\big(\pi_\theta(\cdot \mid x, y_{\lt t}) \,\|\, \pi_T(\cdot \mid x, y_{\lt t})\big) $$

这里没有奖励模型,也没有额外的正则项:KL 本身就是全部的优化信号,且定义在每一个 token 上。

这种逐 token 的打分可以直接可视化出来。下图是 TML 博客给出的一条真实轨迹,颜色越深表示该 token 的 reverse KL 越高,即 teacher 越不认可:

由 teacher 评分的学生轨迹,深红色 token 对应更高的 reverse KL。图片来源:Thinking Machines Lab, On-Policy Distillation

这里有一个反直觉的细节:最终那个错误答案 token 并未被重罚。之所以如此,是因为一旦前面的推理已经走偏,在给定错误前提的条件下这个答案反而是"可预测"的;真正被重罚的是中间那些导致推理分叉的 token。相比之下,RL 只能对整条轨迹给出一个标量,无从区分这两类位置。

四、为什么必须是 reverse KL

传统蒸馏用 forward KL,OPD 用 reverse KL。二者只是交换了 P 与 Q 的位置,行为差异却很大。

Forward KL:mode covering

$$ \mathrm{KL}(\pi_{T} \| \pi_{\theta}) = \mathbb{E}_{x \sim \pi_{T}}\left[\log \frac{\pi_{T}(x)}{\pi_{\theta}(x)}\right] $$

对 $\theta$ 求梯度时第一项为常数,剩下的是在 teacher 分布下对 $-\log \pi_\theta$ 取期望,即交叉熵。对比前面 SFT loss 的计算可以看出,二者在形式上是同一个目标:SFT 最小化的就是 forward KL,区别只在于 SFT 的 teacher 分布退化为 one-hot 标注,而蒸馏中它是 teacher 的完整软分布。

第一节的 mode covering 也就此得到解释:期望在 teacher 分布上取,teacher 会生成的每一个众数都必须被覆盖,漏掉任何一个,损失都会发散。

除了 mode covering,这个方向还有一个反向的盲区:期望既然在 teacher 上取,那么学生在 teacher 概率为零的区域如何分配概率,损失就完全看不见。学生大可以在 teacher 从不涉足的地方乱堆概率而不受任何惩罚——这正是"风格像而答案错"的另一半解释。

Reverse KL:mode seeking

$$ \mathrm{KL}(\pi_{\theta} \| \pi_{T}) = \mathbb{E}_{x \sim \pi_{\theta}}\left[\log \frac{\pi_{\theta}(x)}{\pi_{T}(x)}\right] $$

把对数里的商拆成两项,还能看到一层含义:

$$ \mathrm{KL}(\pi_{\theta} \| \pi_{T}) = \mathbb{E}_{x \sim \pi_{\theta}}\left[\log \pi_{\theta}(x)\right] - \mathbb{E}_{x \sim \pi_{\theta}}\left[\log \pi_{T}(x)\right] $$

前一项按定义就是学生自身熵的相反数 $-H(\pi_\theta)$,后一项取负号则是学生对 teacher 的交叉熵 $H(\pi_\theta, \pi_T)$。于是

$$ \mathrm{KL}(\pi_\theta \| \pi_T) = \underbrace{H(\pi_\theta, \pi_T)}_{\text{学生对 teacher 的交叉熵}} - \underbrace{H(\pi_\theta)}_{\text{学生自身的熵}} $$

也就是说,最小化 reverse KL 是在同时做两件事:压低学生对 teacher 的交叉熵,并抬高学生自身的熵。若只最小化交叉熵,目标关于 $\pi_\theta$ 是线性的,最优解会落在单纯形的顶点上,也就是把全部概率压到 teacher 概率最大的那一个 token 上,退化为点分布。熵项恰好抵消这种压缩趋势:两项权重相等时,最优解正是 $\pi_\theta = \pi_T$。即便学生容量不足、只能覆盖 teacher 支撑集的一部分,最优解也是 teacher 在该子集上的条件分布,仍然保留其内部的相对比例。因此 mode seeking 的确切含义是决定放弃哪些众数,而不是在保留下来的众数内部把分布削尖。

回到行为上:期望改在学生分布上取,因此 teacher 只评价学生实际写出的内容。仍以那两条路线为例,若学生把概率全部集中在解法 B 上:teacher 在 B 上给出 80%,KL 很小;解法 A 被完全忽略,但学生从不采样 A,这部分对损失没有任何贡献。

reverse KL 下学生把概率质量集中在单一众数上
Reverse KL — mode seeking:学生把全部概率质量集中到 teacher 认可的那一个众数上,另一个众数直接放弃。

mode seeking 更契合蒸馏的实际目标。学生的参数容量远小于 teacher,要求它覆盖 teacher 的全部众数本就不现实;在 forward KL 下,容量不足的直接后果就是第一节的 mode covering——两种解法都没学会。reverse KL 把要求放宽为"学生选定的那一个众数得到 teacher 认可”,学生因而可以把概率质量集中到单一解法上,把它学到可用的程度。

reverse KL 的第二个性质是 unhackable。由于期望在学生分布上取,KL 低就必然意味着学生实际生成的每一个 token 在 teacher 看来概率都高,不存在"指标好看但输出很差"的解。两个对照可以说明这一点的分量:以学习得到的奖励模型作为信号时,策略可以找到奖励模型未覆盖的区域把分数刷高,即 reward hacking;forward KL 则对 teacher 概率为零的区域不施加任何惩罚。reverse KL 不存在这两类漏洞,原因很简单——被评估的对象恰好就是学生自己产生的内容。

方向选择并非新结论。除了第一节提到的 MiniLLM,同年 Google DeepMind 的 Generalized Knowledge Distillation (GKD) 首次完整写下了"on-policy 采样 + token 级 KL"的配方,今天各家的 OPD 基本都可视为 GKD 框架的特例。

五、优势估计的进一步退化

OPD 在工程上几乎可以零成本接入现有 RL 框架,做法是把每个 token 的优势直接置为 teacher 与学生的对数概率之差。GLM-5 的报告给出了最清晰的写法,它明确说明这是替换 GRPO 损失中的优势项:

$$ \hat{A}_{i,t} = \mathrm{sg}\left[\log \frac{\pi_{\theta_{\mathrm{teacher}}}(y_{i,t} \mid x, y_{i,\lt t})}{\pi_{\theta}(y_{i,t} \mid x, y_{i,\lt t})}\right] $$

把这个式子和第二节的 GRPO 优势放在一起,可以看到一条清晰的演进线索。PPO 需要一个与策略同规模的 value network 来估计优势;GRPO 删掉 value network,改用组内归一化;到了 OPD,连组内归一化都不再需要。

GLM-5 的报告把这一点讲得很直接:训练时它把 GRPO 的 group size 直接配置为 1、batch size 设为 1024 以提高吞吐,而之所以可行,是因为优势已经可以直接由与 teacher 的差距算出,不再需要为每个 prompt 维持一组样本来估计它。group size 从常用的 8~16 降到 1,吞吐随之翻了几倍。PPO → GRPO → OPD,本质上是一条"优势估计不断退化,直到不需要估计"的线:credit assignment 这个 RL 中最困难的问题,被 teacher 的逐 token 打分绕开了。

另一个降低成本的性质是 teacher 只做一次 prefill、不做 decode。学生的完整回答已经在手,teacher 计算 $\log \pi_T(y_t \mid y_{\lt t})$ 时所有位置可以并行,一次前向即可。

此外,OPD 通常取 discount factor 为 0,即每个位置只优化当前这一个 token,不做多步展开。这意味着不必等一条轨迹采样完毕才能计算 reward,训练可以使用更短甚至部分的 rollout,也不需要为了等待最终奖励而拉长 context。

词表粒度:sampled-token、top-k 、全词表

KL 定义在整个词表上,但实现时未必要把整个词表都算出来。这里有三种取法,它们在 teacher 的前向计算量上完全一样(都只是一次 prefill),差别只出现在 loss 那一步。

下表中 $B$ 为 batch size,$T$ 为序列长度,$V$ 为词表大小,$k$ 为 top-k 保留的 token 数:

变体Loss 计算复杂度说明
Sampled-token$O(BT)$只取学生实际采到的那一个 token 的 log-prob
Top-k$O(BTk)$取 top-k 个 token 参与求和
Full-vocabulary$O(BTV)$整个词表逐 token 求和

两端的差距就是词表大小本身:

$$ \frac{O(BTV)}{O(BT)} = V $$

以 Qwen3 的词表 $V = 151{,}669$ 计算,这个比值约为 $1.5 \times 10^5$,即五个数量级。落到实处:$B = 8$、$T = 8192$ 时,全词表需要为 logits 准备 $8 \times 8192 \times 151{,}669 \approx 9.9 \times 10^9$ 个元素,bf16 下约 20 GB,而且 teacher 与学生各要一份;sampled-token 每个位置只留一个 log-prob,总共 $8 \times 8192 = 65{,}536$ 个数,不到 1 MB。

代价差得这么远,那么只取一个 token 是否可行?这取决于两件事:它在统计上站不站得住,以及它会不会损失有效信号。

从统计的角度看。 蒙特卡洛估计要求样本来自期望所在的那个分布。reverse KL 的期望恰好在 $\pi_\theta$ 下取,而轨迹本来就是学生采的,因此用学生实际生成的那一个 token 去估计是无偏的,每个位置只需 gather 一个 log-prob。这也顺带回答了上一节留下的那个工程理由:forward KL 的期望在 $\pi_T$ 下取,无偏估计要求由 teacher 采样,而 OPD 里 teacher 只做 prefill、从不 decode,手上根本没有 teacher 采出的 token——想用 sampled-token 就只能选 reverse KL,想用 forward KL 就只能放弃采样,改在 top-k 或全词表上把求和显式算出来。

从信号的角度看。 清华 thunlp 的 Rethinking On-Policy Distillation 给出了机制层面的证据:成功的 OPD 表现为学生与 teacher 在学生访问过的状态上高概率 token 逐渐重合(重叠率从 72% 升到 91%),而这个共享 token 集合集中了两个分布 97%–99% 的概率质量;他们进一步验证,只在重叠 token 上施加监督就能追平完整的 top-k。既然梯度信号本就高度集中在少数几个 token 上,多算的那部分词表贡献有限。

两点合起来,sampled-token 成为单 teacher 场景下的工业默认。唯一的例外出现在多 teacher 场景——这一点留到 6.2 节讨论 DeepSeek-V4 时再深入讨论。

六、五份技术报告中的具体用法

五家的差别可以归到两个维度:teacher 从哪里来,以及 OPD 落在 post-training pipeline 的哪一步。下面按这两个维度依次展开。

6.1 Qwen3:轻量模型的 strong-to-weak distillation

Qwen3 旗舰模型的 post-training 分为四个阶段:Long-CoT 冷启动 SFT、Reasoning RL、Thinking Mode Fusion(继续 SFT,把 think 与 no-think 两种模式融合进同一个模型)、General RL。

OPD 在这里的位置比较特殊:它不是插在四阶段中的某一步,而是整体替换掉这条流水线。0.6B 至 14B 的轻量模型不再各自重跑一遍四阶段训练,改为从已经走完全程的 Qwen3-32B 或 Qwen3-235B-A22B 蒸馏,即 strong-to-weak distillation。报告给出的理由是“直接把 teacher 的输出 logits 蒸馏进轻量学生,既能提升性能,又能对其推理过程保持细粒度的控制”。

蒸馏本身又分两个阶段,先 off-policy 再 on-policy。

  • 第一阶段收集 teacher 在 think 与 no-think 两种模式下的输出做响应蒸馏,目的是让学生先具备基本的推理能力、学会在两种模式之间切换;
  • 第二阶段才切换为 on-policy:采样 prompt,由学生自己生成回答,再把学生的 logits 与 teacher(Qwen3-32B 或 Qwen3-235B-A22B)的 logits 对齐,最小化 KL 散度。

这样设计的原因在于:若学生与 teacher 的输出风格差异过大,token 级 KL 中的大部分将是风格噪音而非知识。因此需要先用一轮 off-policy 把学生的分布挪到 teacher 附近,再进入 on-policy 阶段。

报告的 Table 21 给出了这一设计的效果对比。三行均从同一个 off-policy 蒸馏后的 8B checkpoint 出发,唯一的差别是后续采用 RL 还是 on-policy 蒸馏,括号内为 pass@64:

方法AIME'24AIME'25MATH500LiveCodeBenchGPQA-DiamondGPU Hours
Off-policy Distillation55.0 (90.0)42.8 (83.3)92.442.055.6
+ Reinforcement Learning67.6 (90.0)55.5 (83.3)94.852.961.317,920
+ On-policy Distillation74.4 (93.3)65.5 (86.7)97.060.363.31,800

在 AIME'24 上高出 6.8 个点,而 GPU 时数仅为其十分之一。更值得注意的是括号中的 pass@64:RL 完全没有提升采样 64 次的上限(90.0 → 90.0),on-policy 蒸馏则把它推到了 93.3。报告对此的解释是:从 teacher 的 logits 中蒸馏,能够扩展学生的探索空间、提升其推理潜力,pass@64 的改善正是证据;相比之下,强化学习没有带来任何 pass@64 上的提升。

6.2 DeepSeek-V4:以多教师 OPD 替换 mix RL

与 Qwen3 相比,DeepSeek-V4 有十余个 teacher,每个只在一个 domain 上强,OPD 解决的是能力合并。相应地,它也不再是轻量模型的支线方案,而是被放到了主线上——报告明确指出,post-training 整体沿用 V3.2 的结构,唯一的关键方法替换就发生在这一步:混合强化学习阶段被完全替换为 on-policy distillation。

替换后的流程分为两个阶段:第一阶段为每个 domain(数学、代码、agent、指令跟随等)独立训练一个 specialist,每个都是 SFT 加 GRPO 单独跑出来的;第二阶段用多教师 OPD 把十余个 specialist 合并回一个统一模型。

也就是说,OPD 在这里承担的是流水线最后一步的合并环节,它替换掉的并不是某个 RL 阶段内部的算法,而是"如何同时优化多个目标"这一整套做法。其目标函数为:

$$ \mathcal{L}_{\mathrm{OPD}}(\theta) = \sum_{i=1}^{N} w_i \cdot D_{\mathrm{KL}}\big(\pi_\theta \,\|\, \pi_{E_i}\big) $$

其中 $w_i$ 为各专家的权重。报告给出的理由是:该机制通过 logits 级的对齐,把分散在不同专家权重中的知识整合进统一的参数空间,从而规避了传统的参数 merging 与 mix RL 常见的性能退化。

另一处值得注意的工程决策,DeepSeek-V4采用全词表 KL 而非工业默认的 token 级估计。报告对后者给出了明确的负面评价:既有工作通常把全词表 KL 简化为每个位置上的 token 级估计,并复用 RL 框架、以 $\mathrm{sg}[\log \pi_E / \pi_\theta]$ 作为逐 token 的优势;这种做法虽然省资源,但会带来梯度估计的高方差,并经常导致训练不稳定

被指出的正是第五节给出的那种写法。这一取舍恰好由上面那个差别决定:单 teacher 时蒙特卡洛估计的方差尚可接受,而 V4 要在同一个 token 位置上对齐十余个 teacher,方差会被显著放大。

代价则落在显存上。词表超过 10 万时,为所有 teacher 物化 logits 并不可行,因此 V4 只缓存最后一层的 teacher hidden states,训练时再经 prediction head 重建 logits;样本按 teacher 索引排序分发,使每个 mini-batch 内每个 teacher head 仅加载一次、显存中至多驻留一个;精确 KL 则由专门的 TileLang kernel 计算。

6.3 MiMo-V2-Flash:MOPD 与结果奖励的叠加

小米的 MiMo-V2-Flash将这套方法命名为 MOPD(Multi-Teacher On-Policy Distillation),并把它定位为一种 post-training 范式而非训练技巧。其流水线由三个阶段构成:Stage 1 通用 SFT 建立指令跟随能力,Stage 2 用 RL 与 SFT 分别训练各领域的 teacher(其中同时包含 non-agentic 与 agentic RL),Stage 3 由 MOPD 把这些 teacher 合并回一个学生。

报告为这一设计给出的动机是 capability imbalance,它称之为 see-saw effect:在同一个模型上依次提升多项能力时,一项的改进往往伴随另一项的退化。把各领域拆开单独训练、最后再统一合并,正是为了绕开这一效应;MOPD 处在第三阶段,承担的就是合并这一步。其 reverse KL 损失写作:

$$ \mathcal{L}_{\text{reverse-KL}}(\theta) = -\,\mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi(\cdot \mid x)} \log \frac{\pi_{\mathrm{domain}}(y_t \mid x, y_{\lt t})}{\pi_\theta(y_t \mid x, y_{\lt t})} $$

MiMo 的整体结构与 V4 高度相似——都是先分域训 teacher、再用多教师 OPD 合并——但有两处实质差别。其一,V4 的目标函数中只有 KL,MiMo 则把蒸馏优势与结果奖励叠加使用,$\hat{A} = \hat{A}^{\mathrm{MOPD}} + \hat{A}^{\mathrm{ORM}}$,即 OPD 并未取代 RL,两种信号并存。其二,MiMo 允许把学生自己也放进 teacher 集合,因此在缺少更强 teacher 的领域,MOPD 实际退化为自蒸馏——这一点在下面的 Table 7 中可以直接看到。

报告的 Table 7 同时给出了学生蒸馏前、最佳 teacher 与学生蒸馏后三列,由此可以直接读出 MOPD 的收益边界:

BenchmarkStudent Before MOPDBest TeacherStudent After MOPDΔ(Student − Teacher)
AIME 202589.393.9 (RL)94.1+0.2
HMMT Feb. 202576.982.6 (RL)84.4+1.8
LiveCodeBench77.582.6 (RL)83.2+0.6
GPQA-Diamond84.984.9 (Self)84.3−0.6
Arena-Hard (Hard Prompt)50.050.0 (Self)54.1+4.1
Arena-Hard (Creative Writing)90.190.1 (Self)86.2−3.9
SWE-Bench Verified67.874.2 (RL)73.4−0.8
Tau2-Bench75.979.6 (RL)80.3+0.7
BrowseComp42.551.7 (SFT)45.4−6.3

从这张表可以读出三点。

  • 第一,在有强 teacher 的领域(数学、代码、agent),学生基本追平甚至略微超过最佳 teacher,Δ 在 ±1 以内。
  • 第二,标注为 Self 的行,其 Best Teacher 数值与蒸馏前的学生完全相同,意味着该 benchmark 上没有任何 teacher 强过学生本身,此时收益只能来自叠加的 ORM 项,MOPD 的作用仅是维持,甚至可能掉点。
  • 第三,BrowseComp 掉了 6.3 个点,而它的 teacher 恰恰是一个 SFT 模型——这提示当 teacher 与学生的行为模式差距过大时,token 级对齐未必能把能力搬过来。这张表实际上提供了 teacher 构成能力上界的直接证据。

6.4 Kimi K3:按 domain × reasoning effort 拆分的九个专家

Moonshot 的 Kimi K3 与前两家属于同一路线,但把拆分维度又加了一层。它的 post-training 同样是三阶段:SFT 冷启动建立基础的 agent 能力,RL 训练领域专家,最后用 MOPD 合并。

区别在于第二阶段的切分方式。K3 把 RL 分成三个大领域——general、general agents、coding agents——并且在每个领域上分别训练 low / high / max 三种 reasoning effort 的版本,三乘三共九个专家模型。不同 effort 档位由 RL 阶段的 token 预算控制得到:给每个问题估一个初始预算,超出 $\tau$ 倍阈值的轨迹直接给 $-1$ 奖励,再通过退火 $\tau$ 依次得到 max、high、low 三档。

因此 K3 的 MOPD 合并的不只是"能力",还有"思考长度":九个专家的行为被压进同一个模型,使它在推理时可以按需切换 effort 档位。这实际上把 long-to-short 这类预算蒸馏也纳入了同一套机制。

实现上,K3 没有像 V4 那样上全词表,而是沿用了 token 级的写法,并对其做了截断:

$$ r^{d}_{\mathrm{opd}}(y_t \mid e, x, y_{\lt t}) = \mathrm{clip}\left(\mathrm{sg}\left(\log \frac{\pi^{(d,e)}_{\mathrm{teacher}}(y_t \mid x, y_{\lt t})}{\pi_\theta(y_t \mid e, x, y_{\lt t})}\right), -R_{\max}, R_{\max}\right) $$

其中 $R_{\max}$ 是用来约束极端优势信号的截断阈值。报告说明,这样定义之后 OPD 就是一个普通的稠密 reward,可以直接接进已有的 RL 框架,从而复用 partial rollout 等针对长程任务的基础设施优化。值得一提的是,他们也试过更细粒度的 top-$k$ 蒸馏目标,但在收敛速度和最终性能上都没有观察到明显优势——这与第五节的结论一致。

顺带一提,KIMI在 K2 与 K2.5 上还只是用 K1.5 与若干内部领域专家模型生成候选回答、经筛选后做 SFT,属于序列级的 off-policy 蒸馏;到 K3 才转为让学生自己采样、由九个专家逐 token 打分。

6.5 GLM-5:以历史 checkpoint 为 teacher 的跨阶段蒸馏

GLM-5的 post-training 是一条复杂的串行流水线:多任务 SFT(引入交错思考模式)→ Reasoning RL → Agentic RL → General RL。三个 RL 阶段各自优化不同目标,由此带来一个已知问题——后面的阶段会侵蚀前面阶段获得的能力。

因此 OPD 被放在整条链路的最末端,作为一个专门的修复阶段。报告的描述是:多阶段 RL 流水线中依次优化不同目标,会导致既有能力的累积性退化;为缓解这一问题,它在最后一个阶段执行 on-policy cross-stage distillation,以前序各训练阶段的最终 checkpoint 作为 teacher,训练 prompt 从对应 teacher 的 RL 训练集中采样并按比例混合。

这是与前四家最根本的一处区别:前面的 teacher 都是比学生强、或至少在某个 domain 上强的外部模型,而 GLM-5 的 teacher 是学生自己在前序阶段的快照,并不比它强。因此 OPD 在这里不承担传授新能力的职能,它做的是把已经偏离的分布重新对齐回该 checkpoint,从而找回被后续阶段覆盖掉的能力。

这一做法之所以有效,有两条支撑。

二者合起来意味着:若改用旧 checkpoint 生成数据再做一轮 SFT,效果会明显更差——能力恢复本身就须是 on-policy 的。

6.6 Thinking Machines Lab:面向持续学习的自蒸馏

Thinking Machines Lab 在 On-Policy Distillation 中把这一用法推广到了持续学习场景(Distillation for personalization 一节)。它的设定是在一个已经完成 post-training 的 Qwen3-8B 上继续注入企业内部文档知识,OPD 位于领域注入之后,承担能力恢复这一步。

问题出在 mid-training 上:内部 QA 从 18% 升到 43%,但 IF-eval 从 85% 跌至 45%。博客指出这一退化与数据配比无关——无论怎么调混合比例 IF-eval 都在下降,改用 LoRA 约束参数更新也只是"学得更少、同时仍然遗忘"。

恢复的做法是以 mid-training 之前的 Qwen3-8B 自身为 teacher 跑一轮 OPD,prompt 取自 Tulu3,与内部文档数据完全无关,唯一目的就是把指令跟随捞回来:

模型Internal QA(知识)IF-eval(对话)
Qwen3-8B18%85%
+ midtrain(100% 文档)43%45%
+ midtrain(70% 文档)36%79%
+ midtrain(70%)+ distill41%83%

值得注意的是最后一行:IF-eval 从 79% 恢复到 83% 的同时,内部 QA 反而从 36% 涨到了 41%——博客称之为对话能力与知识之间的正向迁移。这与 GLM-5 的 cross-stage distillation 是同一机制:teacher 都是自身的历史快照,OPD 都用于修复后续训练造成的能力损失。

同一篇博客还给出了一组直接对照实验(Dense supervision greatly improves compute efficiency):从 Qwen3-8B-Base 出发,先在 DeepMath 上做 RL 得到一个策略,再用 OPD 把该策略蒸馏回同一个 base 模型——teacher 与学生同架构、同规模,唯一的差别是学习方式。

结果是 OPD 学到那个 RL 策略所需的梯度步数只有约 1/7 到 1/10(AIME 分数在 10 步以内恢复,RL 需要 70 步),换算成算力效率是 50 到 100 倍。

一个更极端的设置是只用单个 prompt 训练:在数据集中随机取一道求极限的题目,每步采样 256 条 rollout、连续训练 20 步,共 5120 条被打分的序列,最终近似复现了 teacher 在 AIME'24 上的表现。在 RL 下这样训练几乎必然退化为记忆答案;而 OPD 拟合的是 teacher 的完整条件分布而非某个特定答案,因此可以在同一批 prompt 上反复训练。

博客用一节的标题点明了原因——RL searches in the space of semantic strategies,这也印证了第二节的判断:RL 的开销主要属于 search 而非 learning。昂贵的是在策略空间里试探出哪一种推理方式能拿到奖励;一旦这个策略被找到,用分布匹配把它传递给另一个模型就是廉价的。

七、OPD的高效的来源是哪里

五份报告都观察到了效率提升,却都没有解释效率从何而来。最直接的解释是"dense supervision 的信息量更大",但这个解释无法成立:SFT 的监督同样 dense,却并没有比 RL 高效十倍。2026 年有两项工作分别从现象与参数动力学两个角度作出了回答。

  • 清华的 Rethinking On-Policy Distillation 回答"何时会失败"。它给出 OPD 成立所需的两个条件:学生与 teacher 的思考模式要相互兼容;且即便思考模式一致、分数也更高,teacher 仍必须具备学生未曾见过的真实新能力。后者的分量由一个反向对照说明——在同家族的 1.5B 与 7B 之间做 OPD,无论方向是 7B → 1.5B 还是反过来,学生最终的分数几乎一样。也就是说,同家族不同尺寸的模型在 token 级 KL 这个度量下近乎不可区分,benchmark 上的强弱并不意味着分布上有新东西可教。对应的补救有两条:思考方式不兼容就先做一轮 off-policy 冷启动(正如 Qwen3 的设计),teacher 没有新东西可教就只挑那些 teacher 答得好而学生答得差的 prompt。

  • 中科大与腾讯的 Learning to Foresee 回答"为什么快"。他们的答案是 foresight——OPD 在训练极早期就锁定了通向最终解的方向,此后主要是沿这个既定方向累加幅度。证据落在两个层面:

    • 模块上,更新集中在真正承载推理能力的中间层 MLP,而 RL 会把大量 update norm 洒在贡献很低的 embedding 与首尾层;
    • 方向上,对参数增量做 SVD 可以看到 OPD 的能量分布明显更低秩,且主方向很早就与终态高度对齐,RL 则要晚得多才稳定。最直接的一项消融是取 10% 进度的 checkpoint,按模块把 update norm 放大到最终水平、方向完全不动,即可恢复约八成的最终推理性能。

综合两项工作可以得到一个更准确的判断:OPD 快,不是因为信号 dense,而是因为终点(teacher 分布)事先给定,方向不需要靠试探去找。 而这恰恰也预示了它的边界。

八、OPD 的能力边界

  • teacher 构成能力上界。 OPD 的全局最优解是学生分布与 teacher 完全一致,此时损失与梯度同时归零。只要目标函数中只有蒸馏项,学生就不可能在有意义的维度上系统性超越 teacher。MiMo 那张表里 Δ 基本落在 0 附近、且有若干负值,就是这一性质的直接体现。要突破 teacher,仍然需要 RL 从环境中获取新信息——数学题的标准答案、代码的运行结果、定理的形式化验证,这些信号不经过 teacher。

  • teacher 必须存在真实的能力差。 如果 teacher 只是同家族中分数略高的大号版本,在 token 级分布这个尺度上二者可能几乎没有差异。benchmark 上的强弱未必体现在逐 token 的条件概率上。这也是 Qwen3 要先做一轮 off-policy 冷启动的原因:先让两者的行为模式对齐,KL 才承载知识而不是风格噪音。

  • dense 信号并非没有代价。 上一节提到的方向早锁定是一把双刃剑:锁定方向的另一面就是探索受限(然而,这也恰恰是前文中提到的相比于SFT的优势之一)。Rethinking OPD 由此进一步提出了 OPD 能否扩展到长程蒸馏的疑问。在长推理链上逐 token 跟随 teacher,学到的容易是它的局部 token 习惯而非推理策略。

回头看这这些技术报告:Qwen3 用它训轻量模型、MiMo 把它与 ORM 奖励叠加、GLM-5 放在三轮 RL 之后、DeepSeek-V4 与 Kimi K3 放在 specialist RL 之后——没有一家是用 OPD 完全取代 RL 的,OPD 承担的始终是能力搬运,能力创造仍然由 RL 完成。

OPD 节省的是样本,而非 GPU 算力。 学生每跑一条 rollout,teacher 都要陪跑一次前向,训练期间需要同时供养学生和 teacher 两套推理资源。Qwen3 那个 1,800 GPU 小时的数字,前提是你已经拥有一个 32B 或 235B 的 teacher;对算力有限的团队而言,这一结果未必可复现。

九、结语

OPD 不是一个全新的算法:on-policy 采样承自 DAGGER 一脉的模仿学习,在学生自采的序列上训练由 Generalized Knowledge Distillation 固化为框架,reverse KL 则由 MiniLLM 确立,并以 teacher 与学生的对数概率之比充当逐步奖励,而工程骨架直接借用 PPO/GRPO,改动只在优势项。它真正的贡献是把这些既有组件整合成一种在工业规模上稳定且便宜的形式,使能力迁移第一次成为 post-training 中可独立规划的一步——五家的动机各不相同,降低轻量模型的训练成本、合并领域专家、修复串行 RL 造成的退化,面对的却是同一个问题:当 RL 的开销持续上升、能力又分散在多个专家模型上时,如何以更低的代价把已经用算力换来的能力搬进同一个模型。

参考资料