CADENCE:通过 Coverage-Adaptive On-Policy 蒸馏弥合推理差距

  • 关联论文:2607.16955
  • 作者:flyP
  • 更新:2026-07-31

一句话结论

CADENCE 提出一套覆盖 cold-start、coverage、reward 三类失败模式的 on-policy 蒸馏框架,用 DRIFT 机制在 per-token 层面做 forward-KL 与 reverse-KL 的凸混合,并叠加 COVA / FTB / CCD / LAP / EMR / BSD 六项修正,使 0.5B 学生模型在 GSM8K 上从 48.7% 提升至 69.8%,相对教师差距闭合 63.2%,整套实验在单台 64GB Apple Mac Studio 上完成。

解决的真问题

大模型蒸馏一直有一个隐痛:把"会推理"的强教师压缩成"小而快"的学生时,学生往往学不到位。原因并非单纯的容量损失,而是 on-policy 蒸馏过程中三类被忽略的耦合失败:

  1. Cold-start collapse:新生学生模型对教师偏好的 token 分配接近零概率质量,导致蒸馏初期的 importance-sampling 比率几乎为零,优化信号消失。
  2. State-agnostic divergence scheduling:既有方法按时间表机械地在 forward-KL 与 reverse-KL 间切换,没有把"学生的 coverage 状态"纳入调度;前 KL 让学生"什么都覆盖"(mode-covering),反 KL 让它"只挑一种回答"(mode-seeking)。
  3. Binary reward sparsity:训练 trace 中"部分正确"的样本直接被打成 0 奖励,浪费了大量接近正确路径中的密集信号。

CADENCE 的核心立场是:这三类失败是叠加且互相加剧的,必须有一个统一框架同时给每类失败打补丁。

核心方法

CADENCE 的骨干是 DRIFT 机制,其他六项都是针对特定失败模式的扩展。设教师为 π_T、学生为 π_θ、采样到的 token 序列为 y,由学生自身采样得到(on-policy)。

在方法论层面,CADENCE 与此前一系列蒸馏工作有一个根本性区分:它把 on-policy 蒸馏看作一个"调度 + 修补"的双层问题,而不只是损失函数的替换。调度层是 DRIFT 本身,修补层是后面六项补丁;它们彼此正交。读者可以拆任何一项出来,独立做 ablation,这与其他蒸馏论文"一锅炖"地堆叠 trick 的写作风格形成对比。

DRIFT:per-token 凸混合 on-policy 蒸馏

对每个 token 位置 t,DRIFT 维护一个混合权重 α_t ∈ [0,1],并按以下公式对当前时刻的 surrogate loss 做凸组合:

$$ \mathcal{L}{\text{DRIFT}}(y_t \mid x, y{<t}) \;=\; \alpha_t \cdot \mathrm{KL}!\left(\pi_T \,|\, \pi_\theta\right)\big|t \;+\; (1-\alpha_t) \cdot \mathrm{KL}!\left(\pi\theta \,|\, \pi_T\right)\big|_t $$

关键点:

  • Per-token 而非 sequence-level:传统 GKD / MinKD 等用 sequence-level KL 梯度估计器,DRIFT 用 per-token surrogate,绕开了 sequence-level 估计的高方差。
  • On-policy 轨迹:在学生自己的采样分布上估计两个 KL,避免 teacher-forcing 带来的分布偏移。
  • 凸混合:在每个 token 单独决定今天先学"覆盖"还是"聚焦",由 α_t 调度。

六项针对性修正

组件 解决哪一类失败 关键思路
COVA(Coverage-Adaptive β Schedule) State-agnostic scheduling 不再按时间表切换 KL 方向,而是把 student coverage 状态纳入调度;当学生覆盖较差时偏前 KL,较好时切到反 KL,加速收敛
FTB(Forking-Token Boost) Cold-start collapse 找到高熵"分叉 token",将梯度集中到这些位置,用全局归一化的熵参考,鼓励学生在决策点匹配教师
CCD(Continuous Correctness Distance) Binary reward sparsity 给"接近正确但仍错"的 trace 一个连续的数值相近度奖励,避免整体判 0/1
LAP(Length-Adjusted Preferential) 推理冗长问题 对正确的 rollout 做"短者优先"的强化,鼓励学生走简洁推理路径而非冗长链式思考
EMR(Entropy-Matching Regularization) 校准学生整体熵分布 让学生在每层的输出熵整体对齐教师,避免 logits 压缩到错误位置
BSD(Bootstrapped Self-Distillation) 后期性能上限 在主训练尾声接入一轮 self-distillation,让学生从已增强的自己身上再学一次

