验证感知训练(VAT):让投机解码的草稿模型学会关心「拒绝点」

笔记日期: 2026-09-02 | 作者: Zhongzhu Zhou 论文标题: Verification-Aware Training for Speculative Decoding 论文作者: Geonmo Gu, Byeongho Heo, HeeJae Jun, Yoohoon Kang, Sangmin Lee, Sangdoo Yun, Dongyoon Han(NAVER AI Lab、NAVER AI Search Platform、高丽大学) arXiv: 2608.30135 状态: 预印本,2026 年 8 月 31 日提交

为什么这篇论文值得读

只要你认真部署过大模型推理服务,就一定撞过同一堵墙:自回归解码要求每生成一个 token 就要做一次完整的前向传播,而前向传播很贵。投机解码(speculative decoding, SD)已经成为解决这个问题的标准手段——一个轻量的「草稿模型」廉价地提出若干候选 token,一个大的「目标模型」用一次并行前向传播来验证这些候选,接受一个前缀、拒绝剩余部分。如果草稿模型足够好,你就能用一次大模型前向传播换来好几个 token,而且——这一点很容易被忽略——最终输出的分布和「逐 token 单独跑大模型」在数学上是完全一致的。这不是近似,是真正免费的无损加速,前提是要看有多少草稿 token 能通过验证。

这个「能通过多少」的数字叫接受长度(acceptance length),它是唯一决定你加速比的数字。一个系统工程师应该马上追问的问题是:既然接受长度才是我们真正在意的东西,为什么训练草稿模型时用的却是别的目标? 这篇论文的全部贡献都源自一个观察:目前最先进的草稿模型——EAGLE-3、DFlash,几乎所有其他方法——训练时用的都是普通的逐位置交叉熵模仿目标模型输出,配合一个固定的、人工挑选的衰减权重表,对每一个训练样本都统一地、稍微降低后面位置的权重,而完全不管这个样本在验证阶段实际发生了什么。这个训练目标既不知道验证是「顺序进行、一票否决」的(第 3 个位置被拒绝,第 4、5、6…个位置无论个体质量多高都作废),也不知道对这个具体样本来说,拒绝到底会发生在哪个位置。

Verification-Aware Training(VAT)正是要补上这个缺口。它是一个只作用于训练阶段与架构无关完全不改变推理流程的即插即用组件:你可以保留现有的草稿模型(自回归的 EAGLE-3 或基于扩散的 DFlash),保留目标模型,逐字节保留推理流程——只改变训练时损失函数关注的信号。把 VAT 套用在 EAGLE-3 和 DFlash 上,在三个目标模型(Qwen3-4B、Qwen3-8B、LLaMA-3.1-8B)和覆盖数学、代码、对话的八个基准上评测,平均接受长度最多提升 11.4%,端到端加速比最多提升 8.7%,代价仅是每个训练步骤增加约 1%–6% 的额外算力,推理阶段零额外开销。这在效率研究中是相当罕见的一种结果:推理侧免费午餐,代价完全、而且廉价地在训练阶段一次性付清。

flowchart LR
    subgraph SD["标准投机解码(VAT 不改变这部分)"]
        D["草稿模型提出 K 个 token<br/>(廉价,自回归或并行)"]
        V["目标模型并行验证全部 K 个<br/>(一次昂贵的前向传播)"]
        A["接受直到第一次拒绝为止的前缀,<br/>其余重新采样"]
        D --> V --> A
    end
    subgraph Train["VAT 真正改变的:只是草稿模型的训练损失"]
        T1["旧:固定的逐位置权重 w_k,<br/>所有样本共用同一套衰减表"]
        T2["新:训练时模拟验证过程,<br/>找到首次拒绝位置 k*,把权重重新锚定到那里"]
        T3["新:新增一个验证头,<br/>预测「这个 token 能否活过验证」"]
        T1 -.被替换为.-> T2
        T2 --> T3
    end
    A -.->|"加速比完全由接受长度决定"| Train

图 1(自绘):本文核心思路的一图流——投机解码的加速比完全由接受长度决定,但现有草稿模型的训练目标既忽略了验证的顺序性、一票否决性质,也忽略了对每个训练样本而言拒绝到底发生在哪里。VAT 在完全不触碰推理流程的情况下修复了这个训练/推理不匹配问题。

图 2(论文图 1):VAT 在每一个训练步骤都模拟一次验证过程,并把得到的接受/拒绝模式转化为两种监督信号

图 2(论文原图 1):论文自己的示意图。在某个训练步骤中,目标模型的 token(“minimizes”)和草稿模型的 token(“reduces”)在位置 k*=3 首次出现分歧。从 k=3 开始所有位置的 accept 标签都变为 0(即 reject),这个信号同时驱动了两件事:重新加权的逐位置损失权重 ŵ_k,以及一个直接从草稿模型自身隐藏状态学习预测接受概率 v̂_k 的验证头。

前置知识

投机解码的精确机制

投机解码(Leviathan et al., 2023;Chen et al., 2023)通过把每一步解码拆成「起草」和「验证」两个阶段来加速自回归生成。给定一个前缀,轻量草稿模型 MdM_d 自回归地(或者对 DFlash 这类扩散式草稿模型,一次并行前向传播地)提出 KK 个候选 token。目标模型 MtM_t 随后对这 KK 个候选加上真实前缀做一次并行前向传播评估——这个并行性正是投机解码之所以快的全部原因:在现代加速器上,验证一个固定长度的 token 序列,代价和验证单个 token 差不多,因为注意力和矩阵乘法都能在序列维度上并行。验证过程随后按顺序遍历这 KK 个位置:在位置 kk,草稿 token 会以概率 min(1,pt(x)/pd(x))\min(1, p_t(x)/p_d(x)) 被接受,其中 pt,pdp_t, p_d 分别是目标模型和草稿模型在同一前缀条件下对该 token 的概率(这就是标准的拒绝采样,也正是它保证了投机解码输出分布与单独跑 MtM_t 完全一致)。一旦某个 token 第一次被拒绝——之后所有草稿 token 无论个体质量多高都会被丢弃,这是极其关键、也极容易被低估的细节——就从该位置的残差分布重新采样一个修正 token,然后从那里开始新一轮起草。

每次验证周期被接受的 token 数量的平均值,就是平均接受长度,论文中记为 τ\tau。由于每次验证周期都有大致固定的开销(一次目标模型前向传播),更高的 τ\tau 直接意味着生成每个 token 所需的验证周期更少,从而吞吐更高。这是整个投机解码文献中最重要的单一指标,也正是本文方法要直接优化的量。

两大主流草稿模型:EAGLE-3 与 DFlash

EAGLE(Li et al., 2024)及其后继 EAGLE-2、EAGLE-3 用一个轻量的、在特征层面运作的自回归草稿模型取代了 Medusa 的独立并行解码头——也就是说它消费的是目标模型自身的隐藏状态,而非原始 token,这让它比纯 token 级草稿模型更能贴近目标模型的内部「思路」。EAGLE-3 进一步通过让草稿模型接触自己的多步 rollout(训练时测试)以及融合目标模型多层特征来改进训练。

DFlash(Chen et al., 2026)走了一条完全不同的架构路线:不再自回归地起草(每个 token 依赖前一个),而是用一个块扩散模型一次前向传播同时生成全部 KK 个草稿 token。这消除了草稿模型自身的顺序瓶颈,代价是相对于依赖自身早期 token 的自回归草稿模型,单 token 起草质量会打些折扣。

尽管架构差异巨大,EAGLE-3 和 DFlash 的训练目标却完全共享同一个骨架

Ldraft=k=1Kwkk(1)L_{\text{draft}} = \sum_{k=1}^{K} w_k \, \ell_k \tag{1}

其中 k\ell_k 是草稿模型预测与目标模型输出在位置 kk 处的交叉熵损失(EAGLE-3 用目标模型完整的软输出分布作标签,DFlash 用目标模型采样出的硬 token),wkw_k 是一个固定的、预先设定的、与样本无关的逐位置权重——EAGLE-3 用 wk=0.8k1w_k = 0.8^{k-1},DFlash 用 wk=exp((k1)/γ)w_k = \exp(-(k-1)/\gamma)。两个衰减表背后都是同一个直觉:越靠前的位置越可能被接受(因为到位置 1 时验证还没拒绝过任何东西),所以权重更高。

