Skip to content

温度系数与Top-p:掌控大模型的创造力开关

摘要: Temperature 和 Top-p 是大语言模型 API 中最常用也最容易被误解的两个采样参数,它们共同决定了模型输出的随机性程度。Temperature 在 Softmax 之前对 logits 进行缩放:低温(<1)放大高概率 token 的优势,使输出趋于确定和保守;高温(>1)压缩概率差异,使低概率 token 获得更多采样机会。Top-p(核采样)则从另一个维度控制多样性——只从累积概率达到阈值 p 的最小候选集中采样,动态过滤掉长尾噪声。本文从数学原理出发,通过概率分布可视化直观展示两者的作用机制与交互效应,并结合创意写作、代码生成、事实问答等典型场景给出参数选型矩阵与调参优先级建议,帮助开发者在可控性与创造性之间找到最优平衡点。

1. 核心概念速览

在调用大模型 API 时,Temperature(温度系数)Top-p(核采样) 是两个最常用、也最容易被误解的参数。它们共同决定了模型输出是"保守确定"还是"天马行空"。

官方建议:通常调整 Temperature Top-p 其中之一即可,不建议同时大幅调整两者。

参数作用机制值域默认值一句话总结
Temperature在 Softmax 之前缩放 Logits,改变概率分布的「陡峭程度」。0 ~ 21低温保守,高温奔放
Top-p只从累计概率达到 p 的最小候选集中采样,动态裁剪长尾

Top-p(最高累加概率,Top Cumulative Probability):为防止模型选择长尾词,需要一个方式将这些离谱的词过滤掉。

Top-p 像是一个动态的入围门槛,主要用来切断尾部那些不靠谱的长尾词
0 ~ 11概率阈值,自适应候选集大小

2. Temperature(温度系数)详解

2.1 前置概念:Logits 与 Softmax

要理解 Temperature,必须先理解两个概念:

1、Logits(原始得分):模型最后一层(LM Head)直接输出的原始数值,未经任何归一化。分数越高的 token,模型越倾向于选择它。

假设词表有 5 个候选词,模型输出的 Logits:
"变革"  8.3
"改变"  7.1
"变化"  5.2
"改革"  3.8
"修饰" -2.1

Logits 只是分数,不是概率——它们加起来不等于 1,并且可能有负数。

2、Softmax(归一化指数函数):将任意一组实数转换为概率分布(所有值在 0~1 之间,总和为 1)。

Softmax 的计算过程(以"变革"为例):
1. 对每个 Logits 求指数:e^8.3, e^7.1, e^5.2, e^3.8, e^-2.1
2. 把这些指数值加起来作为分母
3. 每个 token 的指数值 ÷ 分母 = 该 token 的概率

结果:
"变革"  0.62  ← 分数最高,概率也最高
"改变"  0.21
"变化"  0.08
"改革"  0.03
"修饰"  0.00
─────────────────
合计    1.00

2.2 Temperature 的数学原理

Temperature 在 Softmax 之前对所有 Logits 进行缩放:

figure

极其简单的公式,但效果极其显著:

T = 0.5(低温):
  Logits ÷ 0.5 = [16.6, 14.2, 10.4, 7.6, -4.2]  ← 差距被放大 2 倍
  Softmax       = [0.99, 0.01, 0.00, 0.00, 0.00]
  → 概率极度集中在最高分 token,输出确定、保守、一板一眼

T = 1.0(标准温度):
  Logits ÷ 1.0 → 走标准 Softmax,概率分布保持原始比例
  → 模型"本色出演",依赖训练时的统计模式

T = 2.0(高温):
  Logits ÷ 2.0 = [4.15, 3.55, 2.60, 1.90, -1.05]  ← 差距被压缩
  Softmax       = [0.42, 0.30, 0.17, 0.10, 0.01]
  → 概率分布趋于平坦,低分 token 也有不小概率被选中,输出更多样、更有创意

2.3 Temperature 的直观理解

可以把 T 理解为 「创造力的旋钮」

Prompt: "今天天气真"

T ≈ 0 (贪婪):  "今天天气真好!阳光明媚,万里无云。"         ← 最确定
T = 0.3:       "今天天气真好!适合出去走走。"                ← 比较确定
T = 0.7:       "今天天气真不错,不如去公园散步吧。"             ← 适度多样
T = 1.0:       "今天天气真适合喝一杯热咖啡然后躺在沙发上看书。"  ← 有创意
T = 1.5:       "今天天气真相是某种不可言说的隐喻。"             ← 开始离谱
T = 2.0:       "今天天气真旮旯三才图会..."                   ← 完全随机

2.4 不同场景的推荐值

Temperature效果适用场景
0 ~ 0.3高度确定,几乎每次输出相同代码生成、数学推理、事实问答、翻译
0.4 ~ 0.7自然且有适度变化日常对话、客服、摘要
0.8 ~ 1.2富有创意,词汇多变创意写作、头脑风暴、文案生成
1.3 ~ 1.5开始出现不合逻辑的内容一般不推荐常规任务使用
> 1.5输出质量急剧下降几乎不使用

