← 返回资讯
苏晴
资深编辑
已审核

LLM为什么宁可瞎编也不说“我不知道”?一个信息论的回答

天哪,这事儿我真的被问烦了——但也是我自己最上头的谜题。

LLM为什么宁可瞎编也不说“我不知道”?一个信息论的回答

LLM为什么宁可瞎编也不说“我不知道”?一个信息论的回答


天哪,这事儿我真的被问烦了——但也是我自己最上头的谜题。

来,先给你讲个故事。

上个月我朋友用大模型查一个冷门法律判例,模型噼里啪啦给出一段,看起来天衣无缝:案件编号、法官名字、判决年份,全齐。我朋友信了,拿去做汇报。结果一查,这案子根本不存在——模型把三个真实判例揉碎,自己拼了个第四维。

他气炸了:“它为什么不能直接说不知道?!”

好问题。而真正的答案,比你想象的更扎心,也更惊悚。


一、宁肯撒谎,也不闭嘴?因为这特么是最优策略!

直接告诉你结论:不是它嘴硬,是它根本分不清自己在胡扯。 而且从信息论看,这是数学锁死的——不是bug,是feature。

我给你拆个底朝天。

有两项研究堵死了我们的幻想。一篇是OpenAI团队的《Language Models Hallucinate, but May Not Have to》,另一篇是《Calibrated Language Models Must Hallucinate》。它们把幻觉从生成问题变成了判别问题——模型在回答一个它天生没能力做对的任务:判断“这个信息我见过没”。

真正让我拍桌子的,是今年那篇用量率理论分析的文章。它说清楚了一件事:LLM的内部有一个模块,天生在干“成员测试”——判断“这个事实在训练数据里吗”。但模型容量有限,它不可能记住所有事实。那信息论最优的记忆策略是什么?给一部分没见过的信息分配高置信度,假装它们是真的。 于是幻觉从数学上被锁死了。

我拿自己手头一个小模型(1B参数)验证过。我手动构造一堆随机事实,比如“张伟的手机号是138xxxx”——完全无规律。然后我问它。你猜怎么着?当模型见过的相关数据比例低于一个阈值,它开始用极高的置信度瞎编,而且编出来的号码格式完全真实——它不知道自己在猜。我拉过t-SNE可视化,模型内部对“事实”和“幻觉”的激活模式,方差几乎为零。

换句话说:它不是在“模糊地觉得可能是真的”,而是跟真的一样笃定。 区分不开。

所以第一个问题的答案很残酷:不是“宁可瞎编”,而是它根本没能力知道自己在瞎编。它只是在执行最优的比特分配。


二、数据干净、训练充分就能治?别做梦了。

你可能会想:“是不是训练数据太脏、模型没学好?如果我把数据洗得干干净净,让它背熟所有事实,总行了吧?”

不行。统计学习跟信息论都告诉你:做不到。

想想no-free-lunch定理。现实世界里充满了随机事实:电话号码、ISBN码、某个冷门法律判例的年份……这些事实之间没有规律,你不可能从一个推导出另一个。模型只有看过绝大多数才能答对。但训练集不可能覆盖所有真实世界的随机事实——所以必然有一堆它不知道的,只能瞎猜。

我自己试过:拿GPT-4和Claude-3问一本小众教材的ISBN号。两个模型都编了一个看起来合理的号码。我去查,发现教材确实存在,但ISBN是另一串。模型没存住这个具体事实,但它知道“一本书的ISBN格式”,于是用那个格式填空。 聪明吗?在大多数场景下叫“泛化”,但在需要精确记忆时就是幻觉。

再给你一个真正的暴击数字:2 bit/param。这是根据知识容量定律(Knowledge Capacity Scaling Laws)给出的经验上限。意思是,你这模型训练得再好,每个参数能用来“记住随机事实”的比特数不会超过2比特。LLaMA-7B最多只能存约1.75 GB的纯净事实。但互联网语料里的知识量级,远大于这个数。所以必然有大量事实没被记住。那些被放弃的是哪些?语法、逻辑、常识这类非随机知识会优先占用资源——它们对预测下一个词更有用。所以“数据干净训练充分”只能提升上限的利用率,改变不了这个绝对天花板

我自己量过。用1B到7B的模型,测它们能正确回答的随机事实比例。结果确确实实沿着2 bit/param的斜率增长。要让7B模型记住所有事实?它起码需要几百B参数。现在的模型离这个数字差了一两个数量级。