为什么固定权重表是一个真实的问题,而不只是「不够优雅」

这一点值得仔细推导一遍,因为它是全文动机的核心,也很容易被当成「反正实践中够用」而一带而过。设想两个训练样本 A 和 B,各起草 K=8K=8 个 token。假设样本 A 的草稿模型和目标模型一路吻合到第 7 个位置才第一次分歧(k=8k^*=8 才拒绝)——这是一个很好的草稿。样本 B 则从第 2 个位置就开始分歧(k=2k^*=2)——一个很差的草稿。在固定权重表 wk=0.8k1w_k = 0.8^{k-1} 下,样本 A 的第 7 个位置权重是 0.860.260.8^6 \approx 0.26——一个很小的权重,尽管这个位置真正决定了样本 A 的接受长度,正是在这里改进预测就能直接延长被接受的前缀。与此同时,样本 B 的第 7 个位置权重也是同样的 0.860.260.8^6 \approx 0.26,尽管在推理时,样本 B 的验证根本不会走到第 7 个位置(因为 k=2k^*=2 时它已经作废了),所以给样本 B 第 7 位置的任何梯度信号本质上都是被浪费的训练算力,本可以用在真正重要的位置上。

换句话说:固定权重表对每个样本都从 k=1k=1 开始衰减,但真正决定一个样本接受长度贡献的位置是它自己的 kk^*,而 kk^* 因样本而异。 一个不考虑 kk^* 的权重表,会系统性地低估那些最直接决定该样本接受长度贡献的位置(靠近该样本自己的拒绝点),同时把过多梯度信号投入到 kk^* 之后、推理时根本不会被走到的位置。这是一个真实的训练/推理不匹配问题,而不是表面上的美观问题——本文对投机解码文献中一个早已被感知但从未被量化的直觉,给出了干净的形式化表达。

本文核心思路

VAT 只引入两个协同工作的组件,二者都只作用于训练阶段:

  1. 验证头(verification head):一个附加在草稿模型自身隐藏状态之上的轻量二分类器,联合训练(梯度会反传进草稿模型),用来预测每个位置 kk 处的 token 是否能活过顺序验证——也就是是否满足 k<kk < k^*
  2. 验证感知加权(verification-adaptive weighting):不再让 wkw_kk=1k=1 开始为每个样本统一衰减,而是先找到该样本自己的首次拒绝位置 kk^*(训练时用推理时相同的接受规则模拟),把衰减曲线重新锚定到从 kk^* 开始——kk^* 之前全部满权重,从 kk^* 起沿用与原来相同形状的衰减曲线,只是起点变成了 kk^* 而非 k=1k=1

这两个组件都不改变草稿模型架构、目标模型或推理流程,VAT 纯粹是改变了训练损失所携带的信号,可以叠加在任何现有草稿模型之上。

方法细节

组件一:在训练时模拟验证过程

使 VAT 两个组件都成为可能的关键技巧,是意识到你完全可以在训练时模拟推理时会发生的那个验证过程,因为训练时草稿模型和目标模型的分布本来就都是现成的(目标模型本来就要用来生成蒸馏标签)。具体来说,在每个训练位置 kk,两个模型都会产生一个分布:p^k\hat{p}_k(草稿)和 pkp_k(目标)。沿用推理时相同的拒绝采样规则,定义逐位置接受指示变量:

mk=1[位置 k 处的草稿 token 被接受](2)m_k = \mathbb{1}[\text{位置 } k \text{ 处的草稿 token 被接受}] \tag{2}

由于顺序验证会把失败向前传播——一次拒绝会使之后所有位置作废,与其个体质量无关——真正的首次拒绝位置是:

k=min{k:mk=0},若全部接受则约定 k=K+1(3)k^* = \min\{k : m_k = 0\}, \quad \text{若全部接受则约定 } k^* = K+1 \tag{3}

而真正重要的接受标签——反映了顺序验证实际结果,而非单纯逐位置一致性——是:

vk=1[k<k]=jkmj(4)v_k = \mathbb{1}[k < k^*] = \prod_{j \le k} m_j \tag{4}

公式 4 用一行话说清了全文的核心转折:mkm_k(这个 token 单独看是否会被接受)并不是决定位置 kk 是否对接受长度有贡献的量;vkv_k(在它之前的一切都活下来的前提下,它是否也能活下来)才是。一个位置完全可能 mk=1m_k = 1(草稿和目标在 kk 处确实一致),但 vk=0v_k = 0(因为更早的某个位置已经失败了)——在这种情况下,这个「一致」对推理毫无意义,因为一旦更早的位置触发拒绝,验证根本不会走到位置 kk。这正是固定权重表看不到的东西,因为 wkw_k 只依赖 kk 本身,从不依赖该样本的 kk^* 实际落在哪里。

模拟验证步骤的伪代码,每个训练批次、每个样本、每次前向传播执行一次:

算法 1:模拟验证并推导标签
输入:草稿分布 p̂_1..K,目标分布 p_1..K,草稿 token x_1..K
输出:接受标签 v_1..K,首次拒绝位置 k*

1.  for k = 1 到 K:
2.      # 与推理时相同的投机采样接受检验
3.      accept_prob_k <- min(1, p_k(x_k) / p̂_k(x_k))
4.      m_k <- Bernoulli(accept_prob_k)   # 或在贪心验证下取确定性阈值
5.  k* <- min { k : m_k = 0 }   # 首个失败位置;若都成功则为 K+1
6.  for k = 1 到 K:
7.      v_k <- 若 k < k* 则为 1,否则为 0
8.  返回 v_1..K, k*

值得指出的一个设计选择:论文主实验用贪心解码生成训练语料,并用确定性的 top-1 一致规则来模拟验证(即 mk=1m_k = 1 当且仅当草稿和目标选出同一个 top-1 token),而不是公式 2 里的随机拒绝采样规则。附录 B 表明两种规则几乎可以互换(训练全程 Pearson 相关系数 > 0.92,最终加速比/τ 差异不超过 0.02)——这是很扎实的一份稳健性检验,说明方法对这个实现细节并不脆弱。

组件二:验证头

为什么直接监督 vkv_k(而不是只依赖重新加权的交叉熵)能带来额外收益?论文的论证很精确:在普通交叉熵目标(公式 1)下,草稿模型在位置 kk得不到任何能区分以下两种截然不同情形的梯度信号——(a) 一个前缀已经全部被接受的位置,此时正确预测能真正延长被接受的序列;(b) 一个前缀已经在更早处被判定失败的位置,此时无论预测多准确,都与验证结果无关。交叉熵损失(除了那个对 kk^* 视而不见的固定权重 wkw_k)对这两种情形一视同仁。

验证头是一个单层全连接层,把草稿模型自身在每个位置的最后隐藏状态映射为预测接受概率 v^k\hat{v}_k,用二元交叉熵训练:

LVH=1Kk=1K[vklogv^k+(1vk)log(1v^k)](5)L_{\text{VH}} = -\frac{1}{K}\sum_{k=1}^{K}\left[v_k \log \hat{v}_k + (1-v_k)\log(1-\hat{v}_k)\right] \tag{5}

这里有一个微妙但重要的机制:即便验证头本身只是训练时的辅助结构(默认不用于推理),LVHL_{\text{VH}} 的梯度会反传进草稿模型共享的隐藏状态本身。这意味着验证头不只是「读出」一个已存在的信号——它会主动重塑草稿模型的内部表示,使其朝着「能够预测该 token 是否会活过验证」这个特征方向偏移,而这正是普通的下一 token 损失从未明确要求过的属性。论文的图 2(下文复现)表明这种重塑是真实且可测量的:加上验证头后,训练全程平均首次拒绝位置整体后移(更多连续 token 通过验证)——而更反直觉的是,即使不看首次拒绝位置,在拒绝点之后恰好仍与目标一致的 token 数量,有验证头时在训练全程保持稳定,而没有验证头时则会稳步下降。换句话说,如果没有这个额外监督,模型似乎会随着训练缓慢地把容量特化到(不断后移的)拒绝点之前,代价是拒绝点之后的质量下降;验证头的梯度抵消了这种漂移。

