CADENCE:覆盖自适应蒸馏缩小推理差距——用一台 Mac Studio 把 0.5B 模型蒸馏到 69.8% GSM8K

你有没有碰到过这种事:拿一个 1.5B 的数学模型做教师,想把推理能力蒸馏到一个 0.5B 的小模型上,结果小模型要么一开始就崩掉(冷启动),要么训练到一半发现奖励信号稀疏得要命,一半以上的轨迹全是零分?

这篇论文 CADENCE(arXiv:2607.16955)就是冲着这三个问题来的。作者 Satyam Kumar 和 Saurabh Jha 提出了一个统一的 on-policy 蒸馏框架,用 6 个针对性组件 + 2 个稳定机制,把 Qwen2.5-0.5B 从预训练的 48.7% GSM8K 蒸馏到了 69.8%(1.5B 教师),关闭了 63.2% 的师生差距。换 3B 教师能到 72.1%,关闭 76.2% 差距。

最让我意外的是硬件:全部实验跑在一台 Apple Mac Studio 上(M 系芯片、64GB 统一内存),单种子约 14-22 小时。不需要数据中心级别的算力。


论文信息

项目 内容
标题 CADENCE: Closing the Reasoning Gap via Coverage-Adaptive On-Policy Distillation
作者 Satyam Kumar, Saurabh Jha
链接 https://arxiv.org/abs/2607.16955
发表日期 2026-07-18
领域 Knowledge Distillation, On-Policy Training, Mathematical Reasoning

核心摘要

On-policy 蒸馏把大模型的推理能力迁移到小模型上,但存在三个互相放大的失败模式:冷启动坍塌(学生给不出教师偏好的 token)、状态无关的 KL 调度(只用时间做前向→反向过渡)、二元奖励稀疏(pass/fail 信号丢弃了部分正确的轨迹信息)。CADENCE 给每个失败模式都配了一个精准的修复方案:DRIFT 机制做 per-token 的 forward-KL/reverse-KL 凸组合,COVA 做覆盖率自适应的 β 调度加速过渡,FTB 在高熵位置集中梯度,CCD 给"接近正确但错了"的轨迹发部分学分,LAP 偏好短的正确答案,EMR 匹配师生熵做校准,BSD 做自举式自蒸馏。GSM8K 上比最强的公平 baseline(DRIFT+binary reward)高 +4.4 个点,统计显著性超过 6σ。

我的判断:这是一篇工程扎实、理论诚实的工作。它不声称"首创"或"革命性",而是老老实实诊断问题、逐个修、逐个验证。组件之间有正向交互效应(消融实验显示各组件单独移除的损失之和大于全部移除),说明设计是系统性的而非堆砌。对在消费级硬件上做蒸馏的人来说,这篇论文的参考价值很高。


问题动机:on-policy 蒸馏的三道坎

知识蒸馏从 Hinton (2015) 开始就有一个根本矛盾:

Off-policy 蒸馏(经典 forward-KL)让学生在教师的采样序列上训练,但部署时学生得用自己的分布生成——训练和推理不匹配。这就像让学员背教练的标准动作,比赛时却要求即兴发挥。

On-policy 蒸馏(GKD, MiniLLM)解决了这个问题:学生自己采样轨迹,教师给 per-token 指导。但三个新问题冒出来了:

失败模式一:冷启动坍塌

刚初始化的小学生模型,给教师偏好的推理 token 分配的概率接近零。反向 KL 下这些位置几乎不会被采样到,梯度信号趋近于零——学生永远学不会它从未产生过的推理模式。这是一个鸡生蛋的问题。

失败模式二:状态无关的 KL 调度

现有方法(DistiLLM 等)用固定的时间表做 forward-KL → reverse-KL 插值。但不同题目的覆盖增长速度不一样:简单题目可能早就该进入 sharpening 阶段了,难题目还在需要 mode-covering。一刀切的时间表必然次优。

失败模式三:二元奖励稀疏

基于结果的强化学习(GRPO 等)用 pass/fail 信号。GSM8K 上预训练 pass@1 约 49%,意味着 51% 的轨迹收到零奖励。一道题设对了但最后一步算错的轨迹,和完全胡说的轨迹拿到同样的零分——信息被浪费了。

