先把烂轨迹扔了,再给好 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:在强→弱、单教师、多教师三种 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 框架。学生采样 rollout 后,先按教师对数概率均值打分排序,砍掉底部 p% 的轨迹;进入保留轨迹后,每个 token 由教师置信度和学生困惑度联合算出连续权重,重塑 PPO 风格的策略梯度
第一步:轨迹过滤(Filter)
打分公式很朴素:
就是把整条轨迹上每个 token 的教师 log-prob 取平均。直觉很顺:教师对这条轨迹整体越"接受",分数越高;反之,如果教师在这条路径上经常给低概率,说明学生跑出来的推理路径离教师能产出的分布很远,硬学过去会引入对抗性梯度。
排完序后,直接砍掉底部 p 比例的轨迹(默认 p=20%)。这里是 hard 选择——为什么轨迹级硬选合理?因为一条 rollout 是一个整体单元,要么这条路径值得学要么不值得,没什么"半值得"的中间态。论文后面消融把这点也证了。
第二步:token 软重权(Reweight)
保留下来的轨迹里,每个 token 算两个连续信号。
教师置信度(教师越确定越重要):
熵越低(教师越确定),\(c_t^T\) 越接近 1。归一化用的是当前 batch 的最大熵,自适应。
学生困惑度(学生越不会越重要):
学生熵越高(越不确定)越接近 1。这里其实就是一个"教师有把握、学生没把握"的双重过滤,但没有一刀切,是连续值。
最终权重:
加了个 +1 偏置——保证再不重要的 token 权重也不会塌成 0,最差也是 1.0,避免梯度被某些极端样本主导。
然后归一化重塑优势:
这一步是关键的工程细节——归一化保证了整条轨迹的总梯度幅度不变,权重做的是"在 token 之间重新分配监督信号",而不是"整体放大或缩小"。这个设计避免了重要 token 多就训得猛、重要 token 少就训得软的问题。
最后塞回 PPO 风格的 clip loss:
整个方法的工程改动量其实很小——拿到 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:(a) 轨迹过滤比例 p 在 20% 处有明显峰值;(b) 教师置信度系数 α 在 ≥1 时稳定;(c) 学生困惑度系数 β 全段几乎不敏感
p=20% 这个点挺漂亮——p=10% 是欠过滤(噪声轨迹没扔够),p=40% 过度过滤(连有用的轨迹都砍了)。论文给的默认值就在峰值上,看起来是先扫了一遍才定的。
α 在小值(0.25、0.5)下会显著掉点,说明教师置信度信号需要足够强度才有效。β 几乎不敏感,从 0.25 到 5.0 都稳——这个是好事,说明学生困惑度的信号本身已经足够鲁棒,不挑参数。
案例:到底在加权什么 token

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

图 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 前沿,关注我。