为什么同一个问题,每次问 AI 答案不一样?温度参数(Temperature)在背后控制

你有没有发现,同一个问题,问 ChatGPT 两次,答案经常不一样。你可能会觉得,AI 像人一样,每次的想法都会有点不同。但真相有点反直觉:模型在生成答案时,权重和输入都固定不变。那为什么输出会变?答案在"采样"这一步。

AI technology illustration

大语言模型生成文字,不是直接选"最合适的词"。它先给每个候选词打一个分数(叫 logits),然后把这些分数转成概率,最后从概率分布里抽一个词出来。温度参数,就是在这两步之间插进来的一个旋钮。

具体来说,模型对下一个词算出一堆分数 z_i,用 softmax 转成概率。温度 T 会先把每个分数除以 T,再做 softmax:

P_i = exp(z_i / T) / Σ_j exp(z_j / T)

T=1 时,就是原始分布。T 越小,概率分布越"尖",高分的词更突出;T 越大,分布越"平",低分词的也有机会被抽到。这就是为什么同一个问题答案不同——你看到的每一次输出,都是从这个分布里抽的一次签。

温度改变概率分布形状的原理很简单:除以一个小于1的数会让分数差距变大,除以大于1的数会让差距变小。比如两个词的分数差是 2,温度=1时概率差距是 e^2 ≈ 7.4 倍;温度=0.5时差距变成 e^4 ≈ 54.6 倍;温度=2时差距只有 e^1 ≈ 2.7 倍。这就是为什么低温让模型更"自信"。

举个例子。模型预测"苹果"的下一个词,给"手机"打 2 分,给"汁"打 1 分,给"电脑"打 0 分。温度=1时,概率约 0.66、0.24、0.09;温度降到 0.5,概率变成约 0.87、0.12、0.01,基本只会选"手机";温度升到 2,概率变成约 0.51、0.31、0.19,低分词的"电脑"也有了不少机会。

这个参数为什么叫"温度"?它来自统计力学里的玻尔兹曼分布——温度越高,粒子运动越混乱。在神经网络里,它最早用于知识蒸馏,Hinton 等人在 2015 年的论文里用高温把概率分布"软化",让模型学得更稳。到了大模型推理阶段,它变成了控制生成多样性的旋钮。

我最早以为,AI 每次都不同是因为模型内部有随机数种子,或者模型本身是概率性的。直到我读了生成代码才发现,模型的前向计算完全是确定性的,同样的输入,同样温度,出来的 logits 一模一样。变化只发生在最后一步的随机采样。那一刻我才真正理解,所谓"创造性",其实就是给概率分布加了一点抖动。

这里还有一个我踩过的坑。之前我用 AI 写代码,temperature 设成 0.8,结果它频繁给我生成一些看似合理但编译不过的 API 调用。后来我把温度降到 0.2,错误立刻少了很多。这件事让我意识到:温度不是越高越好,它只是你在"稳定"和"发散"之间的一个权衡。

温度值 分布状态 典型效果
接近 0(如 0.1) 几乎只有最高概率词 回答稳定、保守,适合事实问答
1.0 原始概率分布 日常对话,偶尔有变化
大于 1(如 1.5) 概率被拉平 更有创造力,但容易跑题、胡说

怎么选?我的经验是:事实问答、代码生成用 0.1 到 0.3;一般对话、翻译用 0.5 到 0.7;创意写作、头脑风暴用 0.8 到 1.2。当然,不同模型和任务需要自己试。

在实际调用里,OpenAI 的 API 把 temperature 设为 0 到 2,0 表示贪婪解码,每次都选概率最高的词。但注意,即使温度设为 0,由于 GPU 并行计算的浮点误差,结果也可能出现微小差异。而 Hugging Face 的生成配置里,temperature 同样默认是 1.0。你可以看看 OpenAI API 文档Hugging Face 生成策略文档

from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
temperature=0.7,
messages=[{"role": "user", "content": "讲个笑话"}]
)

你可能会问:为什么不直接选概率最高的词,非要随机抽?因为如果每次都选最高概率,模型会陷入重复和死板。比如你让它写一段话,它会不停用最常用的句式,甚至复读自己。采样带来的不确定性,让模型有机会选择更丰富的表达——这就是多样性。

除了温度,还有一个常见参数叫 top-p(核采样)。它的作用是:只从累计概率达到 p 的那些词里采样。温度是改变每个词的概率权重,top-p 是直接砍掉尾巴。两者可以同时用。如果你想要稳定又不完全死板,通常把温度调低,同时把 top-p 也调低。

温度调高一定更有创意吗?

不一定。温度太高会把低概率的垃圾词也拉上来,导致语法错误或逻辑混乱。所谓"创意",其实是在分布形状合理的前提下,给次优选择多一点机会。

为什么有时候我设了 temperature=0,结果还是不一样?

理论上贪婪解码是确定性的。但实际推理中,GPU 上的矩阵运算因为并行累加顺序不同会产生微小浮点误差,某些实现下采样函数可能也有随机性。不过通常差异很小。

temperature 和 top_p 应该先调哪个?

OpenAI 官方建议,一般只调其中一个,不要同时大幅调整。先调 temperature,如果不够再考虑 top_p。

下次再遇到 AI 回答不一样,不用觉得神秘。你只是在看它从概率分布里抽签。温度越低,它越保守;温度越高,它越敢试。这个旋钮,就是你在跟 AI 博弈时最直接的操纵杆。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/194.html

(0)
上一篇 2026年8月20日
下一篇 2026年8月20日

相关推荐