AI 幻觉现象解析:为什么 AI 会说谎
用通俗语言解释 AI 产生幻觉的机制。有助理解 AI 局限,但缺乏改善方案和实操指导。
用通俗语言解释 AI 产生幻觉的机制。有助理解 AI 局限,但缺乏改善方案和实操指导。
上一篇文章中,我向你展示了 AI 如何完成一件真正有用的事:帮我调整一份晚宴食谱。我们还介绍了一个基本循环:向 foundation model 发送 prompt,然后获得 response。
今天,我们来聊聊 AI 为什么会对你撒谎。
你应该见过这种情况:AI 明明完全错了,语气却无比自信。这叫作“幻觉”(hallucination)。它可能决定你是否会长期信任 AI,也可能让你因此吃个大亏。
我在 Amazon Bedrock Playground 中向两个不同的模型提出了同一个问题:
“最近的天琴座流星雨发生了什么?”
Nova Micro 给了我许多细节。日期、地点、数字,应有尽有,而且说得无比自信。它没有犹豫,没有附加任何保留说明,只是像自己确切知道答案一样直接作答。
但它其实并不知道。它的训练数据截止于 2023 年,在那之后发生的任何事情,都是它无法看到的空白。它没有指出这一点,而是直接用看似合理的内容填补了空白。
这就是幻觉。模型会编造看似合理的内容,填补它不知道该如何承认的知识空白。它不是故意撒谎,只是在做它被设计来做的事情:预测一个听起来有用的答案应该是什么样子。至于这个答案究竟是不是真的,它完全没有概念。
同样的问题,换成了一个更新、训练数据也新得多的模型。
Haiku 直截了当地告诉我:“我无法访问当前信息。我的知识最后更新于 2024 年 4 月。”接着,它介绍了一些关于天琴座流星雨的常识,并建议我查看近期的天文网站。
这是进步。较新的模型更善于识别自身知识的边界。
我给了它一个 Space.com 文章的链接,它告诉我自己无法浏览互联网。
于是,我上传了那篇网站文章的 PDF。由于文件大小有限制,我只提供了开头几页。随后,它根据来源中的真实细节,给出了准确的回答。
也就是说,在这个案例中,我们为模型提供了一些上下文,它再基于这些上下文给出答案。
“介绍一下 Rohini Gaonkar。”
它没有丝毫犹豫。它告诉我,我是“一位知名的印度作家、学者和文化评论家”。我在 Duke 获得了比较文学博士学位,是 University of Minnesota 的教授,还编辑过多部有影响力的后殖民理论文集。
这些内容没有一句是真的,一个细节都不对。
模型不知道我是谁,但它知道学者传记通常长什么样。于是,它生成了一份传记,里面甚至包含研究兴趣、代表作品和所获认可。全部都是编造的,语气却无比自信。
所以,Haiku 知道什么时候该停下来,Nova Micro 却不知道。
但这两个模型背后的机制其实相同:预测。
一个拥有更好的 guardrails,另一个则会填补它遇到的每一个空白。
幻觉不只与训练数据截止日期有关。只要模型的知识存在空白,它就可能尝试填补。比如它没见过的人名、小众话题,或者训练期间从未学过的组合。更好的 guardrails 确实有所帮助,但无法让问题彻底消失。
关于人名测试,需要特别说明一下:我有意使用了自己的名字。如果模型编造了什么有关我的离谱内容,唯一受到影响的人就是我。如果你想用其他人的名字进行这类测试,请谨慎考虑,尤其是普通人的姓名,或者没有同意参与实验的人。无论模型对他们说了什么,那些内容都是由你生成的,而且有可能经由你传播出去。所以,请务必谨慎。
还记得上一篇文章中的循环吗?
Input (prompt) → Foundation Model → Output (response)
模型会根据训练期间学到的一切,预测一个有用的答案应该是什么样子。
这里的关键词是“训练期间”。
训练会在某个特定日期结束,这个日期叫作“训练数据截止日期”(training cutoff)。在此之后,模型就被冻结了。当你询问截止日期之后发生的事情,或者询问它从未真正学会的内容时,它有两个选择:回答“我不知道”,或者做它被设计来做的事,也就是预测。
长期以来,这些模型都不太擅长说“我不知道”。因为这不是它们在训练中获得奖励的行为。它们获得奖励,是因为能够生成流畅、听起来有用的答案。因此,它们就会继续生成这样的答案,即使答案是编出来的。
幻觉有多种表现形式:编造事实,比如前面的虚假传记;把过时信息当成当前信息,比如流星雨的问题;即使来源就在眼前,也无法稳定地复现内容,比如引用段落的测试。除此之外,还有错误归因、谄媚式认同——即使你说错了也顺着你的话说,以及自信地过度推断——把某种规律延伸到数据根本无法支持的范围之外。
背后的机制始终相同:用预测填补空白。但了解幻觉的具体类型,可以帮助你设计正确的缓解措施。在后续文章讨论 grounding、evaluation 和 guardrails 时,我们会深入介绍这些措施。
如果你是一名开发者,这种情况应该会让你觉得很熟悉。想象一下 DNS 缓存:你把应用迁移到了新服务器,更新了 DNS 记录,但接下来一个小时里,仍有部分用户被路由到旧 IP。缓存不知道记录已经发生变化,它只会自信地返回自己已有的内容,因为它的设计目标就是始终快速给出答案。
又或者,你根据错误的指标进行自动扩缩容。你使用 CPU 作为扩缩容指标。CPU 使用率很低,所以系统认为一切正常。与此同时,你的队列里却积压了 10,000 条尚未处理的消息。系统被优化成只响应一个信号,因此,即使问题越积越多,它仍然会自信地什么都不做。
AI 模型的工作方式与此相同。它接受的训练要求它始终生成听起来有帮助的答案。因此,即使它不知道某件事,仍然会生成一个听起来有帮助的答案。它没有“什么都别说”的本能,只有“说点看起来有用的东西”的本能。
现代模型已经更善于拒绝回答,但这个问题的底层形态并没有消失。模型并不知道自己知道什么,它只是在进行预测。
是的,如今大多数聊天工具都可以在网上查找信息。但执行搜索的并不是模型本身,而是接入模型的工具。
我们会在后面的文章中介绍它的工作原理。今天,我们只看模型独立运行时的表现:没有互联网,没有工具,只有它在训练中学到的内容。
我把真正的文章以 PDF 形式交给 Nova Lite,让它引用第二段。
它给了我一个回答。接着,我再次提出完全相同的要求,却得到了另一个不同的答案。同一个来源、同一段对话,它给出了同一段文字的两个不同版本。
即使来源就摆在眼前,它也没有逐字提取那一段。我在同一段对话中,针对同一份文档提出了两次相同的问题,却得到了两个不同的版本。它不是在检索,仍然只是在预测那一段大概是什么样子。而预测并不是确定性的。
这一点很重要,因为很多人以为:“只要把文档交给 AI,一切就没问题了。”
这样做确实会更好,但并不完美。情况可能变得复杂而混乱,尤其是面对依赖精确措辞的内容时,例如法律文本、药物剂量或合同条款。你仍然需要核实模型的回答。
上下文可以减少幻觉,但无法消除幻觉。
如果你每天都在使用 AI,可以留意以下几个信号:
无法核实的具体细节。比如你无从查证的领域中出现了具体姓名、日期、数字或 URL。默认它只有一半概率是真的。
在本应模糊的话题上侃侃而谈。如果你询问一个小众或近期的话题,却得到一个自信而详尽的答案,就应该保持怀疑。真正的专业知识会有所保留,幻觉却不会。
引用,尤其是 URL。模型会编造看起来真实的来源。如果它给了你一个 URL,请打开验证。十次中可能有九次没问题,但第十次可能就是一篇根本不存在的论文。
如果你更偏向开发者一侧,请记住:幻觉不是一个打补丁就能修复的 bug,而是系统本身的一种属性。你需要通过 grounding——向模型提供真实上下文、通过 instructions——要求模型在不确定时拒绝回答,以及之后介绍的 evaluation 来缓解幻觉。围绕幻觉进行设计,本身就是你的工作。
如果你刚开始接触 AI,请记住:AI 不是搜索引擎。它是一个非常擅长让自己听起来正确的预测引擎。对待它给出的具体断言,就像对待聚会上一个充满自信的陌生人:可以友好交流,但在转述之前一定要核实。
下面是我在互联网上发现的一些例子,仅供娱乐和学习之用(随着模型不断追赶进步,答案也可能发生变化):
“strawberry”这个单词里有几个字母“r”?
如果我要去洗车,而洗车店距离我 100 英尺,我应该开车去,还是走路去?
Haiku、Sonnet、Opus,Mini、large、pro。说真的,你到底应该选哪一个?
这就是下一篇文章的主题。继续和我一起探索吧。
本文属于“Learning AI Out Loud”系列,记录一名云架构师如何从第一性原理出发学习 AI。
继续关注本系列。
部分评论可能仅对已登录的访客可见。登录后即可查看全部评论。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。