OPSD 论文讲解 — 用于 PPT 汇报
论文: Self-Distilled Reasoner: On-Policy Self-Distillation for Large Language Models arXiv: 2601.18734v3, 2026年3月 作者: Siyan Zhao (UCLA), Zhihui Xie (HKU), Mengchen Liu, Jing Huang, Guan Pang, Feiyu Chen (Meta), Aditya Grover (UCLA) 代码: https://github.com/siyan-zhao/OPSD
一、解决什么问题
LLM reasoning 的 post-training 有三条主流路线,各有硬伤:
| 方法 | 优点 | 痛点 |
|---|---|---|
| SFT | 信号密(每 token 都有 label) | Off-policy → exposure bias(训练分布≠推理分布) |
| GRPO/RLVR | On-policy → 无 exposure bias | 信号稀(整条序列只有 0/1 reward,所有 token 一视同仁) |
| On-Policy Distillation | On-policy + 信号密 | 需要额外的更大 teacher 模型 |
OPSD 的目标:能不能同时拿到 on-policy + dense signal + 不要外部 teacher?
二、核心思想(一句话)
同一个模型,给它不同的 context,就分裂出了 teacher 和 student。
- Student:只看题目 x,生成答案
- Teacher:看题目 x + 标准答案 y*(privileged information),评估 student 的答案
两个角色共享同一份权重 p_θ,区别仅在于 prompt 里有没有标准答案。
三、Figure 1 详解(主图,最重要)
这张图是整个方法的完整信号流,从左到右分 4 个区域:
┌─────────────┐ ┌──────────────────────────────────────┐ ┌─────────────────────┐
│ Dataset │ │ On-Policy Self-Distillation │ │ Learning Objective │
│ S={(x,y*)} │ │ │ │ │
│ │ │ ┌─────────────┐ ┌─────────────────┐ │ │ Per-Token Divergence│
│ x: Problem │──→│ │Student Prompt│ │ Teacher Prompt │ │──→│ │
│ y*: CoT+Ans │ │ │ x only │ │ x AND y* │ │ │ D(P_T(·|x,y*,ŷ<n) │
│ │ │ └──────┬──────┘ └───────┬─────────┘ │ │ || P_S(·|x,ŷ<n)) │
│ 同一个 LLM │ │ ↓ ↓ │ │ │
│ p_θ │ │ P_S(·|x) P_T(·|x,y*) │ │ 梯度仅流经 Student │
│ │ │ │ │ │ │ 的 logits │
│ │ │ ŷ ~ P_S(·|x) 评估 ŷ 上的 │ │ │
│ │ │ ↑ on-policy 每个位置概率 │ │ │
│ │ │ │ 采样生成 ↓ │ │ │
│ │ │ └──── ŷ ──────→ P_T(·|x,y*,ŷ<n) │ │ │
└─────────────┘ └──────────────────────────────────────┘ └─────────────────────┘
四个关键步骤(PPT 可用箭头动画逐步展示):
- 数据准备:从 reasoning dataset S={(x_i, y_i*)} 采样一对 (题目, 标准答案)
- Student 生成 rollout:Student prompt 只给题目 x,on-policy 采样生成 ŷ ~ p_S(·|x)
- Teacher 评估 rollout:Teacher prompt 同时给题目 x 和标准答案 y,在 Student 生成的*同一条轨迹 ŷ 上做一次 forward pass,得到每个位置的 teacher 概率分布
- 计算 per-token divergence:每个 token 位置 n,算 teacher 和 student 的概率分布距离 D(p_T || p_S),梯度只通过 student 的 logits 反传
四、Loss 公式拆解
4.1 总 Loss
L_OPSD(θ) = E_{(x,y*)~S} E_{ŷ~p_S(·|x)} Σ_{n=1}^{|ŷ|} D(p_T(·|x,y*,ŷ_{<n}) || p_S(·|x,ŷ_{<n}))
- 外层期望:遍历数据集
- 内层期望:student 自己 on-policy 采样(不是用标准答案!)
- 求和:遍历生成的每个 token 位置
- D:可以是 Forward KL、Reverse KL、JSD 等(实验表明 Forward KL 最好)
4.2 信号怎么来的——直觉理解
在每个 token 位置 n,teacher 和 student 看到的前缀相同(都是 ŷ_{<n}),但 teacher 额外知道标准答案。所以:
- 如果 student 下一步要走偏,teacher(因为看过答案)会给出不同的概率分布 → divergence 大 → 梯度大 → 重点学习
- 如果 student 下一步选择正确,teacher 和 student 分布一致 → divergence 小 → 几乎不更新
这就是 dense signal 的来源:teacher 在每个 token 位置独立告诉 student "你这一步该怎么调"。
4.3 Per-Token Pointwise KL Clipping
论文发现一个严重问题:stylistic tokens(如换行、连接词)的 KL 远大于数学推理 token。
Token 类型 │ 典型 KL 值
─────────────────┼──────────
数学符号/数字 │ 0.02 ~ 0.1
推理连接词 │ 0.5 ~ 2.0
格式/风格 token │ 5.0 ~ 50.0 ← 主导了整个 loss!
修复:对每个 token-vocabulary entry 做 clipping
D_clip(p_T || p_S) = 1/|ŷ| Σ_n Σ_{v∈V} min(ℓ_{n,v}, τ)
clip 掉极端大的值,防止风格 token 劫持训练信号。
五、Figure 2:Teacher vs Student Prompt 对比
┌─────────────────────────────────────────────────────┐
│ Student Prompt (红色) │
│ │
│ Problem: Find the derivative of f(x) = 3x² + 2x - 5│
│ at x = 2 │
│ Answer: │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ Teacher Prompt (绿色) │
│ │
│ Problem: Find the derivative of f(x) = 3x² + 2x - 5│
│ at x = 2 │
│ Here is a reference solution: │
│ First find f'(x) = 6x + 2, then evaluate at x = 2:│
│ f'(2) = 6(2) + 2 = 14 │
│ After understanding the reference solution, │
│ please try to solve this problem using your own │
│ approach below: │
│ Answer: │
└─────────────────────────────────────────────────────┘
关键细节:
- Teacher 不生成 token,只做 prefill(forward pass)
- Teacher 的 prompt 里包含完整的标准答案
- "rationalization" 是隐式的——teacher 看了答案后,自然会在每个位置给出更好的概率分布
六、与 SFT / GRPO 的本质区别
6.1 Table 1(论文核心对比表)
| SFT/Off-Policy | GRPO | On-Policy Distillation | OPSD (Ours) | |
|---|---|---|---|---|
| On-Policy Data | ✗ | ✓ | ✓ | ✓ |
| Dense Learning Signal | ✓ | ✗ | ✓ | ✓ |
| Low Sampling Cost | ✓ | ✗ | ✗ | ✓ |
| No External Teacher | ✓ | ✓ | ✗ | ✓ |
OPSD 是唯一四项全 ✓ 的方法。
6.2 信号密度对比
SFT: 每个 token 有信号,但 ─────── 训练用别人的轨迹,推理走自己的轨迹
(分布错位 → 越训越偏)
GRPO: 自己的轨迹,但 ──────────── 2000 个 token 共享一个 0/1 reward
(信用分配失败 → 浪费样本)
rollout: [t1 t2 t3 ... t2000] → reward = 0
↑ ↑ ↑ ↑
全部受到相同惩罚
OPSD: 自己的轨迹 + ──────────── 每个 token 独立获得 teacher 反馈
(精准 + 高效)
rollout: [t1 t2 t3 ... t2000]
↑ ↑ ↑ ↑
各自不同的 KL divergence
6.3 采样效率对比(Figure 3 数据)
| 指标 | OPSD | GRPO |
|---|---|---|
| 每题采样数 | 1 条 | 8 条 |
| 每条长度 | 1K tokens | 16K tokens |
| 收敛步数 | 100 步 | 数百步 |
| 计算量差距 | ~100x 更省 | — |
GRPO 还有 reward diversity collapse 问题(Figure 3 右图):当所有 8 条 rollout 全对或全错时,advantage = 0,梯度为零,白算了。100 步之后超过一半的 batch 处于这种状态。
七、Algorithm 1 伪代码
Require: 推理数据集 S = {(x_i, y_i*)}; 语言模型 p_θ; divergence D (e.g., JSD_β)
1: Let p_S(·|x) 和 p_T(·|x,y*) 为同一模型在不同 conditioning 下的策略
2: while not converged do
3: Sample minibatch B ⊂ S
4: for all (x, y*) ∈ B do
5: Sample on-policy response ŷ ~ p_S(·|x)
6: Compute token-wise divergence along student rollout:
ℓ(x,y*) ← 1/|ŷ| Σ_n D(p_T(·|ŷ_{<n},x,y*) || p_S(·|ŷ_{<n},x))
7: Calculate loss L_OPSD(θ) ← 1/|B| Σ_{(x,y*)∈B} ℓ(x,y*) and update θ
八、实验结果
8.1 数学推理 Benchmark(Table 2)
| Method | AIME24 | AIME25 | HMMT25 | Average |
|---|---|---|---|---|
| Qwen3-8B | ||||
| Base (Instruct) | 75.8 | 65.6 | 43.9 | 61.8 |
| + SFT | 72.3 | 64.2 | 42.9 | 59.8 |
| + GRPO | 76.4 | 68.9 | 46.7 | 64.0 |
| + OPSD | 77.8 | 70.8 | 45.8 | 64.8 |
| Qwen3-4B | ||||
| Base (Instruct) | 74.9 | 66.4 | 42.2 | 61.2 |
| + SFT | 70.2 | 62.3 | 43.4 | 58.6 |
| + GRPO | 75.6 | 68.1 | 44.4 | 62.7 |
| + OPSD | 76.4 | 68.3 | 46.1 | 63.6 |
| Qwen3-1.7B | ||||
| Base (Instruct) | 51.5 | 36.7 | 23.1 | 37.1 |
| + SFT | 48.4 | 36.3 | 22.7 | 35.8 |
| + GRPO | 51.1 | 38.3 | 23.7 | 37.7 |
| + OPSD | 57.2 | 43.9 | 29.2 | 43.4 |
关键观察:
- SFT 在所有尺度上都退步了(因为 ground truth 的 reasoning 风格较简洁,SFT 模仿了风格但丢了推理能力)
- OPSD 在小模型(1.7B)上提升最大:+6.3 average,远超 GRPO 的 +0.6
- GRPO 在某些 benchmark 上后期会 collapse(entropy 崩塌)
8.2 关键消融
Divergence 目标(Table 3, Qwen3-1.7B, AIME25):
| Method | Base | Step 50 | Step 100 |
|---|---|---|---|
| Forward KL(P_T ∥ P_S) | 36.7 | 43.9 | 41.1 |
| Reverse KL(P_S ∥ P_T) | 36.7 | 37.5 | 35.0 |
| JSD (β=0.5) | 36.7 | 36.9 | 39.0 |
Forward KL 一骑绝尘。Reverse KL 和 JSD 几乎没有正向效果。
Per-Token KL Clipping(Figure 4):没有 clipping 的训练在 ~25 步后 collapse,有 clipping 稳定收敛。
Generation Length(Figure 5):1024 和 4096 对比,增加长度不一定更好。前期 token 对学习更关键(后期 token 因 student 前缀足够长,teacher 和 student 趋于一致)。
Full-Vocab vs Sampled-Token Distillation(Table 4):
| Method Variant | AIME25 | HMMT25 |
|---|---|---|
| Full-vocabulary logit distillation | 84.1 | 60.0 |
| Sampled-token distillation | 82.1 | 57.3 |
Full-distribution 一致更优,但内存开销更大。
九、迁移到 Embodied 任务的问题分析
9.1 问题现象
"Embody 任务生成 JSON,非常结构化,被标准答案带偏了。OPSD 对表达风格的拟合特别严重,有点像 SFT。训练后模型不再回答结构化的轨迹预测,反而越来越说自然语言。"
9.2 根因分析
根因 1:KL divergence 被格式 token 主导
论文自己在 Table 5 和 Section 4.3.3 已经发现:style tokens 的 KL 远大于 content tokens。在数学推理中这只是需要 clip 的噪声,但在 JSON 输出场景中变成了致命问题:
数学推理场景:
content token (∫, x², =) → KL 小
style token (换行, "so") → KL 大但被 clip → 影响有限
JSON 输出场景:
结构 token ({, }, "action":) → 这些是 CONTENT 还是 STYLE?
自然语言 token ("I think...") → teacher 偏好的表达方式
→ OPSD 分不清结构 token 和风格 token
→ 自然语言表达的 teacher 概率分布和标准答案的 JSON 格式分布差异巨大
→ 模型被拉向 teacher 的"自然语言 rationalization" 风格
根因 2:Teacher 的 Privileged Information 方向错误
OPSD 的 teacher prompt 是:"看了标准答案后,用自己的方式解题"。在数学中,标准答案和 student 的输出是同一种"语言"(都是数学推导)。但在 embodied 中:
标准答案 y*: {"action": "pick", "target": [0.3, 0.5, 0.1], "gripper": "close"}
Student 输出: {"action": "pick", "target": [0.31, 0.48, 0.12], ...}
Teacher 看了 y* 后的 "rationalization":
→ Teacher 会倾向于用自然语言解释 WHY 这个动作合理
→ 而不是输出相似的 JSON
→ 因为 teacher prompt 说 "please try to solve this problem using your own approach"
→ 模型 "自己的方式" 就是用自然语言说话
这就是看到的现象:模型越训越像在"说话"而不是"输出 JSON"。
根因 3:OPSD 的信息泄漏问题(RLSD 论文证明)
RLSD 论文(2604.03128)证明了 OPSD 有不可消除的信息泄漏:
L_OPSD = L* + I(Y_t; R | X, Y_{<t})
这个互信息项 I(Y_t; R | X, Y_{<t}) 驱动模型学习 "从 prompt 猜标准答案" 的 shortcut。在数学中这只是偶尔引用 "reference solution",但在 JSON 场景中:
- 标准答案 R 包含精确的坐标数值
- 模型学会了 "从 prompt 推断应该输出什么格式"
- 当格式信号和内容信号冲突时,格式信号赢了 → 结构化输出退化为自然语言
9.3 为什么数学不受影响而 Embodied 受影响
| 维度 | 数学推理 | Embodied JSON |
|---|---|---|
| 输出格式 | 自由文本(数学推导) | 严格 JSON schema |
| 标准答案 vs Student 输出 | 同种语言(都是推导过程) | 不同语言(JSON vs 自然语言 rationalization) |
| style token 的影响 | 边缘(clip 即可) | 致命(格式本身就是 content) |
| Teacher rationalization 方向 | 和 student 输出方向一致 | 和 student 输出方向正交 |
| 信息泄漏后果 | 偶尔引用 "reference" | 整体输出格式崩塌 |
十、可能的解决方向
基于 OPD 知识体系中的最新进展:
RLSD 替代 OPSD(2604.03128):用环境 reward 控制方向,teacher log-ratio 只控制幅度。这样即使 teacher rationalization 风格不同,也不会拉偏输出格式。
格式 token masking:在 KL 计算中,屏蔽 JSON 结构 token(
{,},"action":等),只在 value 位置(坐标数值等)计算 divergence。改用 ROPD(Rubric-based, 2605.07396):完全不用 logit 蒸馏,而是用 rubric 评分("轨迹是否到达目标?" "坐标误差是否小于阈值?")作为 reward。
SRPO 范式(2511.15605):用成功轨迹的 latent world model 表示作为 progress reward,完全绕过 teacher logit 的格式污染问题。
附:关键论文索引
| 简称 | 全称 | arXiv | 核心贡献 |
|---|---|---|---|
| OPSD | Self-Distilled Reasoner | 2601.18734 | 同一模型自蒸馏,teacher 看 gt 答案。100 步超越 GRPO。 |
| RLSD | Self-Distilled RLVR | 2604.03128 | 证明 OPSD 泄漏理论根源,提出方向×幅度分离。 |
| ROPD | Rubric-based OPD | 2605.07396 | Rubric 替代 logits,黑盒兼容,10x 样本效率。 |
| SRPO | Self-Referential Policy Optimization | 2511.15605 | VLA 场景 self-referential RL,world model progress reward。 |
| Revisiting OPD | Failure Modes and Fixes | 2603.25562 | 三个 failure modes + Teacher top-K LSM 修复。 |
| Rethinking OPD | Phenomenology and Recipe | 2604.13016 | 两个成功必要条件 + progressive alignment 机制。 |