DAPD:学生看不到答案,凭什么装得像看过答案?

你有没有干过这种事——考试的时候对着答案订正错题,订正完觉得自己会了,结果下次合上答案还是不会。

大模型训练里有个几乎一模一样的毛病。现在流行一种叫在策略自蒸馏(On-Policy Self-Distillation, OPSD)的后训练方法:让模型自己采样一条解题轨迹,然后让一个"偷看过参考答案"的自己当老师,逐 token 地教那个"没看答案"的自己。听着挺美好,训练曲线也确实在涨。但问题来了——学生学着学着,开始在推理时装模作样:明明没看到答案,却表现得好像答案就在眼前,直接跳过推导蹦出一个断言,还编一套理由圆它。

这篇论文给这个现象起了个名字,叫特权幻觉(Privilege Illusion)。说实话,我读到这个词的时候第一反应是:终于有人把这件事说清楚了。

核心摘要:OPSD 训练里,教师拿着参考答案当特权信息,学生推理时却两手空空——这个信息不对称才是特权幻觉的病根,而不是教师信号本身有噪声。DAPD 的解法很直接:别再去修补教师的信号了,直接给师生双方匹配信息可用性,再加一个可训练的 Self 分布当桥梁锚点。在 Qwen3 五个规模上,DAPD 平均比 OPSD 高 2.00 分,AIME25 上高了 4.44 分,错误断言降了约七成。我的判断:这不是什么底层理论突破,但它把一个被很多人忽略的结构问题点破了,而且方案简单到你会有点不好意思——"怎么之前没人想到"。

论文信息 - 标题:DAPD: Dual-Anchored Policy Distillation - 作者:Jianyu Wu, Yizhou Wang, Encheng Su, Chen Tang, Shixiang Tang - arXiv:2608.01735,2026 年 8 月 3 日


🎯 特权幻觉:越训越爱"装"

先把问题本身讲清楚。

OPSD 的训练流程是这样的:给定题目 \(x\) 和参考答案 \(y^*\),从当前策略采一条 rollout \(y\)。然后在每个前缀 \(y_{\lt t}\) 处构造两个分布——一个是 None 分布 \(p_\theta(\cdot | x, y_{\lt t})\),不看答案,对应推理时的真实状态;另一个是 Cross 分布 \(p_\theta(\cdot | x, y_{\lt t}, y^*)\),把参考答案塞进上下文,让同一个模型瞬间变成更强的教师。训练目标就是拿停止梯度的 Cross 去监督 None。

直觉上没毛病:老师看了答案,学生没看,老师教学生,天经地义。

但作者做了一个行为探针实验,结果挺扎心的。他们统计了生成中的"错误断言"(wrong claims)——也就是模型在没有任何依据的情况下直接断言一个答案、然后围绕它编推导的行为。在五个 Qwen3 规模上,随着 OPSD 训练推进,这个数从每万次生成 13.0 次一路飙到 37.0 次,同期推理 Avg@12 从 59.56 掉到 53.24。

特权幻觉与性能的动态变化

上图(a)是训练过程中错误断言数量的变化:灰色 OPSD 曲线在 200 步之后急剧上扬,300 步时冲到 37 左右;深绿方块是完整 DAPD,全程压在低位。浅绿的 Privileged Anchor 曲线就是后面要说的"信息不对称验证实验",错误断言比 OPSD 少了 45%。下图(b)是对应的 Avg@12 走势:OPSD 在 200 步后明显塌掉,终点比 Privileged Anchor 低 6.22 分。两张图放在一起看,幻觉涨、性能跌,相关性一目了然。

你想想看这个行为像什么——像极了抄作业抄多了的学生,形成了肌肉记忆:反正答案总是在附近的,先写个数再说。训练时 Cross 分布老是在旁边"递小抄",学生的 None 分布被拉着去模仿它,久而久之就学会了"答案会自己出现"这个虚假的先验。

🔍 病根:不是老师教错了,是师生信息不对称

出了问题,大家的直觉反应都是修教师信号。已有的方案也确实是这么干的:SDFT、SDPO 这类直接把特权信号灌给学生;Purified OPSD、DOPD 这类则试图过滤或重加权教师信号,把"依赖特权"的那部分压掉。

作者的诊断是:这些全是在治标。问题的结构根源是信息不对称——教师有特权信息,学生推理时没有,两者压根不在同一个信息条件下,你让其中一个模仿另一个,模仿出来的必然是"假装有特权"的行为。

说到这个,其实类似的现象在别的训练范式里也露过头。比如 RLHF 里做 RLAIF 的时候,评审模型能看到 rubric,被打分的模型看不到,训久了也会出现"迎合隐藏标准"的怪行为。再往前数,知识蒸馏领域老早就知道 teacher-student gap 这回事,但多数人把它当成能力差距来处理,很少有人从"信息可用性"这个角度去拆。DAPD 把这个视角挪到自蒸馏场景,算是捅破了一层窗户纸。

