When Hidden States Drift: Can KV Caches Rescue Long-Range Speculative Decoding?
速读卡片 (TL;DR)
一句话:EAGLE-3/MTP 这类 hidden-state-reuse drafter 的 long-range decay,本质并不只是 train-infer mismatch,而是 context information preservation 问题——hidden state 是按当前 query 做的"有偏压缩",而 KV cache 保留 token-level 全息信息;作者用 KVShot 框架统一比较 hidden-only / KV-only / 门控混合三种 reuse,发现 KV reuse 在长 horizon 衰减更慢,但端到端加速被 autoregressive TTT 的训练管线本身卡住。
立场:这是一篇诊断性论文,不是新 SOTA。它把"为什么 hidden-state drafter 长程衰减"这个问题从"训练目标不对"改写成"reuse 哪种表征对",并用受控实验暴露了 autoregressive TTT 管线的三个结构性瓶颈,指向 block-wise training 才是下一代 drafter 的方向。
1 · 动机:long-range decay 的第二种解释
1.1 历史脉络:从 hidden-state reuse 的胜利到长程墙
2024 年开始,hidden-state reuse 已经是 speculative decoding 的事实标准:EAGLE / EAGLE-2 / EAGLE-3 把 target 模型的 top-layer hidden state 作为 drafter 的输入,Medusa / MTP / DeepSeek-V3 内部的 multi-token prediction head 也走同一条路。这条路赢在两点:① drafter 只要 1 层就足够预测,因为最重的 prefix 编码已经在 target 那里做完了;② 训练目标可以直接用 hidden state 的 L2 + cross-entropy,信号丰富。
但所有这些 drafter 都共享同一个失败模式 —— long-range decay:接受率 αk 随推测步 k 单调下降。论文 Figure 1 给出的 Qwen3.5-4B 数字非常具体:
这个曲线决定 draft tree 能伸多深。如果 α 在 k=6 已经低于 0.6,你再多猜也几乎全被 reject。所以"修长程"是 speculative decoding 的核心瓶颈。
1.2 别的方案为什么不够
领域里对 long-range decay 的标准解释只有一个: train-inference mismatch。训练时 drafter 看到的是 target 的真实 hidden state,推理时它必须 condition 在自己递归生成的 hidden state 上,这两者会逐步 drift。 HASS / EAGLE-3 引入 autoregressive TTT(test-time training)把训练时也喂 drafter 自己的 drift trajectory,确实把 α 抬高一截。
但作者点了一刀:就算用了 TTT,decay 依然存在(Figure 1 那两条曲线都是 TTT-trained 的)。这意味着 drift 只解释了一部分,还有一个独立的损失源没人讨论。下表把所有候选解释摆出来:
| candidate explanation | 修了哪一块 | 为什么仍不够 |
|---|---|---|
| train-infer mismatch (HASS / EAGLE-3 TTT) | Edrift(k):drafter recursive 生成 vs ground-truth hidden state 的 gap | 把 drafter 暴露给自己的轨迹只是局部修复,不能把 target 已经 throw away 的信息找回来 |
| multi-layer fusion (EAGLE-3 把多层 hidden state 拼起来) | 不同层 attend 不同子空间,部分弥补单层 compression | 仍是固定维度的聚合,跨层都被 weak-attend 的 token 信息仍丢失 |
| 更大 / 更深 drafter | 表达力 | drafter 越大,推测开销越大,得不偿失;且 hidden state 已经把信息压扁,加深 drafter 也复原不了 |
| 加更长 horizon 的 loss | 训练目标 | 仍然 condition 在 ℎ𝑡L 这个 query-biased summary 上,瓶颈还在 input 侧 |
| 本文:换 reuse 的表征(KV cache) | 把 Ecomp 这块独立干掉 | 引入新瓶颈 Eq(query estimation),还要看训练管线能否给到信号 |
1.3 为什么这事不平凡:context preservation 是另一种透镜
核心 insight 用一句话讲透:target 的 ℎ𝑡L 是一个 query-biased compression,它对 t+1 优化,所以对 t+k 而言,被它压扁掉的那些 token 信息可能正好是关键。
这是一个 information-theoretic 视角而不是 distributional 视角。前人都在解决"训练分布和推理分布不一样"这个 distributional gap;作者改去问"reuse 哪种 representation 才能保留足够 prefix 信息"。一旦把问题这么 reformulate,KV cache 就成了一个非常自然的 candidate:它是 attention 之前的 raw token-wise 表征,没有被 qt 加权聚合过,等价于把"recovery 问题"换成"function approximation 问题"——drafter 不必"挖出"被压扁的信息,而只需要估计未来位置的 q′ 然后重新对 KV 做 attention。
这个角度的非平凡之处在于 reframe 而不是新方法本身。GLIDE+CAPE / LongSpec 早就用过 cross-attention 接 target KV,但都把它当作"减少 drafter 计算"或"长 context 内存效率"的工程手段;没人把它当作长程衰减的解释来做受控对照。本文的贡献是先建一个统一对照框架(KVShot)把 hidden-only / KV-only / 混合放在同一 TTT pipeline 下比 ,然后把"是不是 representation 问题"这个 hypothesis 实证出来。
2 · 背景速查
| 术语 | 含义 |
|---|---|
αk | 第 k 步推测的 draft token 接受率(0 步 = drafter 第一个预测) |
MAT | mean accepted tokens, 1 + Σ ∏ αj;step-wise 期望接受长度 |
HF MAT | HuggingFace speculative decoding pipeline 在 (depth=8, top-k=10, total≤60) tree 下测得的 MAT;近似端到端 speedup 代理 |
retention | α6/α0;长程衰减的归一化指标(越高 = 衰减越慢) |
TTT | autoregressive test-time training;HASS/EAGLE-3 用法,训练时让 drafter condition 在自己的 drift trajectory 上 |
Ecomp | compression loss:target attention 把弱 attend 的 token 信息丢掉造成的损失,k=1 时已存在 |
Edrift(k) | recursive drift:drafter 用自己生成 hidden state 反复 condition 累积的偏差 |
Eq | query estimation error:KV reuse 下 drafter 估计未来 q′ 的难度 |
Ls | 从 target 抽几层 KV 来 inject 到 drafter;本文默认 3,等同 EAGLE-3 fuse 的层数 |
关键公式回顾
这是 self-attention 的标准式。论文的整个观点都建在这一个公式上:α𝑖 由 𝑞𝑡 决定,而 𝑞𝑡 是为了预测 𝑡+1 优化的;只要你信这一句,后面的 KV-Reuse Hypothesis 就是它的逻辑后果。
HS 误差有两块:压缩损失(k 无关、靠 target 自己产生)+ drift(k 越大越严重);KV 误差则把第一块清零,只剩下 query 估计这一块。TTT 只能压第二块,所以 hidden-only 即便 TTT 训得再好,也压不掉 Ecomp。
3 · Hidden state 是有偏压缩 (concrete walk-through)
这一节把 §1.3 的论证落到一个具体例子。设想一段 prefix:
「The patient was prescribed aspirin for chest pain. He visited the clinic on Monday. Today he reports nausea and tells the doctor: ___」
target 在最后一个位置 𝑡 计算 𝑞𝑡 是为了预测下一个 token(可能是 "I", "the", "my")。它的 attention 大概率会重权 "doctor"、"reports"、"nausea"(都是局部句法 / 语义相关),而 "aspirin"、"Monday" 拿到 α≈0.01。所以 ℎ𝑡 这个 4096 维向量里关于 aspirin 的信息已经几乎被擦掉了。
现在 drafter 想猜未来若干步。假设第 k=4 步真实下一个 token 是 "But aspirin upset my stomach"——这一步未来的 q𝑡+4 会强烈 attend 到 "aspirin"(α=0.65)。drafter 只拿到压扁后的 ℎ𝑡,它必须在 ℝ4096 里"挖出"那个被弱权值压下的信息。这是ill-conditioned 的反问题。
反向论证:为什么"光做多层 fusion (EAGLE-3 那样)"还不够? 不同层的 q 不一样,某一层 α=0.01 的 token,在另一层可能 α=0.3,所以 multi-layer fuse 能把部分信息找回来。但只要存在跨所有 fused layer 都被弱 attend 的 token,它在 fused hidden state 里仍然是被压扁的。而 KV reuse 是不做聚合地把所有 token 都暴露出来,理论上更彻底。
但是 KV 难道不就是 hidden state 经过线性投影来的吗?为什么说不等价?
论文 §2.3 专门回应这个反对。三条:
- Last-layer gap: drafter reuse 的是 ℎ𝑡L(top layer),而 layer L 的 KV 已经被 layer L 的 attention 消耗掉了产出 ℎL;不存在一个"layer L+1 的 KV"对应到 ℎL。EAGLE 系工作都说 top layer 信号最强,所以正好是这一层的 KV 信息被锁死。
- Projection gap: 即使是中间层,从 ℎℓ 反推 (kℓ+1, vℓ+1) 需要 𝑊𝐾, 𝑊𝑉 这两个非平凡投影。GQA 模型里 hidden dim 通常是 per-head KV dim 的 4–8 倍,1 层 drafter 隐式学这个映射很吃力。
- Capacity competition: hidden-state reuse 让 drafter 同时干"估 q′"和"恢复 KV 投影"两件事,KV-only reuse 把后一件直接给掉,drafter 全部容量集中在估 q′ 上。Appendix D 的对照实验表明,直接给 target KV 显著好过让 drafter 从 hidden 学投影。
4 · KV-Reuse Hypothesis 与三个 prediction
把 §3 的论证形式化,作者抛出 KV-Reuse Hypothesis 并拆出三条可证伪的预测,后面 §5–6 的所有实验都是在 verify / falsify 这三条。
| Prediction | 主张 | 对应实验 | 结论 |
|---|---|---|---|
| P1 长程优势 | k 越大,KV reuse 越占优(因为 𝑞𝑡+𝑘 离 𝑞𝑡 越远,hidden compression 越偏) | Tab.2 retention ratio | 支持 KV-only 4层 retention 80.6% > EAGLE-3 73.5%;α₆ 反超 |
| P2 query-est 瓶颈 | 1 层 drafter 估不出 q′,需要更深 drafter | Tab.2 depth scaling 1→2→3→4 层 | 支持 1→2 层 ΔMAT=+0.39(最大跳),后续递减 |
| P3 短程劣势 | k=0,1 时 hidden 仍占优(语义信息丰富) | Tab.2 α₀:0.494 vs 0.638 | 支持 KV-only 短程持续输给 EAGLE-3 |
三条加起来直接暗示了正确的设计形态:不是替换,而是混合——hidden-state path 锚定短程,KV path 做长程的 correction。这就是 §5 的 hybrid drafter 的来源。
5 · KVShot 框架: 三种 reuse 的受控对比
KVShot 不是一个模型,是一套诊断性测试床。所有变体都在同一条 EAGLE-3 TTT pipeline 下训练,target 都是 Qwen3-8B,这样比较的是 representation 选择而不是别的 confound。
5.1 KV-Only Reuse:把 hidden 完全踢掉
架构: drafter input 只剩 input embedding,然后做 cross-attention 到 target 的 KV。多层 KV 怎么注入需要选:
| 策略 | 做法 | α₀ / α₆ / MAT |
|---|---|---|
| ① head concat | 把 Ls=3 层 KV 直接拼,扩 drafter 的 KV head | .489 / .305 / 1.78 |
| ② linear projection | 用 𝑊𝐾proj ∈ ℝd×Ls·d 把多层 KV 投回 1 层维度 | .488 / .354 / 1.83 |
| ③ proj + RoPE re-apply | 投影后重新打 RoPE(投影破坏了位置编码) | .494 / .353 / 1.84 |
| baseline EAGLE-3 1层 | hidden-only | .638 / .469 / 2.37 |
读法:linear projection 比 head concat 好(单 query attend 一个 unified KV 比 attend 多个 disjoint KV 容易);RoPE 修复几乎没区别(说明位置不是主瓶颈)。但都比 EAGLE-3 差很多:α₀ 永远过不了 0.50。这就是 P3 的实验证据——短程 hidden 提供的语义先验是 input embedding 给不出的。
具体 trace:一个 1 层 drafter 在 KV-only 下做了什么?
drafter 收到 input_emb ∈ ℝ4096 → 1 个 transformer block → 出 q′ ∈ ℝ128(per head)。这个 q′ 是 input_emb 的 线性(再加 LayerNorm)投影,本质上没法 capture "我现在要预测的是 t+3 位置的 query"这种复杂依赖。所以"加深"是必需的。
5.2 Depth scaling:验证 P2
| 层数 | α₀ | α₃ | α₆ | retention | MAT |
|---|---|---|---|---|---|
| 1 | .494 | .381 | .353 | 71.5% | 1.84 |
| 2 | .594 | .497 | .463 | 77.9% | 2.23 |
| 3 | .609 | .518 | .487 | 80.0% | 2.31 |
| 4 | .614 | .527 | .495 | 80.6% | 2.34 |
| EAGLE-3 (1层) | .638 | .511 | .469 | 73.5% | 2.37 |
读法非常微妙:
- 1→2 层 ΔMAT=+0.39 是最大跳跃 → 第二层让 q′ 变成 context-aware 而不是简单的 input embedding 线性变换。这正面回答了 P2。
- 2→3, 3→4 几乎平了(+0.08, +0.03),递减很快。
- 4 层 KV-only(MAT 2.34)仍稍输 1 层 EAGLE-3(2.37),代价还更高。
- 但 retention 80.6% 已经显著超过 EAGLE-3 73.5%,α₆ 0.495 反超 0.469。这就是 P1 落地。
5.3 Hybrid Reuse:门控 delta correction
架构: 在 EAGLE-3 self-attention 旁挂一条平行的 cross-attention 分支接 target KV。两路输出用 gated delta rule 融合:
𝑔𝑖 = σ(𝑊𝑔[𝑛𝑖; 𝑜𝑖; Δ𝑖] + 𝑏𝑔) | ℎ𝑖 = 𝑛𝑖 + 𝑔𝑖 ⊙ 𝑊Δ Δ𝑖
核心设计点:
- 不做直接 sum: 𝑛+𝑜 形式允许 cross-attention 覆盖 self-attention,可能毁掉 EAGLE-3 已有的短程精度。
- 用 delta = 𝑜 − 𝑛: 把 cross-attention 的输出当作"差异 / 修正",而不是绝对答案。
- shared gate: 𝑔 ∈ [0,1]d 跨所有 draft step 共享(简单 + 验证 mechanism 是否本身有效)。
- warm-start: self-attention / MLP / norm 全部从 EAGLE-3 checkpoint 加载,只有新加的 cross-attention proj、gate、𝑊Δ 是随机初始化。
5.4 Hybrid 结果:第一次正向
| method | init | α₀ | α₆ | retention | MAT |
|---|---|---|---|---|---|
| EAGLE-3 | — | .638 | .469 | 73.5% | 2.37 |
| Hybrid | random | .650 | .490 | 75.4% | 2.44 |
| Hybrid | EAGLE-3 ckpt | .665 | .514 | 77.3% | 2.54 |
| Cross-only | random | .634 | .450 | 71.0% | 2.34 |
| Cross-only | EAGLE-3 ckpt | .637 | .442 | 69.4% | 2.35 |
三条 takeaway:
- Hybrid (ckpt init) +0.17 MAT,α₆ 抬 +9.6%,retention 77.3% > 73.5%——这是论文里第一次明确正向、且每个 k 都涨。
- Init 重要: warm-start 比 random 多 +0.10 MAT,说明 self-attention anchor 给了 cross-attention 一个稳定的 baseline 去学修正。
- Self-attn anchor 不可去: cross-only(即便 ckpt init)直接掉到 EAGLE-3 baseline 之下。"KV reuse 替代 hidden reuse"这条路走不通,只能"补充"。
6 · 实验关键结果与读数
端到端的"小坑":+0.17 → +0.03
Step-wise 看一切都对——直到把训练数据从 70k(ShareGPT)放大到 280k(ShareGPT + UltraChat regenerated)再用 HF tree decoding (8,10,60) 测 MAT:
| setting | HF MAT | vs EAGLE-3 (ckpt 重训) |
|---|---|---|
| EAGLE-3 existing ckpt(原始) | 4.43 | — |
| EAGLE-3 train from scratch (280k) | 4.76 | — |
| EAGLE-3 train from ckpt (280k) | 5.01 | baseline |
| Hybrid train from ckpt (280k) | 5.04 | +0.03 (+0.6%) |
+0.03 加上 cross-attention 多带来的 5–10% drafting latency,基本 wash。这是这篇论文最诚实的一段:他们把负面结果放在正文,然后专门写了 §7 拆为什么。
为什么从 +0.17 缩到 +0.03? 三条合力:
- 更大数据让 EAGLE-3 自己也强了:baseline MAT 4.43→5.01,那个 +0.17 里有相当一部分本来就是 hidden-state 也能从更好数据中拿到。
- Tree verification 把分步差异压扁: (8,10,60) 已经探索很多候选路径,即使每步 α 略低也可以 fall back 到 sibling 候选。
- Cross-attn 的 latency 直接吃掉收益。
7 · 三个结构性 bottleneck
§7 是一篇潜在 followup 的 roadmap,作者把 autoregressive TTT 不适合 KV reuse 的原因拆成三个独立 issue。
7.1 Query estimation 实际比预想更难
理论上 Eq 是函数逼近问题,听起来"更简单"。实际:target 的 qt+k 是 L 层非线性变换 over full prefix 的产物。1 层 drafter 的 q′ 只是 input embedding 的线性变换,根本没有组合性。Tab.2 已经显示从 1→2 层是大跳,但 4 层也碰不到 1 层 EAGLE-3——hidden-state reuse 实质上"借走"了 target 那 L 层算 q 的工作。这是 KV reuse 短程一直输的根源。
7.2 Draft-side KV projection 训练信号稀疏
这是最微妙的一条,值得展开。Hybrid 的 cross-attention 分支里有两个新参数 𝑊cross𝐾, 𝑊cross𝑉。它们的工作是给"draft 自己生成的"那部分 token 算 K/V(prefix 部分的 K/V 直接 copy 自 target,免费)。
问题:autoregressive TTT 一个 batch 一般只有 K=7 个 draft token,而 prefix 长度可能几百上千。所以这两个 projection 矩阵每步只有 7 个 token 的梯度,而 𝑊𝑄 每个位置都更新。
7.3 Gate-induced gradient starvation
Hybrid (ckpt init) 时 self-attention 是预训练好的,cross-attention 完全随机。早期 cross 输出近乎噪声,SGD 最快的 loss 下降方向就是"把 gate 𝑔 推到 0",让模型退化为 EAGLE-3。
有趣的细节:小 ḡ 不等于 cross 被忽略,因为 ḡ 是 element-wise 平均,某些 dim 的 gate 可能非常大。即便 ḡ≈0.1,Hybrid 仍能拿到 +0.17 MAT,说明这个机制的"上限"远超目前的训练状态。
7.4 共同根因:autoregressive 本身
三条 bottleneck 都源于"一次生成一个 token"这个序列结构:
- 串行生成 → drafter 没法堆深(开销线性翻倍)→ q′ 估不准
- 每步 K=7 → KV proj 信号稀疏
- warm-start + 序列训练 → gate 早期看到的 cross 输出全是噪声
作者直接指向 block-wise training(具体引用 DFlash, arXiv:2602.06036,见07_DFlash):一次并行生成一整块 draft token,既允许 drafter 加深(mask-token parallel 摊薄成本),又给 KV proj 提供 dense diverse 梯度,还能 warm-start 时同时让两路获得有意义信号。这是这篇 paper 留给社区的"下一步该这么做"。
8 · 与同类工作对比
| 方法 | reuse 的对象 | 架构 | 训练目标 | 聚焦问题 | 本文差异 |
|---|---|---|---|---|---|
| EAGLE-3 | multi-layer hidden state | 1-layer drafter, self-attn | autoregressive TTT | drafting 速度 | 本文把它当 hidden-only 极端的 baseline,共享 TTT 训管线 |
| MTP / Medusa | top-layer hidden state | parallel heads | teacher-forced CE | 多 token 预测 | 同样受限于 hidden-state compression(Fig.1) |
| GLIDE+CAPE | top-layer KV(上一 verification block) | shallow drafter w/ cross-attn | teacher-forced CE | 低开销 drafting | 没有把 KV reuse 与 hidden reuse 在同一 pipeline 受控对比;没用 TTT |
| LongSpec | target KV + anchor offset RoPE | cross-attn drafter | flash noisy training | 长 context 内存 | 动机是 memory bound,不是 long-range decay;固定选 KV reuse |
| HASS | hidden state(同 EAGLE) | drafter + harmonized obj | train-decode aligned | train-infer mismatch | 修 Edrift,未触及 Ecomp |
| DFlash (arXiv 2602.06036) | hidden state(目前) | 5 层 block diffusion adapter | block-wise (parallel) | autoregressive 瓶颈 | 本文的"建议方向":pipeline 改了,KV reuse 才有机会发力(详见 07_DFlash) |
| vanilla rejection | —(不 reuse target 表征) | 独立 small LM | standard LM training | 原始 spec decoding | 对照基线,无 long-range decay 但接受率低 |
| 本文 KVShot | hidden / KV / hybrid | 统一 1-layer (depth ablation 1–4) | 同一 EAGLE-3 TTT | long-range decay 来源诊断 | 诊断框架,不是新 SOTA |
关于 EAGLE-3 evolution 整条线和 DFlash 怎么用 block diffusion,可以参看姊妹笔记 02_EAGLE_evolution_DFlash 与 07_DFlash。
9 · 局限 / 个人 take / 待验证问题
局限
- 负面结果:核心 +0.03 HF MAT 实在太小,严格意义上无法支持端到端 speedup claim。论文也承认。
- Single target model:全部 Qwen3-8B,没在更大模型(70B+)上验证,而 hidden compression 的严重程度可能与模型规模 / depth 相关。
- KV layer 选择:Ls=3 默认值,Appendix 说"varying has negligible effect",但没系统扫,我会想看 Ls=L (全部层) 的极限。
- 没真正实现 block-wise 验证:Section 7.4 把 block training 当"可能解",但没做实验对照,只能 cite DFlash。这个 promise 是欠的。
- Tree verification 的影响没拆开:HF (8,10,60) 把分步差异压扁这个 claim 是定性的,没给 ablation,但理论上很合理。
个人 take
- 这篇论文最大的价值是 reframe:把 long-range decay 从"训练目标问题"重新定义成"reuse 表征问题",是一个干净的 conceptual contribution,即使具体方法没赢。
- 三个 bottleneck 写得非常诚实,任何想接着做 KV-aware drafter 的人都应该先读 §4。Gate starvation 是我之前没意识到的、warm-start 加 sigmoid gate 的常见陷阱,值得抽出来单独研究 mitigation(比如 GLU 风格 hard init、gate annealing、cross-branch warmup-then-merge)。
- "hidden state 是 query-biased compression"这个观点在很多其它场景也适用,比如 RAG retriever 训练、prefix tuning,都可以重新审视。
- 个人猜测真正能拿到端到端的关键是 block-wise + KV reuse(DFlash 的 5 层 + hybrid 形态)。这个 paper 实际上为这个 combination 提供了独立的 motivation。
待验证问题
- 把 Hybrid 移植到 DFlash 的 block diffusion pipeline,KV gain 会不会从 +0.03 涨到显著?
- 是否存在 KV-only + 大 drafter(8 层)+ block training 这条 path,能彻底超过 EAGLE-3? §5 depth scaling 已经接近,管线一改也许就过线。
- Gate starvation 的诊断:gate 只是延迟开了,如果训练 3× 更长,Hybrid 端到端 gain 会不会回来?
- KV proj 稀疏问题:能否在训练时人为注入更多 draft 位置(比如插入 noise tokens 模拟 draft prefix),让 W_K,Vcross 拿到更多多样性梯度,而不动 inference?
- 更大 target model(Qwen3-72B)上,Ecomp 是更严重还是更轻?直觉上 hidden 越宽信息密度越高,可能 compression loss 反而摊薄,但 layer 越多 q𝑡+𝑘 离 q𝑡 越远,趋势相反。需要实验。
- Retention 这个 metric 是不是合适的"长程决策"指标?如果 α₀ 本身已经低,retention 高没意义(论文也承认 "No target info" retention 99.6% 但 MAT 1.31)。需要一个组合指标。