Skip to content

Temperature & Sampling Strategies

LLM 生成文本时并非确定性过程——它们在每个时间步从概率分布中采样下一个 token。Temperature采样策略(Top-K、Top-P、Beam Search 等)决定了这个概率分布的形状,进而控制输出的随机性多样性准确性。理解这些参数是调优 LLM 应用的核心技能。

基础原理:自回归语言建模

在每个生成步骤,LLM 输出一个在词汇表上的概率分布:

P(token | 已生成的文本)

贪心解码(Greedy Decoding):每次选择概率最高的 token。确定性强、可重复性高,但容易生成朴素和重复的文本。

采样解码(Sampling Decoding):从概率分布中随机抽样 token。生成多样化、有创造性的文本,但可能产生不连贯或无意义的输出。

采样策略的核心就是在这两个极端之间寻找平衡。

Temperature

Temperature 是最基础的采样调节参数,通过对 logits 进行缩放来改变概率分布的 "峰值程度"。

数学表达

P(token_i) = exp(z_i / T) / Σ_j exp(z_j / T)

其中 z_i 是模型输出的第 i 个 token 的 logit,T 是 temperature。

不同 Temperature 的行为

Temperature效果适用场景
T = 0等效于贪心解码,只选最高概率 token数学计算、代码生成、标准化问答
T = 0.1–0.3非常确定,几乎总是选最佳选项事实性任务、抽取、分类、摘要
T = 0.5–0.7适度多样性,仍保持合理对话、平衡创造性和准确性
T = 1.0模型原始概率分布,无修饰脑暴、创意写作、探索性任务
T > 1.0概率分布趋向均匀,随机性大增脑暴、故事创作、生成异类想法
T > 2.0几乎均匀随机选择,输出很快变得无意义仅用于特殊实验或探索

直观理解

  • 低 Temperature → 概率分布变得尖锐,高概率 token 更突出,低概率 token 被压制——"安全"、"保守"
  • 高 Temperature → 概率分布变得平坦,几乎所有 token 都有机会被选中——"大胆"、"创新"

Top-K Sampling

在采样时只考虑概率最高的 K 个 token,将其余 token 的概率置为零,然后重新归一化。

python
# 伪代码
sorted_probs = sort(probs, descending=True)
top_k_probs = sorted_probs[:K]
top_k_probs = top_k_probs / sum(top_k_probs)
sample from top_k_probs
K 值效果
K = 1等效于贪心解码
K = 5–20极度确定,适合代码和数学
K = 40–60平衡,OpenAI 模型默认约在此区间
K = 100+较多样性,适合创意写作

缺点:K 是固定值。在某些时刻模型对某几个 token 非常确定(如结束符号),在其他时刻则比较模糊。固定 K 无法适应这种动态变化。

Top-P (Nucleus Sampling)

解决 Top-K 的缺点。不固定选多少个 token,而是选择概率累计达到 P 的最小 token 集合。

python
sorted_probs = sort(probs, descending=True)
cumulative = cumsum(sorted_probs)
min_k = argmin(cumulative >= P)
top_p_tokens = sorted_probs[:min_k]

例如 P = 0.9 表示:只从概率累计占 90% 的最佳 token 中采样。如果某个时刻前两个 token 已经占了 95%,只选 2 个;如果前 50 个 token 才累计到 90%,则选 50 个。

P 值效果
P = 0.1非常保守,几乎确定性
P = 0.5保守但有一定多样性
P = 0.9平衡,OpenAI/Anthropic 默认
P = 0.95–1.0多样性高,创意任务

实践建议:大多数场景下,Top-P 比 Top-K 更灵活,效果更好。可以结合使用(如 Top-K=40 + Top-P=0.9)。

不是单步采样,而是维护一个由 B 个假设(beams)组成的集合,每步扩展并保留最优的 B 条路径。

