先把烂轨迹扔了,再给好 token 加权——FiRe-OPD 把 OPD 的优化粒度重新做了一遍

核心摘要

最近半年 OPD(On-Policy Distillation,在线策略蒸馏)这条线特别热闹,方法越来越多,但有个共性的问题:要么只在轨迹级动刀(比如按 reward 筛 rollout),要么只在 token 级动刀(比如按教师熵选关键 token),两个粒度从来没合在一起认真做过。更难受的是,token 级方法清一色用"硬选择"——不重要的 token 直接 mask 掉,扔了就扔了。

这篇 FiRe-OPD 提了个挺顺手的思路:轨迹级用硬过滤(教师 log-prob 排序,砍掉最差的 20%),token 级用软加权(教师置信度乘以学生困惑度的连续权重)。一硬一软,刚好对上两种粒度的本质差异——轨迹是离散选择,token 是连续重要性。结果在强→弱、单教师、多教师三个场景都涨了一圈,最猛的是多教师设置下 Minerva-Math 上比 OPD 涨了 18.81 分,AIME24 涨 6.25 分。

我读完的判断是:方法本身不复杂,但"该硬就硬该软就软"这个直觉是对的,论文用消融把这个直觉钉死了——硬+硬掉 2.6 分、软+软掉 2.15 分、软+硬掉 2.28 分,只有硬+软组合站住。这是这篇文章最有说服力的地方。


论文信息

  • 标题:Filter, Then Reweight: Rethinking Optimization Granularity in On-Policy Distillation
  • 作者:Yuying Li, Leqi Zheng, Yongzi Yu, Wenrui Zhou, Xuchang Zhong, Xing Hu, Jing Jin, Hangjie Yuan, Tao Feng
  • arXiv ID:2606.02684(v2,2026-06-04 修订)
  • 链接:https://arxiv.org/abs/2606.02684
  • 代码:https://github.com/YuYingLi0/FiRe-OPD

图1:FiRe-OPD 在三类蒸馏场景下的性能雷达图

图 1:在强→弱、单教师、多教师三种 OPD 场景下,FiRe-OPD(红色)在所有 benchmark 的覆盖最均衡、最外扩,几乎没有掉点的维度


为什么需要这篇论文

先说一下 OPD 本身。OPD 是把 RL 的 on-policy 思路套到蒸馏里——学生采样自己的轨迹,教师在每个 token 上算 log-prob,把它当成监督信号回灌。优势是学生总在自己当前的分布上学,不会像离线 SFT 那样存在 train-inference gap。问题在于,学生采的轨迹质量参差不齐,教师标的 token 重要性也不一样。早期 OPD 是不分轻重一把抓,后来逐渐意识到要"挑着学"。

然后就分成两条路。

第一条是轨迹级的:ExOPD 这类工作会基于某种 reward 筛掉低质量 rollout,思路朴素但有效。问题是它只在轨迹颗粒度上动,进入轨迹之后还是每个 token 平等对待。

第二条是token 级的:EOPD 用教师熵当信号——教师不确定的 token 信息量低,扔掉;TIP 用学生置信度——学生已经学会的 token 监督价值低,扔掉;REOPOLD 综合两者。这条路的问题在于清一色用 hard selection:要么留要么扔,二值化决策。但 token 重要性其实是连续的,硬截断会把"次重要但仍有用"的 token 全部丢掉,造成信息损失。

更致命的是这两条路从没人合到一起做过。论文一开始就指出这个 gap:粒度孤立(granularity isolation),加上 token 级的硬选择带来的非平滑优化(non-smooth optimization)。

我自己之前调过类似的策略——在 RLHF 里给 token 加权。直觉是对的,但每次往 loss 里加 mask 的时候,总觉得"这个 token 真的就完全没价值吗"。这种不安感其实就是 hard selection 的本质问题。


方法:一硬一软,对上粒度

FiRe-OPD 的总体框架就两步:先在轨迹级做硬过滤,再在 token 级做软重权。

图2:FiRe-OPD 整体架构

图 2:FiRe-OPD 框架。学生采样 rollout 后,先按教师对数概率均值打分排序,砍掉底部 p% 的轨迹;进入保留轨迹后,每个 token 由教师置信度和学生困惑度联合算出连续权重,重塑 PPO 风格的策略梯度

第一步:轨迹过滤(Filter)

打分公式很朴素:

\[s(y)=\frac{1}{T}\sum_{t=1}^{T}\log\pi^{*}(y_t|x,y_{<t})\]