3. Top-p(核采样)详解

3.1 为什么需要 Top-p?

在介绍 Top-p 之前,先看它的前身 Top-k 采样,Top-k 的思路很简单:只从概率最高的 k 个候选 token 中随机采样,切断长尾的低概率"噪音"。

原始概率分布(词表大小 ~50000):

  "好的"  ████████████████████  0.40
  "可以"  ██████████            0.20
  "没问题" ██████               0.12
  "行"    ████                 0.08
  "嗯"    ███                  0.06
  "OK"    ██                   0.05
  "好滴"  ██                   0.04
  ... (49993 个低概率 token) ...
  "旮旯"  ▏                    0.00001

Top-k (k=6): 只从前 6 个候选里按概率采样
  → 重归一化后:"好的" 44%, "可以" 22%, "没问题" 13%, "行" 9%, "嗯" 7%, "OK" 5%
  → 从这 6 个中随机抽取一个

Top-k 的问题:固定的 k 值对不同语境不够灵活。

  • 一个很确定的上下文(如 "法国的首都是")可能只有 2-3 个合理 token,k=50 会引入噪音
  • 一个开放的上下文(如 "我认为")可能有 50+ 个合理选择,k=10 会过度限制创造力

3.2 Top-p 的工作机制

Top-p(Nucleus Sampling,核采样)解决了 Top-k 固定候选数的问题:不固定取 k 个,而是动态选取累计概率达到阈值 p 的最小候选集

Top-p (p=0.9) 的工作方式:

  概率分布(从高到低排序):
  "好的"      0.40  ← 纳入,累计 0.40
  "可以"      0.25  ← 纳入,累计 0.65
  "没问题"    0.12  ← 纳入,累计 0.77
  "行"        0.08  ← 纳入,累计 0.85
  "嗯"        0.06  ← 纳入,累计 0.91  ← 累计超过 0.9,停止!
  -------- 阈值 ----------
  "OK"        0.04  ← 丢弃
  "好滴"      0.03  ← 丢弃
  ... 其余全部丢弃 ...

  在入围的 5 个 token 中按原概率重归一化后采样

直观类比:想象你在点外卖。Top-k 是说"只看评分前 20 的餐厅";Top-p 是说"只考虑能覆盖 90% 好评的餐厅"。后者的候选集大小会根据地区(语境)自动调整——美食街可能有 50 家入围,偏远地区可能只有 3 家。

3.3 p 值的调参指南

p 值效果适用场景
0.9 ~ 1.0高多样性,更有创意创意写作、头脑风暴
0.7 ~ 0.9平衡通用对话
0.5 ~ 0.7更保守,更确定事实性问答、代码生成

3.4 Top-p 与 Top-k 的联用

现代 LLM 推理中,Top-p + Top-k 经常联用先用 Top-k 粗筛(砍掉明显不合理的极低概率 token),再用 Top-p 精筛(根据语境自适应裁剪)。

4. Temperature vs Top-p:对比与协同

4.1 核心区别

维度TemperatureTop-p
作用位置Softmax 之前(改变 Logits)Softmax 之后(裁剪概率分布)
调节方式连续缩放整个分布设置累积概率阈值
候选集大小不变(始终是整个词表)动态变化(依语境自适应)
对高频词的影响低温→放大,高温→抑制低频词可能被完全剪掉
对低频词的影响永远保留(只是概率变小)可能被直接排除在外

4.2 组合效果

Temperature + Top-p 的组合:

T=0.2, p=0.9:
  → 分布高度集中,再从 90% 概率质量中采样
  → 结果:极度保守,多样性很低

T=1.2, p=0.5:
  → 分布趋于平坦,但只从 50% 概率质量中采样(裁剪了后半部分)
  → 结果:中等多样性,但候选集较小

T=1.2, p=0.95:
  → 分布趋于平坦,且几乎不裁剪
  → 结果:高多样性,最具创造力

这就是为什么 OpenAI 官方建议不要同时调整两者——两个参数的交织效果不容易直观预判。通常先选一个调,另一个保持默认值即可。

5. 最佳实践总结

6.1 调参原则

调参决策树:

需要精确、一致的结果?
├─ 是 → 代码/数学/翻译 → T=0, p=1(或不指定)
└─ 否 → 需要创意程度?
    ├─ 高创意 → 写作/头脑风暴 → T=0.8~1.2, p=0.9~0.95
    ├─ 中等 → 日常对话/客服 → T=0.5~0.8, p=1(或不指定)
    └─ 低 → 事实性问答/摘要 → T=0.1~0.3, p=1(或不指定)

6.2 常见误区

误区真相
"T=0 就一定完全确定"受浮点精度、硬件差异影响,可能仍有微小随机性
"Top-p 越大越好"p=1 时所有 token 都可能被选中,包括低概率噪音
"同时调小 T 和 p 效果最好"可能过度限制,输出单调重复
"T 和 p 是同一类参数"T 在 Softmax 前缩放 Logits,p 在 Softmax 后裁剪分布,机制完全不同