图 3(论文图 2):有无验证头时的训练动态对比,横轴为训练步数

图 3(论文原图 2):左图——加上验证头后(橙色),平均首次拒绝位置 kk^* 相对无验证头(蓝色)持续更高(更多 token 通过验证),且随训练推进差距逐渐拉大(图中局部放大)。右图——在拒绝点之后偶然仍与目标一致的 token 数量,无验证头时随训练推进逐渐退化,有验证头时则保持平稳,说明验证头的梯度确实在做实质性的表示学习工作,而不只是一个冗余的读出层。

组件三:验证感知加权

这一部分直接回应了上面推导出来的动机问题。VAT 把固定权重表 wkw_k 替换成一个以每个样本自己的 kk^* 为条件的实例自适应权重表 w^k\hat{w}_k

w^k={1若 k<kwkk+1若 kk(6)\hat{w}_k = \begin{cases} 1 & \text{若 } k < k^* \\ w_{k-k^*+1} & \text{若 } k \ge k^* \end{cases} \tag{6}

仔细读这个公式:对首次拒绝之前的每一个位置,权重直接就是 1——不做任何衰减,因为这些位置无论排在序列多靠后,都真正对该样本的接受长度做出了贡献。从 kk^* 开始,VAT 沿用基线方法原本一模一样的衰减函数(EAGLE-3 的 0.8k10.8^{k-1},DFlash 的 exp((k1)/γ)\exp(-(k-1)/\gamma))——只是重新从 kk^* 开始计数,而不是从 k=1k=1 开始。由于两个基线的衰减表都满足 w1=1w_1 = 1,这也意味着首次拒绝位置 kk^* 本身会得到满权重——这是一个刻意的设计:kk^* 是「最接近的可纠正失败点」,验证恰好在这里真正失败,在此处改进预测能直接延长被接受的前缀,因此它至少应该和 kk^* 之前的任何位置一样值得被认真对待。

伪代码:

算法 2:验证感知加权
输入:基础衰减函数 w(.),模拟得到的首次拒绝位置 k*,序列长度 K
输出:逐位置权重 ŵ_1..K

1.  for k = 1 到 K:
2.      if k < k*:
3.          ŵ_k <- 1.0                    # 拒绝之前,满权重
4.      else:
5.          ŵ_k <- w(k - k* + 1)          # 重新锚定的衰减,从 k* 开始
6.  返回 ŵ_1..K

完整训练目标

VAT 最终的训练目标把重新加权的软+硬标签双重交叉熵与验证头损失结合起来:

L=k=1Kw^k[ksoft+khard]+βLVH(7)L = \sum_{k=1}^{K} \hat{w}_k \left[\ell_k^{\text{soft}} + \ell_k^{\text{hard}}\right] + \beta L_{\text{VH}} \tag{7}

其中 ksoft\ell_k^{\text{soft}} 是对目标模型完整输出分布的交叉熵,khard\ell_k^{\text{hard}} 是对目标模型采样出的 token 的交叉熵,β\beta(全程设为 1.0)平衡辅助的验证头损失与重新加权的草稿损失。同时使用软标签和硬标签(一种标准的知识蒸馏组合)本身也是论文单独消融过的一个小而真实的设计选择:DFlash 原本只用硬标签训练,仅仅加入软标签一项就能把消融表中的 τ\tau 从 5.73 提升到 5.82——因为匹配目标模型的完整分布(而不只是它的 argmax)确实携带了关于目标模型置信度的额外有用信号。

完整训练数据流

flowchart TD
    P["训练批次:前缀 + 目标模型生成的响应"]
    P --> DR["草稿模型产生 p̂_1..K<br/>(K 个候选位置)"]
    P --> TG["目标模型产生 p_1..K<br/>(相同 K 个位置,作为教师信号)"]
    DR --> SIM["算法1:模拟验证过程<br/>计算 m_k, k*, v_k"]
    TG --> SIM
    SIM --> WT["算法2:验证感知加权<br/>-> ŵ_k"]
    SIM --> VH["验证头损失 L_VH<br/>(对 v_k 做二元交叉熵,公式5)"]
    DR --> CE["重新加权的交叉熵损失<br/>Σ ŵ_k (ℓ_soft_k + ℓ_hard_k)"]
    WT --> CE
    CE --> LOSS["总损失 L(公式7)"]
    VH --> LOSS
    LOSS --> BP["反向传播,只更新草稿模型<br/>与验证头的权重"]
    BP -.->|"目标模型冻结,<br/>推理路径完全不变"| INF["推理:投机解码流程照旧<br/>(可选:验证头支持提前退出起草)"]

图 4(自绘):VAT 完整的训练时数据流——每一个新组件(模拟验证、自适应加权、验证头)都完全位于训练循环内部,最终汇入同一个损失;这里没有任何一步会触碰目标模型的权重或推理时的起草/验证流程,这正是 VAT 能够即插即用地叠加在现有流水线之上的原因。

为什么不用更简单的替代方案?设计选择讨论

论文在测试公式 6 的替代方案上做得相当详尽,值得梳理一遍,因为这能说明为什么最终选择了这个具体形式,而不是更简单的东西(以下均基于 DFlash + Qwen3-4B,1 个 epoch 训练预算,对应论文表 A):

  • 仅保留前缀(Prefix-only)kk^* 之后权重直接为零,即彻底放弃「衰减而非清零」的想法):结果会跌破基线本身(加速比 2.44× 对比基线的 4.27×)。失败原因很直观,从图 2 的训练动态就能看出:训练早期,绝大多数样本的 kk^* 都很小(未训练好的草稿模型很快就和目标模型分歧),把 kk^* 之后全部清零会在模型最需要梯度信号的时候扔掉几乎全部信号。这说明 kk^* 之后的衰减而非清零信号并非可有可无——它是承重的。
  • 硬截断(Hard cutoff)kk^* 处满权重,之后直接归零):能挽回大部分差距(4.44× 对比 VAT 的 4.61×),但仍落后于 VAT,说明 kk^* 之后的位置在被衰减而非彻底清零时,仍携带一些有用的学习信号——彻底清零仍然浪费了一小部分信息。
  • 不重新锚定的衰减(Unshifted decay)(照常从 k=1k=1 开始应用基础衰减表 wkw_k,即保留原有权重表但不做任何其他改动):4.46× 对比 4.61×,单独隔离出了「重新锚定」这一项带来的价值,与衰减函数的具体形状无关。
  • 边际贡献加权(Marginal-contribution weighting)(一个看起来更「原理正确」的替代方案:按接受长度的精确导数对每个位置加权,这个导数天然会因前缀不确定而对靠后位置打折):4.38×——接近不重新锚定的方案,但仍低于 VAT 基于 kk^* 的硬锚定。论文这里隐含的论点是:一个软的、连续的、基于置信度的「这个位置有多可能重要」估计,比起真正模拟验证得到的、硬的、真实的 kk^*,是一个更嘈杂的训练信号,尽管边际贡献方案在理论上看起来更严谨。
  • GRIFFIN 式掩码(GRIFFIN-style masking)(把草稿 token 落在目标模型 top-mm 之外的位置直接清零损失——这是一个来自先前工作的、局部的、逐位置独立评估的准则,不依赖前缀是否存活):4.32×,是除了「仅保留前缀」之外最弱的替代方案,进一步印证了一个忽略验证顺序性、一票否决结构(不同于公式 4 中 vkv_k 的定义)的准则,系统性地不如一个尊重这个结构的准则。

VAT 有可能在哪里仍会失效或需要权衡?消融表显示 VAT 与硬截断/不重新锚定方案之间的残余差距是真实但不算巨大的(大约 0.15–0.3× 加速比),说明大部分收益确实来自「重新锚定到 kk^*」这个核心想法,而「衰减而非清零」这个细化只是在此之上的一个较小的次要改进。一个公允的批评是:论文没有报告「硬截断+重新锚定」单独与验证头组合后的效果,来精确隔离加权方案本身在总计 8%–11% 接受长度提升中到底贡献了多少,尽管紧接着讨论的表 2 确实表明两个因子各自独立为正,组合起来大致是可叠加的。

