可解释性在幻觉检测中的应用:通过分析内部状态判断模型什么时候在编造

有一段时间,我为了排查幻觉问题快把头发薅光了。模型用特别笃定的语气输出一个完全错误的答案,我当时的调试手段很朴素:查 logprob。概率高就说明模型"很有信心",那它输出的应该是它知识库里最对的东西。可每次看到 logprob 很高、答案照样错,我都特别困惑——它到底是有信心还是没信心?

AI technology illustration

直到我读到 CMU 研究者 Amir Azaria 和 Tom Mitchell 的论文,才意识到我一直在看错地方。

"The Internal State of an LLM Knows When It's Lying"

—— 大型语言模型的内部状态知道它什么时候在撒谎

论文做了这样一个实验:让 LLaMA-13B 给真实人物写传记,然后核对它生成的出生日期对不对。注意,分类器只看一样东西——模型生成最后一个 token 时的隐藏层激活向量。拿这些向量训练一个简单的逻辑回归,任务是判断"这段内容是真是假"。结果,这个只读内部状态的分类器,在传记任务上准确率约 94%,在纽约时报新闻生成任务上约 79%。

说人话:模型在输出编造内容时,它的内部激活已经"知道"自己错了。但这份自知之明,没有传达到输出层。这件事让我对幻觉的理解整个翻了个个儿。

输出层的概率,是一张被压扁的真相

为什么 logprob 靠不住?因为模型生成每个 token 时,最后一个隐藏状态要先经过线性投影、再过 softmax,把一个可能有几千维的向量压缩成词表上的概率分布。这一步必然丢信息。

更麻烦的是,语言模型学到的任务不是"说真话",而是"接着往下说最像人话的词"。生成长文本时,语法、风格、上下文、世界知识全挤在同一个隐藏状态里,softmax 只能按综合得分挑一个赢家。有时候,流畅但错误的接续得分更高,真实的答案被挤掉了。

但被挤掉不等于不存在。真实答案的信息还在隐藏状态里,只是没赢。这就是内部状态探针能读到输出层读不到的东西的原因——它看的不是那场比赛的比分,而是运动员在起跑前就摆好的身体姿态。如果你只盯着输出概率,你看到的就是一张被压扁的真相;探针读的,是压扁之前的高维空间。

读心术的打开方式:训练一个小分类器

探针的做法不复杂:

  1. 让模型生成一段文本,记录每个 token 处的隐藏层激活;
  2. 把激活向量当特征,训练一个小分类器(逻辑回归就够),标签是"这段内容真实/编造";
  3. 推理时把新生成的激活喂进去,实时给出"在编吗"的预警。

真正有信息量的是他们的控制实验:只把生成文本前 20 个 token 的激活给分类器看——这时候模型还没把具体事实说出来,分类器依然能高准确率地预判"接下来这段会不会是编的"。也就是说,分类器不是在文字里找线索,它读的是模型开口之前就形成的"心理状态"。

还有一个反复出现的细节:不同层的激活信息量不一样,浅层和深层效果一般,中间层最好。后面很多研究都指向同一个结论——真实性相关的信息,集中编码在模型的中间层。

没有标签也能找方向?CCS 的巧思与翻车

探针有硬伤:需要大量"对/错"标注。CCS(Contrast-Consistent Search)想绕开这个问题。

CCS 的思路很巧:给模型看一组互为矛盾的句子——"月亮是地球的卫星"和"月亮不是地球的卫星"。既然两句一真一假,模型内部对它们的表示就应该在某个方向上正好相反。CCS 要做的就是找到那个方向,让每一对矛盾句的投影都相反,并且跨句子保持一致。全程不需要任何标签。

刚看完这个工作,我觉得它简直是魔法。但后来 Hase 等人的论文(Causal Inference in Language Models)对它做了更严格的因果检验:顺着 CCS 找到的方向去改写模型激活,然后看输出会不会跟着变。结果:几乎不变。也就是说,CCS 找到的方向可能只是"与真假相关",不是模型做决策时真正依赖的"因果通路"。一个模式能被线性分离,不代表它参与了推理。

这个翻车案例给我一个很深的教训:可解释性研究里的漂亮相关性,一定要过一遍因果检验再下结论。

黑盒方案:把"编没编"变成"说了几套不同的话"