CADENCE 对每个问题都给了针对性的解法。


方法核心:DRIFT + 六大组件

图1:CADENCE 端到端架构

图1:CADENCE 完整架构。左侧 Pre-Distillation 阶段做 TFW 教师强制预热 + 学生 on-policy 采样;中间 Central Pipeline 包含 CCD/LAP 评估层、DRIFT 核心(forward-KL 与 reverse-KL 的 β-scheduled 凸组合)、FTB 高熵位置增强、COVA 覆盖率自适应调制、EMR 熵匹配校准;右侧 Update & Stability 层包含 KTR 信任区域约束 + BSD 自举自蒸馏。

DRIFT:per-token KL 替代目标混合

这是整个框架的地基。DRIFT 不估算序列级 KL 梯度(论文明确声明这一点,Remark 1),而是优化 per-token 替代目标——这是 on-policy 蒸馏实践中的标准做法(GKD、DistiLLM 都这么干)。

流程分六步:

  1. On-policy 采样:学生自己生成 \(x_{1:T} \sim \pi_\theta\)
  2. 教师打分:计算每个 token 的 \(\log \pi_\phi(x_t \mid s, x_{1:t-1})\)
  3. Per-token log-ratio\(\hat{k}_t = \log \pi_\theta(x_t \mid s_t) - \log \pi_\phi(x_t \mid s_t)\)
  4. 自归一化重要性权重\(w_t = \text{clip}(\exp(-\hat{k}_t), 0, c)\),其中 \(c=10\);然后 \(A_t^{\text{fwd}} = G \cdot w_t / (\sum_{t'} w_{t'} + \epsilon)\)
  5. DRIFT advantage\(A_t^{\text{DRIFT}} = (1-\beta) \cdot (-\hat{k}_t) + \beta \cdot A_t^{\text{fwd}}\),β 从 1 余弦退火到 0
  6. 策略梯度更新

关键设计:\(G\)-scaling 保证 \(-\hat{k}_t\)(reverse 信号)和 \(A_t^{\text{fwd}}\)(forward 信号)都是 O(1) 量级。没有这个 scaling,无论 β 取什么值,mixture 都会被 reverse-KL 主导。

Proposition 1 证明了:β=0 时等价于 reverse-KL 的 REINFORCE 估计量,β=1 时等价于 forward-KL 的自归一化 IS 估计量。中间值则是两者的凸组合。

组件 A:COVA — 覆盖率自适应 β 调度

COVA 解决的是"状态无关调度"问题。核心思路:别光看时间,要看学生实际覆盖了多少教师的高概率 token。

定义位置 t 的覆盖率: $\(\text{cov}_t = \frac{\sum_{v \in \mathcal{T}_k(t)} \pi_\phi(v \mid s_t) \cdot \mathbf{1}[\pi_\theta(v \mid s_t) > \tau]}{\sum_{v \in \mathcal{T}_k(t)} \pi_\phi(v \mid s_t)}\)$

取 top-k=20 个教师 token,看学生分配给它们的概率是否超过阈值 τ=10⁻³。cov 的 EMA 作为全局覆盖率指标。

COVA 调整后的 β: $\(\beta_{\text{COVA}} = \max(\beta_{\text{end}}, \beta_{\text{cosine}} \cdot (1 - \alpha_{\max} \cdot \frac{\max(0, \overline{\text{cov}} - \gamma)}{1 - \gamma}))\)$

当覆盖率还没超过门限 γ 时,COVA 不干预(Proposition 2 证明)。一旦超过了,就加速 forward → reverse 过渡。γ=0.15 是在验证集上调出来的。

诚实范围:COVA 只解决"过渡太慢"的问题。"过渡太快"的不对称问题靠保守选择 β_cosine 来控制,不是 COVA 的职责。

组件 B:FTB — 高熵位置梯度增强

直觉很简单:教师熵高的位置通常是推理的关键分叉点(比如"列方程还是试数?")。FTB 用全局熵参考(固定 \(H_{\text{ref}}=2.0\) nats)对这些位置的优势进行放大:

\[A_t^{\text{FTB}} = A_t^{\text{DRIFT}} \cdot (1 + \gamma_{\text{ftb}} \cdot \min(1, H_\phi(t)/H_{\text{ref}}))\]

