摘要

大模型后训练正在从“模仿标准答案”走向“在真实生成轨迹上接受细粒度纠偏”。SFT 给了模型密集监督,但训练轨迹来自老师或数据集;RL 让模型在自己的轨迹上学习,但奖励通常过于稀疏。OPD,On-Policy Distillation,正好站在这两者之间:学生模型先自己 rollout,教师模型再在学生自己的生成轨迹上逐 token 给出 KL reward。

本文系统讲解 OPD 的动机、数学骨架、工程实现、工业实践和论文脉络。重点解析四篇关键论文:GKD 立起 on-policy + token-level distillation 的基本范式;Rethinking OPD 解释 OPD 什么时候会失败;Uni-OPD 从学生探索和教师信号两侧修正训练瓶颈;Learning to Foresee 则从参数动力学角度解释 OPD 为什么快,并提出 EffOPD 加速方法。

本文的核心观点是:OPD 不是简单的知识蒸馏技巧,而是一种新的后训练组织方式。它适合做能力迁移、多专家融合、跨阶段能力保活和 RL 前热身,但它不应该被神化为 RL 的完全替代品。在 long-horizon、agentic、多轮工具调用等需要强探索的任务中,OPD 更适合作为 RL 前的高效初始化,而不是单独承担全部训练。

关键词

OPD、On-Policy Distillation、GKD、Rethinking OPD、Uni-OPD、Learning to Foresee、SFT、RL、PPO、Reverse KL、Sampled-Token、Full-Vocab、多教师蒸馏


一、为什么 OPD 会成为后训练的新范式?

理解 OPD,先不要从公式开始。

真正的问题是:一个模型到底应该在什么路径上学习?

过去大模型后训练主要有两条路线。

第一条是 SFT,也就是监督微调。它让模型模仿标准答案。
第二条是 RL,也就是强化学习。它让模型自己生成答案,再根据奖励信号优化。

这两条路线都重要,但它们各自都有一个很深的缺陷。


1.1 SFT 的原罪:反馈很细,但路径不真实

SFT 的训练方式很简单。

给模型一批样本:

prompt -> 标准 response

然后让模型学习标准 response 里的每一个 token。

这看起来很高效,因为每个 token 都有监督信号。模型知道当前位置应该输出什么,下一个位置应该输出什么,整条答案应该长什么样。

但问题也在这里。

SFT 训练时,模型看到的是老师写好的轨迹;真正推理时,模型走的是自己生成的轨迹。

也就是说:

训练时:模型站在老师走过的路上学习
推理时:模型站在自己走出来的路上继续生成

这两条路不一定一致。

举个例子。

老师解数学题时,前 20 步都正确。SFT 学生训练时看到的也是这条完美路径。

但学生真正自己做题时,可能第 5 步就算错了。第 6 步开始,它面对的上下文就已经不是老师训练数据中的上下文。后面的每一步都可能在错误基础上继续滚雪球。

这就是 SFT 的分布偏移问题。

一句话概括:

SFT 教会了模型“标准答案长什么样”,但没有教会模型“自己走偏以后怎么救回来”。


1.2 RL 的原罪:路径真实,但反馈太粗

RL 刚好解决了 SFT 的一个问题。

RL 的训练轨迹来自学生模型自己。模型先自己生成完整 response,再由奖励模型、验证器或环境反馈告诉它好坏。

这意味着 RL 的训练分布更接近模型真实推理时的分布。

但 RL 又带来另一个问题:奖励太稀疏。

比如模型生成了一条 5000 token 的数学推理链,最后答案错了。验证器只返回:

reward = 0

模型知道这条答案错了,但不知道到底哪里错。

是第 17 步算错了?
是第 235 步逻辑跳了?
是第 1000 步符号写反了?
还是最后答案抄错了?

这就是 credit assignment 问题。

RL 的训练轨迹是真实的,但它给模型的反馈经常太粗。模型知道“这一局输了”,却不知道“哪一步是臭棋”。

一句话概括:

RL 教会模型在自己的路径上学习,但经常只告诉它最后输赢,不告诉它每一步的质量。


1.3 OPD 的核心交易:拿 RL 的真实轨迹,拿 SFT 的密集反馈

OPD 的出现,就是为了把 SFT 和 RL 的优点拼起来。

OPD 的核心结构是:

学生模型先自己生成 response
教师模型在学生自己的 response 上逐 token 打分
学生根据每个 token 的 KL reward 更新

所以 OPD 同时具备两个特征:

