把黑箱拆开:手搓一个大语言模型 书架

第 10 章 / 共 16 章

第十章 · 它为什么会一本正经胡说:采样与幻觉

假设你去问一个大模型:"提出'情境涌现理论'的心理学家是谁?"它可能一秒都不犹豫,告诉你是"1987 年由斯坦福的丹尼尔·维克斯特罗姆提出的"。听起来有名有姓、有年份有学校,唯一的问题是:这个理论不存在,这个人也不存在。它不是在骗你,它甚至"不知道"自己在编——因为从它的角度看,它干的事跟回答"今天天气很___"填"好"是一模一样的动作。

这一章我们要拆的就是这件怪事:为什么一个把海量知识都读进去的模型,会一本正经地胡说八道?答案藏在它"怎么选下一个词"这个动作里。而这个动作,本质上是在掷一颗加权的骰子

模型的输出不是一个词,是一整张概率表

前面几章我们知道,模型每走一步,吐出来的其实不是一个词,而是对词表里每一个候选词打的分。假设它现在读到"今天天气很",接下来它会给几万个候选词各算一个概率,大概长这样:

好 → 0.62  热 → 0.18  冷 → 0.09  棒 → 0.05  紫 → 0.0001  ……

注意,这里没有任何一个词的概率是 1,也没有一个是 0。模型从不说"答案就是'好'",它只说"'好'的可能性是六成"。这是理解幻觉的第一块基石:模型的世界里没有"对/错",只有"多大概率"。

就像天气预报说"明天 70% 下雨"。它不是在承诺明天一定下雨,也不是在撒谎——它只是把它掌握的信息压缩成了一个数字。模型每吐一个词,都是在报一次这样的"概率预报"。

从概率表到一个词:掷加权的骰子

有了这张概率表,怎么变成屏幕上真正出现的那个词?最省事的办法是贪心解码(greedy decoding)——每次都选概率最高的那个,上面的例子里就永远选"好"。简单,但有个致命毛病:它太死板了。同样的开头永远给同样的话,而且一旦某步选了个还行但不是最优的方向,它没有回头路,容易钻进死胡同,或者不停重复"我认为我认为我认为"。

所以真实的模型几乎都不这么干,而是用采样(sampling)——按概率抽签。想象一颗特制的骰子:它有几万个面,但每个面的大小不一样。"好"占了骰子表面的 62%,"热"占 18%,"紫"只占了针尖大小的一块。然后闭眼一掷,落到哪个面就选哪个词。

这一下子就把两个关键事实摆到台面上了:

这就是为什么同一个问题问两次,答案会不一样:不是模型"心情"变了,是它每次都在重新掷骰子。随机性是被设计进去的,不是故障。

温度:捏一捏骰子的"公平程度"

现在到了这一章最好玩的旋钮。我们能不能调节这颗骰子——让它更"稳",或者更"野"?能,这个旋钮就叫温度(temperature)

它的原理,是在把分数变成概率之前,先拿分数除以一个数 T。你不需要记公式,只需要记住效果:

温度不是给模型"加知识"或"加创意",它一个字都没多学。它只是在那张已经算好的概率表:往低捏,模型变得像个只肯说标准答案的应试生;往高捏,它变成一个喝了点酒、什么都敢往外蹦的话痨。知识没变,变的只是它有多敢冒险。

你脑子里可以跑一个小实验:给模型开头"从前有一座山,山里有座"。温度 0,它大概每次都老老实实接"庙"。温度调到 1.5,你可能会得到"庙""城堡""会发光的湖""卖煎饼的机器人"——都从同一张概率表里来,只是这次允许小面被掷中了。

顺带一提,实际系统里还常配两个"限流阀":Top-k(只在概率最高的 k 个词里掷骰子,其余直接扔掉)和 Top-p / 核采样(nucleus sampling)(把词从高到低累加,凑够 p 比例(比如 90%)就收手,剩下的长尾全部丢弃)。它们的共同目的都是:既保留一点随机的活力,又把"紫"这种明显离谱的针尖面直接踢出局,别让它有机会被掷中。

那么,幻觉从哪来?

现在我们把所有零件拼起来,就能看清幻觉(hallucination)——也就是模型一本正经地生成看似合理、实则虚构的内容——到底是怎么长出来的。它不是某一处的 bug,而是三件事叠加的必然结果

  1. 它的目标从来不是"说真话",而是"接一个像样的词"。模型被训练的唯一任务,是让接出来的句子读起来像训练数据里的句子。"斯坦福的丹尼尔在 1987 年提出"这种句式,在它读过的半个互联网里出现过千万遍——它是在模仿这种腔调,而不是在核对这个事实。真话和顺口的假话,在它眼里都只是"高概率的词串"。
  2. 它没有"我不知道"这个天然出口。当你问一个它数据里根本没有的冷门问题,那张概率表不会贴心地把 99% 的概率分给"我不确定"。它只会在几个"听起来对"的候选里挑——毕竟编一个像模像样的名字,比空着不答更符合"接一个像样的词"这个目标。
  3. 采样这步,注定了小概率的错答迟早被掷中。就算正确答案占了 95% 的面,那 5% 的错误面也不是零。你问得够多,骰子总有掷进那 5% 的时候。

换句话说,让模型流畅、有创意的那套机制,和让它胡说八道的那套机制,是同一套。你没法只留前者、砍掉后者——它们是一枚硬币的两面。这也是为什么"彻底消灭幻觉"至今没人做到:那等于要求一颗骰子,既能随机掷出惊喜,又保证永不掷错。

所以别再问"它为什么会撒谎"了。它压根没有"真"和"假"的概念,它只有"顺不顺"。一句流畅的假话和一句流畅的真话,对它来说是同一种成功。它不是坏了,它是在正常工作——只是你以为它在查资料,它其实在接话茬。

所以本质上,它就是……

一台掷加权骰子的接话机器。它每一步都在一张"哪个词更顺"的概率表上抽签,温度决定它抽得多保守还是多大胆,而幻觉,只是这颗骰子偶尔掷进了那块"听起来对、其实没有"的小面。

这就带出一个新问题:既然它连一句话里的事实都是现算现掷、不回头的,那它到底"记不记得"你三分钟前说过的话?它有没有记忆,还是每次都在假装认得你?这正是下一章要拆的东西。

把黑箱拆开:手搓一个大语言模型 · 王建硕
面向对世界有好奇心的人 · 费曼式写法 · 由多个 AI 代理撰写与互相审校