Temperature(采样温度)
控制模型输出随机性的参数。Temperature 越高,概率分布越平坦(更随机、更有创意);越低,分布越尖锐(更确定、更保守)。通过在 Softmax 前将 logits 除以 T 值实现。
Temperature(采样温度)
一句话理解
Temperature 是模型的"创造力旋钮"——调高则天马行空,调低则中规中矩。
工作原理
Temperature 作用于 Softmax 之前,将 logits 除以温度值 T:
pi=∑jezj/Tezi/T| Temperature | 效果 | 类比 |
|---|---|---|
| T→0 | 概率集中在最高分 token,接近贪心 | 照本宣科 |
| T=1 | 原始分布,不做任何调整 | 正常发挥 |
| T>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=0 或 T=0.2,要准确不要创意
- 创意写作 / 头脑风暴:T=0.8∼1.2,鼓励多样性
- OpenAI API 默认值:T=1.0
Temperature 通常和 Top-k / Top-p 配合使用——先用 Temperature 调整分布形状,再用 Top-k/Top-p 截断尾部。