跳转至

SEED: Self-Speculative Decoding via Implicit Encoder–Decoder

会议: NeurIPS 2026
arXiv: 2609.36590
代码: https://github.com/lhk2004/SEED
领域: LLM 效率 / 自推测解码
关键词: 自推测解码、隐式编码器–解码器、深层 KV 缓存、块因果训练、树验证

一句话总结

SEED 把原有解码器模型的末两层训练成草稿生成器,复用上轮完整模型验证留下的深层 KV 缓存,在任务专属微调与自适应树验证设置下,使 Qwen3-1.7B/4B 的平均解码速度达到 AR 基线的 2.6/2.7 倍,同时保持或提升任务质量。

研究背景与动机

自回归大语言模型每生成一个 token,都要重新经过整个网络;在论文讨论的访存受限场景中,GPU 的并行计算能力没有得到充分利用。推测解码先由便宜的草稿模型提出多个候选,再让目标模型一次并行验证,以更多输出摊薄完整前向的成本。独立草稿模型需要额外权重、训练和部署,因此自推测解码尝试直接从目标模型内部产生候选。

难点不是简单地减少层数,而是减少计算时仍保留预测下一词所需的上下文深度。LayerSkip 等早退出方法使用前面若干层,成本下降但只能读取较浅的上下文表示;MTP 类方法利用深层特征,却仍需为一轮草稿生成取得完整模型表示,且可能有额外采样模块。SEED 的观察是:上一轮验证已经用完整模型处理了已接受前缀,其最后几层的 KV 缓存可以继续服务下一轮草稿,不必为了每个草稿 token 重算前面的重型网络。

这并不意味着最新 token 已有完整深层表示。验证得到的额外 token 尚未被送入完整模型,后续草稿也只有原始嵌入;轻量末层必须学会同时使用“旧前缀的深层缓存”和“新片段的浅层输入”。核心 idea:把完整验证变成下一轮草稿的上下文编码,训练原有末层在深层缓存固定的条件下连续生成候选,从而跳过昂贵的前层计算而不放弃深层上下文。

方法详解

整体框架

SEED 不增加显式编码器、交叉注意力模块或外部草稿网络,而是概念上把原有 Transformer 分成前部编码器和末部解码器。Qwen3-1.7B 的示例是 28 层中前 26 层负责编码、末 2 层负责草稿;4B 模型同样只用末 2 层。完整模型仍是验证器,末层草稿器与其共享参数。

训练先用完整模型处理真实序列,产生标准下一词损失与各位置的解码器 KV,再用块因果掩码让末层从原始嵌入预测一段未来 token。推理先有已验证前缀,末层利用其缓存生成候选树,完整模型验证并接受一条路径,然后更新缓存进入下一轮。训练监督是额外损失,推理数据流则是反复执行的草稿–验证循环。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    A["真实训练序列 /<br/>推理前缀"] --> B["隐式末层草稿器"]
    B --> C["块因果联合训练"]
    C -.->|训练监督:下一词与草稿损失| B
    B -->|推理:原始嵌入与深层缓存| D["自适应树验证"]
    D --> E["已接受路径 +<br/>额外 token"]
    E -->|刷新缓存,继续草稿| B

关键设计

1. 隐式末层草稿器:跳过前层,但复用前层已经编码过的上下文

正常完整前向中,一个 token 的原始嵌入先经过前部编码器,再进入末部解码器。草稿阶段则把最新 token 的原始嵌入直接送进末部,不再计算其前部表示;末层注意力读取上次完整验证形成的深层前缀缓存。新 token 的输入很浅,但它能访问的旧上下文很深,因此与从前几层早退出不同。

这里的缓存是末部解码器各层自己的 KV,不是把前 26 层的 KV 直接接到末两层。它之所以具有深层上下文,是因为缓存生成时,那些历史 token 已经过前部编码器并进入对应末层。论文所谓 cross-attention,只是在强调浅层新查询读取深层历史键值,实际仍通过原有 self-attention 和 KV 缓存实现,没有新增传统 encoder–decoder cross-attention 模块。