整体训练伪代码大致为:

initialize pi_theta from pretrained student
init teacher-freeze pi_T (large)
for step in [0, total_steps]:
    # 1. 学生采样一段轨迹 y ~ pi_theta(.|x)
    y = rollout(prompt, pi_theta, max_tokens=512)
    # 2. 计算 per-token 教师/学生 logits
    log_pT = pi_T.logits(x, y)
    log_pS = pi_theta.logits(x, y)
    # 3. COVA 根据学生 coverage 状态给 alpha_t
    alpha = coverage_adaptive_beta(state)
    # 4. FTB 在高熵 token 处抬升权重
    weight = forking_boost(entropy_tokens)
    # 5. DRIFT 损失(per-token 凸混合)
    L_drift = sum_t alpha_t * FKL + (1-alpha_t)*RKL weighted
    # 6. CCD 数值相近度奖励
    r_ccd = continuous_correctness_distance(y_pred, y_gold)
    # 7. LAP 短而正确的偏好
    r_lap = length_aware_pass(y_pred, y_gold)
    R = r_ccd + lambda*r_lap
    total_loss = L_drift - eta * R + mu * entropy_match_loss
    update pi_theta
# 末尾 BSD 自蒸馏
self_distill(pi_theta, pi_theta_strong)

关键实验与数据

实验设定:

  • 任务:GSM8K、MATH-500
  • 实验选型理由上覆盖了"短答案但要算准的 GSM8K"与"长链推理的 MATH-500",两个数据集的失败模式不完全相同,能让 DRIFT + 六项补丁在不同粗粒度下都受考验。
  • 协议:"corrected 512-token",即把超出 512 token 的截断 trace 重新计为失败,避免长度作弊
  • 随机性:5 个种子,报告 ± std
  • 算力:单台 Apple Mac Studio(M 系列、64GB 统一内存)

为什么"corrected 512-token"会被论文单独强调?因为这是 on-policy 蒸馏中一个长期被打分的灰色地带:很多 baseline 在更长的 token 预算下报告"漂亮的 pass@1",但其中相当部分来自"模型硬拖字数总算到答案",本质是长度红利而非推理能力。CADENCE 直接把"超过 512 token 的样本在事后被判定为失败",这样所有方法站在同一条水平线上比较。先把实验纪律划清,再谈能力,是这篇论文比其他蒸馏工作更可信的一个细节。

主要结果(GSM8K pass@1):

配置 学生 教师 学生 pretrained CADENCE 后 教师差距闭合率
1.5B → 0.5B 0.5B 1.5B 48.7% 69.8 ± 0.5% 63.2%
3B → 0.5B 0.5B 3B 48.7% 72.1 ± 0.4% 76.2%

最强对照(DRIFT + binary reward,不用六项扩展)取得约 65.4%,CADENCE 相对再涨 +4.4 ± 0.7 个百分点。

附带几个值得注意的设计选择:

  • "corrected 512-token protocol"是论文强调的实验纪律——许多 on-policy 蒸馏论文在 longer budget 下报告会虚高,CADENCE 自己加了截断校正。
  • 整个训练完全在消费级硬件上跑过,对工程团队是直接可复现的承诺。
  • DRIFT 是机制,COVA/FTB/CCD/LAP/EMR/BSD 是模块化补丁,你可以只启 COVA+FTB,也能启全量。

亮点与局限

亮点

  • 把失败模式拆成三类,再一一对应六项机制,因果链清晰、模块可独立打开/关闭。
  • 用 per-token surrogate loss 代替 sequence-level KL 估计器,回避了高方差。
  • COVA 把"调度策略"看作一个可被 coverage 信号驱动的控制器,而非固定时间表。
  • CCD 的连续相近度奖励是本文最被低估的贡献:它把稀疏的 pass/fail 信号变成了稠密的几何相近度。
  • 单台 64GB Mac Studio 跑出 60+% 教师差距闭合,对小团队与个人研究者极其友好。
  • DRIFT 的写法本身是"调度框架",可被替换成任何凸混合;这意味着即便将来有更好的调度策略,仍可继续以 DRIFT 作宿主继续演化。

局限与待验证

  • 主要在数学推理两个 benchmark 上验证,未覆盖代码、开放域问答、Agent 决策链等异质任务。
  • "corrected 512-token" 在更长 chain-of-thought 任务上是否还成立,原文未明确给出。
  • 256 / 1024 / 大模型对位(如 7B → 1.5B)尚未公开数据。
  • BSD 自蒸馏阶段在大型教师(3B)上是否会出现自我退化,原文未给出 ablation。
  • 论文未与最新 reverse-KL 蒸馏方法(如 GKD-v2、Reasoning-GKD 等若存在)做 head-to-head。
  • 单作者实验的开销与墙钟时间细节(如端到端训练多少小时)未在 abstract 中给出。

