qinghuan
← 回到知识探索

AI 直觉 / 动手实验

温度调低,模型就一定答得对吗?

用三个候选分数观察温度怎样改变概率,分清“更常选同一个答案”和“答案正确”。

展开本文目录
  1. 先动手看看
  2. 分数先变成概率,才进行抽样
  3. 改变集中程度,没有增加事实证据
  4. 先确认参数生效,再比较任务结果
  5. 记住这三点
  6. 别把例子用过头
  7. 自己试一小步
  8. 查原始资料
  9. 找一份资料继续练
开始前,会这些就够了
  • 理解概率相加为一
  • 能阅读简单 Python 循环
遇到不熟悉的词,先看这 2 个解释
温度
生成时调整下一词元抽样概率集中程度的设置。对同一组分数,较低的正温度让概率更偏向高分候选,较高温度则让分布更平;是否生效取决于生成方式。
幻觉
在需要事实或材料依据的任务中,常用来指模型生成与事实冲突、或超出给定材料支持的内容。句子可能读起来很顺,因此要把是否通顺、是否有依据和是否真实分开检查。
打开完整术语小抄 ↗

同一个问题连续问几次,回答不一样,于是你把 temperature 调低。结果变稳定了,但稳定的可能是同一个错误。要理解这个现象,先暂时离开完整模型,只看生成下一步时的三个候选。它们的分数来自模型,温度影响的是怎么使用这些分数。

本篇的三个候选叫 A、B、C,没有接入任何真实模型。我们观察概率如何移动,再讨论这种变化为什么不等于事实检查。

调温度,看候选概率怎么变

在同一组分数上,只改变温度。观察最大概率和其他候选是否同时变化。

候选 A66.52%
候选 B24.47%
候选 C9.00%

最高分候选始终是 A。温度改变的是抽取分布,不会替你核对 A 的内容。

三个候选的假设分数固定为 2、1、0,公式是 softmax(分数 / 温度)。百分比经过舍入,相加可能略有偏差。这不是在线模型,不生成文本,也不涉及 top-p、top-k 或质量评测;概率更集中不等于答案更正确。

分数先变成概率,才进行抽样

模型通常给词表中的候选输出一组分数,称为 logits。分数本身不是概率,也不要求总和为一。常见做法是先将分数除以正温度 T,再用 softmax 转成概率:分数较大的候选获得较大概率,但没有被其他规则排除的候选仍可能被抽中。

下面固定分数为 2、1、0,只改变温度。代码先减掉最大分数,再计算指数,减少过大的中间数;这不改变 softmax 的结果。输出是按公式计算的浮点近似值,再保留四位小数显示,不是语言模型答题正确率,也没有用随机抽样代替概率本身。一次随机抽样可能恰好选到低概率候选,所以不能用只运行一次的结果反推整个概率分布。

小实验 · python
import math

def probabilities(scores, temperature):
    if temperature <= 0:
        raise ValueError("temperature must be positive")
    peak = max(scores)
    weights = [math.exp((s - peak) / temperature) for s in scores]
    total = sum(weights)
    return [w / total for w in weights]

for t in (0.5, 1.0, 2.0):
    p = probabilities([2.0, 1.0, 0.0], t)
    print(t, " ".join(f"{v:.4f}" for v in p))

怎样运行:Python 3.10+;保存为 temperature_demo.py,在该目录运行 python temperature_demo.py。只用标准库,无需联网。

运行后对照结果
0.5 0.8668 0.1173 0.0159
1.0 0.6652 0.2447 0.0900
2.0 0.5065 0.3072 0.1863

改变集中程度,没有增加事实证据

在这组固定分数和正温度下,A 始终排第一。降低温度,让概率更多集中到它;提高温度,让其他候选有更多机会。温度没有查资料、重新训练参数,也没有给候选贴上真假的标签。如果 A 恰好代表错误延续,低温只是更常选择这个错误延续。

把 A 设想成正确答案,低温可能对这个例子有利;把正确标签改成 B,同样的低温却压低了选中 B 的机会。概率计算完全没变,变化的是我们另外给出的评价标准。这就说明采样偏好与答案对错是不同问题,不能只凭参数名称推出准确性保证。

真实生成会连续进行很多步。前面抽到不同 Token,后面的上下文和分数也会改变,所以一次回答的差别不只是给固定三列概率重复抽签。这个小实验只隔离一轮温度缩放,不能预测某个模型在整套任务上的最终表现。

先确认参数生效,再比较任务结果

温度不是每种生成方式都使用。以本文核对的 Transformers v4.46.2 为例,温度处理需要启用采样;贪心解码直接选择最高分候选,不能靠修改温度使其变成随机抽样。不同接口还可能同时使用 top_p、top_k 或其他规则,因此应先查看具体版本的参数说明。

数学实验只接受 T 大于零;接口若允许填零,怎样处理由接口规定,不能把零直接代入除法。比较设置时,固定模型、输入和其他参数,一次只改一个因素,并把“表达是否多样”和“任务是否答对”分开记录。关键事实仍靠可信材料或可执行检查核对,稳定输出本身不是证据。

记住这三点

  • 正温度缩放改变概率的集中程度,不会为候选增加事实证据。
  • 固定候选分数的顺序不因正温度缩放而颠倒,低温可能稳定地偏向错误候选。
  • 确认生成方式和参数生效条件后,再用任务样本比较正确性。

别把例子用过头

  • 三候选实验只模拟单步概率,不能代表完整模型的多步生成效果。
  • temperature=0 的接口行为与数学上的除以零不是同一件事,必须看具体实现。

自己试一小步

如何用同一组分数,说明低温并不普遍提高正确率?

  1. 保留分数不变,分别假设 A 和 B 是正确候选。
  2. 在两种假设下记录不同温度给正确候选分配的概率。
  3. 另将三个分数设成相等,观察温度还能否改变候选之间的偏好。

做到这些,就算完成

  • 没有把最高分自动标成正确答案。
  • 概率之和在浮点误差范围内为一。
  • 结论限定于固定分数和本文的单步 softmax 模型。

查原始资料

想确认一个细节,先看这份资料对应的部分,不必从头读完所有文档。

找一份资料继续练

先选一项,按下面的范围继续学;不必从头读完整门课程。