Skip to content
L2 里面是什么

温度与采样:同一个问题能答出不同花样

同一句提示词问十遍,它给十个答案。它没打算给标准答案。

像从一排词里抽签,签的松紧由你定 ​

温度(temperature)——控制随机性的大小旋钮。

先说清楚前提。模型每写一个字,不是在「想」下一个字,而是在算一个概率表:「的」占 30%、「了」占 20%、「但是」占 2%……然后从这张表里按比例抽一个。

温度就是作用在这张表上的除数。温度低,所有概率往第一名身上挤,抽样近乎必选。温度高,概率被压平,长尾的冷门词也有机会被抽中。

温度为 0 的时候基本就是选最大的那个,一句提示词跑两遍结果一样。这也是我推荐做数据整理、跑基准测试时用的设置。

但说白了,温度只改分布的形状,不改排序。谁概率第一,升温以后还是它,只是第二名第三名的机会大了。所以温度救不了乱答,只能让答案更多样或者更死板。

温度到底调出了什么 ​

低温度(0 到 0.3):几乎每一步都选最可能的那个词。写出来的东西稳,但也容易重复、套路化,遇到需要一点想象力的题就发僵。

高温度(0.8 以上):冷门词有了机会,文风活,但事实性掉得很快。

我自己踩过的坑:让一个模型用高温度写产品介绍,第三次它给我编了一个不存在的联合创始人,还顺带捏了两个用户量数字。这就是幻觉(hallucination)——编造出看着像真的、实际不存在的东西。

现在的主流模型在接口层都把温度默认放在 1 左右,目的就是别让所有人一上来就调到 0 拿到一篇读着像八股的答案。要它稳,你得自己动手。

另一个旋钮:先砍掉长尾 ​

只调温度有个问题。哪怕温度不高,「的」这种词也永远占着前三名,于是模型能一直写下去不换气。

2019 年底华盛顿大学那组人发现了这件事,他们管它叫文本退化:追求最高概率的解码方式会写出一片平淡、还容易在循环里卡住的东西——「他去了公园。他去了公园。他去了公园。」

他们提的解法叫核采样(nucleus sampling,也叫 top-p):不要固定的前 k 个候选,而是按概率从高往低累加,累到某个比例 p 就停,只在这个集合里抽。p 越小越保守。

这几乎是现在所有主流模型的默认搭配。温度管分布的软硬,top-p 管候选的多少,两个一起调。

顺带一提,2023 年底有人把这件事补完了:为什么这种「砍掉低概率」的做法有效,过去没人说得清。那篇论文证明了一件挺漂亮的事——凡是按阈值砍掉低概率词元的采样方法,都能保证抽出来的词一定在真实分布里出现过概率。

我自己的取值习惯 ​

不总结成规则,只说几个我确实这么干的场景。

  • 写代码、做表格、跑固定格式的东西:温度 0。
  • 要创意、要几个完全不同的开头:温度 1.2 左右,生成五遍挑一个。
  • 问事实性问题:温度不用动,但把问题里的关键约束写死,比调温度有用得多。

温度不能救幻觉,只能让幻觉出现得更随机。

延伸阅读 ​

  • The Curious Case of Neural Text Degeneration(Ari Holtzman、Jan Buys、Li Min Du et al.,2019,arXiv 预印本)—— 这篇的核心观察有点反常识:同一批模型,拿来做理解任务质量很好,拿来做生成任务就会输出平淡、重复、卡循环的东西。作者的结论是训练目标和解码目标不是一回事。核采样就是这篇提出来的。arXiv: 1904.09751

  • Closing the Curious Case of Neural Text Degeneration(Matthew Finlayson、John K. Hewitt、Alexander Koller et al.,2023,arXiv 预印本)—— 四年后有人来收尾。前面那篇提了核采样但没解释为什么管用,这篇证明了按概率阈值砍掉长尾的采样法,能保证每个抽出来的词元在真实分布里概率不为零,同时指出阈值是个粗办法、会连带扔掉一些其实有概率的词。arXiv: 2310.01693

动手试试 ​

挑一个你常用的对话工具,同一句提示词连发三次,一字不改,连着发。看完三个答案再往下。

我的经验是:八成情况下它会给你三种说法,而且三种都还行。剩下的两成会让你怀疑是不是按了重抽键。

然后把提示词里加一句「用三种完全不同的风格各写一遍」,对比一下——你会发现主动要多样性和被动等它多样,出来的东西质量差很多。前者它会主动拉开风格,后者只是换同义词。

下一站 ​

这一层最后一页。我们把「7B」「70B」这些数字拆开看,顺便把三种常被混为一谈的做法理清楚——微调、低秩适配、检索增强生成,它们各自动的到底是什么。

内容用 VitePress 构建,站内链接全部为相对路径。