与同方向工作的关系(续)

还可以再列几个 CADENCE 明确在文中压制住的失败模式与同方向的补救方式:

  • MAST / MiniLLM 等 off-policy 蒸馏:off-policy 不会触发 cold-start 但仍 mode-seeking。CADENCE 的 on-policy + reverse-KL 混合本质上是把这条传统路线重新拉回学生上,更接近人本的学习直觉。
  • Process Reward Models(PRM):PRM 把"step-level reward"引入到推理 RL,是另一种提高奖励稠密度的做法。CADENCE 没有引入额外 reward model,而是用 CCD 直接从执行结果的几何相近度构造稠密信号——轻量、不需要训练第二阶段模型。

对工程落地的启发

  1. 优先检查 cold-start:如果你的学生蒸馏起步就崩,先按 FTB 的方式把梯度集中在高熵分叉 token 上,比硬上学习率更稳定。
  2. 不要硬切 KL 方向:模仿 COVA 把学生 coverage 状态纳入调度,比按时间表切换更省训练 token。
  3. reward 要稠密:CCD 提醒我们,对推理任务而言"差 1 步的正确答案"远优于"差很多的正确答案"——把这种相近度落到一个连续 reward 是稳赚。
  4. LAP 是被普遍忽视的细节:在 CoT 任务里,模型经常"答对了,但推理路径冗长两倍"。在 reward 中加入"正确前提下短者优先"几乎免费,但能省下不少部署成本。
  5. Mac Studio 跑得动 0.5B → 3B 蒸馏:这意味着对小公司 / 个人研究者,重新考虑"是不是非要上 8×H100"这个默认配置。

与同方向工作的关系

  • GKD(Generalized Knowledge Distillation):用 sequence-level 的 forward/reverse KL 估计,CADENCE 用 per-token surrogate 直接替代,并补上 coverage 自适应。
  • SKD / MinKD / Distill-and-Prune:早期 on-policy 工作强调"模仿教师的偏好分布",但忽略 cold-start,CADENCE 的 FTB 是对这一类的修补。
  • Reasoning 模型族(DeepSeek-R1-Distill、QwQ-distill、Phi-Reasoning 等):实际工业线大多用 R1 风格 trace + SFT,少量用 on-policy 蒸馏。CADENCE 把"on-policy"做得在小算力上也可负担,与这一族方法形成能力互补——可以在 SFT 后接一段 CADENCE-style 的强化阶段。
  • RLAIF / RLHF 的 reward model 设计:CCD 把"相近度"作为稠密信号的思路与 preference learning 中的 margin design 同源,但 CCD 不需要单独训 reward model,从执行结果自动计算。

适合谁读

  • 做小模型部署的工程团队:想知道"为什么我蒸馏后差 10 个点"的根因以及如何同时修三类失败。
  • 大模型后训练 / 蒸馏研究:寻找一个细粒度、可在 per-token 层面调度的蒸馏损失。
  • 教育/推理题产品负责人:评估"能不能在 Mac Studio 上把 3B 教师蒸馏到 0.5B 学生并保留 70% 推理准确率"。
  • 单兵研究者或硬件预算受限者:可复现性比大多数 8×H100 蒸馏论文强一个数量级。
  • 推理系统设计师:想用 on-policy RL + SFT 的混合训练策略,但被现有 cold-start 击败过——本文对 cold-start 有专门修补。

一段落地建议

如果你打算把 CADENCE 用到自己的小模型蒸馏项目里,给出一个推荐落地顺序:

  1. 先跑 ablation:只开 DRIFT(不带六项补丁),把它当作 baseline。
  2. 加上 FTB:这一步单独跑一次学生训练的冷启动,往往直接收一波最低成本收益。
  3. 并行上 COVA:调度策略从"时间表"切到"coverage 自适应",训练 token 利用率提升。
  4. 落地 CCD:把"接近正确答案"打成一个稠密 reward,结合你现有 eval 脚本里的执行距离(如 integer distance、float closeness)就能写。
  5. 可选 LAP / EMR / BSD:在更难任务上再启用 1–2 项,避免在小数据上过早过拟合奖励。

