OPD: On-Policy Distillation 介于 SFT 与 RL 之间的第三条路
作者:XD / 发表: 2026年6月30日 02:22 / 更新: 2026年6月30日 02:22 / 科研学习 / 阅读量:5
最近看 LLM 后训练,OPD,On-Policy Distillation 是一个越来越绕不开的关键词。它不像传统 SFT 那样只学 teacher 的标准答案,也不像 RL 那样主要依赖最终 reward,而是试图同时拿到两边的好处:on-policy 的轨迹 + token-level 的稠密监督。
我觉得可以先用一句话理解 OPD:
OPD = 让 student 自己生成轨迹
+ 让 teacher 对这条轨迹逐 token 打分
= on-policy + dense supervision
这个定义也和 AwesomeOPD 里的整理基本一致:OPD 至少要满足两点,一是 student 在训练中采样自己的轨迹,二是 teacher 对这些 student samples 提供 token-level 或 sequence-level 监督。
为什么需要 OPD
大模型后训练长期卡在 SFT 和 RL 之间。
SFT 的优势是监督信号稠密。teacher 给出完整答案后,student 可以在每个 token 上学习。但问题是 SFT 通常是 off-policy 的:模型学的是 teacher 的轨迹,部署时一旦走到自己没见过的状态,就容易误差累积。
RL 刚好相反。它是 on-policy 的,模型在自己实际到达的状态上学习;但 reward 往往很稀疏,一整条回答最后只有一个标量分数,训练效率低,而且还可能 reward hacking。
OPD 想要同时拿走两者的优点:
| 方法 | 轨迹来源 | 监督信号 | 优点 | 缺点 |
| --- | --- | --- | --- | --- |
| SFT / Off-policy Distillation | teacher | 稠密 | 好训练,反馈直接 | 容易误差累积 |
| RL | student | 稀疏 | 理论上可超越 teacher | 效率低,可能 reward hacking |
| OPD | student | 稠密 | on-policy + dense supervision | 上限受 teacher 限制 |
所以 OPD 不是“更强的 RL”,而是“更密的监督”。它更像是把 student 自己会走到的状态拿出来,再让 teacher 对这些状态做逐 token 纠偏。
OPD 的核心流程
OPD 的基本流程可以概括为四步:
1. 给定 prompt,由 student 自己生成完整回答。
2. 把 student 的回答交给 teacher。
3. teacher 计算每个 token 的 log probability 或 logits 分布。
4. 用 teacher 的逐 token 信号训练 student。
关键点是:轨迹来自 student,监督来自 teacher。
这和传统蒸馏的根本差别就在这里。传统蒸馏是 teacher 先生成轨迹,student 学 teacher 走过的路;OPD 是 student 自己先走,teacher 只负责在 student 已经走到的位置上给反馈。
一句话:
传统蒸馏学的是 teacher 走过的路;
OPD 学的是 student 自己走过的路。
这会带来一个很实际的好处:student 可以在自己真实会访问到的状态上被纠正,而不是只在 teacher 的理想轨迹上学习。这一点和 imitation learning 里的 DAgger 很像:让 learner 在自己访问到的状态上接受 expert 纠偏。
OPD 和 RL 的区别
从表面看,OPD 和 RL 都使用 student 自己生成的轨迹。但二者关注点不一样。
RL 通常使用 sequence-level reward。模型生成一整条回答,最后由 verifier、reward model 或环境给一个分数。它更关注“最终结果是否正确”。
OPD 则更关注“每一步行为是否接近 teacher”。teacher 会在 student 已经生成的每个 token 上提供概率分布或 log-prob 反馈,因此信息密度更高。
RL 更像 search:
模型探索不同路径,最后用 reward 判断哪条路径更好。
OPD 更像高效复制策略:
模型走自己的路径,但 teacher 在每一步告诉它哪里更像正确行为。
这也是为什么很多 OPD 方法可以用更少训练步数和算力达到接近 RL 的效果。它不需要等序列结束才获得一个标量反馈,而是在轨迹中间就能拿到细粒度学习信号。
OPD 适合哪些任务
OPD 特别适合长轨迹任务。因为这些任务里,最终答案错了往往只是结果,真正的问题出现在中间步骤。
典型场景包括:
- 数学推理:中间步骤走偏后,学习如何恢复。
- 代码生成:前面写出糟糕代码后,学习如何继续修。
- 多轮工具调用:前一步工具结果不理想时,学习如何调整策略。
- 多模态或视频理解:前面描述错了,后面重新对齐视觉证据。
- Agent 任务:长轨迹决策中,出现错误状态后学习如何回到合理路径。
OPD 也很适合做能力蒸馏。比如把强 teacher 的推理能力复制到小 student:先用 SFT 打基础,再用 OPD 让 student 在自己的生成轨迹上继续靠近 teacher。
在 continual learning 里,它也有一个很实用的范式:
新知识用 SFT 灌进去;
旧能力用 OPD 召回来;
循环往复。
所以 OPD 不只是蒸馏工具,也可以是一种能力保持工具。
从 AwesomeOPD 看 OPD 生态
AwesomeOPD 是目前比较系统的 OPD 资源索引。它把 OPD 相关工作分成了 surveys、white-box、black-box、OPSD、OPD-RL hybrids、reasoning、multimodal、agent、speculative decoding、frameworks 等类别。
如果是刚开始了解 OPD,我会优先看这几类链接。
入门与综述
-
AwesomeOPD
这是总入口。它不仅列论文,还按 teacher source、supervision signal、rollout consumption、pipeline slot 做了分类,很适合作为路线图。 -
GKD: On-Policy Distillation of Language Models
早期非常关键的 OPD 工作之一,核心是从 student 自己生成的错误中学习。Hugging Face TRL 里也有 GKDTrainer 实现。 -
A Survey of On-Policy Distillation for LLMs
更适合当索引用,快速了解 OPD 相关方法的谱系。 -
Rethinking On-Policy Distillation
更偏机制分析,讨论 OPD 什么时候有效、为什么有效,以及需要什么训练 recipe。
方法改进
-
MiniLLM
经典 white-box OPD 路线,使用更大 teacher 的信号在 student rollouts 上做蒸馏。 -
DistiLLM
讨论 on-policy/off-policy 混合和 KL 形式,适合理解不同 divergence 对蒸馏行为的影响。 -
FiRe-OPD
思路是先过滤,再重加权:轨迹级别做 hard filtering,token 级别做 soft reweighting。这个方向很工程,适合解决 student rollout 质量参差不齐的问题。 -
TRD: Trajectory-Refined Distillation
它关注 dense per-token OPD 的 prefix failure 问题,先在轨迹层面 refine student rollout,再做蒸馏。
OPD 与 RL 结合
-
G-OPD
把 OPD 看成 KL-constrained RL 的一种形式,并讨论 reward scale 如何让模型有机会超过 teacher。 -
OPD+
重新审视 advantage 设计,把 OPD 表述成带 f-divergence reward 的 RL 问题。 -
TGPO
teacher 在 student context 下直接引导 token-level generation,同时结合 RLVR trajectory reward,适合看 OPD 如何进入 RL 训练内部。
工具与代码
-
TRL
目前 OPD trainer 覆盖很广,AwesomeOPD 也把它列为最值得关注的开源训练集合之一。 -
ms-swift
Alibaba ModelScope 的训练框架,AwesomeOPD 标注其通过 GKD 相关 examples 支持 OPD/GKD 训练。 -
verl
ByteDance Seed 的 RL 训练框架,包含 on-policy distillation recipe,也适合做 RL + OPD 类实验。 -
SkyRL
UC Berkeley NovaSky 生态里的训练框架,也有 on-policy distillation 示例。
OPD 的边界
OPD 很强,但它不是万能药。
首先,它需要一个比 student 更强的 teacher。如果 teacher 本身有问题,student 也会被带偏。OPD 的能力上限基本受 teacher 限制,而 RL 在理论上可以通过探索和环境反馈超过 teacher。
其次,OPD 的目标是靠近 teacher,不一定等价于优化最终任务指标。对于有明确 verifier 或环境反馈的任务,RL 仍然有价值。
所以更合理的判断是:
OPD 擅长把已有能力高效复制给 student;
RL 更适合在可验证环境里搜索更优策略。
如果目标是稳定、低成本地提升模型行为,让小模型接近强模型,OPD 很合适。如果目标是突破 teacher 上限,或者在明确 reward 的环境里寻找新策略,最终还是要靠 RL。
小结
我理解的 OPD,本质上是对轨迹做一种更聪明的监督学习:轨迹来自 student,反馈来自 teacher,而且反馈可以细到 token 级别。
它解决的是 SFT 和 RL 各自的一部分痛点:SFT 有稠密监督但 off-policy,RL 是 on-policy 但 reward 稀疏。OPD 把两者拼起来,得到一个工程上很实用的折中方案。
最后用一句话总结:
OPD = 拿走 RL 的 on-policy,
再拿走 SFT 的稠密监督。
它不是 RL 的替代品,而是介于 SFT 与 RL 之间的一条第三路线。对于模型蒸馏、能力召回、持续学习和长轨迹任务来说,OPD 会是后训练里非常值得长期关注的方法。