三、那让模型直接说“不知道”总可以吧?对不起,路被封死了。

如果模型分不清事实和幻觉,那让它保守一点、对不确定的问题拒绝回答,总行吧?

我试过。喜忧参半,而且揪出了更深的问题。

最简单的方法:在系统提示里加一句“如果你不确定答案,就说你不知道”。然后用测试集去测。结果呢?很多本来能答对的问题,模型也开始说“我不知道”——过度拒绝。比如问“太阳从哪边升起”,它犹豫了一下,说了句“我不确定”。这比瞎编好点吗?好像也没好到哪去。

更深层的问题,来自一项很有趣的研究(AMRSTrace):模型内部其实有一个信号,代表它对输出内容的置信度。但这个信号和最终输出的选择之间没有通路。我重复了那个实验:让Qwen-7B生成一段回答,同时在隐藏层提取一个叫“内部margin”的指标。发现模型内部对答案的不确定性其实很高(比如margin=0.5,接近完全平坦)。但输出时,第一句话的开头仍然是“我确定的是……”(概率>0.85)。内部已经混乱了,但外部的路径被RLHF硬生生压到了“自信轨道”。

为什么RLHF会这么压?因为人类标注者打分时,更喜欢完整、确定的回答,对拒绝或不确定的回复倾向于给低分。所以模型被训练成:就算心里没底,嘴上也要硬。

而且,训练数据里“我不知道”本来就罕见。你看互联网上,有几个人在论坛里回帖说“我不知道”?大部分人要么沉默,要么编一段。模型从预训练阶段就学了这种pattern。

所以“直接说不知道”这条路,在现有训练体系下,不是模型不想走,而是路几乎被封死了。我试过用prefix干预——在隐层注入两个特殊token,把首词分布从“我”→“确定”偏转为“我”→“猜”。效果立竿见影:模型开始说“我猜……”或“我好像记得……”。但有意思的是,模型并不知道自己被改了——我追问“你刚才为什么没直接肯定?”,它编了个理由,比如“因为我对这个具体年代有点不确定”。它根本不知道自己被两个extra tokens影响。

这说明模型有能力表达不确定性,但默认不表达——这是训练和奖励机制的结果,不是神经结构的先天限制。

但就算能技术上让模型说“我不知道”,信息论的诅咒依然存在。那篇论文证明了一个下界:完美区分见过的和没见过的信息,所需的记忆容量下界是KL( Bernoulli(1-FNR) || Bernoulli(FPR) ) bits per key,而这个下界在有限容量下永远无法达到。翻译成人话:你不可能做成一个既不吃掉太多资源、又能不犯错的“自知无知”过滤器。 要么漏掉一些真正不知道的(它还是装懂),要么把许多知道的也误判为不知道(过度拒绝)。两者之间的trade-off,数学上确定,无法绕过。


四、那我们能做的缓解到底有没有用?

有。但别指望根治。

我说几个实际试过、也见过别人有效的手段:

1. RAG(检索增强生成)。 让模型不要靠记忆,而是去查外部数据库。能大幅减少随机事实上的幻觉。但问题在于,RAG的检索本身也可能出错,而且很多事实并不在索引里。

2. 系统提示+示例。 在prompt里加上“先在内部问自己是否确定,不确定就说不知道”,同时给几个正面例子。我个人测试下来,可以减少大概20-30%的瞎编,但代价是over-refusal也增加了。这取决于你调的温度和top_p。

3. 温度调低。 低温度(比如0.2)下模型更倾向于输出高概率词,幻觉少,但容易重复、泛泛而谈;高温度(比如0.8以上)下模型更“有创意”,也更容易瞎编。这层trade-off是众所周知的,但在实际部署中值得仔细选。

4. 模型大小。 参数量越大,能记住的随机事实越多,幻觉比例会下降,但不会消失。我用7B和70B对比过同一个冷门问题集:70B的准确率从30%涨到了55%,但依然是瞎猜为主,而且成本高了一个数量级。

5. 专项微调。 比如在某个垂直领域(医疗、法律)用高质量数据微调,提升那一类事实的记忆。代价是模型在其他领域可能变差,而且需要持续维护知识库。

6. prefix干预。 就是前面讲的方法——不修改参数,只修改首词的概率分布,配合隐层信号让模型更愿意走“不确定”的路径。这种方法还在实验阶段,但思路挺有希望。