方法 轨迹来源 反馈粒度 核心问题
SFT 老师 / 固定数据集 dense,每个 token 有监督 训练轨迹和推理轨迹不一致
RL 学生自己 sparse,通常整条回答一个分数 不知道具体哪一步错
OPD 学生自己 dense,每个 token 都有 teacher KL reward 模仿强,探索空间受 teacher 限制

OPD 的一句话定义是:

OPD = on-policy 轨迹 + dense KL reward。

这句话非常重要。

on-policy 说明训练数据来自学生自己。
dense KL reward 说明教师不是只给最终分数,而是在每个 token 位置上给出细粒度反馈。

换成更直观的比喻:

SFT 像背大师棋谱。
RL 像下完一盘棋只告诉你输赢。
OPD 像你自己下完棋后,大师逐步复盘每一步。

这就是 OPD 的基本价值。


二、GKD 为什么是 OPD 的源头?

要理解 OPD 的理论来源,必须先讲 GKD。

GKD,全称 Generalized Knowledge Distillation,对应的论文是 On-Policy Distillation of Language Models: Learning from Self-Generated Mistakes

这篇论文的重要性在于:它最早把“语言模型蒸馏”明确放到了 imitation learning 的框架里理解。

传统知识蒸馏主要有两类。

第一类是 SeqKD。teacher 先生成完整答案,然后 student 把这些答案当成 SFT 数据学习。
第二类是 Supervised KD。teacher 在固定数据集上提供 token-level soft label,student 去拟合 teacher 的概率分布。

这两类方法的问题其实一样:

学生始终在别人写好的轨迹上学习,而不是在自己生成的轨迹上学习。

GKD 的关键转向是:

不要只让学生看老师写好的答案
而要让学生在自己生成的答案上接受老师纠偏

这就是 OPD 的雏形。


2.1 GKD 解决的是“自生成错误”问题

GKD 的标题里有一个关键词:Self-Generated Mistakes。

这个词很准确。

模型真正需要学习的,不只是老师在理想状态下怎么写答案,而是:

当学生自己生成了一个不完美的 prefix,teacher 在这个 prefix 上会怎么看下一步?

这才是 OPD 和传统蒸馏的分水岭。

传统蒸馏问的是:

在老师写好的上下文里,老师下一步会输出什么?

OPD 问的是:

在学生自己写出来的上下文里,老师认为下一步应该是什么分布?

这两个问题看起来接近,但训练意义完全不同。

第一个问题让学生模仿老师。
第二个问题让学生在自己的错误路径上被老师纠偏。

所以 GKD 立起来的不是一个小技巧,而是一种新的学习场景:student-generated trajectory 上的 token-level distillation


2.2 GKD 为什么要讨论散度选择?

GKD 还有一个重要贡献:它不只说“用 KL”,而是讨论到底该用什么方向的 KL。

这里主要涉及三种选择:

Forward KL
Reverse KL
Generalized JSD

Forward KL 的特点是 mean-seeking。它希望 student 覆盖 teacher 的所有可能模式。
Reverse KL 的特点是 mode-seeking。它鼓励 student 选择 teacher 认可的高质量模式并集中学习。
Generalized JSD 介于两者之间,可以看作一个更平滑的折中。

为什么这件事重要?

因为大模型输出不是连续平滑的单峰分布,而是多模式、多风格、多路径的离散空间。

同一个问题,teacher 可能有多种合理回答:

用数学推导回答
用代码回答
用自然语言解释
用长链推理回答
用短答案回答

Forward KL 会让 student 尽量覆盖这些模式。听起来全面,但可能让输出风格变得摇摆。

Reverse KL 更像是让 student 选一个 teacher 也认可的模式,然后集中学深。

所以后来的工业 OPD 大量偏向 Reverse KL,不是偶然的。

一句话总结 GKD 的价值:

GKD 把 OPD 的底层范式立了起来:让学生在自己的轨迹上学习,并用 teacher 的 token-level 分布做纠偏。


三、为什么 OPD 默认偏向 Reverse KL?

OPD 的 reward 通常来自 student 分布和 teacher 分布之间的差异。

这个差异常用 KL 衡量。

但 KL 有方向。方向不同,训练行为完全不同。


3.1 Forward KL:覆盖所有模式,但容易学散

Forward KL 可以理解为:

teacher 认为可能的输出,student 都不应该漏掉。

这会让 student 尽量覆盖 teacher 的所有 mode。

如果 teacher 的输出空间很单一,这没问题。
但大模型的输出空间经常是多模式的。

举个例子。

面对同一个代码问题,teacher 可能有几种高概率输出:

直接给代码
先解释思路再给代码
给 Python 实现
给 JavaScript 实现
先指出边界条件

Forward KL 会倾向于让 student 覆盖所有可能性。
当 student 容量不足时,它可能学成一个平均态:每种都沾一点,但每种都不够稳定。

这就是 mean-seeking 的风险。


3.2 Reverse KL:集中到高质量模式上

Reverse KL 的性格是 mode-seeking。

它不要求 student 覆盖 teacher 所有可能输出,而是鼓励 student 选择 teacher 也认可的某个高质量模式。

这更适合后训练。

因为后训练不是让模型“什么风格都来一点”,而是让模型形成稳定、可靠、可控的输出行为。

所以可以这样记:

Forward KL:学全,但容易散
Reverse KL:学精,更稳定

在 OPD 里,Reverse KL 还有一个工程优势:它可以天然支持 sampled-token 估计。

因为 Reverse KL 的期望在 student 分布下。student 已经采样出了 token,所以可以直接用学生实际生成的 token 来估计该位置上的 KL 信号。

这就是 Sampled-Token OPD 能成立的关键。


四、Sampled-Token、Top-k、Full-Vocab:OPD 的三种工程形态

OPD 落地时,真正卡工程的不是“能不能算 KL”,而是“每个位置到底拿多少 token 算 KL”。

这里有三种路线。


4.1 Sampled-Token:最省显存的工业默认

Sampled-Token OPD 只看 student 实际采出来的那个 token。

比如在某个位置上,student 生成了 token A。
那么这个位置只比较:

student 对 A 的 log_prob
teacher 对 A 的 log_prob

然后得到一个近似的 reverse KL reward。

优点很明显:

显存最低
实现最简单
适合 single-teacher 场景
训练成本可控

缺点也明显:

每个位置只看一个 token
估计方差相对更高
multi-teacher 场景下可能不够稳定

所以 Sampled-Token 的定位不是“理论最完整”,而是“工业最划算”。


4.2 Top-k:在稳定性和显存之间折中

Top-k OPD 每个位置不只看一个 token,而是看 k 个 token。

这个 k 可以来自 student,也可以来自 teacher,还可以取二者的交集或并集。

例如 thunlp/OPD 里提到过类似策略:

only_stu:只看 student top-k
only_tch:只看 teacher top-k
intersection:看 student 和 teacher top-k 的交集
union:看 student 和 teacher top-k 的并集

这些策略代表不同训练哲学。

only_stu 更关注学生自己在意的 token。
only_tch 更关注老师认为重要的 token。
intersection 更保守,只看双方都重视的 token。
union 更全面,但计算也更重。

Top-k 的价值在于:它比 Sampled-Token 稳,又比 Full-Vocab 便宜。


4.3 Full-Vocab:多教师融合时的高成本选择

Full-Vocab OPD 会把整个词表都拿来算 KL。

如果词表是 100k 级别,那么每个 token 位置都要处理完整词表分布。

这非常贵。

但它有一个优势:估计方差最低,尤其适合 multi-teacher consolidation。

多教师场景下,一个 student 同时面对多个 teacher:

math teacher
code teacher
agent teacher
instruction-following teacher
reasoning teacher

如果每个位置只看 sampled-token,那么多个 teacher 的分布差异可能被采样噪声放大。
Full-Vocab 虽然贵,但能更完整地比较多个 teacher 的分布。

所以它适合大规模训练团队,而不是普通工程默认选项。


4.4 三种方式的取舍表

实现方式 每个位置参与 KL 的 token 显存成本 典型场景
Sampled-Token 1 个 最低 single-teacher,快速工业落地
Top-k k 个 中等 稳定性与成本折中
Full-Vocab 全词表 最高 multi-teacher consolidation,大规模训练

结论很明确:

Sampled-Token 不是低配版 OPD,而是 single-teacher 场景下的高性价比默认;Full-Vocab 不是天然更高级,而是多教师融合场景下为了降低方差付出的显存代价。


五、OPD 在工程上为什么像 PPO 的一个特例?

OPD 很容易进入工业 pipeline,一个重要原因是它可以复用 PPO / GRPO / verl 这类 RL 框架。

从训练流程看,OPD 和 PPO 很像。

区别是:普通 PPO 的 reward 来自 reward model 或环境;OPD 的 reward 来自 teacher 和 student 的 KL。

一个典型 OPD 流程如下:

1. student rollout,生成 response
2. student 计算自己在 response 上的 log_prob
3. teacher 对 prompt + student response 做一次 prefill
4. 计算 token-level reverse KL
5. reward = -KL
6. advantage = reward
7. actor 使用 PPO importance sampling loss 更新