为什么用全局参考而不是每条轨迹的最大熵?早期版本用了 per-trajectory max 归一化,结果高熵均匀的序列得不到区分,低熵但有单个尖峰的序列又过度集中。固定参考保证了跨序列的一致性:高熵位置最多获得 1.5× 基础优势,低熵位置约

诚实范围:高熵是推理关键位置的廉价代理,不是充分条件。风格性分叉(同义词替换)也高熵但跟正确性关系不大。FTA 指标(后文会看到)验证了这个代理的有效性。

组件 C:CCD — 正确性 + 数值接近度部分学分

这是直接解决二元奖励稀疏问题的组件。思路:错了但不完全错的轨迹也应该有非零奖励。

数值接近度得分: $\(p_i = \frac{1}{1 + |\hat{a}^{(i)} - a_{\text{gold}}| / \max(|a_{\text{gold}}|, 1)}\)$

精确匹配时 p=1,随相对误差平滑衰减,非数值输出为 0。

完整 CCD 奖励: $\(r_i = \underbrace{\mathbf{1}[\hat{a}=a_{\text{gold}}] \cdot (w_c + w_{\text{con}} \cdot C)}_{\text{正确轨迹(密集评分)}} + \underbrace{(1 - \mathbf{1}[\hat{a}=a_{\text{gold}}]) \cdot w_{\text{partial}} \cdot p_i}_{\text{错误但接近的轨迹(稀疏性修复)}}\)$

效果:非零奖励比例从 ~49%(纯正确性)提升到 ~55%。看起来只多了 6 个百分点,但这 6 个点恰好是那些"差一点就对"的轨迹——它们携带的信息密度很高。

Remark 2 明确说:CCD 是加性项,不是偏差修正。它会改变 DRIFT 梯度的方向,这是设计意图。

组件 D:LAP — 简短偏好强化

\[\mathcal{L}_{\text{LAP}} = \alpha_{\text{lap}} \cdot \mathbf{1}[\hat{a}=a_{\text{gold}}] \cdot (1 - G/G_{\max}) \cdot (-\frac{1}{G}\sum_t \log \pi_\theta(x_t \mid s_t))\]

\(G_{\max}=192\) 是固定的生成长度上限。越短的正确答案 SFT 权重越高。注意用的是固定参考而不是 prompt-length 相关的归一化——否则不同长度的 prompt 下同样长度的回答会得到不同的权重。

RLD 指标证实了效果:未截断子集的中位数长度从 134 token 压缩到 108 token,是真压缩不是截断造成的。

组件 E:EMR — 分叉位置熵匹配正则化

\[\mathcal{L}_{\text{EMR}} = \lambda_{\text{emr}} \cdot \frac{\sum_t (H_\theta(t) - H_\phi(t))^2 \cdot \mathbf{1}[H_\phi(t) > \eta]}{\sum_t \mathbf{1}[H_\phi(t) > \eta] + \epsilon}\]

只在教师熵 > η=1.0 nat 的分叉位置生效,避免在确定性 token 上强加人工确定性。消融实验显示:去掉 EMR 后 ECE 从 0.078 恶化到 0.113(相对退化 45%),而准确率只降 1.4 个点——说明 EMR 是精准的校准驱动器,不是泛化的性能提升器。

组件 F:BSD — 自举式自蒸馏

主训练结束后额外跑 30 步:每个 prompt 多采一些 rollout,筛选一致性 ≥ 0.8 且答案正确的,做 SFT。

正确性门控是必须的:没有它,难题上的"自信且一致地错"会被强化——这正是 self-consistency decoding 在训练时的经典失败模式。

稳定机制

  • TFW(Teacher-Forced Warmup):20 步教师强制 SFT,保证 importance weights 从一开始就良态。消融显示去掉 TFW 降 3.2 个点——预热真的很关键。
  • KTR(KL Trust Region):软信任区域惩罚,\(\lambda_{\text{ktr}}=0.005\), \(\delta_{\text{ktr}}=3.0\)。只在异常位置的 per-token log-ratio 超过阈值时激活,影响 modest(消融 -0.6)。

总目标

