系列:推测解码手记

MTP Head 与置信度头:把推测解码三条自草稿路线串成一条链

一句话主线:MTP 让模型在训练期学会”一次 forward 多预测几个 token”;EAGLE-3 用专门训练的 Draft Head 自回归地猜;DFlash 一口气并行猜一整块;DSpark = DFlash 并行 backbone + 轻量 Markov Head + Confidence Head + 负载感知调度。 三者都是”自草稿、不养独立小 LM”,只是草稿拓扑不同。

先纠正一个最容易混淆的点:DSpark 不是 MTP,也不是简单地”一个 Draft 模型自回归生成多个 token”。DSpark 的 Draft 核心是「DFlash 的 block-parallel backbone + 轻量 Markov Head」,再加一个 Confidence Head——即”并行生成 + 轻量序列依赖 + 置信度调度”。官方论文与 vLLM Speculators 文档都是这么描述的。下面把这整条链路拆开讲。

一、MTP Head 到底是什么

MTP = Multi-Token Prediction。普通 LM Head 一次只出下一个 token:

A B C D → Transformer → LM Head → P(E | ABCD) → E

而 MTP 在原模型上额外挂多个 prediction head / MTP module,一个 forward 同时得到一串未来 token:

A B C D → Transformer
              ├─ LM Head      → E
              ├─ MTP-1 Head   → F
              ├─ MTP-2 Head   → G
              └─ MTP-3 Head   → H

于是一次 forward 得到 E F G H。核心思想就是:在训练阶段显式训练模型预测未来多个 token(vLLM Speculators 对 MTP 的定义也是”finetune 模型原生的 multi-token prediction head”)。

MTP Head 结构(DeepSeek-V3 多令牌预测模块) 主 Transformer 隐藏态 + 前移一步 token 嵌入,经 MTP Transformer Block、RMSNorm、共享 LM Head,额外预测一个未来 token;D 个模块可堆叠实现多令牌监督。 MTP Head 结构(DeepSeek-V3 多令牌预测模块) 主 Transformer 共享词表 / LM Head h_t pos t 隐藏态 Emb(t+1) 前移一步 token MTP 模块 (d=1) MTP Transformer Block RMSNorm LM Head (shared) 预测 t+2

D 个 MTP 模块可堆叠:MTP1→t+2, MTP2→t+3, …, MTP-D→t+D+1(训练期多令牌监督) 推理期:MTP1 复用主模型隐藏态,额外预测 1 个 token 作投机草稿头(近乎零成本)

注意:MTP Head 并不是”4 个完全独立的 Linear”。现代 MTP 会让后面的预测位置利用前面的 hidden/token 信息,不同模型的具体 MTP module 结构不同。

二、为什么 MTP 能用于 Speculative Decoding

MTP 预测出 E F G H 后,Target / verifier 可以并行验证整条:

A B C D → E ✓
             F ✓
             G ✓
             H ✗

最终接受 E F G、丢掉 H,并让 Target 在 G 之后纠正。所以 MTP 本身就是现成的 speculative decoding Drafter——DeepSeek 系列里常见的「Target Model 挂 MTP modules → 并行 verify」就是这么来的。

三、EAGLE-3 和 MTP 有什么区别

这是最关键的一层。EAGLE-3 属于专门训练出来的 Draft Head / Speculator,不是给原模型外挂几个 MTP Head:

Target Model → hidden states → Eagle3 Draft Head → 自回归生成 t1→t2→t3→t4 → Target Verify

EAGLE-3 的 draft token 之间有明显的序列依赖(vLLM 文档把它描述成 “autoregressively predict draft tokens using Llama-style draft layers”)。而 MTP 是模型原生、训练期就嵌入的多令牌头。二者都能当 Drafter,但来源和草稿拓扑不同。

四、DFlash 又是什么

DFlash 走完全不同的方向——一次 forward 直接并行预测整个 block:

Eagle3(串行):   DFlash(并行):
t1                Input ┬→ t1
 ↓                  ├→ t2
t2                 ├→ t3
 ↓                  ├→ t4
t3                 ├→ t5
 ↓                  └→ t6
t4

DFlash 优势是非常快;代价是 token 与 token 之间依赖不足,越往后接受率越低——这就是 acceptance decay / suffix decay(DSpark 论文明确指出,纯 parallel drafter 的主要短板就是块内 token dependency 不足)。

