从 Bit 到 AGI第八章:推理(Inference)

Temperature

从 Bit 到 AGI · 第八章:推理(Inference) · 温度参数如何缩放 logits

作者 David更新于 第 124 篇(共 186 篇)

Temperature(温度)TT 在 softmax 前把 logits 除以 TT:T<1T<1 放大差距、输出更「果断」;T>1T>1 缩小差距、输出更「发散」。API 里的 temperature=0.7 不是玄学,是 对概率分布形状的精确控制。

直觉

投票时,Temperature 像 调节计票规则:

  • 冷(T→0T \to 0):得票最高者 几乎必赢(贪心)
  • 常温(T=1T=1):按原始票数比例抽签
  • 热(T=2T=2):第二名、第三名 更容易爆冷

化学里温度越高分子越乱;这里 TT 越高,token 分布 熵越大。

定义

给定 logits z\mathbf{z},温度 T>0T > 0:

pi=exp⁡(zi/T)∑jexp⁡(zj/T)p_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}

性质:

TT效果
T→0+T \to 0^+arg⁡max⁡izi\arg\max_i z_i(greedy)
T=1T = 1标准 softmax
T>1T > 1分布更均匀
T→+∞T \to +\infty接近均匀分布 $

与 logits 缩放等价:z′=z/T\mathbf{z}' = \mathbf{z}/T;整体乘常数不改变 softmax,但 除以 TT 会改变 相对 比例。

例子

例 1:同一 logits,不同 TT

z=[4.0, 2.0, 1.0]\mathbf{z} = [4.0,\ 2.0,\ 1.0](三 token)

TTp0p_0p1p_1p2p_2熵 HH(bit)
0.50.8430.1140.0430.72
1.00.6590.2420.0991.01
1.50.5340.2810.1851.35
2.00.4550.3030.2421.50

T=0.5T=0.5 时第一名 84%;T=2T=2 时仍最高但只有 45%。

例 2:产品参数对照

场景推荐 TT原因
代码生成 / JSON0~0.2语法错误代价高
通用聊天0.6~0.9自然多样
头脑风暴1.0~1.2更高创意
事实问答0~0.3降低 hallucination

OpenAI Chat:temperature=0 时配合 确定性引擎(非纯 argmax 的内部实现),行为接近 greedy。

例 3:与 TopP 叠加顺序

常见管线:

def sample(logits, temperature=1.0, top_p=1.0):
    z = logits / temperature
    if top_p < 1.0:
        z = apply_top_p_mask(z, top_p)  # 见 TopP 篇
    probs = softmax(z)
    return multinomial(probs)

先 temperature,再 top_p/top_k,再 softmax——顺序错会改变语义。

量化

  • 熵缩放:TT 增大 1 倍,分布熵单调增(在非退化 logits 下)。
  • 极端 TT:T<0.01T<0.01 在 FP16 下可能 softmax 溢出 为 one-hot;实现常 clamp T≥0.01T \ge 0.01。
  • 延迟:除法 + softmax 无 measurable 差异;T=0T=0 走 argmax 略快(无随机数)。

temperature=0 与 do_sample=False(HuggingFace)并不完全同一——后者常强制 greedy;前者在部分框架仍走采样框架的 argmax 分支。

工程现场:按任务调参

Temperature 不是「创造力滑块」 alone——它改 整个分布形状,与任务 错误代价 强相关:

任务类型建议 TT若过高
JSON / API 输出0~0.3括号、引号错误
中英翻译(单候选)0.3~0.5漏译、增译
通用助手0.7~0.9幻觉增
故事续写1.0~1.2连贯性降

与 TopP 联调经验:许多团队固定 top_p=0.9,只调 temperature;或 temperature=0.8 + top_p=0.95 双约束。单独 T=1.2T=1.2 无 top_p 时,低概率 token 仍可能被抽到——长尾风险 高于 T=0.8,topp=0.9T=0.8, top_p=0.9。

FP16 数值:T=0.01T=0.01 时 z/Tz/T 放大 100 倍,softmax 易 one-hot 溢出;框架常 max(T, 1e-5) 或 直接 argmax 分支。