光说不练假把式,作者做了个相当漂亮的验证实验:保持教师不动,把学生的 None 分布换成 Self 分布 \(p_\theta(\cdot | x, y_{\lt t}, y)\)——也就是让学生也看到自己生成的完整补全。这样 Cross 和 Self 都拿着完整信息,信息不对称消失了。结果是错误断言直接少了 45%,推理 Avg@12 涨了 6.22 分。

这个实验我觉得是全文最值钱的部分。它把"幻觉从哪来"这件事从一个模糊的抱怨变成了一个可验证的因果命题:改信号没用,改信息条件才有用。

🏗️ DAPD:加一个 Self 当桥梁,两条路径对齐

诊断清楚了,药方其实就顺了。既然 None(无特权、可训练)和 Cross(有特权、停梯度)之间隔着一条信息鸿沟,那就造一座桥。

这座桥就是 Self 分布 \(p_{\text{Self}}^s = p_\theta(\cdot | x, s_{\lt t}, s)\),条件于完整补全 \(s\)。它的身份很妙:跟 Cross 比,它共享策略参数、是可训练的;跟 None 比,它手里拿着完整补全、信息条件和 Cross 是对齐的。原本"无特权的可训练学生"和"有特权的停梯度教师"之间的空档,被它正好填上。

围绕这三个分布,DAPD 在每个补全来源 \(s \in \{y, y^*\}\) 上定义三个目标。纠缠蒸馏 \(\mathcal{L}_{\text{ent}}^s = \text{D}(\text{sg}[p_{\text{Cross}}^s] \| p_{\text{None}}^s)\) 保留原版 OPSD 的特权引导;推理锚 \(\mathcal{L}_{\text{infer}}^s = \text{D}(\text{sg}[p_{\text{None}}^s] \| p_{\text{Self}}^s)\) 把 Self 拉向 None,相当于告诉桥梁"别忘了学生推理时的真实处境";特权锚 \(\mathcal{L}_{\text{priv}}^s = \text{D}(\text{sg}[p_{\text{Cross}}^s] \| p_{\text{Self}}^s)\) 则在双方都有完整信息时直接对齐——这时候没有信息差了,蒸馏是"干净"的。

三个目标再组装成两条路径,这就是 Dual-Path Anchoring(DPA):无条件路径走 \(\mathcal{L}_{\text{infer}}^{\bar{s}} + \mathcal{L}_{\text{ent}}^s\),全程不依赖特权信息;特权路径直接用 \(\mathcal{L}_{\text{priv}}^s\),双方信息匹配。

还剩一个问题:引导从哪来?参考答案可靠但可能偏离当前策略,rollout 学生够得着但可能是错的。作者的答案是 Dual-Source Anchoring(DSA)——两个方向都要,用 \(\lambda\) 加权:

\[\mathcal{L}_{\text{DAPD}} = \lambda \mathcal{L}_{\text{DPA}}^{y \to y^*} + (1-\lambda) \mathcal{L}_{\text{DPA}}^{y^* \to y}\]

工程上这个设计有个很实在的好处:没有任何额外模型,教师、学生、桥梁全是同一个策略的不同条件化版本,推理时零额外开销。代价全在训练侧——三个分布、两个方向,算下来每个 token 位置要跑好几个 forward。这笔账后面再算。

DAPD 方法框架图

方法总览图。左边是 Dual-Source Anchoring:教师策略(拿着参考 \(y^*\))和学生策略(拿着 rollout \(y\))是两个分布"大陆",参考→rollout 和 rollout→参考两个方向互相锚定,目标策略被拉到中间。右边是 Dual-Path Anchoring 的分布视角:上方红色的无条件路径把 \(p_{\text{None}}^y\) 经纠缠项推向 \(p_{\text{Cross}}^y\),同时 \(p_{\text{Self}}^{y^*}\) 被推理锚拉向 \(p_{\text{None}}^{y^*}\);中间被叉掉的 OPSD 直连标注着 information asymmetry;下方蓝色的特权路径让都有完整补全的 \(p_{\text{Self}}^y\)\(p_{\text{Cross}}^y\) 直接对齐。中间那个小小的 \(p_{\text{self}}\) 就是整个框架的枢纽。

📊 实验:数字能打,但有几个地方值得细看

好,方法讲完了。work 不 work?看数据。

训练用 OpenThoughts 数据集,按任务家族分领域训练,Qwen3 系列 1.7B 到 32B 五个规模,LoRA(rank=64)微调。评估覆盖推理(AIME24/25、HMMT25,Avg@12)、编程(LiveCodeBench v5、BFCL v3)和指令遵循(IFBench)。基线包括 OPSD、SDFT、SDPO、Purified OPSD、DOPD。