就是把整条轨迹上每个 token 的教师 log-prob 取平均。直觉很顺:教师对这条轨迹整体越"接受",分数越高;反之,如果教师在这条路径上经常给低概率,说明学生跑出来的推理路径离教师能产出的分布很远,硬学过去会引入对抗性梯度。

排完序后,直接砍掉底部 p 比例的轨迹(默认 p=20%)。这里是 hard 选择——为什么轨迹级硬选合理?因为一条 rollout 是一个整体单元,要么这条路径值得学要么不值得,没什么"半值得"的中间态。论文后面消融把这点也证了。

第二步:token 软重权(Reweight)

保留下来的轨迹里,每个 token 算两个连续信号。

教师置信度(教师越确定越重要):

\[c_t^T = 1 - \frac{H(\pi^*(\cdot|x,y_{<t}))}{\max_{t'\in\mathcal{B}}H(\pi^*(\cdot|x,y_{<t'}))}\]

熵越低(教师越确定),\(c_t^T\) 越接近 1。归一化用的是当前 batch 的最大熵,自适应。

学生困惑度(学生越不会越重要):

\[c_t^S = \frac{H(\pi_\theta(\cdot|x,y_{<t}))}{\max_{t'\in\mathcal{B}}H(\pi_\theta(\cdot|x,y_{<t'}))}\]

学生熵越高(越不确定)越接近 1。这里其实就是一个"教师有把握、学生没把握"的双重过滤,但没有一刀切,是连续值。

最终权重

\[w_t = (1+\alpha\cdot c_t^T) \times (1+\beta\cdot c_t^S)\]

加了个 +1 偏置——保证再不重要的 token 权重也不会塌成 0,最差也是 1.0,避免梯度被某些极端样本主导。

然后归一化重塑优势

\[\tilde{a}_t = \frac{w_t}{\frac{1}{T}\sum_{t'=1}^{T}w_{t'}} \cdot a_t\]

这一步是关键的工程细节——归一化保证了整条轨迹的总梯度幅度不变,权重做的是"在 token 之间重新分配监督信号",而不是"整体放大或缩小"。这个设计避免了重要 token 多就训得猛、重要 token 少就训得软的问题。

最后塞回 PPO 风格的 clip loss:

\[\mathcal{L}_{\text{FiRe-OPD}} = -\frac{1}{T}\sum_{t=1}^{T}\min\left(r_t\tilde{a}_t,\,\mathrm{clip}(r_t,\,1-\epsilon,\,1+\epsilon)\tilde{a}_t\right)\]

整个方法的工程改动量其实很小——拿到 OPD 代码,加一个轨迹打分排序的预处理,再把每个 token 的优势乘上一个权重就完事。


实验:三个场景一起涨

实验设置覆盖了三种典型 OPD 场景:

  • Strong-to-Weak:Qwen3-30B-A3B-Instruct → Qwen3-4B(大教师压小学生)
  • Single-Teacher:Qwen3-4B-Non-Thinking-RL-Math → Qwen3-4B(同尺寸但能力强)
  • Multi-Teacher:数学专家 + 代码专家 → Qwen3-4B(多任务融合)

强→弱:在难题上拉开

方法 AIME24 AIME25 MATH AMC Olymp. Miner. HMMT-Feb HMMT-Nov 平均
学生(基础) 21.67 22.50 83.65 67.19 51.80 39.48 12.50 7.08 38.23
教师 76.67 63.33 97.22 95.94 78.32 47.47 45.00 60.00 70.49
+ SFT 25.42 22.92 85.82 70.31 54.60 40.81 13.75 12.92 40.82
+ GRPO 55.00 48.33 93.20 93.06 68.69 43.73 29.17 35.42 58.33
+ OPD 54.58 48.75 91.25 93.92 70.62 43.01 28.33 39.17 58.70
+ ExOPD 58.75 48.33 94.35 93.75 70.61 43.38 30.83 41.25 60.16
+ TIP 59.58 49.58 92.19 93.60 70.66 43.70 29.58 40.00 59.86
+ REOPOLD 57.50 46.67 93.95 92.19 70.16 43.20 29.17 41.25 59.26
+ EOPD 52.92 49.17 93.40 92.81 70.92 42.97 27.08 39.17 58.56
FiRe-OPD 60.83 52.92 93.73 93.13 70.47 43.47 32.08 40.00 60.83
Δ vs OPD +6.25 +4.17 +2.48 -0.79 -0.15 +0.46 +3.75 +0.83 +2.13

