采样参数详解
大语言模型(LLM)在生成文本时,会先将上下文映射为 logits,再通过 Softmax 转换为概率分布,最后依据解码策略采样下一个 Token。本文将系统介绍 temperature、top_k、top_p、min_p 等核心采样参数,以及 Transformers 中常用的生成配置参数。
1. 背景:从 logits 到概率
对于词汇表中的第
其中
2. temperature
temperature 控制输出随机性,通常取值在
2.1 带温度的 Softmax
:趋近贪婪采样,仅选择最大 logit 的 Token。 :标准 Softmax。 :趋近均匀分布。
2.2 温度对概率分布的影响
当
当
输出分布的熵随温度升高而增大:
2.3 实现示例
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 温度对梯度的影响
温度越高,梯度越小,模型更新越温和。
2.6 可视化
下图展示了不同温度下概率分布的变化。左图为按 Token 索引排列的原始视图,右图为按概率降序排列的视图。运行以下绘图代码可生成图片。
绘图代码如下:
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 限制采样池只保留概率最高的
较小:输出更可控,但多样性受限。 较大:候选更丰富,但可能引入低质量 Token。 - 典型值:20–100。
4. top_p
top_p(核采样)动态选择累积概率超过
优势:
自适应候选集大小。
避免低概率 Token,同时保留足够多样性。
:接近完整词汇表采样,随机性高。 :仅保留极少数高概率 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 为例,执行流程如下:
- 使用温度缩放 logits。
- 保留 Top-K 候选 Token。
- 从中筛选累积概率
且相对概率 的 Token。 - 重新 Softmax 归一化。
- 采样得到下一个 Token。
默认无约束配置为:temperature=1.0, top_k=-1, top_p=1.0, min_p=None。