实验与结果

为什么接受长度就是「那个」应该优化的指标:一个正式的推导

值得明确推导一下,为什么 τ\tau(平均接受长度)不仅仅是「一个不错的代理指标」,而是精确决定端到端加速比的量——这是支撑全文动机的一个承重假设。为简化起见,假设每个周期的开销固定:一次目标模型前向传播的代价是 ctc_t(无论伴随多少个草稿 token,因为并行验证 KK 个位置的代价大致等于验证一个,正如前置知识部分所述),一轮起草的代价是 cdc_d(较小,因为草稿模型是轻量的)。如果每次验证周期平均接受 τ\tau 个 token 才遇到拒绝,那么生成 NN 个 token 总共需要大约 N/τN/\tau 次验证周期,每次代价 ct+cdc_t + c_d。与非投机解码基线相比(后者需要 NN 次目标模型前向传播,每次代价 ctc_t),得到的加速比是:

加速比Nct(N/τ)(ct+cd)=τctct+cd=τ1+cd/ct(8)\text{加速比} \approx \frac{N \cdot c_t}{(N/\tau)(c_t + c_d)} = \frac{\tau \cdot c_t}{c_t + c_d} = \frac{\tau}{1 + c_d/c_t} \tag{8}

从公式 8 能直接得出两点。第一,在固定代价比 cd/ctc_d/c_t 的前提下,加速比与 τ\tau线性关系——因此 τ\tau 提升 11.4%,理论上应该转化为大致成比例的加速比提升,只是 cdc_d 本身在不同方法间并非完全恒定(例如 DFlash 恒定代价的并行起草和 EAGLE-3 的 KK 步自回归起草,cdc_d 的表现形式不同,这也部分解释了为什么表 1 中论文报告的「加速比」和「τ\tau」百分比提升数值走势接近但不完全相等——比如 EAGLE-3 在 Qwen3-4B 上:τ\tau 提升 8.0%,加速比提升 7.9%,这个极其接近的匹配正好符合公式 8;而 DFlash 更大的训练开销增量则暗示 VAT 训练下 cdc_d 本身发生了细微变化,因为 DFlash 的提前退出变体明确改变了每个周期花在起草上的算力)。第二点,也是最直接支撑「应该训练草稿模型去最大化 τ\tau 而不是逐 token 准确率或困惑度」这个论点的一点:公式 8 里完全没有任何一项衡量单个草稿 token 本身有多「正确」或「流畅」——只衡量在顺序、一票否决的验证过程中,在第一次失败之前有多少个 token 存活下来。一个产出美观、高度合理的草稿 token、但恰好在序列更靠前处就与目标产生分歧的草稿模型,按这个公式衡量严格劣于一个产出略显平淡、但恰好能多活一个位置的草稿模型。这正是公式 4 中形式化的 mkm_k(单点正确性)与 vkv_k(前缀存活正确性)之间的鸿沟,也是「为什么直接优化 vkv_k(通过验证头)以及向每个样本自己的 kk^* 重新加权(通过公式 6)在理论上是正确的做法,而不仅仅是方便的工程技巧」最清晰的论据。

图 7(自绘):VAT 在不同目标模型与草稿模型组合下,接受长度 τ 的相对提升幅度对比

图 7(自绘):把论文表 1 中六个组合各自的 τ 相对提升幅度画成柱状图,蓝色为 EAGLE-3,橙色为 DFlash。可以直观看出提升幅度在不同组合间差异很大(2.5%–11.4%),且这个差异并不完全遵循「基线越弱、提升越大」的单一规律——DFlash 在 Qwen3-8B 上提升最大,但 EAGLE-3 在同一模型上提升幅度只是中等。

逐模型细读:不要只看平均数

为了让「不同目标模型上相对收益不均匀」这个现象具体化而不只是一句断言,下面整理了论文表 1(温度 = 0,八个基准平均值)中的关键数字:

目标模型方法基线 τ+VAT τΔτ基线加速比+VAT 加速比Δ加速比
Qwen3-4BEAGLE-36.286.78+8.0%4.07×4.39×+7.9%
Qwen3-4BDFlash5.736.08+6.1%4.54×4.81×+5.9%
Qwen3-8BEAGLE-36.126.47+5.7%4.04×4.24×+5.0%
Qwen3-8BDFlash5.516.14+11.4%4.47×4.86×+8.7%
LLaMA-3.1-8BEAGLE-36.086.23+2.5%4.17×4.33×+3.8%
LLaMA-3.1-8BDFlash5.575.78+3.8%4.08×4.22×+3.4%

逐行读这张表能发现一个论文正文没有完全展开的模式:整张表里单项最大的提升(DFlash 在 Qwen3-8B 上,+11.4% τ)恰好属于所有 DFlash 行中基线 τ 最低的组合(5.51,低于 Qwen3-4B 的 5.73 和 LLaMA-3.1-8B 的 5.57)——这与「基线越弱,改进空间越大」的直觉一致,但这个模式在 EAGLE-3 一侧并不成立:LLaMA-3.1-8B 在 EAGLE-3 各行中基线 τ 最低(6.08),但相对提升也最小(+2.5%)。两个草稿模型家族之间这种不一致本身很有信息量:说明 VAT 收益的大小并不是简单地「与基线好坏成反比」,更可能与目标模型家族输出分布形状(Qwen3 与 LLaMA-3.1 使用不同的分词器、不同的训练语料,据报道置信度校准行为也不同)和各草稿架构自身的具体失败模式之间的某种交互有关——论文并未直接研究这个机制,这也是后续工作值得跟进的一个自然实验方向(见下文批判性分析)。

实验设置

VAT 在两个结构上截然不同的 SOTA 草稿模型——自回归的 EAGLE-3 和基于扩散的 DFlash——之上进行评测,配合三个目标模型(Qwen3-4B、Qwen3-8B、LLaMA-3.1-8B-Instruct),覆盖数学(GSM8K、MATH-500、AIME25)、代码(HumanEval、MBPP、LiveCodeBench)、对话(MT-Bench、Alpaca)共八个基准,全程使用各基线方法原始论文发布的超参数(例如 DFlash 的 γ=7\gamma=7),因此对比是在已经调好的基线之上进行的公平比较,而非削弱基线后的比较。训练数据用 PerfectBlend 提示词配对目标模型生成的响应构建。

主要结果

论文表 1(此处不逐字复现,做简要总结):温度为 0 时,在全部八个基准上取平均,EAGLE-3 + VAT 把接受长度 τ\tau 在 Qwen3-4B 上提升 8.0%(6.28 → 6.78),Qwen3-8B 上提升 5.7%,LLaMA-3.1-8B 上提升 2.5%;DFlash + VAT 在同样三个模型上分别提升 6.1%、11.4%、3.8%。加速比呈现相同的趋势:EAGLE-3 在 Qwen3-4B 上的加速比从 4.07× 提升到 4.39×(+7.9%),DFlash 从 4.54× 提升到 4.81×(+5.9%)。在温度 0 和温度 1 两种评测设置下,3 个模型 × 2 个基线 × 8 个基准共计的每一种组合上,收益都保持一致——论文的所有表格里没有任何一个组合是 VAT 让情况变差的,对于一个如此简单的方法来说,这是相当有分量的结论。

消融实验:拆解各组件的贡献

论文表 2(因子分析,DFlash + Qwen3-4B)显示三个成分——验证头、验证感知加权、软+硬标签——单独使用都能提升 τ\tau(从基线的 5.73 分别提升到 5.87、5.91、5.82),任意两个组合起来收益会进一步叠加,三者全部组合能达到最好的结果(6.08,比基线提升 6.1%)。这种「每个因子单独都有用,组合起来大致可叠加」的模式,是反驳「收益其实全部来自某一个主导技巧、只是包装成三个组件」这种(不太厚道的)替代假设的有力证据。

图 5(论文图 3):验证头首次拒绝位置预测误差(MAE),随接受判定阈值 p 变化