\[\mathcal{L}_{\text{CADENCE}} = \mathcal{L}_{\text{DRIFT}} + \mathcal{L}_{\text{CCD}} + \mathcal{L}_{\text{LAP}} + \mathcal{L}_{\text{EMR}} + \mathcal{L}_{\text{KTR}}\]

BSD 是独立的后处理阶段。


实验结果

配置一览

项目 配置
教师 Qwen2.5-Math-1.5B-Instruct / Qwen2.5-3B-Instruct
学生 Qwen2.5-0.5B-Instruct(两个实验共用)
LoRA r=16, α=32, dropout 0.05, 9.44M 可训练参数(1.91%)
优化器 AdamW, lr=2e-5, 30步 warmup
训练 400 步 DRIFT + 30 步 BSD, 4 prompts/step, gen_len=192
温度 1.0 → 0.7, β cosine 1.0 → 0.0
硬件 Apple Mac Studio (M-series, 16核CPU, 40核GPU, 64GB统一内存)
种子数 5,报告均值±标准差

评估协议修正

论文有个很诚实的细节:初稿用了 192-token 评估上限,发现 Qwen2.5-Math-1.5B-Instruct 只有 74.5% GSM8K(远低于官方 ~84%)。分析后发现两个原因:(1) MATH-500 上 192 token 经常截断多步推导;(2) 简单 regex 解析误判了指令微调模型的输出格式。

修正后的协议:MATH-500 用 512-token 上限 + 匹配 Qwen2.5-Math 格式的答案提取器(解析 \boxed{...} 格式)。修正后复现出 1.5B 教师 82.1% GSM8K / 64.3% MATH-500,3B 教师 79.4% / 66.5%,与官方发布数接近。所有正文数字都用这个修正协议。

主实验结果

方法 GSM8K (1.5B→0.5B) GSM8K (3B→0.5B) MATH-500 (1.5B→0.5B) MATH-500 (3B→0.5B)
教师(参考) 82.1 79.4 64.3 66.5
学生(预训练) 48.7 ± 0.3 48.7 ± 0.3 32.1 ± 0.4 32.1 ± 0.4
SFT(教师轨迹) 58.4 ± 0.6 61.2 ± 0.7 38.6 ± 0.8 41.2 ± 0.7
Forward KL 55.8 ± 0.7 58.9 ± 0.8 36.8 ± 0.9 39.3 ± 0.9
Reverse KL (MiniLLM) 53.5 ± 0.9 56.1 ± 0.8 35.4 ± 1.0 37.6 ± 0.9
GKD 60.7 ± 0.6 63.8 ± 0.6 40.2 ± 0.7 43.5 ± 0.7
DRIFT (base) 63.1 ± 0.5 66.0 ± 0.5 42.4 ± 0.6 45.7 ± 0.6
STaR/RFT 61.9 ± 0.7 64.6 ± 0.7 41.5 ± 0.8 44.6 ± 0.7
GKD+GRPO 63.8 ± 0.6 66.7 ± 0.6 43.2 ± 0.7 46.4 ± 0.6
DRIFT+binary 65.4 ± 0.5 68.2 ± 0.5 44.5 ± 0.6 47.8 ± 0.5
CADENCE (ours) 69.8 ± 0.5 72.1 ± 0.4 47.9 ± 0.5 50.6 ± 0.5
Δ over pretrained +21.1 +23.4 +15.8 +18.5
Δ over DRIFT+binary +4.4 +3.9 +3.4 +2.8
Teacher gap closed (%) 63.2% 76.2% 49.1% 53.8%

几个观察:

Forward vs Reverse KL 的互补失效。Reverse KL 单独用 FTA 还行(47.6%)但 SAG 最差(27.1)——它擅长 sharpening 但覆盖不够。Forward KL 单独 SAG 还可以(17.5)但 FTA 弱(40.9%)——覆盖够了但不够 sharp。CADENCE 通过 scheduled mixture 两全其美:FTA 到 58.6%,SAG 降到 11.7%

公平对比很重要。论文特意加入了 matched-compute label-using baseline(STaR/RFT、GKD+GRPO、DRIFT+binary),它们也用 n_g=4 rollout,跟 CADENCE 同等算力。CADENCE 在同等算力下仍然领先最强 baseline +4.4 个点(GSM8K, Exp1),差距超过 pooled std 的

