深度研究|OPSD 在线策略自蒸馏:一个模型当自己的老师
> 深度研究 · 2026-08-20 > 主文献:Siyan Zhao 等《Self-Distilled Reasoner: On-Policy Self-Distillation for Large Language Models》(UCLA / HKU / Meta Superintelligence Labs,arXiv:2601.18734,2026-01) > 批判与共进:Zhu 等《The Many Faces of On-Policy Distillation》(UIUC / 人大 / 北大,arXiv:2605.11182);Yang 等《Matching Supervision to the Student's Learning Capacity》(腾讯,arXiv:2608.08176)
---
一、一句话说清它是什么
OPSD,全称 On-Policy Self-Distillation,在线策略自蒸馏。
说白了就一句:同一个模型,靠「多看了标准答案」这点额外上下文,化身成自己的老师,反过来给「没看答案的自己」做逐 token 的密集监督。
它不养外部更强的教师,不挂奖励模型,也不靠人标推理链。等于把 SFT、RL、蒸馏三家的好处,往一处拢。
妙处在哪?模型训的是「自己真正会生成的那些轨迹」,不是老师凭空造出来的理想答案。
---
二、它要治的老毛病
先得看清楚,它出来之前,后训练这三招各自卡在哪。
SFT 拿专家示范训,省事。毛病是曝光偏差(exposure bias):训练分布跟推理分布脱节,模型从没在训练时见过自己的错。一错就崩,错误会顺着自回归层层累积。
RL(GRPO 这类) 走在线,泛化好。代价是贵。每道题要采一拨(通常 8 条以上)rollout,算力吞得狠。而且奖励稀疏、只在序列末尾给个对错信号——中间哪一步走岔了,它压根不告诉你。更坑的是:一整批要么全对要么全错,梯度信号直接归零。
传统蒸馏 有密集的 token 级监督,香。可它是 off-policy:老师生成一批数据,学生学这些。分布照样跟学生推理时脱节。
OPSD 想干的,是把在线训练的「分布真实」和密集监督的「信号稠密」两样都占了,还不要外部老师。
---
三、机制:一个模型,两个角色
就这么三步走——
第一步,学生先自己写。 给问题 \(x\),学生策略 \(p_S(·|x)\) 只看着题,自回归采样出一条完整解答 \(ŷ\)。这条轨迹纯从学生自己的分布里来,跟推理时一模一样。关键就在这:训的是它会真生成的东西。
第二步,师生同看同一段前缀。 拿学生写出的 \(ŷ\),在每个位置 \(n\) 上,师生俩都基于「相同的前缀 \(ŷ_{<n}\) 」算下一 token 的分布:
- 学生:
- 老师:
,多了标准答案 \(y*\)
唯一的差别,是老师手里有 \(y*\)。它知道正解长啥样,于是它给的分布,天然偏向「能把推理带上正道的 token」。
第三步,逐 token 对齐分布。 在 \(ŷ\) 每个位置上,把老师分布和学生分布之间的散度算出来,沿序列平均,再跨数据平均。目标就是把这个平均散度压下去。
损失长这样(散度 D 随便挑,原文用广义 Jensen–Shannon 散度 \(JSD_β\) ):
梯度只从学生的 logits 回传。老师是「冻住」的——它用的是训练初期的参数,不是正在更新的学生,稳住训练、顺便正则化。
> 为什么选 JSD 而不是裸 KL?JSD 对称、数值稳,还带个 \(β\) 调和师生谁说了算。KL 那一版也有:把每位置的 \(log p_T − log p_S\) 当成固定优势,套进策略梯度,只动学生。便宜,但信号比全词表版弱一截。
---
四、它凭什么能 work
道理不玄。人就这么学的。
你解一道题解错了,拿标准答案一对,往往比从零想出解法容易得多。看人家的推导,顺藤摸瓜,找出自己哪步绕了远路——这比无中生有简单。
论文把这直觉接到了一个老结论上:「评判比生成容易」。作者赌一把:对 LLM 而言,「看懂一道已有正解」(rationalization)比「凭空生成正解」容易。既然如此,就让够强的模型,借着标准答案把自己的弱版本教上来。
前提是模型得「够强」。太弱的,连答案都读不明白,老师也就哑火了。
---
五、实验:省 token 是真省
设置。 基座 Qwen3 族(含 1.7B 做消融),训练数据来自 OpenThoughts 同款数学集,评测是竞赛级数学基准(AIME24/25、HMMT 等)。
核心对比(数字很扎眼):
| 方法 | 每题采样 | 生成长度 | 大致 token 消耗 |
|---|---|---|---|
| GRPO | 8 条 rollout | 16k | 约 128k |
| OPSD | 1 条 rollout | 1024 | 约 1k |
两个关键消融:
- 逐 token 的 KL 截断(pointwise KL clipping)。 不截断的话,风格类 token(如
wait、think)的散度远高于数学 token,把训练信号整个带偏,容易崩。截断一上,稳了。这步之所以要紧,是因为 OPSD 几百步就收敛完,没多少容错空间。 - 师生生成风格搭配。 Qwen3 有思考模式(TM-on,吐链思维)和直答模式(TM-off)。四组配对里,TM-off 学生 + TM-on 老师在数学 token 上的 KL 散度最大,监督最冲,下游最好——主实验就用的它。
六、泼盆冷水:OPSD 不总是灵
2026 年 5 月那篇《The Many Faces of On-Policy Distillation》专门拆它。结论挺打脸,但讲清楚了边界。
一句话总纲:OPSD 成败不取决于老师强不强,而取决于老师的信号能否在学生「自己生成的轨迹」上保持局部一致。
论文把任务分成两类,结果天差地别:
- 数学推理:常常不灵。 数学题的特权信息(PI)多是「这道题的标准答案」——样本级、独一份。测试时学生看不到,于是 OPSD 学成的,其实是对一长串 PI-conditioned 老师的平均,而不是把每道题的私货变成泛化能力。答案越具体,这个平均越难攒出稳定收益。在 Qwen3-1.7B + OpenThoughts 上,answer-only PI、full-response PI、连 RL 训过的老师带 full-response PI,Math500/AIME24/25 上都没稳定提升。
- 系统提示内化、风格/偏好对齐:反而很香。 这里的 PI 是共享的潜在规则(比如固定的 system prompt、角色设定)。可以被压成一个稳定风格,测试时不需要 PI 照样在。在 CharacterBench、EmotionBench 上,OPSD 比 GRPO、PPO 收敛更快、样本效率更高。
1. 学生前缀把老师拽歪了。 OPD(带外部老师的版本)里,一旦学生走上错支路,老师被迫从这个歪状态接着生成,行为就不再是「老师从头解题」了。GPQA-Diamond 上实打实的实验:Qwen3-14B 老师独立解题 62.12%;接上 Qwen3-1.7B 学生的随机截断前缀后,掉到 45.96%,跌了 16.16 个点。细看,40 个原本对的变错,只有 8 个原本错的变对——负向约是正向的 5 倍。于是模型学了一堆 wait、maybe、反复改道,长度暴涨。
2. TopK reverse KL 的梯度有偏。 全词表算 reverse KL 太贵,很多实现只留 TopK token。本以为是个工程近似,论文点破:TopK 截断破坏了 reverse KL 里常数项相消的性质,引入有偏梯度。某个 token 该不该被抬,不再只看老师更偏好它与否。训练早期不明显,分布一漂,偏差放大,loss、长度、重复率、准确率一起失控——模型先变啰嗦,然后退化成反复念「maybe」,response 顶到上限,准确率近乎归零。
修法有三: stop-gradient TopK(不让偏差那部分梯度过)、renormalized TopK(在 TopK 集合内重归一化)、或把 sampled-token KL 塞进策略梯度形式里。后两者能稳住。
> 顺带一句:论文里 reverse KL 比 forward KL 更受待见。forward KL 是 mode-covering,会把学生推向老师喜欢但学生自己概率很低的 token,分布漂移更猛;reverse KL 是 mode-seeking,保守,更贴合后训练场景。
---
七、续作:把 OPSD 写进一个统一框架
腾讯那篇(arXiv:2608.08176)接着干。它说:vanilla OPSD 有两个默认设定其实次优——
- token 均匀加权(所有位置一视同仁);
- PI 全量暴露(老师把特权信息吃满)。
已有工作分两派,各管一边:一派管「选哪些 token 学」,一派管「老师吃多少 PI」。问题是这两件事通过「学生的学习能力」耦合在一起——死盯一头,只得到条件最优,不是联合最优。
它怎么解。 把 OPSD 重写成一个受约束的优化:在学生的「学习容量预算 ε」下,联合挑 token 权重 w 和 PI 强度 β,最大化可学的平均散度。
引入单一对偶变量 λ(学习难度的边际价格)。妙的是,一个 λ 同时管两件事:它一边定 token 选入的门槛,一边定 PI 该收还是该放。论文给出个轻量在线原始-对偶算法 USD,每批只多 O(T) 的标量更新,无辅助网络、无额外前向。
数字(Qwen3 三规模,Avg@12 %):
| 方法 | 1.7B | 4B | 8B | 九格总均 |
|---|---|---|---|---|
| Vanilla OPSD | 41.5 | 62.2 | 65.5 | 56.4 |
| TIP(仅 token) | 43.0 | 63.0 | 66.7 | 57.1 |
| PAINT(仅 PI) | 42.8 | 62.7 | 66.0 | 57.0 |
| USD(联合) | 44.0 | 64.5 | 67.6 | 58.7 |
ε=0.3,KL clip 0.05,LoRA r64/α128,AdamW lr 5e-6,300 步。ε 敏感度也验了——1.7B 上 ε=0.3 峰值 44.0,ε=0.15/0.5 掉到 42.0/41.5。匹配容量才有用,过松过紧都亏。---
八、周边的生态
OPSD 不是孤篇,衍生出一串变体,各有补丁:
- DASD(方向自适应):按 token 熵路由老师的影响,高不确定处保住探索,别把学生的多样性压死。
- TRD(轨迹精修):用自老师重写整条 rollout,缓解前缀失败和碎片化梯度。
- ROSD(反思引导、错误局部化):KL 损失只落在错的那几段,正确前缀不喂老师信息,OOD 泛化更好。
- 还有把「世界反馈」(编译报错、单测结果、栈帧)当 PI 的编码版;把视觉思维、多模态特征当 PI 的 Visual-OPSD、D-OPSD;乃至扩散 LLM 里用模型自己后半段答案当 suffix 做条件。
- 工程账:相比带外部老师的 OPD,OPSD 靠参数共享,GPU 显存能省下约 40%–60%。
九、什么时候该用,什么时候别碰
值得上:
- 推理压缩——缩短思维链还不掉精度(reasoning compression),部署省钱,前提是基座够强(8B 级更稳);
- 系统提示内化、角色/风格/偏好对齐——PI 是共享规则,正中 OPSD 下怀;
- 竞赛数学——得配够强的 base,且学生已能稳定推理。
- PI 是每样本独有的答案、测试时又拿不到,效果存疑,容易学成一锅模糊平均;
- 弱模型(<8B)推理尚且不稳,压缩无从谈起;
- 学生已经走偏,老师被迫改道,结果长度爆炸、反复
wait。
十、还悬着的问题
- 验证信号怎么接进去。 当前 OPSD 没显式用对错验证(只蒸馏 2k–4k token,连 EoS 都没生成)。将来或许采一整组响应、查对错,用模型自己的正确轨迹去蒸馏它的错误尝试——这样连推理数据集都不用了。
- 群体自蒸馏。 上面那招的延伸。
- 课程学习。 题一超模型理解阈值,老师看了答案也教不动,得让难度随能力爬坡。
- 更大的 token 预算在多轮、长上下文规划里是否还管用,尚是开放问题。
收口一句话
OPSD 的本质,是训练时制造一次「信息访问的不对称」:老师多看的那一眼,被蒸馏进学生参数,推理时这眼就省了。它省算力、给稠密信号、免外部老师;但 PI 是「共享规则」还是「每题私货」,决定了它是灵药还是鸡汤。USD 那篇把「该学哪些 token、老师该看多少」用一对偶变量统一调度,算是把它从手艺活推向了有谱的框架。