图 5(论文原图 3):目标模型真实首次拒绝位置与验证头预测首次拒绝位置之间的平均绝对误差热力图,按基准分列,判定阈值 pp 从 0.1 到 0.9 扫描。均值行(最底行)在 EAGLE-3 上于 p=0.5p=0.5 处最小(MAE 1.18 个 token),在 DFlash 上于 p=0.6p=0.6 处最小(MAE 1.76 个 token)——误差足够小,说明验证头确实是预测验证会在哪里停下的一个廉价而有效的代理。

一个真正实用的附带收益:提前退出起草

由于训练好的验证头本身就是前向传播的廉价副产品、能预测逐位置接受概率,论文进一步探索了在推理时(可选,并非强制)利用它,在预测到拒绝时提前终止起草,而不是每次都固定起草完整的 KK 个 token 之后才发现有些被浪费了。对于 DFlash(无论如何都会在一次并行传播中起草全部 KK 个 token),「提前退出」意味着只把预测为接受的前缀送去验证(节省验证算力,而非起草算力)。对于自回归起草的 EAGLE-3,提前退出还能直接终止起草循环本身,同时节省起草和验证算力。

图 6(论文图 4):由验证头引导的提前退出起草——在数学/代码/对话上的加速比与接受长度

图 6(论文原图 4):「带验证头的提前退出」(蓝色)介于「不做提前退出」的基线(白色)和使用真实首次拒绝位置的 oracle 上界(紫色)之间——例如在 DFlash 代码任务上,4.83× → 4.97×,而 oracle 上界是 5.20×,接受长度有小幅、符合预期的下降(DFlash 数学任务上 7.67 → 7.35),来自验证头偶尔的误判性提前拒绝。作为训练时可选的附加功能,这是 VAT 带来的一个真正实用的额外收益,不过值得注意的是,这也是 VAT 中唯一一个(在启用时)确实会触碰推理行为的部分——其余部分都只作用于训练。

训练开销:账本的诚实一面

附录表 D 直接量化了训练时的成本:VAT 只给 EAGLE-3 增加了 1.2% 的单步耗时(0.511s → 0.517s/步),因为 EAGLE-3 原本就要计算目标模型的软标签分布用于既有损失,VAT 的模拟验证几乎白嫖了这部分计算——只有轻量的验证头带来额外开销。DFlash 的代价更高(1.044s → 1.108s/步,+6.1% 耗时,峰值显存也从 23.8GB 跳到 31.5GB),因为 DFlash 原本训练完全不计算目标模型的完整输出分布(只用硬标签),模拟验证需要额外新增一次DFlash 原本不需要的目标模型前向传播。这是一个被明确披露、而非藏在脚注里的真实成本——如果你在考虑是否采用 VAT,这个细节很重要:开销的大小取决于你现有训练流水线本来就计算了什么,DFlash 用户应该为一次真实(虽然只是个位数百分比)的训练变慢做好预算,而不能因为推理不受影响就想当然地认为它是免费的。

一个具体的数值示例:三种权重方案对比

为了让固定权重表、硬截断、VAT 验证感知加权三者的区别彻底具体化,考虑 EAGLE-3 风格的基础衰减表 wk=0.8k1w_k = 0.8^{k-1}K=6K=6 个草稿位置,某个训练样本的模拟首次拒绝位置为 k=4k^*=4