主表:六边形碾压,但幅度要分开看

Qwen3-4B 上的完整对比:

方法 AIME24 AIME25 HMMT25 LCB v5 BFCL v3 IFBench 平均
Base 75.56 65.56 42.50 52.11 61.38 29.67 54.46
SDFT 75.00 62.78 41.94 51.05 61.26 33.00 54.17
SDPO 70.56 62.78 40.83 50.53 61.75 32.67 53.19
OPSD 76.67 67.78 43.33 52.26 61.32 30.67 55.34
Purified OPSD 76.67 67.50 45.00 53.16 62.50 32.67 56.25
DOPD 73.61 65.00 38.89 50.30 61.47 31.67 53.49
DAPD 77.22 72.22 46.39 53.31 61.91 33.00 57.34

DAPD 在六个基准上全面超过 OPSD,平均高 2.00 分。提升的分布很有讲究:AIME25 上高 4.44 分、HMMT25 上高 3.06 分,越难的任务涨得越多;而 BFCL v3 这种相对饱和的基准只高 0.59 分,天花板压着呢。

有两个基线的表现值得说道。SDFT 和 SDPO 这两个"直接灌特权信号"的,平均分别 54.17 和 53.19,连 Base 都没打过——直接把答案喂出来的教师,教出来的学生连原模型都不如,这从侧面佐证了幻觉问题的严重性。DOPD 更惨,53.49,过滤特权信号的努力反而把有用的引导也滤没了。Purified OPSD 倒是还行,56.25,是最强的基线,但它毕竟是打补丁,跟 DAPD 的结构性方案差着 1.09 分。

跨规模:OPSD 的增益在大模型上直接消失了

这张表我个人觉得是全文最有信息量的一张:

模型规模 OPSD vs Base DAPD vs Base DAPD vs OPSD
1.7B +5.19 +7.13 +1.94
4B +1.39 +4.08 +2.69
8B +0.00 +2.41 +2.41
14B +0.09 +2.13 +2.04
32B +0.28 +3.06 +2.78

跨任务与跨规模的性能对比

上图(a)是 4B 上六个基准的柱状对比,绿色 DAPD 柱子在每个任务上都压过灰色 OPSD,差距标注在柱顶。下图(b)是更要命的规模曲线:灰色 OPSD 相对 Base 的增益从 1.7B 的 5.19 分一路俯冲,8B 之后基本贴着零轴躺平;绿色 DAPD 曲线虽然也在降,但全程保持在 2 分以上,32B 处还翘头到 3.06 分。两条曲线之间那块绿色阴影,就是特权幻觉吃掉、又被 DAPD 抢回来的增益。

看到这个曲线我愣了一下。OPSD 在 8B 及以上几乎零增益——也就是说,如果你用 OPSD 训大模型,训了个寂寞。作者的解释是大模型的 rollout 本身包含更多有用推理,但特权幻觉也更严重地把这些增益抵消掉了。DAPD 把信息条件对齐之后,这部分被吃掉的增益回来了,所以 32B 上 DAPD vs OPSD 反而最大,高 2.78 分。

说实话这里我有个没完全想通的点:为什么 1.7B 上 OPSD 的增益反而最高?小模型幻觉应该也不少啊。作者的叙事是"大模型 rollout 质量高、被幻觉抵消得多",逻辑上自洽,但小模型高增益的具体机制论文没展开。可能我的理解有偏差,欢迎指正。

消融:每个锚都在干活

路径组件消融(Avg@12):只用纠缠蒸馏时 Reference 源 62.13、Rollout 源 63.33;加上推理锚后涨到 63.43 和 64.91;再加特权锚到 63.89 和 65.09。两个来源趋势一致,推理锚的增量比特权锚大——这说明"把学生推理时的真实处境锚住"是收益的主要来源,跟根因诊断对上了。

引导来源消融也有意思:只用参考引导 63.89,只用 rollout 引导 65.09,双源结合 65.28。等等,单看的话 rollout 引导居然比参考引导好?这与直觉相反——参考答案不是更可靠吗?我的解读是:rollout 在学生自己的分布内,学起来没有分布偏移的损耗;而参考答案再对,也是"别人家的轨迹"。双源结合只比纯 rollout 高 0.19 分,这个增量说实话不算大,DSA 的贡献更像是稳健性而非绝对性能。

\(\lambda\) 的扫描给出了一个实用的调参指引:1.7B 偏好 \(\lambda=0.5\)(参考引导占一半),4B 以上全是 \(\lambda=0.2\) 最优(rollout 引导占八成)。模型越大,越该信自己的 rollout。

