Long-form

深度长文:幻觉不全是「没记住」,率失真极限给出了一个被忽略的误差来源

6 min read ·

关于幻觉的讨论长期被一个隐喻主导:模型说错了,是因为它没见过这条事实。这个隐喻指向覆盖问题,于是所有解法都围绕覆盖面展开——更多数据、更长上下文、更激进的检索。

arXiv 上这篇《The Cost of Compression》提出了一个我认为值得认真对待的补充:即使一条事实被观测过,有限记忆也可能迫使它只能被近似地存储。这不是覆盖问题,这是压缩问题。两者可以同时存在于一个模型里,而现在的评测大多把它们混在一起。

一、一个可以推到底的简化模型

论文刻意把设定压到最简。一个无结构问答任务:

  • N 个可能的问题
  • K 个可能的答案
  • 学习器观测到 M 条训练事实
  • 把这些事实压缩进至多 B 比特的记忆
  • 回答均匀抽样的测试问题,不允许检索
  • 真值映射按均匀随机处理

这个设定去掉了所有工程细节,剩下的就是一个信息论问题:给定 M 条观测、B 比特预算,答案的期望错误率下界是多少。

推导结果是一个不带修饰的不等式:

E  ≥  (M/N) · δ*(B/M)  +  (1 - M/N) · (1 - 1/K)

其中 δ*(r) 是均匀 K 元源在零一损失下
率失真函数的反函数,r = B/M 是每条已观测
事实平均可用的比特数。

二、两项各自的含义

这个式子的价值不在于它的精度——它显然不是幻觉的完整理论——而在于它把误差源拆开了

第一项 (M/N) · δ*(B/M) 是压缩失真。 它只对已观测到的事实生效。B/M 是每条事实平均能分到的比特数,δ* 把这个比特预算映射成信息论意义上的最小失真。直观理解就是:一条事实被观测到了,但你只有这么多空间存它,存得越省、失真越大。

注意这里的 M/N 系数。它说明压缩失真只作用于「观测过」的那个比例。如果 M 远小于 N,模型大部分知识都在第二项里,此时优化存储效率几乎没有收益。

第二项 (1 - M/N) · (1 - 1/K) 是覆盖缺口。 未观测事实的比例乘以猜中的概率。在 K 个答案里瞎猜,猜中率是 1/K,所以错误率是 1 - 1/K。这一项和记忆容量完全无关,只和覆盖面与答案空间的规模有关。

这个结构的工程含义非常直接:两个瓶颈要分别对付,作用在不同项上的手段不能互换。

手段主要作用项机制
更多训练数据第二项提高 M/N,缩小覆盖缺口
更有效的记忆容量第一项提高 B/M,降低存储失真
检索增强主要削弱第一项把事实从参数搬到外部索引
结构化先验两项利用规律性降低实际所需比特
弃答改变损失函数规避猜错的惩罚
长上下文组织第一项(推理侧)改善信息在上下文中被利用的效率

三、为什么这是「可分离」的失败模式

论文反复强调一个措辞:separable failure mode。这个措辞很谨慎,也很有价值。

它没有说幻觉只有这两个来源,也没有说这两项可以精确计算。它说的是:在有限记忆这个约束下,至少存在一个可以被单独刻画、单独测量的失败模式——对已观测事实的有损回忆

这件事的重要性在于它可证伪、可测量。如果这个模式存在,就应该能在真实模型里观察到它的特征信号。论文正是这么做的:先用理论隐含的模拟验证下界的行为,再在现代语言模型上做受控的事实注入探针,通过改变事实负载和有效可训练记忆容量,去看预测中的特征是否出现。

受控事实注入这个设计值得点出。它不是看模型在自然数据上的表现,而是人为控制注入多少条事实、给多少可训练容量,然后观察错误率的走向是否与第一项的形式一致。这种「先有理论预测再去找特征」的路径,比常见的事后归因扎实得多。

四、对当前主流工程手段的再评估

按这个框架回看几件大家正在做的事,结论会变得更清楚。

长上下文不等于参数记忆。 把上下文窗口从 128K 扩到 1M,改变的是推理期有多少信息可用,而不是参数里压缩了多少知识。它确实能改善第一项在推理侧的表现,但窗口关掉之后什么也没留下。把长上下文当作「记忆扩容」用,本质上是在第一项和第二项之间来回借。

