每个使用过大语言模型 API 的人都会遇到一个名为 Temperature 的参数。大多数时候,我们要么忽略它,要么随意调一下。但这个看似简单的数字,实际上决定了模型是"一本正经"还是"天马行空"。

大模型如何选择下一个词

要理解 Temperature,先要理解大模型生成文本的基本流程。

大模型本质上是一个"下一个词预测器"。当你输入一段文本时,模型会为词表中每一个可能的词(token)计算一个分数,这个分数叫做 logit。一个典型的模型词表包含 5 万到 10 万个词,所以模型会输出 5 万到 10 万个 logit 值。

这些 logit 是原始的、未归一化的数值,范围可以从负无穷到正无穷。数值越高,表示模型认为这个词作为下一个词的可能性越大。但 logit 本身不是概率——它们甚至可能为负数,而且所有 logit 加起来也不等于 1。

为了将这些分数转换为概率,模型使用 Softmax 函数

$$p_i = \frac{e^{l_i}}{\sum_{j=1}^{n} e^{l_j}}$$

其中 $l_i$ 是第 $i$ 个词的 logit 值,$n$ 是词表大小,$p_i$ 是该词被选中的概率。

Softmax 的核心思想是用指数函数 $e^x$ 将所有 logit 转换为正数,然后归一化使它们总和为 1。指数函数有一个重要特性:它会放大差异。如果词 A 的 logit 是 2.0,词 B 的 logit 是 1.0,词 A 的概率不是词 B 的两倍,而是接近三倍。

一旦得到概率分布,模型就可以从中采样选择下一个词。最简单的策略是"贪婪解码"——永远选择概率最高的词。但这样做会让输出过于机械和重复。更常见的做法是从概率分布中随机采样,这让模型能够产生多样化的输出。

Temperature 就是在 Softmax 之前对 logit 进行缩放的参数。

Temperature 的数学本质

Temperature 的实现非常简单——在应用 Softmax 之前,将每个 logit 除以温度值 T:

$$p_i = \frac{e^{l_i / T}}{\sum_{j=1}^{n} e^{l_j / T}}$$

就这么一个除法操作,却有着深刻的影响。考虑一个简单的例子:假设词表中只有四个候选词,logit 值分别为 2.0、1.0、-0.5 和 -3.0。

当 T = 1.0 时(标准 Softmax),概率分布为:

  • 词 A(logit 2.0):68.65%
  • 词 B(logit 1.0):25.25%
  • 词 C(logit -0.5):5.64%
  • 词 D(logit -3.0):0.46%

当 T = 0.5 时(低温),分布变得"尖锐":

  • 词 A:87.56%
  • 词 B:11.85%
  • 词 C:0.59%
  • 词 D:0.00%

当 T = 2.0 时(高温),分布变得"平坦":

  • 词 A:50.62%
  • 词 B:30.71%
  • 词 C:14.51%
  • 词 D:4.15%

为什么会这样?因为除以一个小于 1 的数会让所有 logit 的绝对值变大,而指数函数会进一步放大这种差异。相反,除以一个大于 1 的数会压缩所有 logit 的差异。

极限情况是:

  • T → 0:分布无限尖锐,最高 logit 的词概率趋近于 100%,模型执行贪婪解码
  • T → ∞:分布无限平坦,所有词概率趋近相等,模型输出纯随机

温度对概率分布的影响

图片来源: Konrad Kokosa

从统计力学到机器学习

Temperature 这个术语并非机器学习原创,它借自统计力学中的玻尔兹曼分布(Boltzmann Distribution)。

在物理学中,玻尔兹曼分布描述了粒子在不同能量状态下的概率分布:

$$P(E_i) \propto e^{-E_i / (k_B T)}$$

其中 $E_i$ 是状态 $i$ 的能量,$k_B$ 是玻尔兹曼常数,$T$ 是温度。

这个公式告诉我们:在低温下,粒子倾向于聚集在低能量状态;在高温下,粒子会"分散"到各种能量状态。温度越高,系统越"混乱";温度越低,系统越"有序"。

Softmax 函数本质上就是玻尔兹曼分布的数学等价形式。将 logit 类比为"负能量",Softmax 就完全对应于玻尔兹曼分布。这也是为什么机器学习领域采用了"温度"这个术语——它确实在数学意义上控制着分布的"熵"。