5.1 teacher 只做 prefill,不做 decode

这是 OPD 成本低的关键。

teacher 不需要重新生成答案。
teacher 只需要看 student 已经生成好的 response,然后一次 forward 得到每个位置的 logits。

也就是说:

teacher 不是重新写答案
teacher 是批改 student 已经写好的答案

这和普通“让 teacher 生成高质量数据再训练 student”的方式不同。

teacher decode 很贵。
teacher prefill 相对便宜。

所以 OPD 的效率,很大一部分来自这个设计。


5.2 reward = -KL

OPD 的 reward 可以直观理解为:

student 越像 teacher,reward 越高
student 越偏离 teacher,reward 越低

在 sampled-token reverse KL 的情况下,可以写成:

kl_val = student_logp - teacher_logp
reward = -kl_val

如果 student 对某个 token 很自信,但 teacher 并不认可,那么 KL 变大,reward 变低。
如果 student 输出的 token teacher 也认可,那么 KL 变小,reward 变高。

这使 OPD 的 reward 比普通 reward model 更难被“刷分”。

因为最终目标不是骗过一个标量打分器,而是让 student 的行为分布靠近 teacher。


5.3 advantage 直接等于 reward

普通 PPO 需要 critic 和 GAE,是因为它通常面对稀疏奖励。

但 OPD 的 reward 已经是 token-level 的。

所以不需要再把一个最终奖励拆回每个 token。

可以直接:

advantage = token_reward

这就是 OPD 作为 PPO 特例的关键简化。

它不是推翻 PPO,而是把 PPO 里的奖励来源替换成了 teacher KL reward。


六、Rethinking OPD:OPD 为什么有时候训不动?

讲到这里,OPD 看起来很完美。

它有学生自己的轨迹,有 teacher 的 dense feedback,还能复用 PPO 框架。

但问题是:OPD 不是所有场景都能跑出好结果。

Rethinking OPD 这篇工作最重要的价值,就是把 OPD 的失败条件讲清楚了。

它指出 OPD 想成功,至少需要两个前提。


6.1 前提一:student 和 teacher 的 thinking pattern 要兼容

OPD 是逐 token 对齐。

这意味着 student 和 teacher 的表达习惯、推理格式、输出节奏不能差得太远。

如果 teacher 喜欢这样回答:

先写详细推导
再列中间公式
最后给答案

而 student 只会这样回答:

答案是 42。

那它们在 token-level 上的 KL 差异会很大。

这种差异不一定代表 student 错了,也可能只是两个模型的思维格式不兼容。

这时候直接 OPD,teacher 给出的 KL 信号可能不是“能力纠偏”,而是“风格冲突”。

解决办法是:off-policy cold start

也就是先用 teacher 生成一批样本,对 student 做一轮短 SFT,让 student 的输出格式先靠近 teacher。

然后再进入 OPD。

可以理解为:

先让学生听得懂老师的讲课方式
再让老师在学生自己的答案上逐步批改

6.2 前提二:teacher 必须有 student 没有的新能力

很多人有一个误解:teacher 越大,OPD 就越有效。

不一定。

真正决定 OPD 效果的,不是 teacher 的绝对强度,而是 teacher 和 student 之间有没有“可学习的能力差”。

如果 teacher 只是比 student 分数高一点,但在 token-level 分布上没有提供新信息,那么 student 很难学到东西。

Rethinking OPD 用 weak-to-strong reverse distillation 做了一个很反直觉的实验:在同家族不同尺寸模型之间互相蒸馏时,强弱方向并没有想象中那么关键。

这个现象说明:

如果两个模型的 token-level 行为模式高度相似,那么强模型未必能提供足够新的训练信号。

所以 OPD 训练数据不能无脑堆。

最有价值的 prompt 是:

teacher 能答好
student 答不好

这就是 teacher-aligned prompt selection。

工程上可以这样做:

1. teacher 跑一遍候选 prompt
2. student 跑一遍候选 prompt
3. 根据 teacher_score - student_score 排序
4. 只选差距最大的样本做 OPD

这比“把所有数据都喂给 OPD”更有效。


6.3 Rethinking OPD 给出的核心提醒

Rethinking OPD 最值得记住的不是某个复杂公式,而是一个训练判断:

OPD 的收益来自 teacher 和 student 之间的有效教学差,而不是 teacher 的名义大小。

如果 teacher 和 student 思维方式不兼容,需要 cold start。
如果 teacher 没有 student 真正缺失的能力,需要 prompt selection。
如果任务需要长程探索,OPD 不能单独承担全部训练。

