第 13 · 幻觉 · 9 min
为什么 LLMs 会编造
校准、错误的笃定、应对措施。最常被诟病的现象背后的结构性机制——以及我们能为此做些什么。
最常见的批评
你向一个 LLM 询问某个冷门话题。它一本正经地回答你:一条参考文献、一个日期、一段引言。你去核实。书根本不存在。日期是错的。那句话从未被说过。
这种现象有一个正式的名字——幻觉(hallucination)——这大概是人们对 LLM 最先抱怨的事情。它不是偶发的 bug:而是一种结构性属性。要理解为什么,你得回到模型是如何被训练的这一点上。
三种叠加的机制
1. cross-entropy 不奖励"不确定"。 在预训练阶段(第 06 章),目标是最小化正确 token 的对数概率。在任何一刻,模型都没有学过说"我不知道":它学到的是永远预测出某个东西,越合理越好。如果正确答案不在它的权重里,它就会生成最听起来像样的那串字符,而不是承认无知。
2. RLHF 奖励自信,胜过奖励诚实。 在对齐阶段(第 08 章),人类对回答进行排序。平均而言,他们更喜欢一个自信、措辞得体的回答,而不是一句"我不太确定"。reward model 把这种偏差学了过来,于是 LLM 学会了显得很笃定——哪怕它其实并不笃定。
3. 没有内部的验证回路。 一个正在编造引言的人会停下来、怀疑、去核实。一个一个 token 地生成的 LLM 没有这种机制。它只会一直往前走,没有任何外部检查,每一个 token 都按照同样的"合理性"逻辑催生出下一个。
幻觉不是 bug。它是一个被训练成永远生成合理文本的系统,碰上一个答案不在它权重里的问题时,会发生的事。
calibration 问题
一个 calibration 良好的模型,是指其表达出的自信程度与回答正确的概率相符。如果它说"我有 80% 的把握",那它就应该在大约 80% 的情况下是对的。
原始的 LLM(在 RLHF 之前)在自己的内部概率上意外地 calibration 良好。但对齐却破坏了这种 calibration:通过奖励自信,它把模型推离了它自己预测背后的统计真相。
这就解释了那种"一本正经地胡说八道"模式:并不是模型不知道它不知道。而是它的训练促使它去掩盖这种不确定性。
模型会为它的每一句话赋予一个概率。一个错误但语义连贯的陈述常常得到很高的分数:这是幻觉的结构性机制,不是某个补丁能修好的偶发 bug。
试着输入几个问题。观察模型表达出的自信程度和它回答正确的概率,并不总是沿着同一条曲线走。打开 + RAG 或 + 扩展推理,看看这些对策如何缩小这道差距。
四类对策
幻觉不会随着对齐做得更好而消失。它们是结构性的。要在实践中减少它们,你需要系统性的杠杆,而不仅仅是一个更好的模型。
1. 把模型连接到工具(第 11 章)
规则是:凡是 LLM 做得不好的事,都交给一个确定性系统去做。算导数?code interpreter。查股票行情?API。检查文件是否存在?file system tool。模型不再尝试猜测结果——它直接观察它。
效果:在工具覆盖的领域里,幻觉降到零。在其他领域,幻觉依然存在。
2. RAG(第 10 章)
与其问模型它记得某个话题的什么,不如在它回答时直接给它可靠的来源。书目类和事实类的幻觉会大幅减少,因为模型可以引用它正在读到的东西,而不只是它想象出来的东西。
局限在于:如果来源本身有问题或者没被检索好,模型就会在这些来源的内容上产生幻觉。即便给了它好的来源,它也可能过度外推("来源说了 X,所以必然 Y")。
3. 扩展推理(第 17 章)
一个愿意花时间在回答前核查自己草稿的模型,会犯更少错。reasoning 模型(o1、o3、Claude extended thinking)会生成一条不可见的思维链,在这条链里它可以重算、推翻某一步、改走另一条思路。
这并不完美——模型也可能在自己的推理之中产生幻觉——但仅仅是把推理步骤展开这件事本身,就能拦截住相当一部分错误。
4. 在"不确定"上显式做 fine-tuning
研究方向上最有前景的一条:训练模型去 abstention(弃答)。你给它看一些 (问题, 答案) 的配对,其中当内部概率较低时,正确的答案应是"我不知道"或"我没有这方面的信息"。模型学会识别自己的自信水平,并把它表达出来。
好几家实验室在做这个(DeepMind、Anthropic)。距离稳健可用还有一段距离,但这是唯一一种真正从根上去攻这个问题的技术。
在实践中识别幻觉
一些对用户端有用的启发法:
- 要求来源。 如果模型给不出来源,或者把来源编出来,就把它的回答当作可疑的。
- 核查具体细节。 专有名词、日期、确切数字、引言,是高风险区。一般性内容通常没什么问题。
- 换种方式重新提问。 一个正在编造的模型对同一个问题的同义重述往往给出一致的回答——但对差异较大的不同重述,回答会前后不一致。
- 问问模型它的自信水平。 不完美,但与回答的实际质量是相关的,尤其是在最近的模型上。
- 和另一个模型交叉比对。 两个模型几乎不会产生相同的幻觉。一个 GPT-4 和 Claude 都给出相同答案的问题,正确的可能性会高得多。
要记住的几点
三件事。
第一。 幻觉不是模型的缺陷:它是模型训练目标的必然后果。任何浮于表面的 fine-tuning 都没法让它消失。
第二。 在生产中真正有用的对策都是系统性的(RAG、工具、推理、abstention)。它们单独使用没有一个是完美的;组合起来用,才能把幻觉率压到对大多数场景而言可以接受的水平。
第三。 对终端用户来说,最好的防御依然是不要盲目相信,尤其是在那些具体的细节上(来源、日期、数字)。一个一本正经回答你的 LLM,并不构成它说得对的证据。
问一个 LLM"你确定吗?"并不是在做核查。它只不过是又一次"合理文本"的生成。
更新于