大模型后训练新范式 OPD:为什么它能用 1/10 算力挑战 RL?
摘要
大模型后训练正在从“模仿标准答案”走向“在真实生成轨迹上接受细粒度纠偏”。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 在大模型后训练中的真正位置。
更多推荐

所有评论(0)