训练细节里藏着的真功夫

有个细节容易被略过,但对复现的人来说很关键:散度函数用的是分量裁剪前向 KL

\[\ell_c(q, p) = \sum_{v \in \mathcal{V}} \min\{q_v(\log q_v - \log p_v), c\}\]

工程直觉是这样的:词表里几万个 token,教师分布在极少数 token 上的 logit 差可能非常大,朴素 KL 会被这些"尖刺"主导,梯度全喂给长尾了。给每个分量的贡献设个上限 \(c=0.05\),等于强制把学习信号摊平到更多 token 上。消融数据支持这个判断:分量裁剪前向 KL 拿到 65.28,而无裁剪前向 KL 只有 62.50,裁剪反向 KL 62.50,无裁剪反向 KL 63.33——接近 3 分的差距,比很多方法创新的增益都大。说实话,这种"不起眼的工程选择决定成败"的戏码,在蒸馏工作里我见过不止一次了。

其余配置一并记下:LoRA rank 64、scale 128,学习率 \(5 \times 10^{-6}\) 线性衰减 500 步,batch size 32,rollout 采样温度 1.1、top-p 0.95、max 1024 tokens,训练上下文拉到 20K,bf16 加梯度检查点。这些数没什么玄的,但少了哪个你都复现不出来。

无参考场景:顺手打开的一扇门

还有个挺实用的探索:没有参考答案时,用另一条独立 rollout 或经正确性验证的 rollout 替代 \(y^*\),框架照样转。4B 上用验证 rollout 能到 66.11(OPSD 62.59),8B 到 67.59(OPSD 65.00)。对那些参考答案稀缺的任务,这条路的价值可能比主结果还大——当然,前提是你要有可靠的自动验证信号,开放式任务上这个前提不成立。

还有个分布外泛化的实验值得补一句:只在推理数据上训练,然后直接测编程和指令遵循,DAPD 在 LiveCodeBench v5 上比 OPSD 高 4.82 分(54.14 对 49.32),BFCL v3 和 IFBench 基本持平。只在数学题上训,代码能力反而涨得最多——我的理解是,幻觉少了之后模型更愿意老老实实做长链条推导,这个习惯是跨任务迁移的。当然 BFCL 和 IFBench 没涨也说明,它不是万灵药,工具调用这类能力光靠推理蒸馏带不动。

🤔 泼点冷水

数据确实能打。但有几个地方我觉得读者要心里有数。

训练开销是第一笔账。三个分布、两个方向,每个位置大约 6 个 forward pass,再加上 20K 的训练上下文,LoRA 虽然省了显存,总计算量比原版 OPSD 翻了好几倍是跑不掉的。论文没给具体的训练时长对比,这是个遗憾——如果训练成本是 OPSD 的三倍,那 2 分的平均提升在预算紧张的团队眼里就得重新掂量了。

架构泛化是第二笔账。全部实验都在 Qwen3 家族上做,换 Llama、换 DeepSeek 还成立吗?Self 分布的有效性依赖"同一模型不同条件化"这个设定,不同架构的模型对上下文里塞答案的敏感度差别挺大的,这块没测,谨慎乐观。

另外定性案例虽然生动——AIME24 那道圆环切球题,OPSD 推导卡住后直接来了句 "I recall that the answer is likely 36/7",典型的幻觉式断言,DAPD 则老老实实推完两种情况得到 127——但案例毕竟是挑出来的,行为探针的量化数据(250 到 300 步间错误断言降约 73%)才是更硬的证据。

💡 我的判断

坦率的讲,这篇论文不是那种理论上有多少新意的工作——Self 分布、双向蒸馏、加权组合,单拎出来每个都不新鲜。它真正的贡献是把一个被大家含糊对待的问题变成了结构性的诊断:幻觉不是教师信号的错,是信息条件不匹配的错。诊断一旦清楚,药方几乎是自动推导出来的。

对工程实践的启发,我觉得有三层。

其一,如果你在做任何带特权信息的蒸馏(教师看答案、看检索结果、看工具返回),先问自己一句:学生推理时能看到这些吗?看不到,那特权幻觉就是你迟早要踩的坑,DAPD 的"信息匹配 + 锚点"思路值得直接搬。

其二,行为探针这个做法值得学。光看 benchmark 分数你发现不了幻觉——性能掉了你才知道出事了。直接统计"无依据断言"这类行为指标,能在训练早期就暴露问题。

其三,无参考场景的扩展才是真正有想象力的部分。参考答案总有用完的一天,但 rollout 是无限的,配合一个验证器,这套框架可以滚起来自举。

用一句话收尾:修信号不如修信息条件——这个道理不止适用于蒸馏,做 RL、做 agent 训练的人都可以琢磨琢磨。


觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我