这直接引出了 OPD 的边界:它强在模仿和迁移,但不强在开放探索。


七、Uni-OPD:训练过程中如何修 OPD 的两个瓶颈?

Rethinking OPD 主要解决“训练前要不要做 OPD、怎么选数据”的问题。

Uni-OPD 进一步往前走一步:如果 OPD 已经开始训练了,过程中出现问题怎么办?

Uni-OPD 把问题分成两侧:

学生侧:student 探索不足
教师侧:teacher 信号不可靠

这也是它叫 dual-perspective recipe 的原因。


7.1 学生侧问题:student 总在简单状态里打转

OPD 是 on-policy 的。
on-policy 的好处是轨迹真实,坏处是学生可能被自己的能力边界困住。

如果 student 一直生成很简单、很保守、很熟悉的答案,那么 teacher 就算逐 token 打分,也很难把 student 推到真正有信息量的状态。

这叫 insufficient exploration of informative states。

Uni-OPD 的学生侧修法是 data balancing。

第一层是 offline difficulty-aware balancing。
训练前先按 prompt 难度分桶,避免 batch 里全是简单题或全是难题。

第二层是 online correctness-aware balancing。
训练中根据 student rollout 的对错动态调整样本,让 batch 里同时有正确轨迹和错误轨迹。

为什么要这样?

因为全对的 batch 没有足够纠错信号。
全错的 batch 又可能让模型只看到失败轨迹。
有对有错,模型才知道什么该靠近、什么该远离。


7.2 教师侧问题:teacher 的 token 信号可能反了

teacher 比 student 强,不代表 teacher 在所有 student rollout 上都可靠。

尤其是 student 生成了一些奇怪轨迹时,teacher 的 token-level KL 信号可能和最终结果不一致。

例如:

某条轨迹最终答案错了
但 teacher 在局部 token 上给了很高认可

某条轨迹最终答案对了
但 teacher 因为表达方式不同给了较低认可

这时候 OPD reward 就可能方向反了。

Uni-OPD 的解决方法是 outcome-guided margin calibration。

它的核心思想很朴素:

对同一个 prompt,正确轨迹的 OPD 回报应该高于错误轨迹。

如果出现错误轨迹分数高于正确轨迹,就说明 teacher 信号需要校准。

校准方式有两类:

Margin mask:直接丢掉不可靠 prompt
Margin shift:把正确轨迹的回报整体抬高,恢复正确/错误之间的顺序

这一步很关键。

它说明 OPD 不是盲信 teacher,而是用最终 outcome 去约束 teacher 的逐 token 信号。


7.3 Uni-OPD 的真正贡献

Uni-OPD 的价值不只是提出两个技巧,而是把 OPD 的训练控制变得更工程化。

它告诉我们:

OPD 不是 student rollout 完、teacher 打分完就结束
还要检查 student 是否探索到了有价值状态
也要检查 teacher 的 token-level 信号是否和最终结果一致

所以 Uni-OPD 让 OPD 从“会跑”走向“更稳地跑”。

它的核心判断可以浓缩成一句话:

teacher 的价值来自 capability gap,而不是 absolute strength。

也就是说,teacher 真正有用的地方,是它能在 student 不会的状态上给出可靠增量信号。


八、Learning to Foresee:OPD 为什么快?

到这里,OPD 的有效性已经比较清楚了。

但还有一个更深的问题:

OPD 为什么会比 RL 高效那么多?

只说“因为 OPD 有 dense reward”还不够。

因为 SFT 也有 dense supervision,但 SFT 不一定能达到 OPD 的效果。
所以 OPD 的效率不只是“反馈更密”,还有更底层的训练动力学原因。

Learning to Foresee 给出的解释是:OPD 有 foresight,预见性。


8.1 OPD 早期就找到了正确更新方向

Learning to Foresee 的核心观点是:

OPD 在训练早期就锁定了最终有效的更新方向,后续训练主要是在这个方向上增加幅度。

RL 则不同。

RL 的更新方向在训练过程中更容易反复变化。
它需要通过大量探索,逐渐找到哪些参数更新真正有用。

可以这样理解:

OPD 像一开始就找到了路,后面主要是沿着路走远
RL 像一边走一边试路,走错很多岔路后才接近目标

这解释了为什么 OPD 在某些场景里用更少 GPU hours 就能达到强效果。


8.2 Functional Redundancy Avoidance:OPD 少改没用的模块

Learning to Foresee 观察到,OPD 的更新更集中在对 reasoning 有用的模块上,例如中间层 MLP。