前面几种方法都要读内部状态。还有一条完全不同的路:语义熵

朴素熵的想法很直接:让模型对一个题采样多个回答,回答之间分歧大就意味着没把握。问题是,词级别的分歧会被"措辞不同"污染——"北京是中国的首都"和"中国的首都是北京"明明是一个意思,词层面却完全不同。直接算熵,会把"我很确定"误判成"我很犹豫"。

Kuhn 等人的解法是:先采样多个回答,用一个自然语言推理模型判断哪些回答语义等价、归成一组,再在"语义簇"的层面上算熵。模型真知道答案时,采样结果会聚成少数几个语义簇,语义熵低;它在编的时候,回答会散成一堆互不等价的说法,语义熵高。后来他们还做了单趟前向传播的近似版本(Semantic Entropy Probes),成本大幅下降。

这条路最大的好处是与模型架构无关,黑盒模型也能用。代价是采样贵,实时场景不一定付得起。

从检测到干预:顺着真实方向推一把

如果"真实性"确实编码在激活空间的一个方向上,那能不能不检测、直接推一把?这就是 ITI(推理时干预)的思路。

Li 等人先定位一组与真实性相关的注意力头,算出代表"真实"的方向,然后在推理时把激活往这个方向挪一小步。效果很直观:在 TruthfulQA 基准上,7B 模型成绩从约 28% 提到约 39%,而且在 MMLU 等通用基准上几乎不掉点。

这进一步印证了"路由失败"假说:很多幻觉根本不需要补知识,只要把模型内部已有的知识扳到输出端,答案就对了。当然,ITI 远非万能——只在特定基准上验证过,方向向量的挑选有不少玄学成分,干预过头会让输出变得千篇一律。

一张表看清四条路

方法 读取什么 需要什么 核心优势 主要局限
内部探针 隐藏层激活 大量真假标注 单次前向,便宜 跨模型、跨领域迁移差
CCS 隐藏层激活 矛盾句对(无标注) 不需要标签 找到的方向可能不是因果通路
语义熵 多次采样输出 模型无关,黑盒可用 采样成本高,实时性差
ITI 激活方向,推理时改写 少量真值标注 检测与干预二合一 只在特定基准上验证过

再往大了看,Anthropic 的 SAE 工作试图把激活空间拆成可读的"特征":他们在模型里找到了代表金门大桥的特征、代表女性概念的特征。理论上,以后可以训练专门跟踪"内容与事实是否一致"的特征。但到目前为止,这些都还是研究工具,离生产级监控还有距离。

我的判断:幻觉检测没有银弹

把这几条路放一起看,各自都有不可忽视的短板:探针跨模型跨领域不稳定,CCS 的方向不一定因果,语义熵贵,ITI 有玄学成分。没有一个是万能的幻觉探测器。

我目前比较认可的方向是组合式:内部状态探针给出"这段可疑"的实时预警,语义一致性做二次确认,再配合检索验证和拒答机制——探测到幻觉时不硬答,直接说"我不确定"。如果你在公司做 LLM 应用,我的建议很朴素:别等银弹,先把这几层防线搭起来。幻觉检测不会靠单颗银弹解决,大概率靠多层防线。

最后说一个让我很感慨的点。真实与虚假在激活空间里呈线性结构——The Geometry of Truth 这篇论文专门验证了这一点。它说明 LLM 不只是一台"概率接龙机器",它确实在内部建立了关于世界的事实性表征。只是这套表征和输出之间的路由,并不可靠。读懂这条路由,可能比读懂词表重要得多。

两个常见疑问

探针能测出"模型在撒谎",是不是说明模型有自我意识?不是。探针只是在激活空间里找到一条统计规律。就像你能从一个人的语气判断他在紧张,但他未必"知道"自己在紧张。概率统计意义上的"知道",离意识还很远。

既然内部状态里有真实答案,为什么不直接把它输出?因为模型的训练目标是"像人话一样接下去",不是"输出真相"。真实答案和流畅接续经常竞争同一个输出位,而内部状态里那个"真实方向"只是一个候选信号。ITI 就是尝试把这个信号的权重调大——但调大了也会带来别的问题。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/673.html

(0)
上一篇 10小时前
下一篇 10小时前

相关推荐