位置 kk固定权重表 wkw_k(公式1)硬截断不重新锚定衰减,kk^*之后照旧VAT w^k\hat{w}_k(公式6)
10.80=1.000.8^0 = 1.001.001.001.00
20.81=0.800.8^1 = 0.801.000.801.00
30.82=0.640.8^2 = 0.641.000.641.00
4(=kk^*0.83=0.510.8^3 = 0.511.000.51w1=1.00w_1 = 1.00
50.84=0.410.8^4 = 0.410.000.41w2=0.80w_2 = 0.80
60.85=0.330.8^5 = 0.330.000.33w3=0.64w_3 = 0.64

逐行读这张表能让论文的论证变得非常具体。在普通固定权重表下,位置 3——它确实在拒绝之前,完全对该样本被接受的前缀有贡献——被打折到 0.64,和任何样本在这个位置得到的折扣完全一样,无论该样本自己的拒绝实际发生在哪里。VAT 则给位置 1–3 全部满权重(它们都在 kk^* 之前),在 k1k^*-1 之前与硬截断列完全一致;两种方法只在 kk^* 之后才出现分歧——VAT 沿用与之前相同的衰减形状,但把指数计数从 kk^* 重新开始(所以位置 5,即 kk^* 之后第一个位置,得到重新索引序列中位置 2 对应的权重 0.81=0.800.8^1=0.80),而硬截断则直接把这些位置清零。这个数值示例正是消融结果(表 A)在定性上说得通的原因:硬截断和 VAT 都认同「不要打折拒绝之前的前缀」这个修正,这正是相对固定权重表带来大部分改进的来源;而 VAT 相对硬截断的额外优势,则专门来自于对位置 5、6 保留一些(衰减后的)信号、而非彻底丢弃这个更小、更次要的细化。

图 8(自绘):三种权重方案在 k*=4, K=6 示例下的逐位置权重对比

图 8(自绘):把前文数值示例表格画成折线图会更直观——固定权重表(蓝线)从位置 1 起就持续衰减,对位置 2、3 这些明明还在拒绝点之前的位置也打了折扣;硬截断(橙线)在 kk^* 之前保持满权重,但过了 kk^* 直接归零;VAT(绿线)同样在 kk^* 之前保持满权重,但过了 kk^* 之后仍保留衰减而非清零的信号,是三者中唯一同时满足「不打折前缀」和「不完全丢弃后缀信号」两条原则的方案。

更广阔的图景:VAT 在投机解码全景中的位置

有必要把 VAT 放到论文简要提及、但值得展开讨论的更大的相关工作脉络中去理解,这样能更清楚地说明采用 VAT 特有的这套组合,相对于其他替代方案,实践者到底获得了什么(以及没有获得什么)。

以架构为核心的谱系(EAGLE 家族、Medusa、Hydra、DFlash)。 迄今为止投机解码领域创新的主轴一直是草稿模型架构:Medusa 把独立的并行预测头直接挂在目标模型的隐藏状态上(廉价,但各个头之间互不依赖,限制了较长起草的接受长度);Hydra 在这些头之间加入顺序依赖(以增加复杂度为代价缩小这个差距);EAGLE 彻底用一个在目标模型自身特征空间(而非原始 token)上运作的轻量自回归模型取代这些头,利用了「目标模型的隐藏状态本身就已经编码了决定下一个 token 选择的大部分信息」这一直觉;EAGLE-3 进一步融合多层特征,并在训练时让草稿模型接触自己的 rollout(这解决的是另一种不匹配——rollout 分布上的训练/推理不匹配,而非 VAT 针对的验证结果分布不匹配);DFlash 则彻底放弃自回归起草,转而采用块扩散并行生成。VAT 与这整条谱系里的每一个方法都是正交的——它完全不提出新的草稿模型架构,而是为你现有的任何草稿模型架构提出一个新的训练信号。这正是论文能够不加修改地同时证明与自回归草稿模型(EAGLE-3)和扩散草稿模型(DFlash)兼容的原因:架构谱系和训练目标谱系是真正可以分离的两个轴。

以训练目标为核心的谱系(数量少得多、与本文更直接可比的一批工作)。 此前触及训练目标本身(而非架构)的论文要少得多。DistillSpec 泛泛地研究了草稿模型和目标模型分布之间的知识蒸馏,没有涉及验证结果的结构。HASS 和 EAGLE-3 自身的训练时测试解决的是一个相关但不同的不匹配:它们让草稿模型在训练时接触自己rollout生成的序列(而非始终基于真实/teacher-forcing 前缀),弥合了序列生成领域更广为人知的经典训练/推理暴露偏差问题——但即便修复了这一点,二者仍然保留了 VAT 所批评的、统一的、与样本无关的逐位置权重。Judge Decoding、SpecDec++、AutoJudge 都用到了接受/拒绝信息,但是作为推理时信号(例如决定何时停止起草、或在服务时如何加权接受决策),而非训练时的监督目标——这个区别很重要:VAT 的验证头同样可以合理地承担类似的推理时角色(论文在提前退出实验中恰好探索了这一点),但它的主要用途是重塑训练梯度,这与事后的推理时门控是根本不同的杠杆。论文标注为真正同期工作的两篇论文——PARD-2 和 D-PACE——是精神上最接近的前作:二者都用自适应逐位置权重取代固定的逐位置权重。VAT 划出的关键技术区别(这是一个真实、可核实的区别,而非营销话术)在于:PARD-2 的权重来自目标模型在前缀上的累积置信度(一种「这个前缀有多可能存活」的软的、概率性的代理指标),而 D-PACE 的权重来自基于草稿模型自身置信度的期望接受长度的可微代理——二者都是连续的、基于置信度的重要性估计。VAT 则把权重建立在观测到的、硬的、真实的首次拒绝位置之上——通过真正模拟验证规则得到——并进一步把它与验证头对累积结果 vkv_k 的显式监督结合起来,这是 PARD-2 和 D-PACE 都不具备的。前文讨论过的消融实验(表 A)直接在 VAT 自己的框架内测试了 D-PACE 风格的、基于置信度的加权,发现其表现不如硬锚定版本(4.52×/5.89 对比 VAT 的 4.61×/6.03)——这是一次有意义的、受控的比较,而非一个假设。

这给整个领域留下了什么。 对于要在这些选项间做决策的系统工程师来说,实际的结论是:如果你已经有一个能用的草稿模型(任何架构),并且在寻找一个只作用于训练阶段、推理侧几乎零成本零风险的改进方案,那么 VAT 的具体组合——基于硬 kk^* 锚定的重新加权,加上一个辅助验证头——按照论文自己针对 PARD-2 风格和 D-PACE 风格替代方案所做的受控比较,是目前这个细分领域里消融做得最严谨的选项。至于 VAT 相对这些非常新的同期方法(PARD-2、D-PACE)的优势,在一个由独立第三方运行、各方法都使用自己偏好的超参数(而非被重新实现进 VAT 自己的框架内)的正面对比中是否依然成立,目前还有待观察——表 A 的比较虽然有信息量,但其框架设计天然对 VAT 有利(所有可选权重方案都是作为 VAT 自身流水线中恰好一个环节的替换项来评测的,而非作为完整的、相互竞争的系统)。

采用 VAT 的实践建议

对于想要判断是否值得把这个方法真正接入生产环境草稿模型训练流水线的读者,从论文自己的数字中可以提炼出几条具体建议:

  1. 验证感知加权(公式6)是应该优先采用的、杠杆更高、成本更低的组件。 它不需要在现有蒸馏流水线之外增加任何前向传播(如果你在做软标签蒸馏,pkp_kp^k\hat{p}_k 本来就是现成的),而表 A 的消融结果显示,仅这一项就贡献了相对任何单一替代权重方案的大部分收益。如果你的训练流水线算力紧张,应该从这里开始。
  2. 验证头对 EAGLE-3 风格流水线来说很廉价(1.2% 开销),但对 DFlash 风格流水线来说代价明显更高(6.1% 开销,外加约 32% 的峰值显存增长),因为它需要新增一次 DFlash 原始方案里从未计算过的完整目标模型 LM-head 前向传播。如果你在训练扩散式草稿模型且显存紧张,应该提前为此明确预留预算。
  3. 验证头在推理时用于提前退出,是与「为训练采用 VAT」完全独立的决策。 你完全可以只为了训练时的收益(更好的 τ\tau,推理不变)采用 VAT,而从不触碰提前退出;也可以在此基础上额外启用提前退出,以偶尔的误判性拒绝导致的少量 τ\tau 下降为代价,换取进一步的加速(见上文图 5/6)。这是两个独立的开关,不是一个打包决策。
  4. 对目标模型选择的敏感性是真实存在、且目前尚未被解释的(见上文「逐模型细读」部分)——如果你的目标模型与 Qwen3 或 LLaMA-3.1 有实质性差异(例如不同的分词器、混合专家架构、或参数量差异很大),应该把论文报告的 2.5%–11.4% 区间当作一个合理的可能范围,而不是一个保证会出现的结果,并在假设某个具体数字能直接迁移之前,为自己的消融实验预留时间。

一个更细致的问题:验证头与加权方案之间是否存在信息冗余?

这是笔者在通读全文消融实验之后,认为最值得单独展开推演的一个技术问题。回顾公式 4:vk=jkmjv_k = \prod_{j \le k} m_j,即位置 kk 的接受标签,等价于「从 1 到 kk 的每一个位置都被接受」这个逻辑与运算的结果。而验证感知加权方案(公式 6)里用到的 kk^*,正是 vkv_k 序列中从 1 变为 0 的那个转折点——换句话说,kk^* 本质上是从 vkv_k 序列里提取出的一个标量摘要(首次为 0 的位置),而验证头要学习预测的 v^k\hat{v}_k 则是对整个 vkv_k 序列的逐位置软预测。这两者显然共享同一个底层监督来源,只是消费方式不同:一个是把标签转化为权重表的索引(离散、硬编码进损失函数结构),另一个是把标签直接当作额外的回归/分类目标(连续、通过独立的损失项 LVHL_{VH} 加入总损失)。

从信息论的角度粗略推演:如果验证头已经能够很好地预测 vkv_k(论文图 3 显示,在最优阈值下 MAE 仅为 1.18–1.76 个 token,说明确实学得不错),那么验证头的隐藏状态表示里,理论上已经蕴含了「kk^* 大致在哪里」这个信息的绝大部分。这意味着,把 kk^* 单独抽出来、再用它去构造一套独立的权重表(公式 6),从纯信息量的角度看,某种程度上是在用两条不同的路径去传递同一个底层信号——一条路径通过修改损失函数里每一项的系数(权重表),另一条路径通过增加一个独立的辅助损失项(验证头)。论文表 2 的消融结果(验证头单独 5.87,加权单独 5.91,二者叠加 6.05,再加软硬标签达到 6.08)确实显示二者组合会带来正向收益,而非互相抵消或冗余到收益消失,这说明二者提供的具体训练信号并非完全重叠——权重表直接改变了每个位置在损失函数里的梯度大小,而验证头改变的是从隐藏状态到接受概率这一映射本身的表示能力,二者作用的层面不同。但这并不意味着二者完全独立:论文并没有给出一个能够精确量化「二者信息重叠程度」的实验(例如去掉权重表之后,验证头单独预测 kk^* 的能力是否会有系统性变化;或者反过来,去掉验证头之后,仅靠权重表能否让模型隐式学到类似验证头所提供的表示能力)。这正是前文批判性分析中提出的第一条改进建议(补充交叉消融)背后更深层的技术动机——不是简单地「再多做一组实验」,而是要回答一个关于这两个组件各自独立贡献边界的、有明确理论意义的问题。

从系统工程视角看:VAT 与投机解码服务系统的集成点

对于负责把投机解码方法落地到实际推理服务(如 vLLM、SGLang、TensorRT-LLM 等系统)的工程团队来说,VAT 的一个突出优点是它的集成面完全限定在离线训练阶段,与在线服务系统的代码路径零交集。这意味着从系统工程的角度看,采用 VAT 不需要对现有的投机解码服务框架做任何修改——你只需要用 VAT 训练出一版新的草稿模型权重,然后像更新任何其他草稿模型 checkpoint 一样把它热替换进现有服务系统即可,推理时的批处理逻辑、KV cache 管理、多请求调度等系统层面的复杂性完全不受影响。这与许多同样声称能提升投机解码效果、但需要改动服务系统内部数据结构或调度逻辑的方法(例如某些依赖动态草稿树结构、或需要在验证阶段插入额外的服务端逻辑判断分支)形成了鲜明对比——那类方法即便训练侧改动很小,落地时往往需要说服基础设施团队接受额外的系统复杂度和潜在的延迟抖动风险。

需要指出的是,如果读者确实想启用论文里提到的、由验证头引导的提前退出优化(图 6),那么这个优点会打一些折扣——提前退出确实需要在推理时的起草/验证循环中插入一次额外的验证头前向传播和阈值判断逻辑,这就不再是纯训练侧的改动了。因此从工程落地的角度看,一个务实的分阶段推荐路径是:第一阶段,仅采用 VAT 的训练时收益(加权方案+验证头训练,但推理时完全不使用验证头),验证 τ\tau 和吞吐提升是否在自己的目标模型和业务场景下同样成立且幅度合理,这一步的集成成本和风险都接近于零;第二阶段,在确认收益之后,再考虑是否要为了图 6 展示的额外加速引入提前退出逻辑,把这一步当作一个独立的、需要单独做灰度验证的系统改动来对待,而不是与第一阶段的训练侧改动打包上线。

补充实验细节回顾:温度与验证规则的稳健性检验说明什么

上文正文部分提到过附录 B 的稳健性检验(不同验证规则与语料生成温度组合下,加速比与 τ 的差异不超过 0.02),这里值得多说一句它的方法论意义。附录 B 实际上回答的是一个很实际的工程问题:如果我的训练语料生成方式(贪心解码 vs. 采样解码)与我实际部署时的解码策略不完全一致,VAT 训练出来的模型是否还可靠? 论文给出的答案是「基本不敏感」——无论是用贪心还是采样规则模拟训练时的验证过程,无论训练语料是用温度 0 还是温度 1 生成,最终评测出的加速比和 τ 都高度一致(差异在 0.02 这个量级,本质上是噪声)。这个结果背后的一个合理解释是:公式 3 定义的首次拒绝位置 kk^*,本质上依赖的是草稿模型和目标模型在每个位置上「谁更自信、分歧有多大」这个相对关系,而这个相对关系在贪心和采样两种模拟规则下具有高度的单调一致性(论文附录 B 表 B 报告的 Pearson 相关系数全程保持在 0.92 以上),所以即便具体使用哪种规则来标注 vkv_k 有细微差异,最终学到的「这个位置大概率会不会被拒绝」这个粗粒度信号是稳定的。对于工程落地而言,这个稳健性结论的实际价值在于:不需要精确复刻自己生产环境的采样策略来生成 VAT 的训练语料,用团队现有的、习惯的语料生成流程(无论贪心还是某个固定温度采样)大概率就足够了,不必为了追求理论上的「训练/部署一致性」而重新设计整条数据生成流水线。

局限性

作者对方法的适用范围相当坦诚,以下几点值得复述并做一些延伸:

  • 模型规模上限。 全部实验的目标模型规模都在 80 亿参数以内(Qwen3-4B/8B、LLaMA-3.1-8B)。论文明确把「扩展到显著更大的模型」列为未来工作。在 700 亿参数以上——草稿模型/目标模型的容量差距通常更大,接受率的行为也不同——接受长度的提升是会持续、缩小还是扩大,单凭这篇论文完全无法判断。
  • 只测试了两种起草范式。 EAGLE-3(自回归、特征层面)和 DFlash(块扩散、并行)都是很强的、较新的基线,但并不能覆盖投机解码文献里的每一种架构族(例如 Medusa 式独立解码头、REST 这类检索增强的草稿模型)。「VAT 与架构无关」这个说法从机制上看是合理的(它只改动损失函数,不改动前向传播),但目前只在一个大得多的设计空间里的两个点上得到了实证。
  • 对训练语料的依赖。 训练集是用贪心解码把 PerfectBlend 提示词与目标模型生成的响应配对而成,附录 B 证明了对语料生成温度和验证规则的鲁棒性——但这只是在论文自己语料构造方案内部做的鲁棒性检验,并未针对性质不同的训练数据分布(例如真实用户流量日志、对抗性提示词,或远离数学/代码/对话领域的数据)。
  • 不同模型间收益不均衡(2.5% 到 11.4%)的模式,论文只是报告了,并未给出解释,如上文所述。一个收益随三个目标模型跨度近 5 倍变化、又没有说明为什么的方法,对实践者来说,比一个效果稳定、且原因明确的方法更难提前预估效果。

与更广泛投机解码优化目标的关系:延迟不等于加速比

最后再补充一个容易被忽视、但对实际部署非常关键的视角。整篇论文(以及本笔记大部分篇幅)都在讨论「加速比」和「接受长度 τ」,这两个指标本质上衡量的是相对自回归解码基线的吞吐量倍数。但在真实的在线推理服务场景中,工程师真正关心的往往不是这个相对倍数,而是**端到端首 token 延迟(TTFT)逐 token 延迟(TPOT)**这两个更贴近用户体验的绝对指标,以及在给定 QPS 下系统的整体吞吐容量。公式 8 推导出的「加速比 = τ / (1 + c_d/c_t)」告诉我们,即便 τ 有稳定提升,实际观测到的端到端延迟改善幅度还取决于 cd/ctc_d/c_t 这个比值在你的具体部署环境(GPU 型号、batch size、张量并行策略、KV cache 管理开销等)下到底是多少——论文所有实验都在单卡 A100 80GB 上以相对固定的配置测量,并未讨论在生产环境常见的大 batch、多请求并发调度场景下,cdc_d(草稿模型的相对开销)是否会因为批处理效率的变化而发生偏移。举例来说,如果一个服务系统本身已经把 batch size 开得很大、GPU 利用率接近饱和,那么额外插入草稿模型的前向传播可能不再是「几乎免费」的,因为它会与验证阶段竞争计算资源,这时候 cd/ctc_d/c_t 的有效值可能高于单请求场景下测得的数值,VAT 带来的 τ 提升能转化为多少实际吞吐提升就需要重新评估。这不是对论文本身的批评——论文明确聚焦于训练方法本身,把系统层面的部署评测留给读者和后续工作是合理的分工——但作为阅读笔记,有必要提醒对生产部署决策感兴趣的读者:论文报告的加速比数字是一个有意义但不能直接照搬到任意生产环境的参考值,落地前建议在自己的具体服务配置和典型请求分布下重新测量端到端延迟指标。

一个容易被忽略的细节:验证头的输入是隐藏状态,而非 logits

回到方法细节部分再补充一个值得单独强调的实现细节。验证头接收的输入是草稿模型最后一层的隐藏状态,而不是草稿模型已经算出来的 logits 或 softmax 概率。这个选择初看可能显得无关紧要——反正隐藏状态经过输出投影层之后就会变成 logits,直接用 logits 作为验证头的输入似乎更「直接」。但仔细想想会发现,这个选择其实是有意义的:如果验证头接在 logits 或者概率之后,它能利用的信息完全被压缩进了草稿模型已经决定要预测哪个 token 这一个决策里;而接在隐藏状态之后,验证头能够访问到比最终 token 预测更丰富的中间表示——比如模型对当前位置有多犹豫(logits 分布的形状、是否存在多个高概率候选)、模型在这一步用到了多少来自更早层的上下文信息等等,这些信息在被压缩成一个具体的 token 预测之前可能包含着更细粒度的「这个位置有多容易被目标模型接受」的线索。更重要的是,把验证头接在隐藏状态之后,还带来了前文讨论过的关键效果:LVHL_{VH} 的梯度可以直接反传进隐藏状态本身,从而重塑草稿模型的内部表示,这正是图 3 里「有验证头时训练动态更稳定」这一现象的来源。如果验证头接在 logits 之后(logits 是一个相对底层、直接对应词表大小的输出层,中间几乎没有可塑的表示空间),这种反向重塑效应会弱得多,因为 logits 层本身的自由度和可塑性远不如更深层的隐藏状态表示丰富。

批判性分析

这篇论文自身的弱点与缺陷。 最值得指出的一个缺口是缺少「验证感知加权验证头组合」相对于表 A 中孤立的硬截断和不重新锚定基线的消融——表 A 只测试了不带验证头的加权变体,所以我们并不知道 VAT 加权方案相对更简单替代方案的那约 0.15–0.3× 优势,在验证头也存在的情况下会保持、缩小还是扩大,而验证头本身有没有可能已经捕获了「哪些位置重要」这类加权重设计想要针对的部分信息。目前的消融结构(表 2 只是把每个组件的有/无与原始固定权重基线对比,而不是与彼此的近邻方案对比)无法干净地排除这种信息冗余的风险。第二,论文报告的是八个基准的平均数作为headline数字,但逐基准表格(表 1)显示了真实的异质性——Alpaca 和 MT-Bench(对话类)的绝对加速比提升持续是最小的,在 LLaMA-3.1-8B 温度 1 设置下甚至出现接近持平的增量(例如 DFlash:1.78× → 1.85×,加速比+0.07,τ+0.14——为正但很微弱),论文没有讨论对话类、开放式生成(草稿-目标分歧模式很可能与有更确定「正确」延续的数学/代码任务在结构上不同)是否是这一类方法系统性更难提升的场景。

作者低估或省略的局限。 论文把 VAT 定性为广泛「与架构无关」,但这个说法建立在一个机制性论证之上(VAT 只改动损失函数),而非广泛的实证覆盖——论文只测试了两个草稿模型家族,且两者都属于「以特征为条件的神经网络草稿模型」这个相当窄的设计空间。一些具有根本不同训练信号的方法——例如根本不产生完整词表概率分布的检索式草稿模型,或者 n-gram/查表式草稿模型——需要对公式 2 里的接受概率计算(它假设两个模型都能给出良好校准的概率分布)做非平凡的改造。论文也没有讨论如果部署时实际使用的验证规则与贪心 top-1 一致规则不同(例如推理时用与训练时模拟不同的 top-p 核采样)会发生什么,除了附录 B 那个只测试语料生成温度、而非部署时采样策略的温度 1 实验——这两个轴相关但不完全相同,把它们混为一谈,稍微夸大了鲁棒性结论已经被验证的完整程度。

具体、可执行的改进建议。 (1)补上缺失的交叉消融:验证感知加权配合验证头,对比硬截断配合验证头,再对比不重新锚定衰减配合验证头——这样才能直接判定加权重设计的收益是独立于验证头的贡献,还是被验证头部分吸收了。(2)把规模研究扩展到至少一个 300–700 亿参数级别的模型,哪怕只用更小的基准子集,因为在更广泛的投机解码文献里,接受长度的动态特性已知会随目标模型规模发生非平凡变化(更大的目标模型往往有更尖锐、更集中的分布,这会改变 pt(x)/pd(x)p_t(x)/p_d(x) 饱和到 1 的频率)。(3)报告不同目标模型间 2.5% 对 11.4% 收益差异的来源分解——例如是否与基线接受长度相关(本来接受率就高的模型改进空间更小)、是否与 Qwen3 和 LLaMA-3.1 之间的分词器/词表差异相关,还是与训练语料对每个模型家族典型输出的覆盖程度有关?哪怕只是利用论文已有数据(表 1)做一次事后相关性分析,也能显著加强「这个方法为什么有效、何时有效」的论证。(4)对于图 4 中验证头在推理时用于提前退出的场景,应该报告端到端延迟(而不仅仅是相对自回归解码的加速比),包括验证头本身额外前向传播的代价——因为一个要决定是否在生产环境启用提前退出的读者,需要完整的延迟账本,而不只是论文中使用的相对加速比框架。

延伸讨论:训练开销的进一步拆解与工程落地建议

上文已经引用了论文附录表 D 的训练开销数字(EAGLE-3 +1.2%,DFlash +6.1%),这里值得从工程落地的角度多展开一层。首先要区分两类不同的「额外成本」:(1)计算冗余——为了模拟验证过程,是否需要新增一次原本不需要的前向传播;(2)内存冗余——为了同时持有草稿分布、目标分布、以及验证头的中间激活,峰值显存会增加多少。EAGLE-3 由于本来就要计算目标模型的软标签分布用于蒸馏损失,公式 2 里的 pk(xk)p_k(x_k) 因此是「白嫖」得到的,唯一的新增计算只是验证头这一个单层全连接的前向和反向传播,量级上几乎可以忽略——这也解释了为什么表 D 中 EAGLE-3 的显存开销从 18.5GB 只涨到 18.6GB,几乎持平。DFlash 则完全不同:它原本的训练配方从不计算目标模型的完整输出分布,只用采样出的硬标签做交叉熵,所以为了拿到公式 2 里的 pk(xk)p_k(x_k),必须额外插入一次目标模型的 LM head 前向传播——这次额外传播不仅带来时间开销(+6.1%),更带来了近 32% 的峰值显存增长(23.8GB → 31.5GB),因为需要同时在显存中保留目标模型的完整词表 logits。

对于正在评估是否要把 VAT 接入自己训练流水线的工程师,这里有一个直接可执行的检查清单:先确认自己现有的蒸馏流水线是否已经产出目标模型的完整(而非仅采样)输出分布——如果已经产出(多数基于软标签蒸馏的现代草稿模型训练配方都会),那么接入 VAT 的边际成本极低,几乎只是加一层验证头和改一行加权逻辑;如果还没有(例如复刻 DFlash 这类只用硬标签的训练配方),则需要提前为额外的目标模型前向传播预留显存与时间预算,且这个预算并非可以忽略的零头,而是接近训练总耗时的 6% 这个量级,在大规模训练场景下累积起来是需要认真核算的真实成本。

另外一个容易被忽略的工程细节:验证头的训练完全依赖于在线、逐步模拟验证得到的标签 vkv_k,论文明确指出「训练全程没有预先计算或缓存任何验证标签或目标分布,所有量都在每一步用冻结的目标模型在线算出」。这意味着如果读者想进一步压缩 VAT 本身带来的开销,一个自然但论文未探索的思路是:能否对验证标签做某种批次内或跨步骤的近似缓存或复用,减少目标模型 LM head 的重复计算?考虑到目标模型在训练全程是冻结的,同一批训练数据在多个 epoch 之间重新计算目标分布确实存在理论上的重复劳动空间,这是一个值得未来工作探索、但本文完全没有涉及的优化方向。

小结:这篇论文教会我们的一般性方法论

跳出 VAT 这个具体方法本身,这篇论文示范了一种在效率研究中值得反复借鉴的一般性方法论:当一个系统的最终性能指标(这里是 τ,接受长度)是由某个下游、离散、顺序性的决策过程(这里是逐位置验证)决定时,检查上游训练目标是否真正对齐这个决策过程的结构,往往比单纯堆砌更复杂的模型架构更有性价比。EAGLE 系列论文的迭代路径(EAGLE → EAGLE-2 → EAGLE-3)主要沿着「让草稿模型架构更强」这条轴展开,而 VAT 沿着一条正交的轴——「让训练信号更贴合推理时的决策结构」——往往能以远低于架构创新的工程成本拿到相近量级的收益。这提示读者在自己的工作中遇到类似的「训练目标 vs. 实际推理决策过程」不匹配问题时(这类不匹配在深度学习的很多子领域都普遍存在,绝不仅限于投机解码),值得先问一句:我的损失函数是否真正在优化那个决定最终指标的东西,还是仅仅在优化一个方便计算、但结构上与真实决策过程脱节的代理目标?

可复现性说明

论文声明代码「即将开源」于 https://github.com/naver-ai/VAT(截至本笔记撰写时尚未公开),并明确建立在两个已经开源的基线之上——EAGLE-3(https://github.com/SafeAILab/EAGLE)和 DFlash(https://github.com/z-lab/dflash)——这大幅降低了 VAT 自身代码放出后的复现门槛,因为读者可以从任一基线现有的训练流水线出发,叠加公式 6 的重新锚定加权和公式 5 的验证头,二者都足够简单(几行代码即可:从既有软标签损失所用的目标/草稿分布中计算出 kk^*,重新索引既有的衰减函数,再加一层全连接加一个 BCE 项),即便在官方代码放出之前,也很可能仅凭论文公式就能自行复现出来。论文报告全部训练使用 A100 80GB GPU,3 个 epoch,超参数直接沿用 EAGLE-3/DFlash 原始论文(明确给出了 DFlash 衰减函数的 γ=7\gamma=7),并给出了一份完整的训练开销表(表 D),附有具体的单步耗时和显存数字——这种做法对想要复现该工作的人来说是难得的良好实践,能帮助他们把自己的数字与论文报告的训练成本做对照检验。