直接回答:解码是逐 token 串行的,小步快跑很浪费。投机采样用一个便宜的小模型(draft model)一口气猜 k 个 token,再由大模型(target model)一次前向并行验证这 k 个位置:从前往后找到第一个大模型分布不认可的位置,之前的全部接受,该位置用大模型的正确 token 替换,之后的丢弃重猜。关键在于验证是用大模型真实分布做的拒绝采样,数学上可证明输出分布与纯大模型解码完全一致,所以"无损"。

展开解析:收益来自把 k 次串行大模型前向变成一次并行前向加一次小模型前向——大模型并行验证 k 个 token 与生成 1 个 token 的耗时几乎相同(解码是带宽受限,算力有空闲)。实际加速比取决于接受率:draft 与 target 分布越接近、文本越套路化(代码、模板文本接受率高),一次接受的 token 越多,常见 1.5~2.5 倍加速。变体包括:Medusa 给大模型加多个预测头自产自销,EAGLE 在特征层面起草,还有无 draft 模型的 n-gram 查表法(Prompt Lookup)。注意采样温度高时接受率下降,加速比随之缩水。

追问方向:为什么解码阶段并行验证不增加多少耗时?接受率如何统计与调优?batch 很大时投机采样还划算吗?

(约 440 字)