温度是大型语言模型中用于控制文本生成过程中输出随机性的一个超参数。它是一个缩放因子,作用于模型最终层产生的logits(即原始未归一化的分数),之后softmax函数会将这些logits转换为词汇表上的概率分布。通过调整温度,开发者和用户可以在生成文本的创造性与可预测性之间取得平衡。
这一概念源于统计力学,其中温度决定系统的熵。在机器学习中,温度被引入作为softmax函数的一种修正方式,有时被称为“softmax温度”,用于锐化或平滑输出分布。温度为1.0时,分布保持不变;温度大于1.0时,熵增加,分布变得更均匀,从而输出更随机;温度小于1.0时,熵减少,分布变得更尖锐,从而输出更确定;温度为0.0(或接近0.0)时,实际上会选择概率最高的token,导致贪婪解码。
温度是LLM推理中使用的多种采样策略之一,与top-k采样和核采样(top-p)并列。这些方法常被结合使用,以控制生成文本的质量和多样性。在实践中,温度根据所需应用来设定:对于需要事实准确性或代码生成的任务,使用较低温度;对于创意写作或头脑风暴,则使用较高温度。
在LLM推理中的作用
在推理过程中,LLM通过计算其整个词汇表上的概率分布来预测下一个token。温度参数在采样前修改这一分布。对于给定的logits集合z,token i的概率计算为softmax(z_i / T),其中T是温度。当T较低时,logits之间的差异被放大,使最可能的token占据主导;当T较高时,差异被缩小,使不太可能的token有更大机会被选中。
这一机制使同一个模型能够针对同一提示产生多样化的输出。例如,温度0.2可能用于客户支持聊天机器人,以确保一致、可靠的回复;而温度0.8可用于创意写作助手,以生成更具想象力的散文。许多LLM API,如OpenAI、Anthropic和Google DeepMind,都将温度作为可配置参数提供。
对输出质量的影响
温度直接影响生成文本的质量和连贯性。低温往往产生重复且安全的输出,但也可能导致“模式崩溃”,即模型陷入循环。高温可能引入语法错误、逻辑不一致或无意义的内容,因为模型可能选择不太可能的token。找到最佳温度通常需要实验,并取决于具体任务和模型。
研究和实践经验表明,中等温度(例如0.7至0.9)通常能在通用文本生成中取得良好平衡。然而,对于代码生成等任务,建议使用较低温度(例如0.1至0.3),以减少语法错误并提高正确性。相反,对于故事生成或对话等任务,较高温度可以产生更引人入胜且多样的回复。
与其他采样方法的关系
温度常与其他采样技术结合使用。Top-k采样将采样池限制为最可能的k个token,而核采样(top-p)则从累积概率超过阈值p的最小token集合中选择。这些方法可以与温度结合,以进一步控制随机性。例如,模型可能使用温度0.8和top-p 0.9,这意味着先应用温度,然后核过滤器选择共同占概率质量90%的最可能token。
在某些实现中,温度在top-k或top-p过滤之前应用,而在其他实现中则在之后应用。具体顺序可能影响最终分布,但基本原则不变:温度调整整体随机性,而top-k和top-p聚焦于最可能的token。
实际考虑
在生产环境中部署LLM时,温度是一个关键参数。它不仅影响输出质量,还影响成本和延迟,因为如果模型探索更多样化的路径,较高温度可能导致更长的生成。一些框架,如Hugging Face Transformers库,为温度和其他采样参数提供了内置支持。
温度在微调和强化学习中也具有相关性。在训练过程中,一种称为知识蒸馏的技术使用温度来软化教师模型的输出分布,使学生模型能够从教师模型的概率输出中学习。在此背景下,温度用于控制标签的“软度”,这可以提高学生模型的泛化能力。
历史背景
温度在softmax函数中的使用早于现代LLM。它于20世纪80年代和90年代在神经网络背景下被引入,尤其由杰弗里·辛顿等研究人员在玻尔兹曼机和神经网络训练中提出。这一概念后来被应用于序列到序列模型,并最终成为基于Transformer的LLM中的标准参数。截至2020年代初,温度已成为LLM API和开源实现中普遍存在的参数。
参见
- Top-P (Nucleus) Sampling
- Top-K Sampling
- softmax
- logits