Cactus:基于约束接受度推测采样的自回归解码加速方法 Cactus: Accelerating Auto-Regressive Decoding with Constrained Acceptance Speculative Sampling
将推测采样重写为约束优化问题,用 KL 散度硬约束换取更高接受率。
前置知识
推测采样 (Speculative Sampling, SpS)
一种用小模型辅助大模型自回归解码的 draft-and-verify 框架:先用轻量 draft 模型 $p(\cdot|x_{<t})$ 自回归生成 $m$ 个候选 token,再用大型 verifier 模型 $q(\cdot|x_{<t})$ 一次并行验证;接受概率 $\phi(x_{t+i}|x_{<t+i}) = \min\{1, q(x_{t+i})/p(x_{t+i})\}$,拒绝时按 $g \propto (q-p)_+$ 重新采样。Chen et al. 2023 证明该方法输出分布严格等价于 verifier,因此能保持生成质量。
Cactus 的整个分析都是建立在 SpS 的形式化基础上,读者必须理解 draft-verify 流程以及 acceptance rate $\phi$、recover distribution $g$ 的作用,否则看不懂 Observation 1、Theorem 2 的证明思路。
f-散度 (f-divergence)
一族衡量两个概率分布距离的函数,定义 $D_f(h\|q) = \sum_i q(i) f(h(i)/q(i))$,其中 $f$ 是凸函数且 $f(1)=0$。特例包括 KL 散度($f(t)=t\log t$)、$\chi^2$ 散度($f(t)=(t-1)^2$)和总变差距离。Cactus 使用 KL 散度作为约束指标。
Cactus 的核心公式 (5) 正是 $D_f(h\|q) \leq \delta$——用 f-散度把"与 verifier 多接近"量化成一个可调的超参数 $\delta$,是连接理论与实践的桥梁。
典型接受采样 (Typical Acceptance Sampling, TAS)
Cai et al. 2024 提出的方法,通过熵驱动的启发式接受更多 draft token。具体是用信息量阈值(surprisal)来判断 token 是否"足够典型",放行那些 verifier 认为合理但 draft 过于自信的 token。Proposition 4 指出 TAS 实际上隐式求解了一个以交叉熵为目标函数的优化问题。
TAS 是 Cactus 的最重要 baseline,论文花了一整节(2.2、Proposition 4)证明 TAS 缺乏显式散度控制,会把分布推向熵为零的退化点,是 Cactus 要解决的核心痛点。
约束凸优化 (Constrained Convex Optimization)
在凸可行域上极大化/极小化凸目标函数。Cactus 把每个 token 的采样问题写成 (3)-(5) 的形式:目标 $\max_h \min\{h_n/p_n, 1\}$,约束 $h \in \Delta_{|V|-1}$ 且 $D_f(h\|q) \leq \delta$。Lemma 7 用 Jensen 不等式证明其解具有闭式结构。
这是把"接受率 vs 分布保真"的工程权衡第一次变成可证明的数学问题——Theorem 2 的闭式解和 Theorem 3 的全局散度上界都依赖此框架。
平均接受长度 (Average Acceptance Length, AL)
每一步 draft-and-verify 循环中实际被接受的 token 数的期望,记作 $\mathrm{AL}_m$(共 draft 了 $m$ 个)。例如 $m=20$ 时 SpS 的 $\mathrm{AL}_{20}=5.44$,意味着平均每 20 个 draft token 有 5.44 个被接受。
AL 是评估推测采样加速效果的核心指标,越大代表 verifier 被调用的频率越低、解码越快;论文的 Table 1、Figure 3 都以它作为吞吐代理指标。
研究动机
自回归大语言模型每生成一个 token 都需要一次 memory-bound 的前向计算,成为推理吞吐的主要瓶颈。推测采样 (SpS) 通过小模型 draft + 大模型 verify 的范式缓解了这个问题,但 SpS 严格要求输出分布与 verifier 模型 $q$ 严格等价——任何在 $q$ 看来"概率偏低"的 token 都会被拒绝,哪怕在 top-$k$、temperature 等常用采样设置下这种偏差完全可接受。在真实推理场景(如 GSM8K、IFEval 上的 5-shot/CoT 任务)中,verifier 可能为某个正确但罕见的 token 赋一个很小的概率,导致 draft 提案被频繁拒绝,浪费了草稿模型的算力。Cai et al. 2024 提出的典型接受采样 (TAS) 试图用熵启发式解决这一痛点,在 Table 1 中 TAS 把 GSM8K 的 $\mathrm{AL}_{20}$ 从 5.44 提升到 7.23、把拒绝率降低 35%,看似有效。然而论文通过 Proposition 4 证明 TAS 实际上隐式求解的是最小化交叉熵 $H(h,q) = D_{KL}(h\|q) + H(h)$,由于 $H(h)$ 项鼓励 $h$ 退化成确定性分布(熵为 0),TAS 会显著扭曲 verifier 的输出分布——Table 1a 中 GPQA 任务的 SpS 得 42.93、TAS 只得 38.89,验证了这种分布在 verifier 编码关键信息时会导致语义漂移和质量下降。
本文的目标是本文的目标是设计一种推测采样算法,在保证生成质量不退化的前提下,提高 draft token 的接受率。具体的:(1) 给"接受率与分布保真度的权衡"一个严格的数学描述,使其不再依赖启发式阈值;(2) 让超参数 $\delta$ 显式控制与 verifier 分布的偏差上限,用户能根据任务需求自由调节加速-质量曲线;(3) 算法必须是 training-free 的,并且不显著增加 per-token 的解码开销(因为"加速方法本身不能成为新的瓶颈")。
与已有工作不同的是,Cactus 的切入角度是"把推测采样重新表达为约束优化问题"。具体地,Observation 1 先把 SpS 推广成 Algorithm 1 的统一形式:给定任意目标分布 $h$,最优接受率 $\phi^* = \min\{h/p, 1\}$、recover 分布 $g$ 也有闭式表达,这说明我们可以动态挑选 $h$ 而非固定为 $q$。基于此洞察,作者把 $h$ 本身作为优化变量,目标设为最大化"被 draft 命中的 token $n$ 的接受概率" $\min\{h_n/p_n, 1\}$,约束设为 $D_f(h\|q) \leq \delta$($f$-散度硬上界)。Theorem 2 给出闭式解,Theorem 3 证明整体算法的散度也有 $\Gamma(\delta) \leq \delta_{alg}$ 的上界保证。这一框架同时还能解释 TAS 是交叉熵目标下的特例(Proposition 4),并指出 TAS 因熵项的存在必然退化为低熵解。区别于现有方法,Cactus 是第一个把"可控接受率"作为显式约束来求解的算法,理论上有散度上界,实践上仅需读出 token $n$ 处的概率、不需要遍历整个词表(相比 TAS 节省了内存访问)。
核心方法
Cactus 的方法分三步走。第一步是形式化(Algorithm 1 + Observation 1):把 SpS 推广为"给定 draft 模型 $p$,寻找 acceptance rate $\phi$ 和 recover distribution $g$ 来精确产生任意目标分布 $h$"的统一形式,得到 $\phi^* = \min\{h/p, 1\}$ 的最优接受率。第二步是重新建模(公式 3-5 + Theorem 2):把目标分布 $h$ 本身当作优化变量,构建约束优化 $\max_h \min\{h_n/p_n, 1\}$ s.t. $D_f(h\|q) \leq \delta$,并用 Lemma 7 推导出闭式解——把 $h_n$ 提升到 $\gamma^* \geq q_n$(给被 draft 命中的 token 加 bonus),其余 token 按 $h_i = (1-\gamma^*) \cdot q_i/(1-q_n)$ 比例缩小。第三步是近似(Corollary 5):选定 $f$ 为 KL 散度后 $\Phi(\gamma)$ 是超越方程无法闭式求解,作者用二阶 Taylor 展开在 $\gamma_0 = q_n$ 处近似,得到 $\gamma^* \approx \min\{q_n + \sqrt{2\delta q_n(1-q_n)}, 1\}$——只需读 token $n$ 的 verifier 概率 $q_n$ 和超参 $\delta$。Theorem 3 进一步证明整体算法的散度上界 $\Gamma(\delta)$ 随 $\delta$ 单调非降,$\delta=0$ 时退化为 0,确保用户对加速-质量的调节是受控的。
Cactus 的核心创新在于把"对 verifier 分布的偏差"建模为显式约束 $D_{KL}(h\|q) \leq \delta$,从而在"接受率"和"分布保真度"之间提供严格的、有理论保证的旋钮。这与现有方法形成本质区别:(1) SpS 严格等价于 verifier($\delta=0$),无法利用"近似等价即可"的实用灵活性;(2) TAS 用熵启发式,缺乏显式散度上界,且如 Proposition 4 所示会因熵项把分布推向低熵退化点;(3) EAGLE、Medusa 等方法通过额外训练改进了 draft 模型本身,但仍沿用 SpS 的接受规则,没有触碰"接受率 vs 保真度"的核心权衡。Cactus 给出的是一个解析解 $\gamma^* = q_n + \sqrt{2\delta q_n(1-q_n)}$——直观上,给定 $\delta$ 时 verifier 越自信($q_n$ 越大)能拿到的 bonus 越多,且 bonus 在 $q_n=0.5$ 时达到最大;这一曲线与 TAS 的熵阈值完全不同,TAS 倾向于无差别接受任何"低信息量"的 token,而 Cactus 只对被 draft 实际命中的 token 加 bonus,保留了 verifier 分布的"形状"。
方法步骤详情
Cactus 的推理步骤如下:(1) 初始化阶段:维护 draft 模型 $p$、verifier 模型 $q$、超参 $\delta \geq 0$(默认 $\delta=0.75$ 或 $1.0$)。(2) Draft 阶段:与标准 SpS 一致,用 $p$ 自回归生成 $m$ 个候选 token $x_t, x_{t+1}, \dots, x_{t+m-1}$,每个位置独立采一个 $u_i \sim U(0,1)$。(3) 验证阶段:对每个 draft token $n$,用 verifier 计算 $q(n|x_{<t+n})$,然后套用 Cactus 公式 $\gamma^* = \min\{q(n) + \sqrt{2\delta q(n)(1-q(n))}, 1\}$,把"是否接受"的判定从 $\min\{q/p, 1\}$ 修改为 $\min\{\gamma^*/p, 1\}$——注意 $\gamma^* \geq q(n)$,因此接受率严格不小于 SpS。(4) Recover 阶段:若被拒,按 Theorem 2 推出的 $g \propto (\gamma^* - p\cdot p/q)_+$ 形式重采样(实际实现中利用 Observation 1 的等价闭式)。(5) 循环:找到第一个被拒的索引 $c$,接受 $x_t, \dots, x_{t+c-1}$,从 $g$ 采样 $x_{t+c}$,进入下一轮。所有操作只涉及 token $n$ 一个标量($q_n$)的查表和常数级算术,不需要读完整词表分布。
技术新颖性
技术新颖性体现在三个层面。理论层面,这是首次把推测采样显式建模为带 f-散度约束的凸优化问题,Observation 1 把"任意目标分布的最优接受率"抽象成统一形式,Theorem 2 给出闭式解,Theorem 3 证明整体散度有上界 $\Gamma(\delta)$,Proposition 4 还顺带解释了 TAS 的隐式假设——这种"用同一框架统一 SpS、TAS 和 Cactus"的视角是新的。算法层面,Taylor 近似 $\gamma^* = q_n + \sqrt{2\delta q_n(1-q_n)}$ 是一个只读 token $n$ 概率的 O(1) 闭式操作,远比 Mentored decoding 的数值搜索高效(Table 3 中 Mentored 反而比 SpS 慢 20%);相比 TAS 需要对整个词表计算 surprisal 也节省了大量内存访问。实践层面,论文在 12 个模型 × 6 个 benchmark 上验证了 Cactus 的一致优越性,并发现一个有趣现象——Cactus 在 IFEval 和 GPQA 上经常超过 verifier 模型本身 2 个标准差,作者在 Appendix D 推测这是"健康集成效应":把 $p$ 和 $q$ 的分布融合比单独用 $q$ 反而更鲁棒。
实验结果
实验在 GSM8K(1.3K 数学题,5-shot)、IFEval(500 指令遵循)和 GPQA diamond(~200 博士级科学题,CoT)三个基准上展开,主测试床为 Qwen 3 0.6B+8B、0.6B+14B、1.7B+32B 三对 draft-verifier 组合,使用 top-$p$=0.95、top-$k$=20、$T$=0.6 的官方推荐配置。Table 1a 显示在 0.6B+8B 设置下,Cactus $\delta=1.0$ 在 $m=20$ 时把 GSM8K 的 $\mathrm{AL}_{20}$ 从 SpS 的 5.44 提升到 7.61(+40%)、拒绝率从 100% 降至 61%,同时准确率从 84.46 略升到 86.43;在 GPQA 上 SpS 得分 42.93、TAS 跌到 38.89(典型分布漂移问题),而 Cactus 保持 39.90。Table 1b 的 0.6B+14B 配置下,GPQA 的 Cactus 0.75 居然达到 44.95-45.46,比 SpS 的 39.39-40.91 高出 5 分以上——证明 Cactus 在 verifier 编码细粒度信号的任务上不仅不损失,反而获益。Figure 1 把 AL 标准化到 $\sigma$ 后可视化,发现 Cactus 在大多数子图里稳定位于 verifier 的 $-1\sigma$ 阈值之上,而 TAS 经常跌破红线。Figure 3 的 wall-clock 测试(A100 40GB + vLLM)显示 Cactus 1.0 在 0.6B+14B 上 $m=10$ 时实现约 1.9× 端到端加速。Figure 4 扩展到 Gemma 2B+9B、DeepSeek R1 1.5B+7B、LLaMA 1B+8B 三组异构模型对,Cactus 全面匹配或超过 TAS。Table 2 的 1.7B+32B 大规模测试中 Cactus $\delta=1$ 在 IFEval 上取得 85.21(vs SpS 83.36、TAS 83.73),GPQA 上 41.92(vs 40.40),验证了方法在 32B 规模下仍然有效。Table 4 的 Spec-Bench 全面测试(MT-Bench/翻译/摘要/QA/数学/RAG)上 Cactus 平均 1.88× 加速、$\mathrm{AL}_{10}=3.29$(vs SpS 3.20)。Table 5 的 drafter 规模消融显示 0.6B/1.7B/4B drafters 配合 14B verifier 时 $\mathrm{AL}$ 依次为 5.44/6.78/7.76,准确率都维持在 92.5% 以上,说明方法随 draft 模型增强持续受益。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| GSM8K (5-shot) | strict-match 准确率 + AL_20 + 拒绝率 | Cactus δ=1.0, m=20, 0.6B+8B: Score 86.43, AL=7.61, Rej=-39%;0.6B+14B: Score 92.87, AL=7.00 | SpS 0.6B+8B: 84.46, AL=5.44;TAS 0.6B+8B: 85.51, AL=7.23;Verifier 0.6B+8B: 84.31 | 在 0.6B+8B m=20 上 Cactus 比 SpS 准确率高 1.97、AL 高 2.17;比 TAS 准确率高 0.92、AL 高 0.38 |
| IFEval (prompt-level-strict) | strict-match 准确率 + AL_20 + 拒绝率 | Cactus δ=0.75, m=20, 0.6B+14B: Score 86.69, AL=3.76;Cactus δ=1.0, m=10, 1.7B+32B: Score 85.21, AL=4.47 | SpS 0.6B+14B m=20: 85.03, AL=2.74;TAS 0.6B+14B m=20: 85.03, AL=3.49;Verifier 0.6B+14B: 85.09 | Cactus 0.75 m=20 比 SpS/TAS 准确率高 1.66/1.66,AL 高 1.02/0.27 |
| GPQA diamond (CoT) | strict-match 准确率 + AL_20 + 拒绝率 | Cactus δ=0.75, m=20, 0.6B+14B: Score 45.46, AL=6.46;0.6B+8B m=20: Score 40.01, AL=6.89 | SpS 0.6B+14B m=20: 40.91, AL=3.84;TAS 0.6B+14B m=20: 40.40, AL=6.41;Verifier 0.6B+14B: 40.07 | Cactus 0.75 m=20 在 GPQA 上比 SpS 高 4.55 分(这是很难的题)、比 TAS 高 5.06 分,是论文里最戏剧性的结果 |
| Spec-Bench (6 个子任务) | 端到端加速比 (vs AR) | Cactus δ=1, 0.6B+14B: Overall 1.88×, MT-Bench 2.09×, Translation 1.40×, Summarization 2.04×, QA 1.95×, Math 1.86×, RAG 1.92× | SpS: Overall 1.81×, MT-Bench 2.01×, Summarization 1.92× | Cactus 比 SpS 在 6 个子任务上全部胜出,AL_10 从 3.20 升到 3.29,整体加速提升 0.07× |
| GSM8K 1.7B+32B 扩展实验 | 准确率 + AL_10 | Cactus δ=1, m=10: GSM8K 94.40, IFEval 85.21, GPQA 41.92;AL 分别为 7.13/4.47/6.36 | SpS: GSM8K 95.30, IFEval 83.36, GPQA 40.40;TAS: GSM8K 94.10, IFEval 83.73, GPQA 40.40 | IFEval 比 SpS 高 1.85、GPQA 比 SpS 高 1.52,且 AL 在三个任务上都是最高 |
局限与改进
作者在 Appendix D 中坦承了几个限制:(1) 评估规模上限 32B,更大的 backbone(如 70B+)的 scaling 行为尚未验证,可能需要分布式推理和系统级优化;(2) Cactus 是 training-free 方法,不利用 LoRA 微调 draft、verifier 校准、序列级蒸馏等手段进一步提升 proposal 质量;(3) Draft-and-verify 框架本身的额外内存开销(draft 模型权重 + 两份 KV cache)没有被显式优化,量化、权值共享、cache 复用等技术可能进一步降低 footprint;(4) $\delta$ 的最优值与任务、模型相关,论文报告 $\delta \in [0.75, 1.0]$ 在大多数场景下表现良好,但缺乏自动调参机制,$\delta$ 太大会导致 Table 6 案例中展示的"过度自由、reasoning 冗长且错误"的问题。本论文之外的观察是:Cactus 仍要求 draft 和 verifier 使用同一 tokenizer(同家族模型如 Qwen 3 0.6B+14B),跨家族的 draft-verifier 配对(如 LLaMA draft + Qwen verifier)未在主实验中涉及;且 Cactus 的散度约束只在 f=KL 时给出 Taylor 近似,对于其他 f-散度($\chi^2$、Hellinger)是否同样高效仍待验证。
独立分析的弱点
独立分析 Cactus 的弱点及改进方向:(1) $\delta$ 是全局超参而非 per-token 自适应——论文用同一个 $\delta=0.75$ 或 $1.0$ 处理所有位置、所有层,但实际上 verifier 在不同位置的置信度差异巨大(GPQA 推理链上关键步骤的 $q_n$ 可能很尖锐,无关的承接词 $q_n$ 可能很平坦),理想做法是基于 $q_n$ 和 $H(q)$ 自适应地调节局部 $\delta$。(2) 散度上界是关于单步分布的,但真实生成是长序列——Theorem 3 只证明 $\delta$ 控制每步的瞬时散度,没有给出整体序列分布的 Wasserstein 距离或 TV 上界,长链生成下误差是否累积(compounding error)需要进一步分析。(3) Cactus 没有改变 draft 模型本身,对 draft 质量差的场景(如 0.6B draft 配合 32B verifier)加速效果受限,Table 5 显示 1.7B draft 时 AL=6.78、4B draft 时 AL=7.76,drafter 容量是新的瓶颈。(4) 论文在推理时只考虑 top-$p$/top-$k$ 截断,min-$p$、$\eta$-sampling、contrastive search 等更复杂的采样策略下 Cactus 公式是否仍然成立未验证。改进方向:把 $\delta$ 改成 $(1-H(q)/\log|V|) \cdot \delta_0$ 这样的自适应形式;用 sequential f-divergence bound 替代单步上界;把 Cactus 与 EAGLE-2/3 等更好的 drafter 结合做正交叠加。
未来方向
作者在 Appendix D 列出了 4 个方向:(1) 模型规模扩展到 70B+、研究 scaling laws 与分布式推理;(2) 把 Cactus 与 LoRA 微调 draft、verifier 校准、序列级知识蒸馏 (Wen et al. 2023 的 f-散度方法) 结合进一步提升 proposal 质量;(3) 通过量化、权值共享、cache 复用、selective offloading、early-exit 降低 draft-and-verify 的额外内存占用;(4) 探索 Cactus 带来的"健康集成效应"——Table 1b 中 Cactus 在 IFEval/GPQA 上比 verifier 高 2$\sigma$ 的现象是否可被显式建模为集成学习。基于结果可延伸的方向还包括:把 Cactus 推广到多模态 LLM(视觉 token 的接受是否需要不同的 $\delta$)、把 Cactus 与 tree-based drafting (SpecInfer) 结合做 tree-aware 的散度约束、以及把 Theorem 3 的 $\Gamma(\delta)$ 函数给出更紧的解析上界。
复现评估
复现评估:论文开源了代码(https://github.com/MANGA-UOFA/Cactus)并明确列出了 12 个模型的 HuggingFace 链接和 3 个数据集的链接(GSM8K、IFEval、GPQA),复现门槛很低。主要实验使用 Qwen 3 0.6B+8B 单卡即可跑通,A100 40GB 可以完成 0.6B+14B 和 1.7B+32B 的扩展实验(Figure 3 在 A100 上测得);论文提到 HuggingFace Transformers 框架也能跑通 Spec-Bench 的 1.88× 加速,但 vLLM 能获得更佳性能。代码层面没有报告特别的实现难点,二阶 Taylor 近似 $\gamma^* = q_n + \sqrt{2\delta q_n(1-q_n)}$ 只涉及一次开方和加法,O(1) per token。难点主要在 (1) 复现 Theorem 2-3 的证明需要消化附录 A 的 6 个子证明(每个约 1-2 页);(2) 不同模型对(Qwen/Gemma/DeepSeek/LLaMA)需要逐个对齐 tokenizer 和 chat template;(3) 评测时 GPQA 的 flexible-extract 正则和 IFEval 的 prompt-level-strict 正则需要严格按照 Qwen/Gao 2024 的规范实现。整体复现难度为中等偏下。
论文图表
伪代码,循环结构:t=1 初始化 → 反复用 draft 模型采样 m 个 token + 各自均匀分布随机数 → 用 acceptance rate ϕ 找到第一个被拒索引 c → 从 recover 分布 g 重采样 x_{t+c} → 推进 t ← t + c + 1。
这是整篇论文的骨架:Observation 1 证明 Algorithm 1 配合最优的 ϕ 和 g 可以精确产生任意目标分布 h,从而引出把 h 当作优化变量的核心想法。不读懂 Algorithm 1 就无法理解 Cactus 与 SpS 的关系。