用论文记号,\(H^0\) 是原始 token 嵌入,\(n'\) 是当前草稿片段的起点。草稿器的条件分布可概括为:

\[ q(X_j)=f_{dec}\left(X_j\mid H^0_{n':j-1},KV^{dec}_{<n'}\right). \]

前半段表示草稿片段内已有 token,后半段是片段开始前的深层缓存。片段内仍是逐词自回归,并非独立并行预测所有未来词;草稿过程中形成的末层临时 KV 也不等价于完整模型验证后的 KV。下一次验证前,深层前缀保持固定,新片段只走轻量末层。

2. 块因果联合训练:让末层适应深浅表示混合的输入

未经训练的末层通常接收编码器输出,直接改喂原始嵌入会造成输入分布变化。SEED 在标准监督微调上增加草稿损失:先完整前向取得每个位置的末层 KV,再把输入分成互不重叠的块;每块中的 token 只能因果地看到同块的轻量草稿状态,以及此前各块的完整深层 KV,不能读取当前块的完整 KV。

这个限制很重要。如果让草稿预测访问同块的完整表示,相当于提前使用推理时还没有重算的编码器特征,训练会比部署更容易。由于每块的深层缓存边界相同,所有块可以在一次末层前向中并行处理,训练无需逐轮模拟整段验证循环。主配置的块大小为 10,它是训练条件跨度,不等于每次推理固定草稿 10 个 token。

两条路径共用模型参数,标准下一词损失维持完整验证器的任务学习,草稿损失训练末层的新输入模式,也能通过缓存路径影响上下文表示。作者用未来 token 线性探针和跨层 CKA 支持“更具未来预测性”的解释,但这属于实验支持的机制假说,不是数学上证明模型具有规划能力。

3. 自适应树验证:按置信度分配候选,并严格维护缓存边界

基本版本先生成固定长度草稿,再由完整模型一次验证。主实验进一步使用置信度停止与多候选树:草稿置信度高时延长生成,低于阈值时停止;同时按当前 top-1 概率选择候选数量。概率大于 0.95 时保留 1 个候选,处于 \((0.8,0.95]\) 时保留 3 个,处于 \((0.5,0.8]\) 时保留 5 个,其余情况保留 10 个。停止阈值在 GSM8K、KodCode、ScienceQA 为 0.7,摘要任务为 0.5。

完整验证把树打包后使用树注意力:节点可以看整个已验证前缀及自身祖先,不能读取无关分支。然后从根开始沿验证器贪心预测匹配的路径接受草稿,追加验证器给出的一个额外 token;若发生拒绝,它是第一处不匹配位置的纠正 token,若全部接受,则是再下一词。其他分支和拒绝位置后的缓存必须丢弃。

额外 token 虽然由验证器预测,却尚未作为输入经过完整模型,因此新一轮缓存只覆盖它之前的前缀。草稿器从这个 token 的原始嵌入开始,完整验证再重算它及候选片段,不能误把草稿临时缓存当作完整深层缓存提交。这个“输出末尾比深层缓存多一个 token”的边界,是验证与下一轮草稿能够衔接的关键。

在本文实际评估的贪心设置下,严格验证应复现同一个训练后完整验证器的 AR 输出。这里的无损不表示 SEED 联合训练后仍与原始 Base 权重或另行 AR 微调的模型完全相同,也不把经验上任务准确率不降等同于权重和分布不变;随机采样的严格等价性还需要相应采样接受规则,本文实验没有覆盖这一点。

一个完整示例

下面只是解释状态边界的示意,不是论文测量案例。设当前完整 KV 覆盖位置 1–100,而输出序列已有位置 101 的额外 token。

末层草稿器读取位置 101 的原始嵌入与深层前缀,提出位置 102–105 四个候选,期间不运行前部编码器。

完整验证先清理轻量草稿临时状态,再以深层缓存 1–100 为前缀,并行处理输入位置 101–105,得到位置 102–106 的目标预测。

若只有位置 102、103 与目标预测一致,位置 104 不一致,则接受 102、103,并把验证器在 104 的预测追加为纠正 token;最终输出新增三个 token,而不是保留错误候选 104、105。

此时完整 KV 只保留到位置 103。下一轮从新位置 104 的原始嵌入开始,不能声称纠正 token 104 已有深层 KV。树验证只是把相同逻辑推广到多条候选分支,最终仍只提交一条被接受路径。

损失函数 / 训练策略

令 \(\mathcal{L}_{CE}\) 为完整模型标准下一词交叉熵,块大小为 \(b\)。对目标位置 \(j\),按其输入位置 \(j-1\) 所属块选择边界,正文和附录算法给出:

\[ n'(j)=\left\lfloor\frac{j-2}{b}\right\rfloor b+1,\qquad \mathcal{L}_{spec}=\mathbb{E}_{X\sim\mathcal{D}}\left[\sum_{j=2}^{|X|}-\log f_{dec}\left(X_j\mid H^0_{n'(j):j-1},KV^{dec}_{<n'(j)}\right)\right]. \]

这里按附录算法从 \(j=2\) 写有效下一词位置,避免把首 token 没有前驱的问题混入边界公式。联合目标为:

\[ \mathcal{L}=\frac{\mathcal{L}_{CE}+\lambda\mathcal{L}_{spec}}{1+\lambda}. \]

主配置为末 2 层草稿器、\(b=10\)、\(\lambda=1.0\)。任务专属微调采用 100 步线性预热和余弦衰减,以验证损失选择检查点并早停;最大训练预算为 30,000 步,1.7B/4B 学习率分别为 \(10^{-5}\)/\(5\times10^{-6}\),不是宣称每次均完成全部预算。

注意原文的注意力描述存在未解决歧义:方法正文称采用块因果掩码、保留标准 AR 结构,附录 B.3 也称 fully block-causal;但 Figure 2 图注明确写 context/prompt token 使用双向注意力、response 使用因果注意力。响应及草稿块的因果约束清楚,prompt 究竟是否双向不能仅凭这些文字统一成一个精确实现,需以代码进一步核实。

实验关键数据

主实验

各方法使用贪心解码,在单张 48 GB NVIDIA A6000 上测吞吐,生成遇到 <|endoftext|> 即停止,不通过强制继续重复文本抬高接受率。SEED 和 AR 等训练方法分别在任务数据上微调,主结果默认自适应草稿加树验证。下表摘取 Table 1 的 4B 结果,吞吐单位为 tokens/s,质量前三任务为准确率(%),摘要为 ROUGE-1/2/L。

数据集 AR 质量 SEED 质量 AR 吞吐 EAGLE-3 吞吐 PARD 吞吐 SEED 吞吐
GSM8K 75.1 76.0 28.3 64.4 57.7 74.9
KodCode 76.2 81.0 27.6 54.1 65.4 80.5
ScienceQA 95.4 96.8 26.0 56.0 62.7 89.3
CNN/Daily Mail 39.0 / 18.2 / 29.1 39.8 / 18.4 / 29.3 24.0 49.9 41.0 43.3
论文平均加速比 — — 1.0× 2.1× 2.1× 2.7×

SEED 在 4B 的前三任务吞吐领先,但摘要低于 EAGLE-3;不能把平均领先写成每项都最快。1.7B 的平均加速比为 2.6×,GSM8K 准确率从 56.3% 到 57.1%,吞吐从 37.9 到 91.8 tokens/s。

“比 EAGLE-3 快约 28%”是论文平均加速层面的概括。附录说明 EAGLE-3 缺少相应 Base 草稿权重,因此使用公开 Instruct 模型及配套草稿器,而 SEED 使用任务专属 Base 微调;这并非严格相同目标检查点的纯解码器对照。PARD 的 4B 对照则配合同任务 AR 微调检查点。

数据集边界也重要:KodCode 测试限定 easy 在线评测题;ScienceQA 仅用纯文本样本,训练合并原 train/validation,测试抽取 1,000 条;CNN/Daily Mail 最多评估 1,000 条,最大总长度 1,024,文章与摘要预算为 90%/10%。结果不自动推广到难代码题、视觉 ScienceQA 或超长上下文。

消融实验

Table 6 在 GSM8K 微调的 Qwen3-1.7B 上分析树验证。接受长度指每轮接受的草稿 token 数,不包含额外 token;接受率是草稿接受统计,表中均值不能简单相除还原其聚合口径。

草稿策略 树验证 吞吐(tokens/s) 平均接受长度 接受率
固定 \(d=4\) 有 82.3 3.16 79.80%
固定 \(d=4\) 无 76.9 2.67 69.45%
固定 \(d=8\) 有 82.5 4.65 59.10%
固定 \(d=8\) 无 75.2 3.67 46.64%
动态 \(\tau=0.7\) 有 91.8 3.97 88.57%
动态 \(\tau=0.7\) 无 85.1 3.28 77.59%

Table 7 专门去掉参数共享。这里两种配置都改用训练块 \(b=4\)、固定草稿 \(d=4\)、无树验证,不可把它的 74.3 tokens/s 当成主实验 91.8 的直接缺模块版本。

配置 准确率(%) 吞吐(tokens/s) 接受率 平均接受长度
SEED,共享参数 57.5 74.3 73.0% 2.9
无参数共享 44.1 68.8 68.5% 2.7

另有原文数字差异需要保留:Table 6 固定 \(d=4\)、无树报告 76.9 tokens/s,而 Table 7 和附录 F 相应固定草稿配置报告 74.3。Table 7 明确训练块为 4,主配置为 10;Table 6 未在表题重述块大小,因此不应强行修成同一数字或认定是排版错误。

关键发现

  • 动态策略加树验证比动态单候选吞吐增加 6.7 tokens/s,但去掉树后仍有 85.1,说明核心收益不全来自候选扩展。
  • 共享参数对照中去掉共享后准确率下降 13.4 个百分点,接受率下降 4.5 个百分点;它支持联合优化的重要性,但不是仅改变推理路径且冻结验证器的对照。
  • \(\lambda\) 从 0.1 到 1.0 时,吞吐从 81.5 到 91.8,而准确率从 58.5% 到 57.1%;到 1.5 时为 92.1 和 55.5%。草稿目标越强不代表任务质量越高。
  • 附录 E.2 从已 AR 微调检查点继续训练,准确率为 56.5%,吞吐 90.6,接近直接 SEED 训练的 57.1% 和 91.8;这证明可继续训练改造,而不是零训练即插即用。

亮点与洞察

  • 验证也是编码:完整模型验证并非仅给出接受判定,还留下下一轮可以消费的上下文。把这份已付出的计算复用起来,比重新增加草稿特征网络更直接。
  • 模型小不等于上下文浅:末两层草稿器读取完整前向形成的末层历史 KV。草稿网络深度与历史特征深度可以分开设计,这是与早退出最关键的区别。
  • 便宜并非只由层数决定:附录 F 的粗估计中,1.7B 末两层加词表头仍触及约 411.9M 权重、成本 0.239 个完整前向单位,不是简单的 \(2/28\)。词表头开销解释了为何只算层数会高估收益。

局限与展望

  • 作者只验证 1.7B、4B 和任务专属微调,没有验证 8B/14B/32B、大规模预训练或通用指令后训练,不能把所报加速视作所有模型通用常数。
  • 吞吐来自单张 A6000,不覆盖高并发批处理、不同硬件、服务排队或长上下文;缓存布局和树注意力内核会改变真实收益。
  • prompt 双向/因果注意力文字冲突尚未解决;严格复现应核查实现中的掩码、位置编号与额外 token 的缓存提交边界。
  • 正文把 Apple MTP 概括成每步需要完整前向,但附录 F 明确其可把一次完整调用摊到草稿块,并有逐 token 采样头成本。不能据此声称 Apple MTP 每个候选都独立跑完整网络。
  • 线性探针支持更远未来词可预测性,但不等同于对真实规划能力的因果证明;后续可冻结不同部分并在域外数据上测试,以分离表示变化与训练任务偏置。

相关工作与启发

  • vs LayerSkip / SWIFT / DEL:这些方法保留较早层或动态跳层;SEED 把草稿计算集中在最后几层,读取更深的已验证上下文。其代价是需要训练末层适应原始嵌入,并维护完整验证与轻量草稿两种缓存状态。
  • vs EAGLE-3:两者都利用深层前缀信息,SEED 不增独立草稿器并共享末层参数。附录粗估计 EAGLE-3 单步草稿成本约 0.080,低于 SEED 的 0.239,因此 SEED 的优势不能解释成绝对草稿成本更低,还涉及接受率和验证效率。
  • vs E2D2:SEED 继承昂贵上下文编码与轻量生成分离的摊销思路,但使用因果草稿和完整 AR 验证。附录匹配块 \(b=4\)、固定 \(d=4\)、末 2 层的受控对照中,E2D2 为 23.7% / 75.9 tokens/s,SEED 为 57.5% / 74.3,主要差别是质量而非单纯速度。
  • 研究启发:可研究按硬件、上下文长度和接受统计动态选择末层划分,但必须保留“不使用未验证深层状态”的因果边界。这是后续方向,不是本文已实现能力。

评分

  • 新颖性: 4/5。把验证缓存、末层草稿与块因果训练组合成无需新增架构的自推测方案。
  • 实验充分度: 4/5。覆盖四类任务、两种规模和多项受控消融,但较大模型、服务批处理与相同目标的 EAGLE 对照不足。
  • 写作质量: 3/5。机制直观,但 prompt 掩码及 MTP 成本叙述存在需要读附录辨析的歧义。
  • 价值: 4/5。适合愿意继续训练且重视单请求解码效率的部署场景,实际收益仍依赖硬件和缓存实现。