(2026|NAVER AI,推测解码/SD,置信门控,Loop-aware Training,用更多 draft 前向换更少 target 前向)DLoop:循环推测解码
DLoop: Looped Speculative Decoding论文地址https://arxiv.org/abs/2610.07659项目页面https://github.com/naver-ai/DLoop学术交流群922230617目录1. 背景推测解码的效率瓶颈2. 核心思想让一次验证覆盖多个 drafting stage3. 关键挑战后续 drafting stage 缺少 target 隐状态4. Loop-aware Training让 draft 模型适应跨 stage 的隐状态链4.1 为什么直接推理会“分布偏移”4.2 采样训练为什么能解决偏移4.3 一个类比4.4 为什么不能只靠 “采样” 而不改 Loss5. 实验结果5.1 主结果DLoop 对现有 draft 模型普遍有效5.2 消融Loop 和 Loop-aware Training 缺一不可5.3 与 Adaptive Draft Length 方法对比5.4 与 Tree Verification 结合5.5 加速来源用更多 draft 前向换更少 target 前向5.6 并发 Serving 下的表现1. 背景推测解码的效率瓶颈推测解码Speculative Decoding, SD已成为大模型推理加速的标配技术用一个轻量级草稿draft模型快速生成多个候选 token再由目标target模型并行验证从而在单次前向传播中产出多个 token。【图中 ③已接受大括号画长了已拒绝括号画短了。只有 sleeping 被接受其他的拒绝。】然而论文揭示了 SD 存在效率瓶颈标准 SD 每轮 draft 后立即验证但 target 模型经常接受全部 draft token。此时验证本身成为不必要的开销——既然 draft 模型很自信为什么不继续draft2. 核心思想让一次验证覆盖多个 drafting stageDLoop 将标准 SD 的「draft→verify→draft→verify」交替结构改为「draft→draft→…→verify」的循环结构。关键在于一个置信度门控函数其中k 表示 draft 模型M_d中一个 block 包含的 token 数s 表示 drafting stagel_i 表示 M_d 分配给 token ^x_i 的 log 概率c_s 表示置信度分数。只要最新 block 的置信度分数 c_s 超过阈值 g就继续下一个 drafting stage否则停止循环由 target模型一次性验证所有累积的 draft token。直观理解log 概率之和等价于「整个 block 被全盘接受的联合概率」。由于 log 概率非正任何一个位置不确定都会拉低总分这与 SD「一旦拒绝就丢弃后续所有 token」的接受规则天然对齐。3. 关键挑战后续 drafting stage 缺少 target 隐状态标准 SD 中draft 模型依赖 target 模型对 prefix 计算的隐状态 h_{1:t-1}。但在循环中第二、第三个 drafting stage 的输入 token 尚未被验证target 模型自然没有它们的隐状态。DLoop 的解法用 draft 模型自己的隐状态 h̃ 替代。具体地第 s 个 drafting stage 的输入为即prefix 部分仍用 target 隐状态但后续位置使用 draft 模型在前几个 stage 中计算出的最终层隐状态。每个 drafting stage 只需处理 k 个新位置。4. Loop-aware Training让 draft 模型适应跨 stage 的隐状态链问题来了在 DLoop 的第二个及之后的 drafting stage 中target 模型没有验证这些 token因此没有计算它们的隐状态。DLoop 只能用 draft 模型自己产生的、跨多个 stage 累积的隐状态链h̃作为输入。标准 SD 训练中draft 模型没有被训练成「在跨多个 stage 累积的、未验证的、自己的隐状态链条件下继续预测」。直接推理会导致分布偏移本质上是 exposure bias。训练方案每个训练样本随机采样额外 drafting stage 数 S−1∼Uniform{1,…,N}覆盖各种循环深度。第一 stage 用 target 隐状态 h后续 stage 用 draft 自己产生的隐状态链h̃总计 S stage。损失只监督第一 stage 和最后一 stage中间 stage 不计算 logits只提供隐状态链。这样做是因为中间 stage 预测更近的 block更容易最后一 stage 预测最远的 block最难把监督集中在最难的部分。关键区别训练时h̃是在 ground-truth token 下计算的推理时h̃是在 draft 自己生成的 token 下计算的。因此该训练方案并没有完全复现推理时的噪声分布而是让模型在结构上适应跨 stage 隐状态链见 Sec. 2.3.2并学会在含噪条件下预测正确 token。这大幅缩小了分布偏移但没有完全消除它。关键结论loop-aware training 单独使用只带来 7% 的指标变化但与循环门控结合后增益超过两者之和——说明训练是在「为循环做准备」而非单纯提升单 stage 质量。4.1 为什么直接推理会“分布偏移”标准 draft 模型的训练数据是Target 模型的隐状态 h_{1:t−1} 真实 token。但在 DLoop 的第二个及以后的 drafting stage 中Target 模型并没有验证这些 token因此没有计算它们的隐状态。DLoop 只能用 draft 模型自己产生的、跨多个 stage 累积的隐状态链h̃_{t:t(s-1)k-1}作为输入。如果直接推理Autoregressive draft标准训练中只在单个 block 内见过自己的隐状态链长最多 k且每个新 block 都重置到 target 的干净隐状态。它没有见过跨多个 stage 累积的h̃链。Parallel draft标准训练时一次前向输出整个 block完全不把自己的隐状态作为后续输入。h̃作为输入对它来说是全新的。这相当于让一个只学过在 “标准跑道” 上开车的人突然去 “泥泞山路” 上开。模型没见过这种输入分布因此输出会变得不可靠甚至崩溃。4.2 采样训练为什么能解决偏移DLoop 的 loop-aware training 并不是简单地 “做采样”而是在训练过程中刻意模拟推理时的输入结构。具体逻辑如下第一步随机采样循环深度 S∼{1,…,N}。这保证了模型在训练时见过各种长度的循环从 1 到 N。如果只训练固定深度模型就只会适应那一种特定的误差累积程度无法泛化。第二步在训练中真实地 “跑循环”。训练时第一 stage 用 target 的 h第二 stage 开始强制使用 draft 模型自己前几个 stage 产生的累积隐状态链h̃。此时训练时的输入结构与推理时对齐但要注意训练时h̃是在ground-truth token条件下计算的推理时h̃是在draft 模型自己生成的 token条件下计算的。因此两者在数学形式上结构一致但 token 来源不同分布并未完全一致。第三步用 Loss 强制模型学会纠错第一项保证基础能力不退化。第二项只监督最后一个 stage非常关键它强迫 draft 模型在已经看过自己前几个 stage 产生的、带有误差的隐状态链之后依然要预测出正确的 ground-truth token。这就教会了模型“即使我前面的隐状态有点脏我也要从中提取有用信息把后面的 token 预测对。”4.3 一个类比想象你在教一个学生做数学题标准训练你只给他看标准答案的解题步骤target h让他写出下一步。直接推理考试时你突然让他看自己上一题写错的步骤drafth̃他当然懵了。采样训练训练时你故意让他先自己做第一步然后把他自己写的第一步哪怕写错了遮住标准答案让他基于自己写错的步骤继续往下做。做错没关系你用最终的正确结果来纠正他。但这里也有一个细微差别训练时学生写错步骤后他继续做题时的 “笔迹特征”隐状态仍然是在知道正确答案的情况下产生的推理时则完全基于自己生成的内容。所以是接近但不完全一样。Loop-aware training 缩小了这个差距但没有彻底消除。4.4 为什么不能只靠 “采样” 而不改 Loss如果只是采样循环深度但 Loss 依然只监督第一 stage或者不把h̃作为输入那就没有意义。DLoop 的精髓在于它把 draft 模型自己的隐状态h̃作为了训练输入的一部分并且通过损失函数强制模型在这种 “含噪输入” 下依然能输出正确结果。这本质上是一种针对隐状态的Scheduled Sampling计划采样或DAgger思想的变体。5. 实验结果5.1 主结果DLoop 对现有 draft 模型普遍有效可以看到接受长度τ和速度spd都提升对 parallel draft 模型DFlashDominoDSpark同样有效不需要额外参数兼容公开权重。5.2 消融Loop 和 Loop-aware Training 缺一不可结论只开 loop接受长度提高但速度不一定提高因为额外 draft stages 增加耗时只训练两个指标变化小于 7%接近原始模型Loop Training每个设置都提升而且增益超过两者单独增益之和。Loop-aware training 的作用不是让单个 drafting stage 更强而是让 draft model 适应 loop 带来的额外 stages。5.3 与 Adaptive Draft Length 方法对比结论在 EAGLE-3 上这些方法最多把 speedup 提高约0.14×在 DSpark 上没有任何方法超过原始 draft model 的 speedupDLoop 在两个 draft 模型上都取得最高平均接受长度和 speedup。原因这些方法大多通过提前停止来减少 draft 长度对 parallel draft model提前停止只缩短验证不节省 draft stage 成本DLoop 允许完整 drafting stage 作为最小单位并决定是否再来一轮。5.4 与 Tree Verification 结合在树验证基础上DLoop 继续提升DFlash DDTreespeedup 再提升12%13%Domino DARTree再提升7%8%DSpark DARTree再提升22%25%。说明 DLoop 和 tree verification 是互补的Tree verification 在 “宽度” 上扩展候选DLoop 在 “长度” 上增加 drafting stages。5.5 加速来源用更多 draft 前向换更少 target 前向论文 Table 4 显示每个 loop 的时间随 S 增大而增加但 τ 增长更快因此每 token 时间从 S1 的 4.606.42 ms 降到 S≥5 的 0.682.97 ms验证次数减少7.6%34.1%。一个 verification 需要 target model 完整前向成本远高于一个 drafting stage。因此只要额外 draft 能减少足够多的 verification总体就更快。5.6 并发 Serving 下的表现论文还在 SGLang 下测试了并发吞吐低并发时DLoop 明显提升 throughput并发升高后收益逐渐减小DFlash DLoop 到 c8 仍有收益c32 略低于 DFlashDSpark DLoop 到 c16 仍有收益c32 时在 MATH-500 继续提升HumanEval 接近持平。原因高并发下 target model 逐渐成为 batch-bound额外 speculative work 会占用 batch capacity每个样本的 loop depth 不同会导致 ragged execution增加 padding 或调度开销。