评测复现:论文报告 pass@k 常 T=0.8T=0.8 多次采样;MMLU 等多用 greedy 或 T→0T→0——对比模型时 采样设置必须一致,否则 ±2~5 点 波动不奇怪。

Entropies 监控:线上可对每步 H(p)H(p) 打点;HH 突然飙升可能 prompt 注入 或 分布 collapse 前兆(需结合业务判断)。

T=0.7T=0.7 经验法则:不少团队 固定 0.7 作为 chat 默认——在 MMLU 与主观多样性 间折中;代码 降到 0.2 往往 compile rate 更高。

Logit bias / 禁止 token:API 的 logit_bias 在 softmax 前 加常数——等价于 手动改 temperature 的局部版本;与全局 TT 可叠加。

曲线直觉

固定 logits,画 T∈[0.1,2.0]T \in [0.1, 2.0] 的 熵 HH 曲线:T<0.5T<0.5 时 HH 骤降(接近 greedy);T>1.5T>1.5 时 HH 趋近 log⁡∣V∣\log |V|——创意写作 与 事实问答 落在 曲线不同区间。

常见误区

  1. 「T=1T=1 是随机,T=0T=0 是确定」——T=1T=1 仍是 按概率 随机;只是分布未被压平/锐化。
  2. 「低温一定更准确」——低温减少胡编,但也可能 重复、死板;代码与创意任务最优 TT 不同。
  3. 「temperature 训练时也这样」——训练 loss 无此 TT;这是 纯推理 旋钮(蒸馏/RL 采样除外)。

动手试一试

固定 prompt,设 T∈{0.2,0.8,1.2}T \in \{0.2, 0.8, 1.2\} 各生成 5 次,统计 唯一续写比例 与 平均长度。

回顾与衔接

Temperature 来自 统计物理 Boltzmann 分布 p∝e−E/kTp \propto e^{-E/kT} 的类比:「能量」低(logit 高)的状态更易占据。T→0T \to 0 只留最低能态 → greedy;T→∞T \to \infty 各态等概率 → 均匀随机。

它与 TopP 正交:Temperature 连续形塑 全部 ∣V∣|V| 项的相对 odds;TopP 离散砍掉 尾部。实践 先 T 后 P 的顺序不能乱——先 P 再 T 等价于 对已是子集的概率再缩放,与「对全词表升温再截核」不等价。

API 文档里的 temperature=0 在部分后端走 专用 deterministic 路径(非数学极限 softmax)——做 回归测试 时用 固定 seed + greedy 双保险。

读者问答

问:temperature=0 和 top_k=1 一样吗?
输出 通常都是 greedy;实现路径不同,极端 logits 下 数值细节 可能差 1 token。

问:能否对 system 低 T、user 高 T?
标准 API 全局一个 T;要分区控制需 分段生成 或 constrained 模板——非默认能力。

速查卡

TT行为
→0greedy
0.3~0.7任务常用
1.0训练分布
>1高熵、高风险

顺序:先 temperature,再 top_p/top_k,再 softmax——勿颠倒。

调参顺序建议:新模型 先 T=0 测能力上限 → T=0.7 测主观 → 再动 top_p;一次只动一个旋钮,否则 无法归因。

第二章 softmax 与概率 是本章数学底座;调参时心里要有 熵 这把尺子,而不是 凭感觉滑 slider。Eval 与 Chat 用不同 T 是 正常工程实践。

Temperature 调参 最忌多旋钮同动:若同时改 system prompt、模型版本、T、top_p,线上 回归将无法归因。建议 固定 prompt 与模型,每次 只动一个采样参数,用 100 条 golden set 做 side-by-side。记住:低温不能补知识,高温不能补逻辑——采样只 重加权,不 增能力。

本章衔接:Temperature 之后 TopK 与 TopP 进一步 截断尾部。三者组合 构成 绝大多数 API 的采样面。调参时 记录 entropy 便于对比。低温不能替代 RAG 与微调——采样 只改分布,不 增知识。调参请谨慎对比验证。

小结

Temperature 通过 zi/Tz_i/T 控制 softmax 锐度:低 TT 贪心、高 TT 多样。下一篇 TopK 在 softmax 前 硬截断 低分候选。

→ 下一篇:TopK

本页目录