CNI(每 PFLOP 得分)也是最高的。多 rollout 方法的 CNI 普遍低于单 rollout(因为采样开销大),但在多 rollout 类别里 CADENCE 的 CNI=4.15 最高——说明额外组件确实增加了单位算力的精度,不是单纯堆算力。

训练动态

图2:训练动态

图2:Experiment 1 (1.5B→0.5B) 的训练动态。(a) 训练 loss 曲线:初期上升对应 forward-KL 的支持构建阶段(β≈1),随后收敛对应 reverse-KL 的 sharpening 阶段。(b) KL 散度曲线:红色 reverse KL 在 step~60 达到峰值 ~1.7 后衰减,绿色 forward KL(IS 估计)稳定在 ~0.2 左右。

训练 loss 的形状很有意思:先升后降。初期上升是因为 β≈1 时 forward-KL 占主导,学生在"扩展支持"——学新的推理模式,loss 自然涨。之后 β 逐渐减小转向 reverse-KL,开始"精炼",loss 下降收敛。这个两阶段行为跟理论预期一致。

诊断指标对比

指标 预训练 CADENCE (Exp1) CADENCE (Exp2)
ECE ↓ 0.164 ± 0.008 0.078 ± 0.006 0.072 ± 0.005
Brier ↓ 0.398 ± 0.012 0.241 ± 0.009 0.226 ± 0.008
WikiText PPL ↓ 24.53 ± 0.11 24.84 ± 0.14 25.08 ± 0.16
SAG ↓ 24.6 ± 0.9 11.7 ± 0.7 10.4 ± 0.6
FTA ↑ 34.8 ± 1.2 58.6 ± 0.9 62.3 ± 0.8
RLD (token) ↓ 134 (中位数) 108

ECE 从 0.164 降到 0.078,校准改善非常明显。WikiText PPL 基本没变(24.53→24.84),说明蒸馏没有损害通用语言能力——这点很重要,很多蒸馏方法会牺牲通用性来换任务性能。

SAG(pass@16 - pass@1)从 24.6 降到 11.7,说明模型变得更"确定"了——采样多样性下降但准确性上升,这是蒸馏的预期行为。

消融实验

移除组件 GSM8K Δ vs Full ECE SAG
CADENCE (full) 69.8 ± 0.5 0.078 11.7
−COVA (A) 67.6 ± 0.6 −2.2 0.088 13.4
−FTB (B) 66.9 ± 0.6 −2.9 0.084 14.2
−CCD partial credit (C) 66.3 ± 0.7 −3.5 0.089 15.5
−LAP (D) 69.0 ± 0.5 −0.8 0.079 12.1
−EMR (E) 68.4 ± 0.6 −1.4 0.113 12.6
−BSD (F) 67.8 ± 0.6 −2.0 0.081 16.9
−TFW 66.6 ± 0.7 −3.2 0.093 14.8
−KTR 69.2 ± 0.5 −0.6 0.082 12.0
−LOO baseline 67.9 ± 0.8 −1.9 0.086 12.9
DRIFT only 63.1 ± 0.5 −6.7 0.132 15.2
Pretrained 48.7 ± 0.3 −21.1 0.164 24.6

最有意思的发现:超加性交互效应。六个组件单独移除的 delta 之和是 18.5 个点,但全部移除只损失 6.7 个点(DRIFT only vs full)。2.8× 的超加性说明组件之间存在正向交互——它们在一起的效果大于各自效果的简单叠加。

各组件的角色分工很清晰: - CCD(−3.5):最大单项影响,确认了密集奖励信号的价值 - TFW(−3.2):预热的重要性被低估了 - FTB(−2.9):熵加权优势确实有效 - EMR:移除后 ECE 暴涨 45%,但准确率只降 1.4——纯粹的校准组件 - BSD:移除后 SAG 从 11.7 涨到 16.9——主要的选择性驱动器 - KTR(−0.6):影响最小,只在异常位置激活

跨方法诊断

