OPSD 建立了这条研究线最基本的训练合同:学生只看部署时能看到的问题,生成自己的 completion;冻结的同模型 teacher 多看一份训练期 reference solution,并在学生已经走到的每个 token prefix 上给出完整词表分布。
Q1. OPSD 到底解决了什么问题?
OPSD 的关键不是让学生模仿一条 teacher 生成的答案,而是让 teacher 在学生自己的 token prefix 上重新打分。传统 knowledge distillation 常由更大的 teacher 生成或标注数据;OPSD 让同一个 base checkpoint 通过“有没有 reference solution”形成能力差异,省掉独立大 teacher。
动机来自一个训练分布问题。离线 demonstration 很少覆盖 student 会犯的具体错误,RL 的 outcome reward 又只告诉系统最后对不对。OPSD 让 student 暴露自己的错误路径,再让多看一份 verified reasoning trace 的 teacher 在每个位置提供分布监督。
Q2. 它与 SFT、GRPO 和普通 distillation 的边界在哪里?
| 方法 | 谁生成训练 token | 监督信号 | 部署时额外上下文 |
|---|---|---|---|
| SFT | 数据集 reference | next-token likelihood | 无 |
| GRPO | 当前 student | 可验证 reward 的组内相对优势 | 无 |
| Teacher OPD | 当前 student | 独立 teacher 的 token distribution | 无 |
| OPSD | 当前 student | 同模型 privileged teacher 的 distribution | 无 |
OPSD 的优点是 token efficient:主实验每题只采一个最长 1,024-token rollout,而 GRPO 使用八个 rollout、最长 16K token、500 updates。代价是 teacher 的偏好未必等于 correctness,尤其当 reference 只是众多正确解法中的一个。
Q3. 一次 OPSD update 具体怎么走?
student 先从 question-only prompt 采样,teacher 再用同一个 prefix 加 reference solution 计算分布。只有 completion token 参与 loss;teacher 冻结,student 更新 LoRA。
- collator 生成 student prompt:只有 problem。
- student 以当前参数采样 completion。
- teacher prompt 加入 problem、reference solution 和过渡说明,再拼回 student completion。
- teacher 与 student 都对 completion 位置输出完整 vocabulary logits。
- 训练最小化 teacher-to-student forward KL。
# 根据 audited commit 写成的等价伪代码
y = student.generate(problem)
with student.disable_adapter(): # 冻结的 base checkpoint 充当 teacher
q = teacher_logits(problem, reference_solution, y.prefixes)
p = student_logits(problem, y.prefixes)
loss = KL(q || p) # completion positions only固定 teacher 通过暂时关闭 LoRA adapter 实现。当前代码的 jsd_token_clip 会先逐 vocabulary component 截断 divergence,再求和;它不是“每个 token 的总 KL 算完后再 clip”。
Q4. 实验设置与结果能支持什么结论?
主数据约 30K OpenThoughts 数学题,模型为 Qwen3-1.7B/4B/8B。batch 32,学习率 5e-6,LoRA rank 64、alpha 128,主实验 100 updates。
| 模型 | Base | GRPO | OPSD |
|---|---|---|---|
| Qwen3-1.7B | 37.1 | 37.7 | 43.4 |
| Qwen3-4B | 61.2 | 62.7 | 63.6 |
| Qwen3-8B | 61.8 | 64.0 | 64.8 |
Qwen3-1.7B 的平均分从 37.1 提到 43.4,增益在最小模型上最大。paper ablation 中 full-vocabulary forward KL 强于 reverse KL、JSD 和 sampled-token matching;把 rollout 从 1,024 延到 4,096 没有稳定收益。
要注意论文若干 headline 取 best checkpoint。它能说明 OPSD 在这些数学设置上有效,不能说明同一 context 和 checkpoint 对所有任务都最优。
Q5. 对游戏 query-to-code 应该怎么改?
第一版可以直接复用它的“student rollout + frozen self-teacher”骨架,但要把 reference solution 拆成多种 context 条件。最小对照应包含 full reference code、implementation plan、engine/API inventory、当前 build 的 compiler/runtime diagnostic,以及无 privileged context 的 reward-only baseline。
游戏代码有大量正确替代实现,所以必须额外构造“功能正确但 scene tree、class 名和控制流远离 reference”的程序。若 teacher 对这些正确程序给出更高 KL,就说明它在教 reference similarity,而不是 correctness。
Q6. 复现时最容易踩哪些坑?
完整 reference solution 并不等于正确性信号。代码仓库是可运行基线,但 audited commit 比原论文发布晚,含 chat-template、ZeRO-2、point-wise clipping 和 EMA teacher 等后续改动。复现实验必须记录 commit,并明确 fixed teacher、loss estimator 与 clipping 方式。
仓库没有检测到明确 license。用于论文实验前还要确认复用条款。我的兴趣程度是 9/10:它应当作为实现起点,但研究贡献应放在 context 设计、state alignment 与 execution-grounded credit,而不是再次证明数学题上的 full-solution OPSD。
证据范围:本文阅读全文与附录,并分别检查 PDF 文本和逐页渲染;代码结论固定到文中注明的 commit。兴趣程度 9/10 只表示博客作者对该方向的个人兴趣,不是通用论文评分。
留言