模型真的“知道自己不知道”吗?—— Do I Know This Entity? 论文解读
用稀疏自编码器、激活强推与拼接实验,理解语言模型如何表征自己是否认识一个实体,以及这种内部信号如何影响拒答与幻觉。
TL;DR 一句话版
研究者用”稀疏自编码器”这把手术刀,在语言模型的”大脑”里真的挖出了一条内部电路:它会在读到一个人名/地名/作品名的瞬间,悄悄判断”我认不认识这个东西”——而且只要人为拨动这条电路,就能让模型在明明认识的问题上无端拒答,或者在完全不认识的问题上一本正经地编造答案。这说明大模型的”胡说八道”(幻觉)并不总是随机失误,其中一部分是可以被定位、被解释、甚至被”扳动开关”控制的。
下面这组对话,就是这篇论文最直观的”证据”——同一个模型、同一个问题,只是研究者悄悄调高了内部一条向量的数值,模型的表现就从”如实拒答”变成了”自信编造”:
真实实验Wilson Brown 是论文作者虚构、模型从未见过的球员姓名。右侧的出生日期是模型凭空编造的——这正是论文原文 Figure 1 展示的例子。来源:原论文 Figure 1 与正文第5节。
如果你是第一次接触”机制可解释性 (mechanistic interpretability)”这个领域,下面这份”背景知识”会先把几件事讲清楚:模型的”幻觉”到底是什么、研究者是怎么打开黑箱去看模型内部的、以及这次用到的关键工具”稀疏自编码器”是什么。如果你已经很熟悉这些概念,可以直接跳到”研究问题”部分。
读论文前,先搞懂 6 个基础概念
这篇论文横跨”大模型幻觉”和”机制可解释性”两个话题。下面用尽量少的行话,把理解它需要的背景知识过一遍。
1.1 什么是”幻觉”(Hallucination)
大模型的”幻觉”指它一本正经地说出流畅但不符合事实的内容。论文特别关注其中一类幻觉:当被问到一个模型压根没见过、没学过的实体(人名、地名、作品名……)时,模型本该说”我不知道”,却编出了一个听起来煞有介事的答案。这和”模型记错了事实”是两回事——后者是记忆出错,前者是压根没有相关记忆,却依然选择了编造而不是承认。论文把这类”不知道却硬答”的情况作为研究的切入口。
1.2 残差流:模型内部的”传送带”
可以把 Transformer 语言模型想象成一条工厂流水线:每个词先被转换成一个数值向量,然后依次经过几十道”工位”(也就是层,layer)。有意思的是,每道工位不是把半成品拿走重做,而是在传送带上的向量基础上”再加一点东西”再传给下一道工位——这条贯穿全程、不断被叠加信息的向量通道,就是残差流(residual stream)。模型对一个词/实体的所有理解,最终都会以”被叠加进残差流里的信息”的形式存在。这篇论文的做法,正是在残差流的某个位置上”截个流”,看看里面到底叠加了什么。
1.3 ”叠加”难题与稀疏自编码器(SAE)
模型内部一层的向量可能只有几千个维度,但它需要表达的概念(体育、地名、语气、语法结构……)远远多于这个数字。于是模型会把很多概念”挤”在同一组维度里叠放(这被称为叠加,superposition),导致我们没法直接指着某个维度说”这代表篮球”。稀疏自编码器(Sparse Autoencoder, SAE)就是为解决这个问题而生的工具:它把模型内部那个”挤满概念”的向量,重新展开成一个维度大得多、但绝大多数取值都是 0(即”稀疏”)的新空间。展开之后,很多单个维度就开始对应上人能看懂的、干净的概念了——论文管这些维度叫 latent(潜变量/特征)。
(很多概念挤在一起)
(每个概念各占一格,大多数是空的)
1.4 线性表征假说:概念 = 空间里的一个”方向”
论文的理论基础是线性表征假说:模型对一个概念(比如”情感是正面的”“这句话是真的”“这是个我不认识的实体”)的理解,往往对应向量空间里的一个方向。只要找到这个方向,理论上就能读出模型”怎么想”,甚至反过来沿着这个方向人为”推”一下模型的内部状态,观察它的行为会怎么变——这正是下一条要讲的技巧。
1.5 两把解剖刀:强推(Steering)与拼接(Patching)
找到某个”方向”之后,在模型做推理时人为把这个方向的强度调高或调低(专业说法:把方向向量乘上一个系数 α,加回残差流),然后看模型的输出会不会朝预期的方向改变。如果调高”我认识这个实体”的方向真的能让模型开始编造答案,就说明这个方向和模型的行为之间存在因果关系,而不只是”碰巧一起出现”的相关关系。
把”认识的实体”那次推理中间某一步的内部状态,移植到”不认识的实体”那次推理的同一位置上,看输出会不会被”带偏”成前者的答案。像变量替换实验一样,可以精确定位到底是哪一层、哪一个注意力头在起作用。本文用它来复现并验证”实体信息是如何在模型内部被搬运、被提取”的电路。
1.6 基座模型 vs. 对话模型
Gemma 2、Llama 3.1 这类模型通常有两个版本:基座模型(base model)只做过”预测下一个词”的预训练,没有专门学过”该怎么和人聊天、该在什么时候说不知道”;对话模型(chat / instruction-tuned model)是在基座模型基础上,又经过指令微调,学会了拒答、礼貌应答等”聊天礼仪”。这篇论文一个很关键的发现,就出在这两者的关系上——先卖个关子,稍后揭晓。
这篇论文到底在问什么
核心问题只有一句话:当语言模型读到一个实体的名字时,它内部有没有一个信号,代表”我是否认识这个东西”?如果有,这个信号能不能被用来预测甚至左右模型接下来是如实回答、老实拒答,还是胡编乱造?
论文把研究范围收窄到四类”实体”:NBA球员、电影、城市、歌曲。以电影为例,模型会被问”电影《十二怒汉》的导演是谁”这类问题。如果模型对某个实体的一系列相关问题基本答不对(论文的标准是全部答错),就被记为该模型”不认识”(unknown)的实体;如果至少答对两项,则记为”认识”(known)的实体。下面这一对例子能帮你直观感受研究者关心的现象:
真实实验论文原文 Table 1 中的示例:作者发现,模型内部有一小撮 SAE latent,几乎只在”已知实体”的最后一个词元上被点亮,另一小撮几乎只在”未知实体”上被点亮——这正是全篇论文的起点。
为什么这个问题重要
如果模型内部真的存在”自我知识感知”信号,那么幻觉——至少这一类由”不认识却硬答”造成的幻觉——就不再是无法追踪的黑箱行为,而是有可能被检测、被解释,未来甚至被主动纠正的。这也是”模型是否具有某种自我认知(self-knowledge)”这个更大问题的一小块拼图。
怎么做的:从构建数据集到找到”实体识别方向”
3.1 第一步:从维基数据构建”实体问答”数据集
作者从 Wikidata 抓取了四类实体,并为每类实体配上几个可核实的属性问题:
属性:出生地/出生日期/效力球队
属性:导演/编剧/上映日期/类型/时长/主演
属性:所在国家/人口/海拔/坐标
属性:歌手/专辑/发行年份/曲风
真实数据共约 34,700 余个实体。来源:原论文 Table 3。
3.2 第二步:给每个实体贴上”已知 / 未知”标签
具体做法是:拿每个实体的几个属性问题去问模型,答对数超过阈值(本文取”至少答对2个”)记为已知;一个都没答对记为未知;其余(部分答对、达不到阈值)的中间情况直接丢弃,不参与后续分析——这样能让”已知/未知”两组样本的界限尽量干净。
3.3 第三步:用 SAE 扫描”实体名字最后一个词元”处的内部状态
拿到打好标签的实体后,作者截取每个 prompt 中实体名字最后一个词元处的残差流向量(比如 “LeBron James” 就取 “James” 这个词元处),送进 SAE,看每一个 latent 在”已知实体”和”未知实体”两组样本上分别被激活(数值大于0)的频率,两者之差就是这个 latent 的”分离度评分”:
分离度评分(直观理解) = 这个 latent 在”已知实体”样本上被点亮的比例 − 它在”未知实体”样本上被点亮的比例。这个值越接近 1,说明这个 latent 越像一个专门的”我认识这个实体”探测器;反过来越接近 −1,就越像”我不认识这个实体”探测器。
为了避免挑出的 latent 只对”球员”这一种实体类型好使,作者还要求它在球员、电影、城市、歌曲四类实体上都要有较高的分离度评分(具体做法是取四类中最差的那个分数,再挑这个”最差分数”最高的 latent——即论文中的 MaxMin 指标),以确保挑出来的方向足够通用、不挑食。
3.4 发现:中间层的信号最”干净”
为什么是中间层?
论文推测这反映了一种”由具体到抽象”的层级结构:早期层还在处理比较具体、局部的信息(比如某个特定实体类型的细节),中间层则已经沉淀出一种更抽象、跨实体类型通用的”我认不认识这个东西”的判断,到了后期层,这个判断的表达开始趋于稳定(进入平台期)。
发现一:模型内部真的存在”我认识/不认识”的信号
按照上面的方法筛选后,作者确实在 Gemma 2 2B(以及 9B)的 SAE 里找到了这样两类 latent,而且它们的”选择性”惊人地强——几乎只对已知或只对未知实体的最后一个词元反应。
真实实验数据复刻自原论文 Table 1。高亮的词元就是该 latent 被激活的位置——注意它总是落在”实体名字的最后一个词元”上,不管这个实体是球员、城市、电影还是歌曲。附录 B 还用大语言模型生成的、涵盖公司/名画/建筑等更多类型的句子做了验证(Table 4、5),同样的两个 latent 依旧精准地按已知/未知分类点亮。
4.1 这些信号有多”专一”
论文用一张散点图直观展示了这件事:横轴是某个 latent 在”已知实体”上的激活频率,纵轴是它在”未知实体”上的激活频率。绝大多数 latent 落在对角线附近(说明它们对已知/未知没有偏好,只是普通的语言特征),但有一小撮 latent 明显偏离对角线、扎堆在角落——这些正是”已知实体探测器”和”未知实体探测器”。
4.2 这不是巧合:用”知识截止日期之后发布的新歌”做压力测试
为了排除”这些 latent 其实只是碰巧和已知/未知相关”的可能,作者还做了一个很巧妙的验证:拿 283 首在模型训练数据”知识截止日期”(2024年8月)之后才发布的歌曲去测试——这些歌对模型来说必然是”未知”的。结果:
已知latent激活率 / 未知latent激活率
已知latent激活率 / 未知latent激活率
已知latent激活率 / 未知latent激活率
真实数据来源:原论文 Table 8(Appendix R)。在这批”确定未知”的新歌上,”未知实体”latent 的激活率明显、稳定地高于”已知实体”latent,三个模型上结论一致。
发现二:这些方向能”因果性”地操控模型的拒答与编造
光是”相关”还不够有说服力——万一这些 latent 只是碰巧和已知/未知同时出现,并不真正参与模型的决策呢?作者接下来做的,就是直接去拨动这些方向,看模型的行为是否会应声而变。
5.1 拒答实验:调高”未知”方向 → 模型开始”装作不认识”
作者取来 100 个模型本来就不认识的实体,用对话版模型(chat/IT model)作答,然后分别尝试:①什么都不做(原始模型);②人为调高”未知实体”方向的强度;③把”未知实体”这个方向从模型的所有权重矩阵里彻底”投影移除”(即正交化,相当于让模型永久失去表达这个方向的能力)。
5.2 编造实验:调高”已知”方向 → 模型开始”自信地瞎编”
反过来,对一个模型确实不认识的实体(比如虚构球员 Wilson Brown),调高”已知实体”方向后,模型不再拒答,而是编出一个煞有介事的答案——这正是本文开头那组对话的由来。
5.3 最生动的例子:一路调高强度会发生什么
论文附录 G 给出了一个特别值得细看的例子:同一个问题(”球员 Leo Barnhorst 出生在哪里?”——这也是一个模型不认识的虚构实体),作者把”未知实体”方向的强度系数 α 从 0 一路调到 1200,记录下模型每一步的回答。往右滑动可以看到完整的变化轨迹:
真实实验数据(逐字翻译)来源:原论文 Table 6(Appendix G),模型为 Gemma 2 2B IT。可以看到一条清晰的轨迹:自信编造 → 如实拒答(这是干预”生效”的区间)→ 开始怀疑名字本身 → 认准一个新名字后再次编造 → 强度过大导致语言彻底崩溃。这提醒我们,”操控”这些方向虽然真实有效,但也有一个合理的强度区间,调过头一样会让模型失灵。
一个反直觉但很关键的细节
用来找到这些方向的 SAE,是在基座模型(未经对话微调)上训练的。但用它操控对话模型的拒答行为,居然同样有效!论文认为这说明:指令微调并没有凭空发明一套全新的”拒答机制”,而更可能是复用、强化了基座模型里本来就存在的这条”实体识别”电路——这也为”微调更多是在改造已有机制,而不是从零学习新能力”这一假说提供了佐证(并与 Arditi et al. 2024 关于”拒答方向”的发现相呼应:那篇工作发现拒绝回答有害请求同样由单一方向主导)。
发现三:机制层面——这些方向如何”掐断”信息提取电路
前面证明了”调这个方向 → 行为会变”,这一节则回答”为什么会变”。作者借助此前机制可解释性领域已经摸清楚的一条”事实提取电路”,看”实体识别方向”具体动了这条电路里的哪个环节。
6.1 已知的”事实提取电路”长什么样
此前的研究(Nanda et al. 2023;Geva et al. 2023)已经发现,模型回答”LeBron James 效力于哪支球队”这类问题时,大致分两步:①早期的注意力头把实体名字的各个词元(”LeBron”和”James”)的信息合并到实体名字的最后一个词元上;②比较靠后的、被称为属性提取头(attribute extraction heads)的一批注意力头,会在生成答案时回头”看”这个最后词元,把里面存的属性信息(比如球队名”Lakers”)提取出来、搬运到最终输出位置。这篇论文用激活拼接(patching)在 Gemma 2 2B/9B 上复现了同样的电路。
6.2 用真实数据验证这个猜想
作者测量了属性提取头对实体末位词元的注意力分数,发现:面对已知实体时这个分数明显更高;而且这个分数会随着”实体识别方向”被人为拨动而同步变化——调高”未知”方向,注意力分数显著下降;调高”已知”方向,注意力分数显著上升。作者还做了统计显著性检验(与随机挑选的 10 个 latent 做对照):
真实数据来源:原论文 Appendix M 正文。调高”未知”方向后同样在 Gemma 2 2B(9/10)、Llama 3.1 8B(10/10)显著降低了注意力分数;但 Gemma 2 9B 上表现较弱(仅 1/10,不过换成该模型第二强的”未知”latent 则恢复到 9/10)——提醒我们不同模型、不同 latent 之间效果并不总是整齐划一。
| 注意力头 | 实体 | 它倾向"取出"的高频词元 |
|---|---|---|
| L18H5 | Kawhi Leonard / Detmold / Boombastic | Clippers, Raptors / Westfalen, Volkswagen / Jamaican, Reggae |
| L20H3 | Kawhi Leonard / Detmold / Boombastic | NBA, basketball, Clippers / German, Germany / reggae, music |
真实数据来源:原论文 Table 7(Appendix L)。”L18H5”意为第18层第5号注意力头。可以看到这些头提取出的词元确实和对应实体高度相关。
发现四:模型是否”知道自己可能说错了”?
前面几节都在研究”认识/不认识”这种二元判断。这一节作者往前多走一步:即便模型没有直接拒答,它的内部有没有信号能提前预示”这次回答很可能是错的”?
7.1 直接问模型:”你确定认识TA吗?”
作者设计了这样的提示:“你确定你认识这位{实体类型} {实体名字}吗?请回答是或否。”然后比较模型输出”是”和”否”两个词的对数概率差值(logit difference)。结果显示:调高”未知实体”方向,会让模型更倾向回答”否”;调高”已知实体”方向,则让模型更倾向回答”是”——说明这些方向不仅能操控”要不要回答”,在一定程度上也能操控模型显式表达出的自信程度。不过论文也诚实地指出,模型本身在这类问题上有偏向回答”是”的基础倾向(哪怟面对未知实体也是如此),说明模型直接、准确地”说出”自己不确定这件事,做得并不算好——即便它内部其实是”知道”的。
7.2 寻找”不确定性方向”:能预测对错的信号
换一个角度:作者只看模型没有拒答、给出了具体答案的那些情况,研究能不能从回答生成前的内部状态里,提前分辨出这次的答案会是对的还是错的。他们在对话模型即将生成回答前的位置上又跑了一遍 SAE,用统计检验挑出了一个在”正确回答”和”错误回答”之间activation 差异最大的 latent。
更有意思的是这个 latent 本身的语义:作者把它接到一个通用语料库上,看它最容易拉高哪些词的输出概率,发现全是表达”不确定/未知”的词:
换句话说,这个方向携带的与其说是”这个具体实体我认不认识”,不如说更接近一种通用的”不确定/含糊/未披露”语义——这和第4节发现的”实体识别方向”是两种略有不同、但都和”模型自我知识状态”相关的信号。
会不会只是巧合?作者主动排除的一个”简单解释”
一个自然的质疑是:这些 latent 会不会其实只是在检测”这个词元很生僻、很难预测”,而不是真的在识别”实体”?毕竟冷门实体的名字在训练语料里出现得少,本身预测难度也更高。作者专门设计了实验来检验这个”词元似然假说”(token likelihood hypothesis)。
| 在一个通用大规模语料(FineWeb)上,对每个词元同时计算:①”实体识别”latent 是否激活;②模型预测这个词元的概率 *p(ti | t<i)*(越低代表这个词元本身越”难猜/越生僻”)。如果”词元似然假说”成立,两者应该强相关。 |
这些 latent 本身激活得非常稀疏(在 Gemma 2 2B 上,”已知”/”未知”latent 分别只在约 0.6%/0.5% 的词元上激活),且与词元预测概率的相关系数普遍接近 0。
| 模型 | latent | 激活频率 | 与词元预测概率的相关系数 |
|---|---|---|---|
| Gemma 2 2B | 已知实体 | 0.6% | r = 0.067 |
| Gemma 2 2B | 未知实体 | 0.5% | r = −0.000 |
| Gemma 2 9B | 已知实体 | 0.9% | r = 0.062 |
| Gemma 2 9B | 未知实体 | 0.9% | r = 0.009 |
| Llama 3.1 8B | 已知实体 | 0.2% | r = 0.003 |
| Llama 3.1 8B | 未知实体 | 2.6% | r = 0.047 |
相关系数全部接近 0,说明这些 latent 激活与否,几乎不能用”这个词元本身好不好猜”来解释。作者还检查了周围文本的困惑度、下一词预测的熵值等其它可能的混杂因素,同样没有发现能替代”实体识别”这个解释的其它规律。这些结果支持了论文的核心论断:这些 latent 捕捉到的是一种比”词元冷不冷门”更精细的信号,更接近于对”实体”这个概念本身的知晓与否。
不是个例:三个不同模型上的复现情况
机制可解释性研究常被质疑”发现的规律只是某个模型的偶然巧合”。这篇论文特意在架构、训练数据都不同的 Llama 3.1 8B(使用独立的 LlamaScope SAE 套件)上重新跑了一遍完整流程,加上 Gemma 2 的 2B 与 9B 两个规模,一共三个模型、两个模型家族的交叉验证:
中间层出现最强分离信号;调高”未知”方向可将拒答率推至近100%;正交化后大幅降低;因果效应在四类实体上都很稳定。
同样在中间层出现最强分离信号;拒答率操控效应方向一致但幅度更温和;注意力分数变化在”未知”方向上的效应弱于2B,换成次强 latent 后恢复显著。
中间层规律、注意力头机制均成功复现;调高”未知”方向显著提升拒答率;但调高”已知”方向没有像Gemma那样明显降低拒答率——说明该效应存在不对称性。
真实数据来源:原论文 Appendix C/D/F/J/Q(Figure 8/9/11/14/25/26/27)。作者原文评价:”这一跨模型家族的复现,考虑到两个模型在架构和 SAE 上的显著差异,进一步增强了我们对方法论和结论普适性的信心。”
结论:这篇论文到底证明了什么
- 模型内部确实存在"知识感知"信号。在实体名字的最后一个词元上,SAE 能找到一小撮几乎专门用于区分"已知/未知实体"的方向,而且这个模式在球员、电影、城市、歌曲四种完全不同的实体类型上都成立。
- 这些信号具有因果性,不只是相关。人为调高或移除这些方向,能够直接、可预测地改变模型的拒答与编造行为——调高"未知"方向能让模型在明明认识的问题上开始拒答;调高"已知"方向则会诱导模型对完全陌生的实体编造答案。
- 指令微调更像是"复用"而非"重造"。这些方向是在基座模型上找到的,却能直接操控经过指令微调的对话模型的拒答行为,暗示"学会拒答"这件事很大程度上是在借用预训练阶段就已经存在的机制。
- 找到了具体的机制解释。这些方向的作用方式之一,是调节"属性提取头"对实体词元的注意力强度——相当于控制着事实提取电路的"总开关"。
- 还存在一种更细粒度的"不确定性"信号。即便模型没有直接拒答,其内部仍有信号能在一定程度上提前预示这次的答案是否可靠,且这个信号在语义上更接近通用的"含糊/未披露"概念。
更大的意义
这篇论文提供了一种在实际、大规模模型上系统寻找并验证”自我知识感知”这类内部信号的方法论,而不仅仅局限于实体识别这一种情形。作者认为,这为理解、乃至未来主动干预和缓解大模型幻觉,打开了一个具体可操作的入口。
局限性与需要辩证看待的地方
不等于模型有”全面的自我认知”
论文作者自己在引言中就明确提醒:这里发现的”知识感知”专门针对”事实性实体回忆”这一种机制,不能直接推广为模型对自身能力有全面、可靠的自我认知。
标签构建方法本身有噪声
“已知/未知”的判定依赖模糊字符串匹配与”答对几个属性”的阈值规则,可能把模型”蒙对了”或”记住了片段但答不出细节”的情况误分类,作者也坦承了这一点。
效应量在不同模型间并不整齐
比如 Gemma 2 9B 的”未知方向 → 注意力下降”效应弱于 2B;Llama 3.1 8B 上”已知方向”没能像 Gemma 那样明显压低拒答率——同一套结论在不同模型上强度不完全一致。
研究范围仍然有限
只覆盖了 Gemma 2 系列与一个 Llama 3.1 模型、四类实体,是否能推广到其他模型家族、其他类型的知识(而不只是实体事实)仍待验证;论文本身也更多是”发现与解释”,还不是可直接落地的幻觉修复方案。
速查表:一眼看懂全部术语
把模型内部拥挤、叠加的向量,重新展开成一个更高维、但大多数取值为0的”稀疏”空间,让单个维度对应上人能理解的概念。
贯穿模型所有层的信息通道,每一层都在其基础上叠加、修改信息,而不是推倒重来。
SAE 展开后空间里的一个维度;本文中每个 latent 大致对应一个可解释的小概念,比如”这是个我认识的实体”。
模型对一个概念的表征,往往对应向量空间里的一个方向(而不是复杂的非线性结构)。
一个 latent 在”已知实体”和”未知实体”上激活频率之差,衡量它对二者的区分能力。
在四类实体上分别算分离度评分、取其中最差的一个,再挑”最差分数”里最高的 latent——用来找最通用、不挑食的方向。
人为把某个方向按系数 α 加回残差流,观察模型行为是否随之改变,用来验证因果性。
把”干净”输入某一步的内部状态移植到”受干扰”输入的同一位置,定位真正起作用的模型部件。
把某个方向从模型全部权重矩阵里”投影移除”,让模型此后再也无法沿这个方向表达信息。
模型因为”缺乏相关知识/数据库访问权限”而拒绝回答,区别于因安全顾虑而拒答。
一类注意力头,负责在生成答案前,从实体词元处把相关属性信息”取出来”搬运到输出位置。
基座模型只做过预训练;对话模型在此基础上经过指令微调,学会了聊天礼仪、拒答等行为。
查看:文中涉及的关键公式(选读,非数学背景也可跳过)
SAE 的重构: 模型原始向量 x ≈ 一堆”稀疏激活值” a(x) 分别乘上各自对应的方向(解码器权重)再相加。也就是说,原始向量可以被近似看成”少数几个被点亮的概念方向”的线性组合。
Steering 的本质: 把某个 latent 对应的方向向量 d,乘上系数 α,直接加到残差流上:新状态 = 原状态 + α·d。α越大,干预越强(但过大会让模型输出失控,如第5.3节的例子所示)。
正交化: 把模型每个输出权重矩阵里,与目标方向 d 平行的分量减掉,使得该矩阵此后写入残差流的任何内容都不再包含 d 方向的分量。