而 RL 可能在低贡献模块上也注入不少更新,比如底层、顶层或其他对当前 reasoning 任务帮助较小的位置。

这叫 Functional Redundancy Avoidance。

换成直白说法:

OPD 更知道该改哪里,RL 更容易把力气花散。

这不是说 RL 没用,而是说 RL 在探索过程中会付出更高的参数更新成本。


8.3 Early Low-Rank Lock-in:OPD 早早锁定低秩方向

Learning to Foresee 还观察到,OPD 的参数更新呈现更明显的低秩结构。

也就是说,它的主要更新能量集中在少数几个主方向上。

更重要的是,这些主方向在训练早期就和最终方向高度一致。

材料中提到一个很反直觉的现象:

取 OPD 只训练 10% 时的 checkpoint
只把 update magnitude 拉到最终水平
方向不变
可以恢复相当一部分最终性能

这说明 OPD 前期已经找到了关键方向,后面更多是在堆幅度。

这就是 Early Low-Rank Lock-in。


8.4 EffOPD:把“方向早锁定”变成训练加速

既然 OPD 很早就锁定方向,那么后面的训练是否可以加速?

EffOPD 的思路就是:在指数 checkpoint 上做 extrapolation。

简化成工程流程:

1. 在 step = 1, 2, 4, 8, 16... 保存 checkpoint
2. 用最近两个 checkpoint 的参数差估计更新方向
3. 沿这个方向外推几个候选模型
4. 用很小的 validation set 测候选效果
5. 接受不掉点且提升最大的外推版本

这个方法的吸引力在于侵入性低。

不需要重新设计 OPD pipeline,也不需要训练新模块,只是在 checkpoint 之间插入一个 extrapolation hook。

材料中提到 EffOPD 可以带来 3× 加速。
但这个数字是否能稳定迁移到所有模型、所有任务、所有工程环境中,本文不作额外推断,标记为:Information Not Available


九、四篇论文合起来,到底给了我们什么认知?

现在把四篇论文串起来,就能看到 OPD 的完整知识体系。

论文 解决的问题 留下的核心认知
GKD OPD 范式从哪里来 蒸馏应该发生在 student 自己生成的轨迹上
Rethinking OPD OPD 什么时候失败 thinking pattern 要兼容,teacher 要有新能力
Uni-OPD OPD 训练中怎么修 修 student 探索不足,也修 teacher 信号反向
Learning to Foresee OPD 为什么快 OPD 早期锁定有效低秩更新方向

这四篇论文的关系不是并列堆砌,而是一条递进线:

GKD:提出范式
Rethinking OPD:找到边界
Uni-OPD:修复训练瓶颈
Learning to Foresee:解释效率机理并加速

如果只读 GKD,会觉得 OPD 是一个漂亮范式。
如果再读 Rethinking OPD,会知道它不是万能的。
如果读 Uni-OPD,会知道训练中怎么救。
如果读 Learning to Foresee,会知道它为什么快,以及为什么这种快也可能带来探索受限。

这才是 OPD 的完整理解。


十、工业实践:OPD 到底怎么用?

OPD 的工业价值不止一种。

它已经不只是“把大模型蒸馏到小模型”的工具,而是后训练流水线中的多功能组件。

下面按用途讲五类典型模式。


10.1 DeepSeek V4:用 OPD 替代大规模 mix RL

DeepSeek V4 的路线可以概括为:先分后合。

先在多个 domain 上分别训练 specialist:

math specialist
code specialist
agent specialist
instruction-following specialist
其他 domain specialist

每个 specialist 都在自己的领域里做到强。
然后用 Multi-Teacher OPD 把多个 specialist 的能力合并回一个统一 student。

这和一次性 mix RL 的思路不同。

mix RL 是:

所有 domain 混在一起
让一个 actor 同时往多个目标优化

问题是不同 domain 的目标可能互相拉扯。

数学希望严谨。
代码希望可执行。
agent 希望规划和工具使用。
指令跟随希望格式稳定。
通用聊天希望自然。

一次性混在一起训,可能得到一个折中但不够尖锐的模型。

OPD 的“先分后合”更像是:

先让每个专家单独练到强
再把专家行为蒸馏回统一模型

这不是参数级合并,而是行为级合并。


10.2 Qwen3:用低成本 OPD 替代部分 RL

材料中给出的 Qwen3 对比非常有代表性:

方法 AIME'24 GPQA-Diamond GPU Hours
Off-policy distillation / SFT 55.0% 55.6% Information Not Available
+ Reinforcement Learning 67.6% 61.3% 17,920
+ On-policy Distillation 74.4% 63.3% 1,800