Temperature 参数在机器学习中的应用可以追溯到 1985 年。David Ackley、Geoffrey Hinton 和 Terrence Sejnowski 在他们关于玻尔兹曼机的开创性论文中引入了这个概念。他们使用模拟退火算法训练神经网络,通过逐渐降低温度来帮助模型逃离局部最优解。

Temperature 与熵的定量关系

熵(Entropy)是衡量概率分布"不确定性"的数学工具。对于一个离散概率分布,熵定义为:

$$H = -\sum_{i=1}^{n} p_i \log p_i$$

熵越高,分布越均匀,不确定性越大;熵越低,分布越集中,不确定性越小。

Temperature 与熵有直接的定量关系:

  • 低温度 → 低熵 → 模型对选择很有信心
  • 高温度 → 高熵 → 模型对选择很不确定

对于前面四个词的例子:

  • T = 0.5 时,熵约为 0.52
  • T = 1.0 时,熵约为 1.17
  • T = 2.0 时,熵约为 1.58

这从数学上解释了为什么"低温=确定性"而"高温=创造性"——低温降低了输出的熵,让选择更加确定;高温提高了输出的熵,让选择更加随机。

Temperature 与其他采样参数的关系

除了 Temperature,现代 LLM API 通常还提供 Top-k 和 Top-p 参数。它们如何协同工作?

Top-k 采样:只保留概率最高的 k 个词,其余词的概率设为 0,然后重新归一化。例如,设置 top-k = 5,模型只会从概率最高的 5 个词中选择。

Top-p 采样(Nucleus Sampling):保留概率累积达到 p 的最小词集合。例如,设置 top-p = 0.9,模型会按概率从高到低选择词,直到这些词的概率总和超过 90%,然后只从这些词中采样。

这三个参数的执行顺序是:

  1. Temperature 调整 logit,重塑概率分布的形状
  2. Top-k 过滤候选词数量(如果设置)
  3. Top-p 进一步过滤候选词(如果设置)
  4. 采样 从最终的概率分布中随机选择

一般建议:优先调整 Temperature,其次是 Top-p,Top-k 通常不需要单独设置。Temperature 影响分布的"形状",而 Top-p 影响分布的"截断"。如果需要更可预测的输出,应该同时降低 Temperature 并调低 Top-p。

不同任务的温度选择指南

温度的选择没有绝对标准,但根据任务特性有一些经验法则:

事实性问答、代码生成、技术写作

  • 推荐温度:0.0 - 0.3
  • 原因:这些任务需要精确性和一致性。低温让模型倾向于选择最可能的词,减少"幻觉"和不相关的输出。

摘要、翻译、数据提取

  • 推荐温度:0.3 - 0.5
  • 原因:这些任务需要一定的灵活性以生成自然流畅的文本,但核心内容必须准确。

一般对话、解释说明

  • 推荐温度:0.5 - 0.7
  • 原因:需要在准确性和自然度之间取得平衡。这个范围让模型既不会过于机械,也不会过度发散。

创意写作、故事生成、头脑风暴

  • 推荐温度:0.7 - 1.0
  • 原因:这些任务鼓励多样性和创新。高温让模型更愿意选择不太常见但可能更有趣的词。

实验性创作、艺术探索

  • 推荐温度:1.0 - 1.5
  • 原因:追求最大的创造性和意外性。注意,温度超过 1.5 后,输出可能变得不连贯。

需要强调的是:Temperature 不改变模型"知道"什么,只改变模型如何"表达"。一个模型在温度 0.1 和温度 1.0 时具有相同的知识储备,只是选择输出词的策略不同。

Temperature = 0 并非真正确定性

一个常见的误解是:设置 Temperature = 0 就能得到完全确定、可重复的输出。实际情况并非如此。

首先,从数学上讲,温度为 0 意味着除以零,这是未定义的。在实践中,模型会将温度为 0 解释为执行 argmax 操作——选择 logit 最高的词。但问题在于:

浮点精度问题:当两个或多个词的 logit 非常接近时,浮点运算的不确定性可能导致不同的排序结果。一个词的 logit 可能计算为 2.0000001,另一个为 2.0000002,在不同的硬件或运行中,它们的相对顺序可能不同。

随机 tie-breaker:当多个词的 logit 完全相等时,模型必须用某种方式打破平局。不同实现可能使用不同的策略。

