Decoding
Decoding Strategies (LLM 解码策略)
在 LLM 生成过程中,模型最后输出的是一个覆盖整个词表(Vocabulary)的概率分布(Logits)。解码策略决定了我们如何从这个分布中选取下一个 Token。
1. 核心参数与原理
1.1 Temperature (温度)
温度参数 $T$ 用于在执行 Softmax 之前对 Logits 进行缩放。
- 数学公式: 设 $z_i$ 为词表第 $i$ 个 Token 的 Logits,缩放后的概率为: $$ P(x_i) = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)} $$
- 技术实现:
- $T < 1$ (低熵):放大高概率和低概率之间的差距。模型变得更“自信”和确定,倾向于选择最可能的词。
- $T = 1$:原始 Softmax 分布。
- $T > 1$ (高熵):缩小差距,分布变得平滑。模型变得更“随机”和有创意,但也更容易产生幻觉。
边界情况
当 $T \to 0$ 时,解码退化为 Greedy Search (贪心搜索),即永远只选概率最大的词。
1.2 Top-K Sampling
Top-K 将词表限制为概率最高的前 $K$ 个词。
- 原理:将 Logits 按从大到小排序,只保留前 $K$ 个,其余设置为 $-\infty$(在 Softmax 后概率为 0)。
- 作用:剔除概率分布中“长尾”部分的低质量词,防止模型跳到完全无关的领域。
- 缺点:$K$ 是固定的,无法感知概率分布的厚薄。
1.3 Top-P (Nucleus Sampling) 核采样
Top-P 是一种动态裁剪方法。
- 原理:按照概率降序排列词汇,累加它们的概率,直到累加值达到预设阈值 $P$。只从这些入选的词中采样。
- 技术实现:
- 对分布进行排序。
- 计算累积分布函数 (CDF)。
- 找到 CDF $> P$ 的最小索引,并将该索引之后的词全部掩蔽(Mask)。
- 优势:当模型很确定时(概率集中在少数词),采样范围变窄;当模型不确定时,采样范围自动变宽。
1.4 Min-P Sampling (现代推荐)
Min-P 是最近由替代性前端(如 vLLM/Llama.cpp)推广的一种策略。
- 原理:基于最高概率词的比例进行裁剪。如果最高概率是 $P_{max}$,则只保留概率 $\ge P_{max} \times \text{limit}$ 的词。
- 优势:比 Top-P 更好地保留了有意义的低概率选项,同时有效地剔除垃圾项。
2. 完整解码流程 (Sampling Pipeline)
模型推理时的采样通常遵循以下顺序:
- Logits 生成:模型输出原始向量。
- Temperature 缩放:$Logits = Logits / T$。
- Repetition Penalty:对已出现的 Token 降低其 Logits(可选)。
- Top-K 过滤:保留前 $K$。
- Top-P 过滤:累积概率裁剪。
- Softmax:将过滤后的 Logits 转化为和为 1 的概率分布。
- Random Sampling:根据最终概率进行随机采样。
3. 对比总结
| 参数 | 核心控制点 | 适用场景 | 建议值 |
|---|---|---|---|
| Temperature | 概率分布的“陡峭”度 | 调整创造力/保守度 | 0.5 - 1.2 |
| Top-K | 硬性数量限制 | 确定性高的任务、小模型 | 20 - 50 |
| Top-P | 动态概率质量 | 通用生成、对话 | 0.8 - 0.95 |
| Min-P | 基于信心的相对阈值 | 追求自然感的长文生成 | 0.05 - 0.1 |
4. 常见策略组合
- 代码/数学 (严格模式):
Temperature=0.2,Top-P=0.95或直接Greedy Search。 - 创意写作/文学:
Temperature=0.8-1.0,Top-P=0.9,Min-P=0.05。