Temperature 是什么?
在LLM(大型语言模型)的生成过程中,Temperature 是一个控制生成文本随机性的参数(中文含义:温度)。它决定了模型在选择下一个词时,对所有可能的词的概率分布的“软化”程度。
- 低 Temperature (接近 0): 模型会更加“确定”,倾向于选择概率最高的词。结果通常会更保守、更可预测、更集中,并且更接近于训练数据中常见的表达方式。
- 高 Temperature (接近 1 或更高): 模型会更加“随机”,会给概率较低的词也提供机会。结果通常会更具创造性、更不确定、更多样化,甚至可能出现一些不符合逻辑或语法规则的文本。
- 高 temperature (例如 0.7 - 1.0 或更高): 会使概率分布更平坦,让模型更有可能选择概率较低的词。这会产生更多样化、更具创造性、甚至更出人意料的输出,但同时也可能导致输出不连贯或不准确。
- 低 temperature (例如 0.0 - 0.3): 会使概率分布更陡峭,让模型更有可能选择概率最高的词。这会产生更保守、更可预测、更符合训练数据的输出,但可能缺乏创造性和多样性。
- temperature = 0: 理论上,模型会总是选择概率最高的词,输出完全确定性。但在实际应用中,通常不建议设置为 0,因为这会导致输出过于单调和重复。
Temperature 在 LLM 推理/训练中的作用
-
推理 (Inference): 在实际应用中,我们通常使用 Temperature 来调整模型的生成风格。
- 需要准确、可靠的输出 (例如:翻译、代码生成): 使用低 Temperature,以确保输出的准确性和一致性。
- 需要创造性、多样化的输出 (例如:故事创作、诗歌生成): 使用高 Temperature,以鼓励模型探索不同的可能性。
-
训练 (Training): 在模型训练过程中,Temperature 也会被使用,但通常会结合其他技术(例如:KL 散度正则化)来控制模型的生成能力。Temperature 的作用是影响模型在学习过程中对不同词的概率分布的调整。
Temperature 具体到源论文中的相关公式
Temperature 的概念最初出现在 NIPS 2018 论文《Sequence Temperature Sampling for Language Generation》中。 论文中并 Temperature 参数主要应用在softmax函数中,用于调整 softmax 函数的输出。
softmax 函数的公式如下:
$P(w_i | w_1, w_2, ..., w_{i-1}) = \frac{e^{z_i}}{\sum_{j=1}^{V} e^{z_j}}$
其中:
- $P(w_i | w_1, w_2, ..., w_{i-1})$ 是在给定前 i-1 个词 $w_1, w_2, ..., w_{i-1}$ 之后,第 i 个词 $w_i$ 的概率。
- $z_i = \mathbf{v}^T \cdot \mathbf{W}_i$ (其中 $\mathbf{v}$ 是一个向量,$\mathbf{W}_i$ 是一个权重矩阵)
- $V$ 是词汇表的大小。
Temperature 的作用就是改变 $z_i$ 的值:
$z_i' = \text{Temperature} \cdot \mathbf{v}^T \cdot \mathbf{W}_i$
因此,新的概率分布为:
$P'(w_i | w_1, w_2, ..., w_{i-1}) = \frac{e^{z_i'}}{\sum_{j=1}^{V} e^{z_j'}}$
可以看到,当 Temperature > 1 时,指数函数会被“软化”,从而降低了概率最高的词的概率,增加了其他词的概率。
Temperature 取值范围一般多少?
- Temperature 的取值范围通常在 0 到 1 之间。
- 0: 完全确定性,输出总是概率最高的词。
- 1: 标准设置,平衡了可预测性和创造性。
- 大于 1: 更具创造性,但可能导致输出质量下降。
场景 | Temperature 取值范围 | 说明 |
---|---|---|
写作 (小说、诗歌) | 0.7 - 1.2 或更高 | 需要更多创造性和多样性,可以尝试更高的值。但要注意控制输出的质量,避免出现胡言乱语。 |
知识问答 | 0.0 - 0.5 | 需要准确和可靠的答案,应该选择较低的值,以减少模型产生错误信息的可能性。 |
代码生成 | 0.2 - 0.6 | 需要代码的正确性和可执行性,较低的值可以提高代码的质量。 |
创意文本生成 | 0.5 - 1.0 | 在创造性和准确性之间寻求平衡。 |
注意: 这些只是建议的范围,最佳值取决于具体的任务和模型。需要根据实际情况进行调整。
总结
Temperature 是一个重要的参数,它控制了 LLM 生成文本的随机性。通过调整 Temperature 的值,可以控制模型的生成风格,使其更适合不同的应用场景。
在本地部署大模型Deepseek、llama、gemma等时,可以适当调整不同的Temperature 参数,以获得更好的输出。
在UpHub AI中如何在对话中设置Temperature 温度