Read this paper write-up in English
OPRD:把多作用域提醒蒸馏到无提醒编码策略¶
L1 算法组件,不是 SWE-bench 编码能力复现。 已实现作用域、同前缀评分和训练目标;完整实验成本过高,不复现(审查 DONE)。不进入 evolve 晋级。
论文信息¶
| 字段 | 内容 |
|---|---|
| 论文链接 | arXiv 2610.21496;固定 v1 HTML;PDF |
| 公司 / 机构 | 第一作者 Yuechen Luo,Tsinghua University;合作机构包括上海人工智能实验室和 NUS |
| 首次公开日期 | 2026-10-15T08:32:30Z(UTC,arXiv v1) |
| 原作者代码 | 未找到 OPRD 方法的官方代码;VeOmni 为训练框架,不应记作本方法已开源 |
| 代码许可 | 未找到方法代码,代码许可未确认;论文采用 CC BY 4.0 |
| 本地 adapter / 方法键 | oprd-reminder;adapter: null,仅独立组件;runner 的 --methods oprd 指本篇提醒蒸馏,不是旧的 auto-research reproduce --paper oprd 反向蒸馏 adapter |
| 本地复现代码 | reminder_distillation.py |
| 本地复现代码目录 | src/auto_research/post_training/ |
| 运行入口 | run_oct17_supplement_post.py |
原始论文总结¶
背景与主要改动¶
编码 Agent 的最终通过/失败不能指出哪一轮忽略了已有约束。OPRD 在学生自己生成的无提醒轨迹上训练:成功轨迹自模仿;失败轨迹由教师读取训练专用提醒,重新评分同一学生前缀,不是教师另生成一条答案。全局提醒持续有效,观测 \(o_k\) 对应的局部提醒只在下一轮 \(a_{k+1}\) 有效,之后必须移除。正式推理去掉教师和全部提醒。原文 §3
flowchart LR
A[学生无提醒采样] --> B[执行结果]
B -->|通过| C[助手 token 自模仿 NLL]
B -->|失败| D[全局与下一轮局部提醒]
D --> E[冻结教师评分相同学生前缀]
E --> F[共享 Top100 支持重新归一化]
F --> G[Reverse KL 更新学生]
C --> H[无提醒学生]
G --> H
原论文关键图¶
原论文 Figure 2(关键图):展示原论文的训练流程与关键优化环节。图片来自原论文,版权归原作者所有;点击图片可查看来源。
核心公式¶
在有效助手 token 集合 \(\Omega(\tau)\) 上,成功分支为
失败分支先按 \(\max(\log p_\theta(v),\log p_\phi(v))\) 选同一个 Top-100 支持集,双方在其上重新归一化成 \(\bar p_\theta,\bar p_\phi\),再计算
每条轨迹先取 token 均值,再分别取成功/失败分支均值;不存在的分支贡献0。教师在训练进度20/40/60/80%从当前学生刷新,其余时间冻结。来源为原文式6、9、10和附录B。
论文离线与线上效果¶
原文表2中 Qwen3.5-4B 的 SWE-bench Verified/Pro/Multilingual 分别为61.2/30.5/52.0,平均47.9;原始模型平均36.6,经过 Coding SFT+IF SFT 的对照平均41.6。三者不是本地结果;线上 A/B 未报告。原文 §4、附录B
本地复现¶
数据协议与运行¶
本地使用随机初始化的128词表、12维 causal cumulative-embedding 策略。每步真实采样8条三轮轨迹、每轮2个 token;奇偶校验只用于构造诊断 outcome,不是编码正确性。教师重新读取相同 response 前缀;学生上下文不含提醒。没有下载权重、使用仓库任务、执行参考 patch,亦未实现原文 Coding SFT/IF SFT 或提醒生成模型。
PYTHONPATH=src python scripts/run_oct17_supplement_post.py \
--methods oprd --device cpu --seeds 42,43,44 \
--output runs/oprd-component.json
CUDA 将 --device cpu 改为 --device cuda;无 CUDA 时明确失败,不回退。默认4次更新,最多12次,已存在的输出拒绝覆盖。完整来源 SHA256、commit、种子、设备和所有负对照保存在结果中。
结果、代码映射与边界¶
2026-10-17 已在真实 NVIDIA A100 上完成 seeds42/43/44,各4次更新:逐 seed 指标、净化 GPU 回执。学生参数变化 \(L_2\) 均值0.06964,独立标量 reference 最大误差 \(8.89\times10^{-16}\);教师在两次刷新之间变化和教师梯度数均为0。另有独立 CPU 三种子运行,不与 CUDA 混合聚合;这些指标仅验证机制,不证明编码能力。
contexts_for_turn从无提醒历史重建两个上下文;局部提醒不写回持久历史。score_trajectory真正调用两个策略,禁止共享参数存储,助手前缀完全相同,教师 stop-gradient。shared_support_reverse_kl执行共享支持选择、重新归一化和 \(T^2\);无效 padding 在 softmax 前清理。outcome_routed_loss与RefreshingTeacher实现分支权重和冻结刷新。单测覆盖同教师零 KL、成功分支不读取教师值、mask 零梯度及提醒不泄漏。
不复现的完整实验: 原文附录B为16张 H20、131072长度、batch32、3epochs;还包括4000个在线任务、8千条编码 SFT 和2千条 IF SFT、4B/9B模型及长程仓库评测。对单张 A100/A30 或 Mac 成本过高,未下载大资源或启动完整试跑。组件固定 diagnostic_only: true、promotion_eligible: false、evolve_integrated: false,不支持编码能力提升声明。