方法 GSM8K ECE SAG FTA KLPE RLD CNI
Pretrained 48.7 0.164 24.6 34.8 148
SFT 58.4 0.131 19.8 44.2 141 5.32
Forward KL 55.8 0.142 17.5 40.9 0.09 145 5.51
Reverse KL 53.5 0.149 27.1 47.6 0.22 128 4.28
GKD 60.7 0.118 16.9 45.8 0.31 137 7.65
DRIFT (base) 63.1 0.132 15.2 50.7 0.48 132 9.44
STaR/RFT 61.9 0.121 16.3 46.9 124 4.35
GKD+GRPO 63.8 0.114 14.1 49.4 0.29 127 3.44
DRIFT+binary 65.4 0.109 13.5 52.9 0.50 125 3.61
CADENCE 69.8 0.078 11.7 58.6 0.62 115 4.15

CADENCE 在几乎所有维度上都最优或接近最优。特别值得注意的是 KLPE(KL-path efficiency,衡量每步训练的 KL 收敛效率)达到 0.62,远超 DRIFT base 的 0.48——说明 CADENCE 的训练效率更高,不是靠堆步数。

RLD(响应长度分布)中位数从 134 降到 108,确认 LAP 的真实压缩效果。


我的判断

这篇论文做得好的地方

诚实程度很高。从 Remark 1 明确声明 DRIFT 不是序列级 KL 梯度估计器,到评估协议修正的完整披露,再到每个组件的"honest scope"说明——这在当前环境下挺难得的。很多论文会模糊处理这些边界,CADENCE 选择讲清楚。

系统性设计,不是组件堆砌。消融实验的超加性(2.8×)证明了组件之间的协同效应。每个组件都有明确的诊断对象,不是"感觉应该有用所以加上"。

统计严谨。5 个种子、报告标准差、pooled std 计算 delta 显著性、超参在验证集上调不在测试集上调——这些基本操作很多论文都做不到。

消费级硬件的可复现性。单台 Mac Studio 就能跑完所有实验,这意味着任何人都可以复现。这对蒸馏领域的可信度建设很有帮助。

可以质疑的地方

CCD 的部分学分增益有限。非零奖励比例从 49% 提到 55%,只多了 6 个百分点。作者自己也承认"meaningful but modest"。更大的收益可能需要 step-level process reward(PRM),而这正是 DeepSeek-R1 等工作探索的方向。

只在数学推理上验证。GSM8K 和 MATH-500 都是数学 benchmark。代码生成、逻辑推理、多轮对话等其他领域的效果未知。FTB 的高熵代理假设在其他领域是否成立也不确定。

COVA 的不对称性。只解决"过渡太慢"不解决"过渡太快"。虽然保守的 β_cosine 能缓解后者,但如果某些场景下默认 cosine 本身就太激进呢?这可能需要更自适应的双向控制。

教师规模效应不明显。1.5B→3B 教师的 delta 在 pooled std 内,无法做出显著性判断。更大规模的教师(如 7B、72B)是否能带来成比例的提升?论文没回答这个问题。

工程启发

如果你也在做 on-policy 蒸馏,这几个点值得借鉴:

  1. TFW 预热不能省。消融 −3.2 个点的代价太大了。20 步 teacher-forced warmup 是性价比极高的投资。
  2. 覆盖率作为调度信号比纯时间表更合理。COVA 的实现很简单(EMA + 门限),但效果明确。
  3. 密集奖励 > 二元奖励。即使是最简单的数值接近度部分学分,也能把有效信号比例提几个点。
  4. 校准值得单独优化。EMR 只影响 ECE 不怎么影响准确率,但对部署场景来说校准很重要——用户需要知道模型什么时候不确定。

总结

CADENCE 是一篇"工程师写给工程师看"的好论文。它不追求标题党的效果,而是扎扎实实地诊断了 on-policy 蒸馏的三个失败模式,给出了六个有理论依据的修复方案,并用严格的实验逐一验证。在消费级硬件上把 0.5B 模型的 GSM8K 从 48.7% 推到 69.8%,关闭超过 63% 的师生差距——这个数据本身就能说话。

对正在做模型压缩、边缘部署或者资源受限场景下推理优化的团队来说,CADENCE 提供了一套可以直接参考的工程方案。它的组件是模块化的,可以根据自己的场景选择性采用。

当然,距离"完美解决蒸馏问题"还远。step-level process reward、跨域泛化、更大规模教师的扩展——这些都是 open question。但作为一个起点,CADENCE 的诚实和扎实让它值得花时间细读。


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