Not-a-Bandit: Provably No-Regret Drafter Selection in Speculative Decoding for LLMs
Hongyi Liu, Jiaji Huang, Zhen Jia, Youngsuk Park, Yu-Xiang Wang
ICLR'26
cs.LG
2025-10-23
HedgeSpec 利用投机解码的验证步骤免费估出每个草稿模型的接受长度,把选草稿从试错变成全信息在线学习,Qwen-3-32B 吞吐比 EAGLE3 高近一倍。
投机解码(speculative decoding)是加速大模型推理的常规手段:让一个小型「草稿模型」先猜接下来几个 token,大模型(目标模型)用一个并行的前向把它们一次性验证完。猜中的 token 等于省掉一次大模型前向,猜得越准加速越多。
麻烦在于,没有哪个草稿模型能在所有场景都贴合目标模型。针对 Python 微调的草稿在 SQL 上拉胯,针对医学问答的草稿做不好摘要。选错草稿,目标模型会把它的猜测几乎全否掉,投机这一步就白做了。已有的解法 BanditSpec 把「选哪个草稿」当成多臂老虎机(bandit)问题:你只能观测到被选中那个草稿的表现,所以必须花钱去探索(去试那些还没把握的草稿),而草稿池越大,这笔探索成本涨得越狠。
这篇的重新切题是:投机解码的验证步,本身就是一个全信息预言机。目标模型在验证一段 token 时,会暴露自己对下一个 token 的真实概率分布。拿这个分布做反事实推算,就能估出任何一个草稿在这一段上的表现,而不只是你实际跑的那个。Theorem 3 把这件事写死:一条被验证的轨迹,就能给出每个草稿接受长度的无偏估计,对目标模型一个额外 query 都不用发。
于是这个问题从 bandit(部分反馈)变成了全信息在线学习。HedgeSpec 跑一个 NormalHedge 指数加权在线学习器,用上面的反事实损失更新每个草稿的权重。它的后悔值是 O(√(T·log N)),对草稿数 N 是对数级,而 bandit 方法对 N 是多项式级。把草稿池翻倍,HedgeSpec 几乎不掉性能,EXP3/UCB 这类方法会明显下滑。
几个设计选择,作者都给了理由:
开销是有的,但很轻:评估一个草稿大约是一次目标前向的 1/25(实测 2.5 ms 对 75.7 ms),还能并行。多接受一个 token 的收益,就够抵掉串行评估约 25 个草稿的成本。
三个目标模型、每个配 7 个领域专用草稿(Python、数学、生物、化学、MedQA、CNN/DM 摘要、SQL),对照 EAGLE3、BanditSpec(EXP3/UCB)和静态 BERT 路由器:
| 目标模型 | 方法 | 平均接受 token | 平均吞吐(token/s) |
| LLaMA-3.1-8B-IT | EAGLE3 | 5.69 | 74.34 |
| LLaMA-3.1-8B-IT | HedgeSpec | 7.15 | 90.41 |
| Qwen-3-8B | EAGLE3 | 4.23 | 47.53 |
| Qwen-3-8B | HedgeSpec | 6.37 | 69.44 |
| Qwen-3-32B | EAGLE3 | 2.88 | 20.76 |
| Qwen-3-32B | HedgeSpec | 6.21 | 40.41 |
折成吞吐提升:LLaMA-3.1-8B 约 21.6%,Qwen-3-8B 约 46.1%(SQL 单域 83.7%),Qwen-3-32B 约 94.7%。草稿池越大,HedgeSpec 越稳,bandit 方法越垮。
分布漂移是另一面。离线 BERT 路由器一碰到措辞变化的提示就大面积误路由(MedQA 上 98%、数学上 90%),HedgeSpec 靠运行时反馈自适应,相对静态路由器最高快 2.34 倍。
工程上,生产环境的提问本来就是混的:代码、数学、摘要、对话混着来,一个通用草稿盖不住。HedgeSpec 让你养一批领域专用草稿、上线时实时路由,而且免费。
更要紧的判断是:投机解码的验证步一直藏着一个全信息预言机,bandit 式探索在这里从头就是错的框。诚实地说,这个赢面有个前提,你手里得真有一批专用草稿可挑;只有一个通用草稿时,没有路由可言。