五、DSpark 到底怎么解决

DSpark 的主体仍是 DFlash 的并行生成,但在上面加一个轻量 Markov Head,让第 k 个 token 感知前一个 token:

Anchor → DFlash Parallel Backbone → t1 t2 t3 ... tN
                                      │
                                 Markov Head
                                      │
                          加入 token-to-token 局部依赖

即”并行 backbone + 很轻的局部序列依赖”,这也是论文标题 Semi-Autoregressive Generation 的由来。

六、Markov Head 为什么有用

纯并行时,每个 t_k 只依赖 context;加 Markov Head 后,t_k 还依赖前一个 token t_{k-1}。官方实现里 Markov Head 是一个低秩 logit bias:

B = W1 @ W2      (默认 rank = 256)

根据前一个 token 对当前 draft logits 加 bias,开销几乎为零,却补上了并行草稿尾部 incoherent / 易被拒的短板。

七、然后才轮到 Confidence Head

Confidence Head 是一个轻量 head:

hidden state → Linear → sigmoid → c_k

其中:

c_k = P(token k 被接受 | 前面的 token 都被接受)

这非常重要——它不是”这个 token 自己有多大概率”,而是”如果前面全部正确,那么这个 token 继续正确的条件概率是多少”。

八、“高置信度”是不是就是”高概率”

是,但要非常精确地说:这里的”高置信度” = Confidence Head 预测的 acceptance probability 高。例如 c1=0.95, c2=0.90, c3=0.85, c4=0.40——它对应的是

P(t1 被接受 | 前面正确)
P(t2 被接受 | t1 正确)
P(t3 被接受 | t1,t2 正确)
P(t4 被接受 | t1,t2,t3 正确)

而不是 P(t1), P(t2), P(t3), P(t4) 这些 token 自身的生成概率。所以严格叫 conditional acceptance probability。

九、为什么叫 Prefix Survival Probability

真正关心的是”前面这一整段能不能全部活下来”。把条件概率连乘:

Prefix 1: 0.95
Prefix 2: 0.95 × 0.90 = 0.855
Prefix 3: 0.95 × 0.90 × 0.85 = 0.727
Prefix 4: 0.95 × 0.90 × 0.85 × 0.40 = 0.291

DSpark 论文给出的定义就是 a_{r,j} = ∏_{i=1}^{j} c_{r,i}——prefix survival probability 是各位置 conditional probability 的连乘。

Confidence Head 预测 prefix survival probability 草稿 backbone 一次前向出 γ 个隐藏态,每个位置经 Confidence Head 输出条件接受概率 c_k,前缀存活概率 a_j 为 c_1..c_j 的连乘,单调递减,调度器按 a_j 降序贪心截断尾部。 Confidence Head → Prefix Survival Probability(DSpark 验证调度核心) 即「Confidence Head ↓ 预测 prefix survival probability」 Anchor D Draft Backbone 1 次前向出 γ 位 h_1 h_2 h_3 h_4 h_5 Conf Head Conf Head Conf Head Conf Head Conf Head c_1 c_2 c_3 c_4 c_5

c_k = P(接受第 k 个 | 前 k-1 个都被接受) —— 条件接受概率,监督信号来自草稿/目标分布 TV 距离

a_1 a_2 a_3 a_4 a_5

prefix survival prob: a_j = c_1·c_2·…·c_j(前 j 个全部被接受的概率,随 j 单调递减) 调度器:按 a_j 降序贪心加入候选,预期接受 token 饱和即早停 → 截断尾部低置信 token

十、DSpark 的完整结构

把上面串起来,端到端流程是:Target 先生成 anchor → DSpark 并行出 E F G H + confidence → scheduler 截断成 prefix → Target 并行验证。

DSpark 端到端流水线 Target 生成 Anchor,DFlash 并行 backbone 一次出块,Markov Head 加局部依赖,Confidence Head 出 c_k,调度器按前缀存活概率决定验证长度,回到 Target 并行验证。 DSpark 端到端流水线 Target Model(生成 Anchor) Anchor D DFlash Parallel Backbone 1 次前向,块并行 t_1 t_2 t_3 t_4 t_N Markov Head prev token → logit bias (B=W1W2, r=256) Confidence Head → c_k (sigmoid) Hardware-aware Scheduler(按 a_j 截断) 回到 Target 并行验证 accept / reject