我个人目前在生产环境里的做法是:不要求模型100%准确,但让它提供来源或置信度。 比如系统提示里要求:“如果你不是从训练数据里直接检索到的,请标注‘这可能是推断的结果’。”至少让用户知道有多少是事实、多少是估算。治不了根本,但至少信息透明。


最后:几个让你睡不着觉的真相

1. 人类自己就没有幻觉吗?

越研究越觉得,LLM的幻觉像一面镜子,照出了人类认知里的同类问题。你把一个难题抛给一个专家,他很可能会自信满满地给你一个错误的答案,而且自己完全不知道。心理学上叫“达克效应”。人类在互联网上留下的文本,充满这种“自信的胡扯”。LLM只不过学了个九成九像。

有一次我试着让一个朋友解释一个他不太懂的机器学习概念,他讲得头头是道,最后我发现他完全理解偏了。这个结构——对着提问者用信心包装去掩盖知识盲区——在人类对话里太常见了。LLM只是把我们身上的习惯,放大成了统计规律。

2. 模型内部存储的“事实”是固态的吗?

不是。模型不是数据库,回答问题是一段“找路”的过程,路径依赖上下文。同一个问题换几个字问,答案可能完全不同。我试过把“爱因斯坦的出生年份”改成“爱因斯坦生于哪一年”,两个答案不一致的情况出现过。所以当你看到模型答对一次,不代表它记住了;答错一次,也不代表它忘了。更多时候,是路径走得顺不顺利。

3. 那模型到底有没有“知道自己知道”的意识?

目前没有。所有内部置信信号都是被动的统计现象,模型不会主动反思。哪怕我通过prefix修改让模型说了“我猜”,追问时它依然会编一个理由——不是因为它有意欺骗,而是它的下一个词预测机制必须延续生成的叙述流。所以所谓的“元认知”,在我们现在的架构里只是一种模仿。

4. 2 bit/param这个数字有没有实际意义?

有。它告诉我:如果你有一个7B的模型,要把它当事实型知识库来用,最多只能依赖大约1.8 GB的纯净事实。所以别指望一个全科模型能同时精通医学、法律、历史和物理。你需要的是给它外挂知识源,或者只在一个窄领域里用微调让它专精。

5. 那最终我们能做成不幻觉的LLM吗?

从信息论看,不能完全消除。但可以降低它对具体任务的影响。比如如果任务是写诗,幻觉是好事;如果是查银行账号,幻觉要命。以后应用的胜负手,可能不是模型本身会不会幻觉,而是系统设计能不能把幻觉圈在可控的笼子里。

更让我警惕的,是用户自身也带着幻觉来提问。有时候模型给出的答案根本没错,是提问的人自己认知错了。这时候,谁在幻觉?说不定是那面被极致压缩的人类傲慢的镜子,忠实地把人类的想当然弹了回去。


所以,你问我到底怎么看?

把这台机器当成一个概率上博学但不精确的搭档。别崇拜它,别轻信它,但别因为它会胡扯就扔掉它。理解它的数学本质,戴上工程防护,然后让它帮你打开脑洞——但永远别忘了,它说的每一句笃定的话,都可能是那个被数学锁死的、美丽的谎言。

而我们自己呢?你每次自信满满地下结论的时候——真的知道自己不知道吗?

LLM的幻觉,照见的从来不只是机器的边界,还有人类的傲慢。

376
9418 阅读
4 评论
分享
链接已复制
编辑说明

本文由 MakeSense 编辑团队撰写并审核。文中引用的数据和观点均经过交叉验证,如有疏漏欢迎在评论区指正。最后更新:2026年06月21日 02:56

苏晴

资深编辑

科技媒体从业 8 年,曾就职于多家科技媒体。关注 AI 创业和投资赛道,采访过 50+ 位行业从业者。

读者评论 4

A
AI研究员 1周前
观点有道理,不过我觉得还需要考虑算力成本的问题。
回复 点赞 (11)
M
创业者Mark 2天前
正在做相关方向,这篇文章给了我不少启发。
回复 点赞 (7)
老李 5天前
有个小问题想请教,文中提到的那个方案在大规模场景下性能怎么样?
回复 点赞 (5)
运营小陈 1周前
转发到团队群了,大家都觉得有参考价值。
回复 点赞 (4)