Skip to content

采样参数详解

大语言模型(LLM)在生成文本时,会先将上下文映射为 logits,再通过 Softmax 转换为概率分布,最后依据解码策略采样下一个 Token。本文将系统介绍 temperaturetop_ktop_pmin_p 等核心采样参数,以及 Transformers 中常用的生成配置参数。

1. 背景:从 logits 到概率

对于词汇表中的第 i 个 Token,模型输出 logit zi。标准 Softmax 将其转换为概率:

P(yi)=ezij=1Kezj

其中 K 为词汇表大小。采样参数即在这一概率分布上进一步施加约束。

2. temperature

temperature 控制输出随机性,通常取值在 (0,+) 之间。

2.1 带温度的 Softmax

P(yiτ)=ezi/τj=1Kezj/τ
  • τ0:趋近贪婪采样,仅选择最大 logit 的 Token。
  • τ=1:标准 Softmax。
  • τ+:趋近均匀分布。

2.2 温度对概率分布的影响

τ<1 时:

ziτ>zi放大高概率 Token 的优势

τ>1 时:

ziτ<zi压缩概率差异

输出分布的熵随温度升高而增大:

H(P)=i=1KP(yiτ)logP(yiτ)

2.3 实现示例

python
import numpy as np

def softmax_with_temperature(logits, temperature=1.0):
    scaled = logits / temperature
    exp = np.exp(scaled - np.max(scaled))  # 数值稳定
    return exp / np.sum(exp)

2.4 推荐设置

温度分布特点示例场景
0.1尖锐峰值,低多样性事实问答、代码补全
0.5适度平滑,兼顾确定性与多样性通用对话
1.0原始模型分布默认配置
2.0平坦分布,高多样性创意写作、故事生成

DeepSeek 官方推荐:

场景温度
代码生成 / 数学解题0.0
数据抽取 / 分析1.0
通用对话1.3
翻译1.3
创意写作 / 诗歌创作1.5

2.5 温度对梯度的影响

P(yiτ)zi=P(yiτ)(1P(yiτ))τ

温度越高,梯度越小,模型更新越温和。

2.6 可视化

下图展示了不同温度下概率分布的变化。左图为按 Token 索引排列的原始视图,右图为按概率降序排列的视图。运行以下绘图代码可生成图片。

绘图代码如下:

python
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import softmax

np.random.seed(42)
logits = np.random.normal(0, 1, 50)
temperatures = [0.5, 1.0, 1.5]

# 原始视图
plt.figure(figsize=(12, 8))
original = softmax(logits)
plt.plot(original, "k--", alpha=0.5, label="Original (T=1.0)")
for temp in temperatures:
    probs = softmax(logits / temp)
    plt.plot(probs, "o-", label=f"T={temp}", alpha=0.7)
plt.title("Effect of Temperature on Probability Distribution")
plt.xlabel("Token Index")
plt.ylabel("Probability")
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("temperature_effect_raw.png", dpi=300, bbox_inches="tight")
plt.close()

# 排序视图
plt.figure(figsize=(12, 8))
for temp in temperatures:
    probs = np.sort(softmax(logits / temp))[::-1]
    plt.plot(probs, "o-", label=f"T={temp}", alpha=0.7)
plt.title("Sorted Probability Distributions at Different Temperatures")
plt.xlabel("Rank (0 = highest)")
plt.ylabel("Probability (log scale)")
plt.yscale("log")
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("temperature_effect_sorted.png", dpi=300, bbox_inches="tight")
plt.close()

3. top_k

top_k 限制采样池只保留概率最高的 k 个 Token,然后在该子集上重新归一化并采样。

  • k 较小:输出更可控,但多样性受限。
  • k 较大:候选更丰富,但可能引入低质量 Token。
  • 典型值:20–100。

4. top_p

top_p(核采样)动态选择累积概率超过 p 的最小 Token 集合,再在该集合内采样。

优势:

  • 自适应候选集大小。

  • 避免低概率 Token,同时保留足够多样性。

  • p1:接近完整词汇表采样,随机性高。

  • p0:仅保留极少数高概率 Token,输出更确定。

5. min_p

min_p 通过相对阈值排除低概率 Token:只保留概率大于 min_p × 最高概率 Token 的候选。它是对 Top-p 的补充,适合需要精细控制多样性的场景。

例如 min_p=0.1 会排除概率不到最高概率 Token 10% 的所有选项。

6. 参数协同工作机制

temperature=0.8, top_k=50, top_p=0.9, min_p=0.01 为例,执行流程如下:

  1. 使用温度缩放 logits。
  2. 保留 Top-K 候选 Token。
  3. 从中筛选累积概率 0.9 且相对概率 0.01 的 Token。
  4. 重新 Softmax 归一化。
  5. 采样得到下一个 Token。

默认无约束配置为:temperature=1.0, top_k=-1, top_p=1.0, min_p=None

参考

Maintained by Robin