内核级非确定性:现代 GPU 的某些并行计算操作(如 reduce 操作)本身就不是确定性的,相同的输入可能产生略有不同的输出。

并发和批处理:当多个请求并行处理时,内存布局和计算顺序的变化可能影响浮点运算的结果。

因此,如果需要严格的确定性输出,仅仅设置 Temperature = 0 是不够的。需要考虑:固定随机种子、设置 top-k = 1(强制贪婪解码)、确保单线程执行、以及使用支持确定性计算的推理框架。

研究发现:温度对不同能力的影响

2025 年发表在 arXiv 上的一项系统性研究,评估了温度在 0 到 2 范围内对模型六种核心能力的影响。研究使用了不同规模的开源模型(1B-4B 小型、6B-13B 中型、40B-80B 大型),得出了以下关键发现:

因果推理:中等温度(约 1.3)反而略微提升了大中型模型的推理表现。这与直觉相反——适度的随机性可能帮助模型"探索"更多推理路径。

创造力:中等温度(约 1.3)最有利于创意输出。小型模型在高温下创造力急剧下降,而大型模型更加稳定。

机器翻译:对温度最敏感,低温(接近 0)效果最好。翻译本质上是确定性的任务,高温引入的随机性损害翻译质量。

指令遵循:温度超过 1.0 后性能急剧下降。不同规模模型有"突变温度"——小型模型约 1.0-1.3,中型约 1.3-1.6,大型约 1.6-1.9。

摘要生成:与指令遵循类似,高温显著降低质量。

上下文学习:受温度影响相对较小,但高温仍会导致性能下降。

一个重要发现是:模型规模越大,对温度变化的鲁棒性越强。小型模型在温度偏离最优值时性能下降更剧烈,而大型模型在更宽的温度范围内保持稳定。

另一项 2024 年发表在 EMNLP 会议上的研究也得出了类似结论:在问题解决任务中,温度从 0.0 到 1.0 的变化对模型准确率没有统计学上的显著影响。这意味着对于标准问答任务,温度的选择可能没有想象中那么关键。

实践建议

理解 Temperature 的本质后,以下是实际应用中的建议:

  1. 从默认值开始:大多数 API 的默认温度(通常 0.7-1.0)已经适用于一般对话场景。

  2. 根据任务调整:先确定任务类型(事实性、创意性、还是介于两者之间),然后在相应的温度范围内微调。

  3. Temperature 和 Top-p 不要同时大改:一般建议优先调整其中一个。如果调整 Temperature 后仍不满意,再考虑调整 Top-p。

  4. 测试多次:由于采样具有随机性,同一个温度设置可能产生不同的输出。重要应用需要多次测试。

  5. 关注极端情况:温度超过 1.5 时输出可能变得不连贯;温度接近 0 时可能陷入重复循环。

  6. 考虑模型规模:使用小型模型时,温度选择更加关键;使用大型模型时,温度的影响相对较小。

Temperature 是一个简单但强大的参数。它通过一行除法运算,控制着模型输出的"性格"。低温让模型稳重可靠,高温让模型天马行空。理解它的工作原理,能帮助我们更好地驾驭这些强大的语言模型。


参考文献

  1. Ackley, D. H., Hinton, G. E., & Sejnowski, T. J. (1985). A learning algorithm for Boltzmann machines. Cognitive Science, 9(1), 147-169.

  2. Renze, M., & Guven, E. (2024). The Effect of Sampling Temperature on Problem Solving in Large Language Models. Findings of EMNLP 2024, 7346-7356.

  3. Li, L., et al. (2025). Exploring the Impact of Temperature on Large Language Models: Hot or Cold? arXiv preprint arXiv:2506.07295.

  4. Hinton, G., Vinyals, O., & Dean, J. (2015). Distilling the knowledge in a neural network. arXiv preprint arXiv:1503.02531.

  5. Holtzman, A., et al. (2020). The Curious Case of Neural Text Degeneration. ICLR 2020.

  6. Bridle, J. S. (1990). Training stochastic model recognition algorithms as networks can lead to maximum mutual information estimation of parameters. Advances in Neural Information Processing Systems, 2, 211-217.

  7. Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.

  8. Jurafsky, D., & Martin, J. H. (2023). Speech and Language Processing (3rd ed.).