训练硬件:起步用单台 Mac Studio(M 系列 64GB)就能跑通 0.5B 学生 + 1.5B 教师。3B 教师仍可在单台同型号机器上运行,但 wall-clock 训练时间需要按预算评估。如果你在做产品化推理小模型,CPU/Apple Silicon 友好比单纯"追更大教师"更值得作为长期目标。

不确定处标记:本文 ablation 数据、wall-clock 训练时间、对更长 context 的可外推性,原文 abstract 均未明确给出;具体数字以论文 v1 PDF 为准。

工程落地与核查(Jay)

事实核查

  • GSM8K 48.7% → 69.8%:原文 abstract 明确,数字可信。
  • 教师差距闭合 63.2%(1.5B→0.5B)、76.2%(3B→0.5B):原文表格数据一致。
  • corrected 512-token protocol:论文实验纪律设计,该 claim 来自论文方法论描述,可信。
  • 单台 64GB Mac Studio:硬件规格符合 Apple M 系列统一内存架构,但需注意:M3 Max Mac Studio 统一内存最大 128GB,M3 Pro 最高 36GB;若用基础 M3 Mac Studio(36GB 统一内存),3B 模型可能放不下教师+学生两套权重。需确认论文使用的是哪档 Mac Studio
  • ⚠️ "教师差距闭合 63.2%"是自定义指标:非标准 benchmark 指标,其他论文无法直接对比。工程决策时建议直接用"学生绝对分数 + 与教师分数差"记录,而不是用"闭合率"。
  • ⚠️ 代码未公开(截至 2026-07-31):解读未注明这一点。六项补丁 + DRIFT 的完整实现需等待官方代码;工程引用前必须确认代码是否已发布

工程落地三坑

坑 1:Mac Studio 算力边界因模型尺寸差异极大 0.5B 学生 + 1.5B 教师可以在 64GB 统一内存上跑,但 3B 教师需要更大内存。实际配置需要实测——Apple Silicon 的统一内存带宽远高于传统 GPU,但 GPU 算子库(transformers、PyTorch)在 Apple Silicon 上的优化程度不如 NVIDIA CUDA。建议先用 ETA 估算脚本测完单步 forward 时间再立项,不要假设"能跑就能训练"。

坑 2:FTB 的高熵 token 判断依赖 LLM 或熵计算 FTB 需要在每个 token 位置算熵,这对 transformer 的中间激活有要求。如果用 accelerate 或 DeepSpeed 分布式训练,需要额外 hook 提取激活。不要在训练循环里直接调用 LLM 来做 FTB,要用离线的激活熵计算。

坑 3:六项补丁叠加后训练稳定性未充分验证 DRIFT + COVA + FTB + CCD + LAP + EMR + BSD 同时开启,论文未给出完整的消融矩阵(哪些交互项是协同的、哪些是冗余的)。在生产场景叠加补丁时,建议每次只加一项,做增量 ablations,避免一次性叠加导致 loss spike 难以定位根因。

快速可跑命令(假设 pip 包名为 fast-cadence)

# 依赖确认(需官方代码发布后替换)
pip install torch transformers accelerate

# Step 1: 确认教师模型和配置
# DRIFT + COVA + FTB + CCD + LAP 全量运行
python -m cadence.train \
  --student-path Qwen/Qwen2-0.5B-Instruct \
  --teacher-path Qwen/Qwen2-1.5B-Instruct \
  --method full \
  --dataset openai/gsm8k \
  --max-tokens 512 \
  --corrected-protocol \
  --output-dir ./cadence-results

# Step 2: 增量 ablation(只开 FTB)
python -m cadence.train \
  --student-path Qwen/Qwen2-0.5B-Instruct \
  --teacher-path Qwen/Qwen2-1.5B-Instruct \
  --method ftb-only \
  --dataset openai/gsm8k \
  --output-dir ./ftb-ablation

# Step 3: 评估(用 GSM8K 测试集)
python -m cadence.eval \
  --checkpoint ./cadence-results/checkpoint-final \
  --benchmark gsm8k \
  --split test

适用配置判断

场景 推荐程度 原因
小团队蒸馏数学推理模型 ⭐⭐⭐⭐⭐ 单机可跑,模块化设计,GSM8K 验证充分
代码生成模型蒸馏 ⭐⭐ 未在代码任务上验证,不宜直接迁移
大模型蒸馏(>7B 学生) ⭐⭐ 需要多卡,Mac Studio 跑不动
纯 SFT(非蒸馏)场景 方法针对 on-policy 蒸馏,plain SFT 不适用
多模态模型蒸馏 未覆盖,跨模态效果未知