每个使用过大语言模型 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%,然后只从这些词中采样。
这三个参数的执行顺序是:
- Temperature 调整 logit,重塑概率分布的形状
- Top-k 过滤候选词数量(如果设置)
- Top-p 进一步过滤候选词(如果设置)
- 采样 从最终的概率分布中随机选择
一般建议:优先调整 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 的本质后,以下是实际应用中的建议:
-
从默认值开始:大多数 API 的默认温度(通常 0.7-1.0)已经适用于一般对话场景。
-
根据任务调整:先确定任务类型(事实性、创意性、还是介于两者之间),然后在相应的温度范围内微调。
-
Temperature 和 Top-p 不要同时大改:一般建议优先调整其中一个。如果调整 Temperature 后仍不满意,再考虑调整 Top-p。
-
测试多次:由于采样具有随机性,同一个温度设置可能产生不同的输出。重要应用需要多次测试。
-
关注极端情况:温度超过 1.5 时输出可能变得不连贯;温度接近 0 时可能陷入重复循环。
-
考虑模型规模:使用小型模型时,温度选择更加关键;使用大型模型时,温度的影响相对较小。
Temperature 是一个简单但强大的参数。它通过一行除法运算,控制着模型输出的"性格"。低温让模型稳重可靠,高温让模型天马行空。理解它的工作原理,能帮助我们更好地驾驭这些强大的语言模型。
参考文献
-
Ackley, D. H., Hinton, G. E., & Sejnowski, T. J. (1985). A learning algorithm for Boltzmann machines. Cognitive Science, 9(1), 147-169.
-
Renze, M., & Guven, E. (2024). The Effect of Sampling Temperature on Problem Solving in Large Language Models. Findings of EMNLP 2024, 7346-7356.
-
Li, L., et al. (2025). Exploring the Impact of Temperature on Large Language Models: Hot or Cold? arXiv preprint arXiv:2506.07295.
-
Hinton, G., Vinyals, O., & Dean, J. (2015). Distilling the knowledge in a neural network. arXiv preprint arXiv:1503.02531.
-
Holtzman, A., et al. (2020). The Curious Case of Neural Text Degeneration. ICLR 2020.
-
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.
-
Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.
-
Jurafsky, D., & Martin, J. H. (2023). Speech and Language Processing (3rd ed.).