跳到主要内容

采样与解码

从 greedy 到 nucleus 再到 speculative decoding,各采样策略的原理与适用场景

核心要点

  • Greedy 易陷重复,beam search 在 LLM 时代被 nucleus 取代
  • Temperature 仅 scale logits,不改变排序 (T<1 锐,T>1 平)
  • Top-k 固定大小不灵活,Top-p (nucleus) 动态大小是主流
  • p=0.95 是 Holtzman 2019 经典默认,重复率 0.36% 接近人类
  • Repetition penalty θ=1.1-1.3,太高误伤标点
  • Beam search perplexity 比 nucleus 低但更"机械",印证 likelihood-quality mismatch
  • Speculative decoding: draft 模型预测 K 个 → target 一次验证,2-3× 加速
  • Medusa:长出多预测头 + tree attention,无 draft 模型 2.83× 加速

名词定义

本篇共享名词在 8.1 总览 已定义 (Greedy / Temperature / Top-k / Top-p / Beam search / Speculative decoding)。本篇新引入:

名词定义
HUSEHoltzman 2019 提出的"Human Unified with Statistical Evaluation" 复合指标
Repetition penalty已出现 token 的 logit 除以 (或乘以) penalty 系数 θ,减少重复
Acceptance probabilitySpeculative decoding 中 target 模型接受 draft 模型预测的概率
Tree attentionMedusa 用的注意力机制,一次验证多分支预测路径

@tbl-sample-glossary 本篇新引入名词

从 logits 到 token: 5 个常见算法

核心问题:LM head 给出 $V$ 维 logits,怎么选下一个 token?业界用哪些算法?

5 个主流算法:greedy / temperature / top-k / top-p / beam,各自有典型场景,现代 LLM 默认 temperature + top-p

Greedy:每步 argmax

每步选概率最大的 token:

$$\begin{equation} x_t = \arg\max_v P(v \mid x_{<t}) \label{eq:sample-greedy} \end{equation}$$

优点:确定性强 (相同 prompt 总是相同输出)。

致命缺陷易陷重复循环。Holtzman 2019[1] 实测:

  • Greedy 重复率 28.94% (vs 人类 0.28%, 100× 重复)
  • 模型陷入"the the the..." 类循环

适用场景:结构化任务 (代码生成 / 翻译 / 数学),但不适合开放生成。

Temperature: scale logits

$$\begin{equation} P(v_k) = \frac{\exp(l_k / T)}{\sum_i \exp(l_i / T)} \label{eq:sample-temperature} \end{equation}$$
  • $T = 1$:原始 softmax
  • $T < 1$:分布锐,趋向 greedy (确定性更强)
  • $T > 1$:分布平,趋向均匀 (多样性更高)
  • $T \to 0$:等价 greedy
  • $T \to \infty$:等价均匀采样

业界典型

场景Temperature
OpenAI API 默认1.0
创意写作0.7-1.0
代码生成0.2-0.4
Reasoning (CoT)0.0-0.6

@tbl-sample-temperature 业界 Temperature 经验值

Top-k:仅在前 k 个采样

Fan et al. ACL 2018[2]:

  • 保留概率前 $k$ 大 token,其他 logits → $-\infty$
  • 在剩下 $k$ 个上重归一化后采样
  • $k$ 典型 50

缺陷:$k$ 是固定值,不灵活:

  • 上下文约束强 (如 "1 + 1 = ") 时,真正合理的回答可能只有 1-2 个,$k=50$ 把低质 token 也纳入
  • 上下文约束弱 (开放写作) 时,$k=50$ 可能截断过严,漏掉合理候选

Top-p (nucleus):动态大小

Holtzman ICLR 2020[1] 提出 nucleus sampling:

$$\begin{equation} \text{选最小} V^{(p)} \subseteq V \text{ 使 } \sum_{x \in V^{(p)}} P(x \mid x_{<t}) \geq p \label{eq:sample-top-p} \end{equation}$$
  • $p = 0.95$ 经典默认
  • $V^{(p)}$ 上重归一化后采样

