为什么投机采样严格无偏
本节把“目标分布不变”从一句口号还原成概率质量守恒。全文固定用 p = target、q = draft。
若 draft 采到 token x,目标认为 p(x)=0.2,draft 认为 q(x)=0.5。能否总是接受它,同时保持最终分布为 p?
1. 先只看一个位置
在固定前缀下,目标模型给出分布 p(x),draft 给出分布 q(x)。我们先从 q 采一个候选 x,再以如下概率接受:
若 q(x) ≤ p(x),draft 没有过度提出这个 token,候选总被接受。若 q(x) > p(x),只接受其中 p(x)/q(x) 的比例。于是 token x 经由“draft 且被接受”这条路径得到的概率质量恰好是:
这一步保留了 p 与 q 的重叠部分。总接受概率记为 β:
其中 TV(p,q)=½Σₓ|p(x)-q(x)| 是 total variation distance。draft 与 target 越接近,重叠越大,接受概率越高。
2. 拒绝后缺的到底是哪部分
接受路径已经给 token x 分配了 min(p(x),q(x))。要让最终质量达到 p(x),拒绝路径只能补:
所有 token 的缺口总和为 1-β,恰好等于拒绝事件的概率。因此拒绝后从如下修正分布采样:
拒绝后不能直接从原始 p 重采。接受路径已经占用了两分布的重叠质量;再从完整 p 采,会把重叠部分重复计数。residual distribution 只补 draft 相对 target 欠缺的部分。
3. 用三个 token 手算
| token | target p | draft q | 接受率 min(1,p/q) | 接受路径质量 min(p,q) | 未归一化缺口 (p−q)+ |
|---|---|---|---|---|---|
| A | 0.50 | 0.60 | 5/6 | 0.50 | 0.00 |
| B | 0.30 | 0.10 | 1 | 0.10 | 0.20 |
| C | 0.20 | 0.30 | 2/3 | 0.20 | 0.00 |
β = 0.50+0.10+0.20 = 0.80,所以拒绝概率是 0.20。所有缺口都在 B 上,归一化后的 p′(B)=1。最终概率:
4. 自己改分布
修改下表中的 p/q,每列必须合计为 1。观察接受率、residual 和最终质量。
| token | p | q | 候选被接受概率 | 拒绝后的 p′ | 最终概率 |
|---|---|---|---|---|---|
| A | |||||
| B | |||||
| C |
5. 一行证明必须会重建
对任意 token x₀,最终得到它的事件只有两条互斥路径:
代入 p′:
这就是分布保持的全部核心。它对 q 的质量没有要求:draft 可以很差,正确性仍成立;差的 q 只会降低接受率并拖慢系统。
6. 从一个位置扩展到 γ 个位置
draft 先自回归产生 y₁…yγ,同时保存每个位置真正用于采样的 qᵢ。目标模型沿同一候选前缀一次得到 p₁…pγ+1。然后从左到右:
accepted = 0
for i in 1..γ:
r ~ Uniform(0, 1)
if r < min(1, p_i(y_i) / q_i(y_i)):
accept y_i
accepted += 1
else:
z ~ norm(max(p_i - q_i, 0))
emit accepted prefix + z
stop this iteration
if accepted == γ:
z ~ p_(γ+1)
emit y_1..y_γ + z
单位置证明可在每个仍然有效的条件前缀下重复应用,所以整个输出序列与直接从 target p 自回归采样具有相同分布。首拒后停止,是因为后续 pᵢ/qᵢ 的条件前缀已经改变。
7. sampling processor 放在哪里
temperature、top-k、top-p、min-p 等策略先把 raw logits 变换并归一化为实际采样分布,然后接受公式才作用于这些分布。若 target 与 draft 使用的处理规则不同,也要保留各自实际的 p 与 q;不能拿未处理 logits 或只比较 argmax 来替代概率比。
| 模式 | 验证含义 | 正确性目标 |
|---|---|---|
| 随机采样 | 按 min(1,p/q) 接受,拒绝时按 residual 修正 | 最终序列分布与 target sampler 相同 |
| greedy / temperature 0 | 候选等于 target argmax 才接受,否则改为 target argmax | 最终 token 序列与 target greedy 相同 |
| 只用概率阈值接受 | 工程启发式,不等于上述精确算法 | 通常会改变输出分布,必须单独评估质量 |
某 token 满足 q(x)=0、p(x)>0。算法会不会因为除零而丢失这个 token?
本节压缩
- 接受率
min(1,p/q)保留两分布的重叠概率质量。 - 总接受概率
β=Σmin(p,q)=1-TV(p,q)。 - 拒绝后从
norm((p-q)+)采样,只补 target 尚未获得的概率质量。 - 多 token 算法对每个仍有效的条件前缀依次应用单位置证明,因此保持整条序列分布。
精读 Leviathan et al., Section 2.3 与 Appendix A.1。注意 Chen et al. 使用了相反的字母约定:其论文中 target 是 q、draft 是 p。任何一步推导卡住,都可以把你的手算过程发给我逐行检查。