这张表的冲击力在于:

OPD 效果更好
GPU Hours 约为 RL 的 1/10

这解释了为什么 OPD 会被工业界重新重视。

但这里不能得出“OPD 永远优于 RL”的结论。

更准确的说法是:

在某些 reasoning 或单 domain 后训练场景里,OPD 可以用更低成本提供非常强的训练信号。

它的优势来自真实轨迹上的 dense feedback,而不是来自开放探索。


10.3 MiMo:用 MOPD 做多专家融合

MiMo-V2-Flash 的路线可以理解为 MOPD,Multi-Teacher On-Policy Distillation。

先训练多个领域 teacher:

math teacher
code teacher
reasoning teacher

然后让 student 自己 rollout。
多个 teacher 在 student 的轨迹上给信号。
最后把多个专家能力压进一个 student。

这个模式说明 OPD 很适合做专家融合。

它不是让一个模型从零同时学习所有能力,而是先培养专家,再统一蒸馏。

更重要的是,MOPD 往往可以放在 agentic RL 之前。

也就是:

Pre-training
-> Mid-training
-> Multi-Teacher OPD
-> Agentic RL

这说明 OPD 可以作为 RL 前的高质量热身阶段。


10.4 GLM-5:用 OPD 做跨阶段能力保活

多阶段后训练会带来一个问题:能力遗忘。

模型经过某个 RL 阶段后,某类能力变强,但其他能力可能掉。

例如:

reasoning 变强
agent 能力变强
但 instruction-following 或通用对话变弱

GLM-5 的 OPD 用法可以理解为 cross-stage distillation。

它让模型在新阶段训练后,重新对齐到之前某个能力 snapshot,防止旧能力丢失。

这个用法非常重要。

因为工业模型不是只训练一次,而是不断迭代。

如果每次增强一个新能力,都损害一批老能力,模型就很难长期维护。

OPD 在这里不是为了“冲高分”,而是为了“保能力”。


10.5 Thinking Machines Lab:用旧版自己当 teacher 做持续学习

持续学习场景里,OPD 还有一个非常漂亮的用法:用旧版自己当 teacher。

材料里有一个例子:

模型 Internal QA IF-eval
Qwen3-8B 原版 18% 85%
+ midtrain 36% 79%
+ OPD 41% 83%

这个例子说明一件事:

mid-training 可以让模型学到新知识,但可能损害原来的 instruction-following 能力。
OPD 可以用旧版模型作为 teacher,把旧能力拉回来。

这对企业知识库、内部文档、领域模型特别有价值。

企业模型会不断吸收新文档、新 SOP、新业务流程。
如果每次吸收新知识都损害原来的通用能力,系统就会越来越不稳定。

用旧 snapshot 做 OPD,本质上是在给当前模型加一个能力锚点。


十一、OPD 的局限:为什么它不是 RL 的全场替代品?

OPD 很强,但它不是免费午餐。

它的优势来自强模仿:

student 靠近 teacher
student 学 teacher 的高质量模式
student 快速进入有效更新方向

但它的局限也来自强模仿:

student 的探索空间会被 teacher 限制
student 可能学到 teacher 的局部 token 习惯
student 可能过早锁定更新方向

这在 long-horizon 和 agentic 任务中尤其明显。

因为这类任务需要模型自己探索:

多轮决策
环境反馈
工具调用
长程规划
失败重试
策略搜索

如果一开始就让模型强行贴近 teacher,可能会压缩它探索新策略的空间。

所以 OPD 和 RL 最合理的关系不是替代,而是配合。

更好的训练组织方式是:

先用 OPD 做能力迁移和专家融合
再用 RL 做开放探索和环境交互优化
最后用 cross-stage OPD 做能力保活

这才是成熟的后训练流水线。


十二、什么时候应该用 OPD?什么时候不该单独用?

可以用下面这个表判断。

场景 OPD 是否适合 原因
有强 teacher,想低成本迁移能力 适合 OPD 擅长行为迁移
student 和 teacher 输出风格接近 适合 token-level KL 更可靠
多个 domain expert 需要合并 适合 Multi-Teacher OPD 可以做行为级融合
模型训练后出现能力遗忘 适合 旧 snapshot 可以做能力锚点
想在 RL 前做热身 适合 OPD 能给出稳定初始策略
teacher 和 student 思维格式差异大 谨慎 需要 cold start
teacher 没有明显新能力 不适合 没有有效教学差
任务高度依赖开放探索 不宜单独使用 需要 RL 或环境交互补足