步骤 1: 生成 B 个最佳第一个 token
步骤 2: 每个 beam 扩展为 B 个后续,保留全局最优的 B 条路径
...
步骤 N: 选择全局最优路径
B 值效果
B = 1等效于贪心解码
B = 4–10显著提升质量,适合翻译、摘要
B > 20收益递减,计算成本高昂

优点:在需要最优解的任务上(机器翻译、摘要、代码补全)表现最好。

缺点:生成的文本通常比较朴素和可预测,多样性差。计算量大(线性增长于 beam 宽度)。

其他采样策略

Repetition Penalty(重复惩罚)

降低已在之前文本中出现过的 token 的采样概率,减少重复和循环。

P'(token) = P(token) / ρ   如果 token 已出现
P'(token) = P(token)       如果 token 未出现
  • ρ = 1.0: 无惩罚
  • ρ = 1.1–1.2: 温和惩罚,适用于大多数场景
  • ρ > 1.5: 强惩罚,可能导致输出不自然

Frequency Penalty & Presence Penalty (OpenAI 风格)

  • Frequency Penalty:根据 token 在已生成文本中的出现次数降低其概率(线性惩罚)
  • Presence Penalty:只要出现过就降低概率,不管次数(二元惩罚)

Min-P Sampling

设置最小采样概率阈值,只采样概率高于阈值的 token。简单但有效的方法来过滤低信心度选项。

Contrastive Search / Contrastive Decoding

通过对比模型预测和简单 n-gram 模型预测,优先选择模型确信且不容易被简单模型预测的 token,在保持流畅性的同时增加多样性。

实践参数配方

常见任务的推荐设置

任务类型TemperatureTop-PTop-K重复惩罚说明
代码生成0.0–0.10.1–0.51–101.05–1.1极度确定,避免语法错误
数学推理0.00.011.0必须贪心,确保步骤正确
事实问答0.0–0.30.1–0.55–201.0–1.05保持确定,减少幻觉
摘要0.0–0.30.1–0.510–201.05–1.1确保覆盖关键信息
翻译0.0–0.30.1–0.55–151.05Beam Search 效果更好
对话/客服0.5–0.70.7–0.940–601.05–1.1自然且一致性
脑暴/创意0.7–1.00.9–1.050–1001.0–1.05充分多样性
故事创作0.8–1.20.95–1.080–100+1.0–1.05鼓励创新和惊喜
角色扮演0.6–0.90.8–0.9540–801.05保持角色一致但不朴素

API 提供商的默认值

提供商默认 Temperature默认 Top-P备注
OpenAI1.01.0推荐调整 temp 而非 top_p
Anthropic1.0未公开Claude 更依赖 temp
Google未公开未公开Gemini 提供丰富参数控制
本地模型 (vLLM)1.01.0通常支持完整参数集

进阶话题

自适应采样 (Adaptive Sampling)

一些研究探索根据模型的不确定性动态调整 temperature:

  • 当模型对下一个 token 很确定时,降低 temperature(如语法结构位置)
  • 当模型不确定时,提高 temperature(如创意写作节点)

多样性 vs 质量的矛盾

低 temperature 和 beam search 可以提升质量,但会降低多样性。一些经验法则:

  • 对于有标准答案的任务(代码、数学),优先追求质量
  • 对于无标准答案的任务(创作、脑暴),优先追求多样性
  • 对于 RAG 和实时应用,平衡两者,并通过重排序提升最终输出质量

Relationships

Open Questions

  • 是否存在 "理想的自适应采样策略",能够根据任务和上下文自动选择最佳参数组合?
  • 对于推理模型(如 o3、DeepSeek-R1),temperature 设置是否仍然有意义,还是让位于思维链的确定性?
  • 多 token 预测(speculative decoding、Medusa、Eagle)与传统采样策略如何协调?
  • 针对非英语和多语言生成,采样参数的效果是否一致?

AI Knowledge Base — 持续积累