十一、DSpark 与 EAGLE-3 / DFlash / MTP 的关系

把四个放到一张图:EAGLE-3 = 浅层自回归 drafter;DFlash = 并行 drafter;MTP = 原生多令牌头;DSpark = DFlash + Markov Head + Confidence Head + Hardware-aware Scheduler。所以 DSpark 与 EAGLE-3 的关系不是”DSpark = 改进版 EAGLE-3”,而是”在并行草稿(DFlash)上叠顺序头与置信度调度”。官方 Speculators 文档明确把 DSpark 定义成 “extends DFlash with Markov head + confidence head”。

DSpark、EAGLE-3 树、MTP Head 三种自草稿范式对照 左:DSpark 并行块加顺序头产出扁平块;中:EAGLE-3 特征层自回归产出候选树;右:MTP 主模型挂多头预测偏移 token。三者均自草稿、不养独立小 LM。 DSpark / EAGLE-3 tree / MTP Head:三种自草稿范式对照 DSpark EAGLE-3 (tree) MTP Head E F G H γ 个扁平 token(块) root a b 一棵候选树(树注意力验证) head1 head2 headD D 个偏移头 → 扁平输出 · 一次前向出 γ 个位置 · 扁平块(非树) · 独立训练的轻量 drafter · 共享 embedding/LM head · 含 Confidence Head 调度
<text x="250" y="222">· 自回归逐位置特征预测</text>
<text x="250" y="244">· 动态草稿树 + 树注意力</text>
<text x="250" y="266">· 多层融合 + Training-Time Test</text>
<text x="250" y="288">· 加速最高 6.5×</text>
<text x="250" y="310">· 自草稿流派的开山祖</text>

<text x="470" y="222">· 主模型挂 D 个头(预训练)</text>
<text x="470" y="244">· 每头预测 offset d+1</text>
<text x="470" y="266">· 推理作草稿头(零成本)</text>
<text x="470" y="288">· 复用主模型权重</text>
<text x="470" y="310">· V4 MTP-1 基线被其替换</text>
三者都「自草稿、不养独立小 LM」。DSpark 在并行草稿(DFlash)上 + 顺序头 + 置信度调度,接受长度比 EAGLE-3 +26~31%、 比 DFlash +16~18%,并取代 V4 的 MTP-1 基线。EAGLE-3 是树、MTP 是偏移多头、DSpark 是扁平块——草稿拓扑不同。

十二、DSpark 的 Draft 是不是”一次生成多个 token”

是。 但要拆成两层看:

所以 DSpark 是”并行 backbone + 轻量级 sequential dependency”,既不是纯并行、也不是纯自回归——这正是 Semi-Autoregressive Generation。

十三、最容易记的对比表

方法Draft 怎么产生Token 间依赖一次 forward主要问题 / 优势
普通 DecodeTarget强1 token慢
EAGLE-3自回归 Draft Head强多步Draft 串行
DFlashBlock Parallel弱多 token后缀 acceptance decay
DSparkDFlash + Markov中等多 token兼顾速度和 acceptance
MTP原生 MTP Head取决于具体 MTP 结构多 token需模型原生支持 / 训练

一句话收尾:EAGLE-3 是一个一个猜但猜得准;DFlash 一口气猜一堆但后面容易猜歪;DSpark 是一口气猜一堆,同时用 Markov Head 让后面的猜测参考前一个 token,再用 Confidence Head 判断这一串到底值得验证到哪里。 而”高置信度 = 高概率”的精确含义是:该位置在前缀已正确的条件下被 Target 接受的概率,把这些条件概率连乘得到 prefix survival probability,scheduler 再据此决定验证长度。论文在 DeepSeek-V4 线上流量中报告,相比生产 MTP-1 基线,per-user generation speed 提升约 60%–85%。

本篇属于「推测解码手记」系列 Ep7。前情:DFlash 深度解析、DSpark 深度解析、DFlash vs DSpark、EAGLE-3 深度解析;回到系列首页见推测解码手记。

觉得有用?欢迎点赞、收藏,或请作者喝咖啡 ☕️

支付宝收款码

支付宝

微信收款码

微信

💬 留言

评论由 Giscus 驱动(基于 GitHub Discussions)。 当前仓库 NaphJohn/LLM-blog 尚未启用 Discussions:请在 GitHub 仓库 Settings → General → Features 勾选 Discussions 后刷新本页,评论区即自动显示。