Temperature(采样温度)

控制模型输出随机性的参数。Temperature 越高,概率分布越平坦(更随机、更有创意);越低,分布越尖锐(更确定、更保守)。通过在 Softmax 前将 logits 除以 T 值实现。

Temperature(采样温度)

一句话理解

Temperature 是模型的"创造力旋钮"——调高则天马行空,调低则中规中矩。

工作原理

Temperature 作用于 Softmax 之前,将 logits 除以温度值 TTT

pi=ezi/Tjezj/Tp_i = \frac{e^{z_i / T}}{\sum_j e^{z_j / T}}pi=jezj/Tezi/T
Temperature效果类比
T0T \to 0T0概率集中在最高分 token,接近贪心照本宣科
T=1T = 1T=1原始分布,不做任何调整正常发挥
T>1T > 1T>1拉平分布,低概率 token 也有机会被选中即兴发挥

数值示例

假设模型对三个候选 token 输出 logits [2.0, 1.0, 0.5]

Temperature概率分布行为
0.5[0.76, 0.17, 0.07]几乎总选第一个
1.0[0.51, 0.27, 0.22]原始分布
2.0[0.39, 0.32, 0.29]三个都有机会

代码实现

python
def sample_with_temperature(logits, temperature=1.0):
    if temperature == 0:
        return np.argmax(logits)  # 贪心
    scaled = logits / temperature
    scaled -= scaled.max()  # 数值稳定
    probs = np.exp(scaled) / np.exp(scaled).sum()
    return np.random.choice(len(probs), p=probs)

实践建议

  • 代码生成 / 事实问答T=0T = 0T=0T=0.2T = 0.2T=0.2,要准确不要创意
  • 创意写作 / 头脑风暴T=0.81.2T = 0.8 \sim 1.2T=0.81.2,鼓励多样性
  • OpenAI API 默认值T=1.0T = 1.0T=1.0

Temperature 通常和 Top-k / Top-p 配合使用——先用 Temperature 调整分布形状,再用 Top-k/Top-p 截断尾部。