十三、如果自己实现 OPD,应该盯住哪些关键点?

一个最小可用的 OPD pipeline 可以这样设计:

Step 1:准备 prompt 数据
Step 2:student rollout,生成 response
Step 3:teacher 对 prompt + student response 做 prefill
Step 4:抽取 student logp 和 teacher logp
Step 5:计算 reverse KL
Step 6:reward = -KL
Step 7:advantage = reward
Step 8:复用 PPO / GRPO actor update

但真正做工程时,不要只看流程能不能跑,还要看五个关键点。


13.1 teacher 是否只做 prefill?

teacher 不应该重新生成答案。

它应该只做:

prompt + student response -> logits

如果 teacher 也 decode,OPD 的成本优势会明显下降。


13.2 KL 方向是否和实现方式匹配?

如果你要用 sampled-token,就要优先考虑 reverse KL。

因为 sampled-token 的无偏估计基础来自 student 分布采样。

如果你要用 forward KL,通常需要 top-k 或 full-vocab,否则估计会偏。


13.3 token 集合怎么选?

简单策略:

single-teacher:优先 sampled-token
需要更稳:尝试 top-k
multi-teacher:考虑 full-vocab,但先评估显存

不要盲目上 Full-Vocab。

Full-Vocab 的价值主要在多教师融合和低方差估计,不是所有场景都需要。


13.4 prompt 是否有教学差?

OPD 最怕训练在没有教学差的数据上。

应该优先选择:

teacher 答得好
student 答得差
teacher 和 student 差距明显

这比盲目扩大数据量更重要。


13.5 是否需要 cold start?

如果 student 和 teacher 的输出风格差异很大,直接 OPD 可能不稳。

可以先做短 SFT:

teacher 生成少量高质量样本
student 做 off-policy cold start
student 输出风格靠近 teacher
再进入 OPD

这能减少 token-level KL 的噪声。


十四、OPD 最重要的 12 个结论

第一,OPD 的本质不是“蒸馏”两个字,而是:

on-policy 轨迹 + dense KL reward。

第二,SFT 的问题是训练轨迹来自老师,推理轨迹来自学生,因此有分布偏移。

第三,RL 的问题是轨迹真实,但奖励稀疏,token-level credit assignment 很难。

第四,OPD 同时拿到了学生自己的轨迹和 teacher 的逐 token 反馈。

第五,GKD 的意义是把 OPD 的源头范式立起来:让学生在自己生成的错误上学习。

第六,Reverse KL 适合 OPD,因为它是 mode-seeking,并且支持 sampled-token 估计。

第七,Sampled-Token 是 single-teacher 场景下的高性价比默认;Top-k 是折中;Full-Vocab 适合多教师融合但显存很贵。

第八,OPD 在工程上可以看作 PPO 的一个特例:teacher prefill,reward = -KL,advantage = reward,actor 复用 PPO loss。

第九,Rethinking OPD 告诉我们:OPD 成功需要 thinking pattern 兼容,也需要 teacher 提供 student 没有的新能力。

第十,Uni-OPD 告诉我们:OPD 训练中要同时修 student 探索不足和 teacher 信号不可靠。

第十一,Learning to Foresee 告诉我们:OPD 快,不只是因为 dense reward,还因为它早期就锁定了有效低秩更新方向。

第十二,OPD 不应被当作 RL 的完全替代品。在 long-horizon、agentic、多轮交互任务中,它更适合做 RL 前的高效热身。


结语:OPD 真正改变的是后训练组织方式

OPD 的价值,不是多了一个 loss,也不是多了一个蒸馏技巧。

它真正改变的是后训练的组织方式。

过去我们常见的路线是:

Base Model
-> SFT
-> RL

现在更成熟的路线可能是:

Base Model
-> Domain SFT / Mid-training
-> Domain RL 训练 specialist
-> Multi-Teacher OPD 汇聚专家能力
-> Agentic RL 做开放探索
-> Cross-stage OPD 做能力保活

OPD 在这条链路里扮演的不是单一角色。

它可以做能力迁移。
它可以做多专家融合。
它可以做 RL 前热身。
它可以做持续学习。
它也可以做跨阶段能力保活。

但 OPD 不是万能药。

它擅长把已有强模型的行为迁移给 student,却不擅长替代所有探索。
它能让模型更快靠近 teacher 的高质量模式,但也可能限制模型跳出 teacher 之外。

所以最合理的理解是:

OPD 负责把模型带到一个高质量起点,RL 负责让模型继续探索更远的策略空间。

这就是 OPD 在大模型后训练中的真正位置。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