RAG 是绕开压缩瓶颈,不是解决它。 检索把事实从参数空间搬到索引空间,第一项因此被大幅削弱。但索引空间有索引空间的覆盖问题——稀疏索引漏召回、分块切断语义、多版本事实互相冲突。它没有让覆盖问题消失,只是换了个位置。

结构化先验被低估了。 表中唯一同时作用于两项的是结构。原因是结构降低了「描述一批事实所需的最少比特数」——如果一批事实服从某个简洁规律,你不需要逐条存储。这也是为什么在同样参数量下,训练数据质量与组织形式带来的差距往往大于数据量本身。

弃答改变的是评分,不是能力。 下界是在零一损失下推导的,即强制必须给出答案。一旦允许弃答,模型就可以选择不接受猜错的惩罚。这解释了一个常见困惑:为什么加了弃答之后幻觉指标明显改善,但模型看起来并没有变聪明。它确实没有变聪明——它只是换了一套更合理的损失函数。

五、这个框架的边界

必须说清楚它不是什么。

这不是幻觉的完整理论。它的模型里没有多跳推理、没有矛盾事实、没有时间衰减、没有检索噪声。(1 - 1/K) 这一项假设答案空间是离散且有限的,在开放生成任务里 K 事实上是无穷的,此时这一项趋近于 1,覆盖缺口退化成常数——这提醒我们,开放域生成的幻觉率天然被这一项压住,靠扩大覆盖面能改善的空间比闭卷问答小得多

另外,δ* 用的是理想率失真函数,它假设编码器最优。真实模型的参数化、优化过程、以及训练数据分布的偏斜,都会让实际失真高于理论下界。所以这个式子更适合当作下界与结构参照,而不是预测工具。你不能拿它算出某个模型的幻觉率。

六、给工程实践的三条结论

第一,先区分你的错误属于哪一项。如果你的错误里大部分是「模型完全没听说过这个事实」,那优化存储效率是徒劳的,该去补覆盖或加检索。如果是「听说过但细节说错」,那第一项才是主战场。

第二,不要让两种手段互相顶替。为了降低覆盖缺口而无限堆数据,会同时推高 M/N 使更多事实落入压缩失真的管辖范围。这里存在真实的权衡,不是单调递增的关系。

第三,认真对待弃答与校准。既然猜错的惩罚可以被合法的弃答规避,那么校准良好的「我不知道」就不是能力缺陷,而是一种工程选择。把它做出来,比在指标上争论幻觉率更有实际价值。

结语

这篇论文真正提供的东西是一把尺子。在它之前,「模型记错了」和「模型没见过」是两种感受;在它之后,这两件事在同一个不等式里被写成了不同项。工程上能做的事情没有因此变多,但你终于知道自己在对付的是哪一边——而这通常就是大部分优化工作能不能见效的分水岭。

Frequently asked questions

幻觉的第二个来源具体指什么?
指事实其实已经被模型观测到,但因为可用记忆容量有限,只能被近似地存下来。等你需要它的时候,模型从这份有损副本里读出来的信息已经有偏差了。它和覆盖缺口是两回事:前者是存不准,后者是根本没见过。
论文的模型设定是怎样的?
一个无结构问答任务,有 N 个可能的问题和 K 个可能的答案。学习器观测到 M 条训练事实,把它们压缩进至多 B 比特的记忆,然后在不允许检索的条件下回答均匀抽样的测试问题,真值映射被假设为均匀随机。
下界公式的两项分别对应什么?
第一项是 M 除以 N 乘以压缩失真函数,刻画已观测事实在被压进有限比特后的平均失真。第二项是一减 M 除以 N 乘以一减 K 分之一,刻画未观测事实只能靠猜带来的误差。前者与记忆容量有关,后者与覆盖面有关。
检索能同时改善两边吗?
检索主要绕开而不是解决压缩瓶颈。它让模型不必把事实压进参数,因此显著削弱第一项,但检索本身有自己的失败模式,比如召回不到、召回错的、以及上下文里的冲突。它并没有让覆盖问题消失,只是把它从参数空间搬到了索引空间。
弃答在这套框架里为什么重要?
因为下界是在零一损失下推导的,也就是必须给出一个答案。如果允许模型弃答,损失函数就变了,猜错带来的惩罚可以被规避。这解释了为什么校准良好的弃答能力会让幻觉指标明显改善——它不是在提升能力,而是在换一套更合理的评分方式。
// next.txt ›

Some outbound links in this post are affiliate links — see disclosure.