注意一下结果分布:在 MATH、AMC、Olympiad 这种"已经很饱和"的中等难度榜上,各方法差异都在 1 个点以内,FiRe-OPD 也没拉开太多。但在 AIME24(+6.25)、AIME25(+4.17)、HMMT-Feb(+3.75)这种竞赛级真正难的题上,差距开始明显。说实话这个 pattern 挺有意思的——简单题大家都能学会,难题才能看出谁会"挑重点学"。

跟同期 token 级方法(TIP、REOPOLD、EOPD)比,FiRe-OPD 平均高 1 个点左右,单点最大涨 3 分多。增量不算炸裂,但持续。

多教师:Minerva 上 +18.81 分是真的吗

数学侧

方法 AIME24 AIME25 Miner. HMMT-Feb HMMT-Nov 平均
OPD 59.58 57.08 48.53 32.50 37.50 47.04
ExOPD 60.83 55.00 66.39 34.17 38.75 51.03
FiRe-OPD 64.17 55.83 67.34 35.00 37.08 51.88
Δ vs OPD +4.59 -1.25 +18.81 +2.50 -0.42 +4.84

代码侧(pass@1):

方法 HumanEval+ MBPP+ LiveCodeBench 平均
OPD 82.93 69.58 26.86 59.79
ExOPD 89.00 69.31 29.28 62.53
FiRe-OPD 92.70 71.69 28.10 64.16
Δ vs OPD +9.77 +2.11 +1.24 +4.37

这个 +18.81 我得多说两句。看起来很猛,但不是 FiRe-OPD 凭空涨出来——OPD 在 Minerva 上只有 48.53,ExOPD 已经一把拉到 66.39(+17.86),FiRe-OPD 在 ExOPD 基础上再涨 0.95。所以严格来说,主要的跃升是 ExOPD 那次贡献的,FiRe-OPD 的边际贡献是 1 个点。论文用 "+18.81 vs OPD" 的表述把光环贴在自己头上,这个我得指出来——对比对象选择稍微有点巧妙

但代码侧的 HumanEval+ 上从 82.93 涨到 92.70(+9.77)是实打实的,而且学生(92.70)甚至超过了两个教师中的代码专家(79.90)。这种"学生反超教师"的现象在多教师融合里挺典型,原因大概是不同教师互补,加上 FiRe-OPD 的过滤+加权能挑出"好教师在某个 token 上的高置信度信号"——这点比单教师场景更显价值。


消融:把"硬+软"组合钉死

整篇论文最有说服力的部分是消融。论文做了一个对照实验:把轨迹级和 token 级各自换成硬/软选择,四种组合互相比。

组合方式 AIME24 AIME25 MATH AMC Olymp. Miner. HMMT-Feb HMMT-Nov 平均
FiRe-OPD(硬过滤+软加权) 60.83 52.92 93.73 93.13 70.47 43.47 32.08 40.00 60.83
硬+硬 57.92 46.25 93.95 90.62 68.53 43.15 31.67 33.75 58.23
软+软 57.92 48.75 93.75 90.94 70.75 43.15 28.33 35.83 58.68
软+硬 55.42 51.25 93.35 89.38 68.86 43.01 30.42 36.67 58.55

硬+软的组合是唯一站得住的——其他三种组合平均都在 58.2~58.7 区间,硬+软直接拉到 60.83,差 2 分多。这数据很干净地说明了一个东西:轨迹级要硬选(差的 rollout 整条扔),token 级要软选(连续重要性,不二值化)。

为什么轨迹级软不行?我猜是因为低质量轨迹整条都是噪声,给它打个 0.3 的权重只是"少学一点",但学了仍然在污染梯度方向。直接砍掉反而干净。

为什么 token 级硬不行?这就回到 hard selection 的老问题——重要 token 不是非黑即白,连续权重保留了"次重要"信号的边际贡献。

组件消融:学生困惑度才是大头

配置 平均 Δ
FiRe-OPD(完整) 60.83
w/o 学生困惑度 59.53 -1.30
w/o 教师置信度 59.32 -1.51
w/o 轨迹过滤 58.99 -1.84
仅轨迹过滤 59.30 -1.53