直觉$V^{(p)}$ 是"最少 token 加起来覆盖 p 概率" 的集合,大小随分布形状动态变化

  • 分布尖 (上下文约束强):$V^{(p)}$ 可能只 1-3 个 token
  • 分布平 (开放生成):$V^{(p)}$ 可能 100+ 个 token

Holtzman 2019 实证:nucleus 优于 beam / top-k

GPT-2 实测:

算法HUSEPerplexity重复率
Greedy28.94%
Beam search0.851.4826.27%
Top-k k=400.946.881.78%
Nucleus p=0.950.9713.130.36%
Human1.012.380.28%

@tbl-sample-nucleus-ablation Holtzman 2019 GPT-2 实测 (HUSE / PPL / 重复率)

核心论点Beam search perplexity 低至 1.48 正是"过度确定" 的证明,说明 likelihood maximization 与 quality 是 fundamental mismatch (likelihood 最大化的句子是 "I I I I I" 这种不像人类说的话)。Nucleus p=0.95 取 HUSE 最高 0.97,重复率仅 0.36% 接近人类。

现代 LLM 的默认配置

核心问题:ChatGPT / Claude / Llama 实际用什么 sampling?

业界默认:temperature + top-p 组合,T ≈ 0.7-1.0, p ≈ 0.9-0.95

业界默认 (推测)

服务TemperatureTop-p
OpenAI API 默认1.01.0
OpenAI ChatGPT 推测0.7-1.00.95
Llama-3 推荐0.60.9
代码 Copilot0.20.95
创意 / 故事0.9-1.20.95

@tbl-sample-defaults 业界 sampling 默认 (公开或推测)

Repetition penalty:防重复

Keskar 2019 CTRL[3]:

  • 已出现 token 的 logit 除以 (或乘以) $\theta$
  • 正 logit 除以 $\theta$,负 logit 乘 $\theta$
  • $\theta$ 典型 1.1-1.3, HuggingFace 推荐 1.2

局限

  • Binary 惩罚,不感知"重复次数"
  • 过高 $\theta$ 会误伤空格 / 句号 / 标点 (它们也是"已出现")
  • 现代大模型用得越来越少 (训练数据多样性已足够防重复)

Beam search 在 LLM 时代为何被弃?

核心问题:Beam search 在 NMT 时代是黄金标准,为什么 LLM 时代不用?

Beam search 优化 likelihood,但 LLM 时代发现 high-likelihood 文本恰好是"机械化、单调、像机器人" 的——nucleus 更接近人类分布

Beam search 算法

  • 维护 b 条路径 (beam size = 4-16)
  • 每步对每条路径展开所有可能 token,选总 log probability 最高的 b 个
  • 最终选总 log probability 最高的完整序列

理论上找"最优 likelihood 序列",在 NMT 上效果好 (因为翻译有"标准答案")。

为什么 LLM 时代被弃

Holtzman 2019 揭示:

  • LLM 训练数据是人类文本,但人类文本不是 likelihood-maximizing 的
  • High-likelihood 序列恰好是"重复 + 单调"的模式塌缩
  • Beam search 输出"听起来正确但毫无生气"

Likelihood-quality mismatch is a fundamental mismatch, not a bug:这是 LLM 训练目标 (CLM) 的内在结果——优化 next-token likelihood 让"重复 + 安全" 模式概率高。

Beam search 现状

  • 开放式生成全面弃用 (ChatGPT / Claude / Llama 全用 nucleus)
  • 翻译 / 摘要 等约束任务仍用 (有明确"对错")
  • HuggingFace transformers 仍支持但不是默认

Speculative decoding:加速 decode

核心问题:Decode memory-bound, throughput 受 HBM 限制。能不能"算多一点"提升 throughput?

Speculative decoding:用小 draft 模型预测 K 个 token,大 target 模型一次性 forward 验证,接受/拒绝——2-3× 加速,zero quality loss。

Leviathan ICML 2023 算法

Leviathan et al.[4]:

循环

  1. Draft:用小模型 (~7B) 自回归生成 $\gamma$ 个 token (典型 $\gamma = 4-7$)
  2. Verify:大模型 (~70B) 一次 forward,并行算 $\gamma$ 个位置的概率分布
  3. Accept/Reject:对每个 draft token,按 acceptance probability $\min(1, p_{\text{target}} / p_{\text{draft}})$ 接受或拒绝
  4. Resample:拒绝的位置用 $\max(0, p_{\text{target}} - p_{\text{draft}})$ 重采保证 exact distribution

关键性质:输出分布与直接用 target 模型 sampling 完全等价——zero quality loss。

为什么有效

LLM 推理是 memory-bound:

  • 大模型 forward 1 token 与 forward 4 token 的延迟差不多 (都被 HBM 读权重的时间主导)
  • 用 draft 模型预测多 token + 一次验证 → 把 4 个 token 的 wall-clock 压缩到 1 个

实测

  • T5-XXL 上 2-3× 加速 (Leviathan 2023)
  • 接受率受 draft-target 相似度影响,接近 70-90% 时加速最显著

Medusa (Cai 2024):无 draft 模型

Cai et al. 2024[5]:

  • 不用独立 draft 模型,在 target model 的 LM head 之外长出 K 个独立预测头 (推荐 K=5)
  • 第 k 头预测 $x_{t+k+1}$
  • tree attention 一次验证所有候选路径 (笛卡尔积树结构)

实测

  • Medusa-1 (冻结 backbone):2.18-2.33× 加速
  • Medusa-2 (联合训练):2.83× 加速
  • Coding / extraction 任务高达 3.29-3.62×

优势:不需要部署独立的小模型,工程更简单。

业界采用

  • TensorRT-LLM / vLLM / SGLang 都支持 speculative decoding
  • Llama 3 / Qwen 2 等模型可直接配 Medusa 头

Takeaway

知识点核心结论
Greedy每步 argmax,易陷重复 (28.94% vs 人类 0.28%)
Temperaturelogits 除以 T, T<1 锐 / T>1 平 / T=1 原始
Top-k固定 k 个 token 采样 (k=50),不灵活
Top-p (nucleus)动态选累积概率 ≥ p 的最小集合,p=0.95 经典
Holtzman 2019 实证nucleus p=0.95 HUSE 0.97 接近人类
Beam search 局限likelihood-quality mismatch,输出机械单调,LLM 时代弃用
Repetition penaltyθ=1.1-1.3,过高误伤标点
业界默认Llama-3 推荐 T=0.6, p=0.9;代码 T=0.2
Speculative decodingdraft K 个 + target 1 次验证,2-3× 加速,zero quality loss
Acceptance probability$\min(1, p_{\text{target}}/p_{\text{draft}})$
MedusaLM head 之外 K 个预测头 + tree attention, 2.83× 加速
业界支持TRT-LLM / vLLM / SGLang 都支持 speculative

开放问题

  • Likelihood-quality mismatch 的根治:训练目标 (CLM) 内在导致,是否需要新训练目标 (RLHF 已部分缓解)
  • Speculative draft 模型的最优选择:draft 太大失去加速,太小 acceptance 低;业界经验仍在探索
  • Multi-token prediction (DeepSeek-V3 用) 是否会取代 speculative decoding 成为新标准:训练时长出多预测头,推理时直接用
  • Sampling 算法在 reasoning 上的影响:o1 / R1 用 T=0 (greedy) 仍能好,是否说明 reasoning 不需 sampling
  • Beam search 在某些 niche 场景 (代码 / 数学严格答案) 是否值得回归:当前主流仍 nucleus

延伸阅读

参考资料

  1. Holtzman et al. The Curious Case of Neural Text Degeneration. ICLR 2020. https://arxiv.org/abs/1904.09751
  2. Fan et al. Hierarchical Neural Story Generation. ACL 2018. https://arxiv.org/abs/1805.04833
  3. Keskar et al. CTRL: A Conditional Transformer Language Model for Controllable Generation. 2019. https://arxiv.org/abs/1909.05858
  4. Leviathan et al. Fast Inference from Transformers via Speculative Decoding. ICML 2023. https://arxiv.org/abs/2211.17192
  5. Cai et al. Medusa: Simple LLM Inference Acceleration Framework with Multiple Decoding Heads. 2024. https://arxiv.org/abs/2401.10774