这个表透露了一个细节:轨迹过滤的贡献最大(-1.84),后面才是教师置信度(-1.51)和学生困惑度(-1.30)。也就是说,"挑对 rollout"比"挑对 token"对最终性能影响更大——这跟我直觉略反,本来以为 token 级软加权的精细化是主要功劳。可能因为差的 rollout 即使你 token 加权再精细也救不回来,先把入口卡住更划算。

超参敏感性

图3:超参数敏感性分析

图 3:(a) 轨迹过滤比例 p 在 20% 处有明显峰值;(b) 教师置信度系数 α 在 ≥1 时稳定;(c) 学生困惑度系数 β 全段几乎不敏感

p=20% 这个点挺漂亮——p=10% 是欠过滤(噪声轨迹没扔够),p=40% 过度过滤(连有用的轨迹都砍了)。论文给的默认值就在峰值上,看起来是先扫了一遍才定的。

α 在小值(0.25、0.5)下会显著掉点,说明教师置信度信号需要足够强度才有效。β 几乎不敏感,从 0.25 到 5.0 都稳——这个是好事,说明学生困惑度的信号本身已经足够鲁棒,不挑参数。


案例:到底在加权什么 token

图4:token 权重可视化

图 4:FiRe-OPD 在数学推理轨迹上分配的 token 权重,颜色越深权重越高。最高权重落在 "Therefore"、"implies"、"So" 这类推理转折词上

图5:权重分配的统计分析

图 5:四个视角的权重统计。左上是直方图(峰值在 1.0 附近,说明做的是"重新分配"而不是整体放大);右上是位置分析(权重越往轨迹末尾越大);左下是 top 权重 token(被 "Since/So/However/Therefore" 主导);右下是 bottom 权重 token(程序词和公式标点)

这两个图把方法的工作机制讲得挺清楚的——FiRe-OPD 实际在加权的是推理连接词,也就是教师"知道下一步该走哪"但学生还在犹豫的位置。这跟我们对数学推理的直觉一致:知识点的应用本身可能学生已经会了,但何时该应用、何时该转折才是难点。

直方图在 1.0 附近的尖峰也说明一件事:归一化设计是对的,权重不是"砸大锤"地把某些 token 抬到天上去,而是细微调整,整体守恒。

末位 token 权重更高这点也合理——推理链越往后,错误累积越大,教师在最后阶段的纠偏信号越宝贵


我的判断

读完之后几个观察。

亮点: - 把"轨迹+token"双粒度合到一起,hard+soft 的对应关系是真挑明了。这个直觉以前可能很多人有,但没人正经做消融钉死过。这篇 4 种组合的对照表是核心贡献。 - 工程实现非常轻量。在现成 OPD 代码基础上加预处理排序 + token 加权两步,几十行代码的事。可复现性高。 - 案例分析做得很扎实。token 权重可视化清楚地说明了方法在干什么——加权推理转折词,这个解释让"为什么有效"有了直觉支撑。

需要警惕的地方: - 多教师场景的 +18.81 数字有点 misleading。主要跃升来自 ExOPD 那一档,FiRe-OPD 的边际贡献是 1 分。表述时直接拿来对比 OPD 容易被夸大。 - 绝对增量在饱和 benchmark 上很小(MATH、AMC 都在 0~1 分内),主要价值集中在难题(AIME、HMMT)。如果你的下游应用不在前沿难度区间,可能感受不到差异。 - 所有实验都基于 Qwen3-4B 学生,只换教师,没换学生模型。方法的鲁棒性在不同 backbone 下是否一致没验证,这点可能要自己跑一下。 - 教师置信度和学生困惑度的乘法形式(\(1+\alpha c^T\))×(\(1+\beta c^S\))是经验设定,没有理论上的最优性论证。论文超参敏感性扫了一下证明能 work,但形式本身的可替代性(比如 max、加法)没充分讨论。

对工程的启发:如果你正在做 RL 微调或者蒸馏,并且已经有"按某个分数筛 rollout"的 baseline,可以试试在保留的 rollout 内部加一层 token 软加权——具体形式不一定要照抄这篇,关键是别再对每个 token 一视同仁。如果 baseline 是"按 token 熵硬 mask",也可以试试改成连续权重——硬截断的非平滑性确实是个隐患。

我自己读完最有感觉的一句话是"硬过滤 vs 软加权要看对象的本质粒度"。轨迹是离散的、原子化的;token 是连续的、可加权的。这个原则比方法本身更通用——以后碰到任何"该不该选/该不该扔"的问题,先想想这个对象本身是离散单元还是连续信号,再决定动哪种刀。


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