追踪大型语言模型的思维
原文地址:https://www.anthropic.com/research/tracing-thoughts-language-model
更多网址:https://transformer-circuits.pub/2025/attribution-graphs/biology.html
发表日期:2025年3月27日
翻译模型:Gemini 3 Pro
追踪大型语言模型的思维
像Claude这样的语言模型并不是由人类直接编程的——相反,它们是在海量数据上训练出来的。在训练过程中,它们学会了自己的解决问题的策略。这些策略编码在模型为其写下的每个单词所执行的数十亿次计算中。对我们这些模型的开发者来说,它们目前依然是难以理解的。这意味着我们并不了解模型是如何完成它们所做的大部分事情的。
了解像Claude这样的模型是如何思考的,将使我们能够更好地理解它们的能力,并帮助我们确保它们在做我们希望它们做的事情。例如:
- Claude能说几十种语言。如果在它“脑海”中有一种语言,那是什么语言?
- Claude逐词编写文本。它只是专注于预测下一个词,还是曾经提前规划?
- Claude能够逐步写出其推理过程。这种解释代表了它得出答案的实际步骤,还是它有时只是为了一个既定的结论编造出听起来合理的论点?
我们从神经科学领域汲取灵感——该领域长期致力于研究思考生物体内复杂的内部机制——我们试图构建一种“人工智能显微镜”,让我们能够识别出其中的活动模式和信息流。仅仅通过与AI模型对话能了解到的东西是有限的——毕竟,即使是人类(甚至神经科学家)也不了解我们自己大脑工作方式的所有细节。因此,我们需要深入其内部进行观察。
今天,我们将分享两篇新论文,这些论文代表了我们在开发这种“显微镜”以及应用它来观察新奇的“AI生物学”方面取得的进展。在第一篇论文中,我们扩展了之前在模型内部定位可解释概念(“特征”)的工作,将这些概念连接成计算“回路”,揭示了将输入Claude的单词转化为输出单词的途径。在第二篇论文中,我们深入Claude 3.5 Haiku的内部,对代表十种关键模型行为(包括上述三种)的简单任务进行了深入研究。我们的方法揭示了Claude在响应这些提示时发生的部分情况,这些发现足以提供确凿的证据表明:
- Claude有时在一个跨语言共享的概念空间中思考 ,这表明它具有一种普遍的“思维语言”。我们通过将简单的句子翻译成多种语言,并追踪Claude在处理这些句子时的思维重叠部分来证明这一点。
- Claude会提前规划很多词的内容,并朝着那个目标进行写作。 我们在诗歌领域展示了这一点,它会提前想好可能的押韵词,然后写下一行以达到那个押韵。这是有力的证据,表明即使模型被训练为逐词输出,它们也可能在更长远的视野上进行思考。
- Claude有时会给出一个听起来合理的论据,其目的是迎合用户,而不是遵循逻辑步骤。 我们通过向它请教一个困难的数学问题,同时给出一个错误的提示来证明这一点。当它编造虚假推理时,我们能够“抓个现行”,这提供了一个概念验证:我们的工具可以用于标记模型中令人担忧的机制。
我们经常对在模型中看到的东西感到惊讶:在诗歌案例研究中,我们本想证明模型没有提前计划,结果却发现它确实计划了。在一项关于幻觉的研究中,我们得出了一个违反直觉的结果:Claude的默认行为是在被问到问题时拒绝推测,只有当某种因素抑制了这种默认的阻力时,它才会回答问题。在对一个越狱示例的响应中,我们发现模型在能够优雅地将对话引回正题之前,就已经早早地意识到它被要求提供危险信息。虽然我们研究的问题可以(并且经常)用其他方法来分析,但这种“构建显微镜”的整体方法让我们了解到很多最初根本无法猜到的事情,随着模型变得越来越复杂,这将会变得越来越重要。
这些发现不仅仅具有科学上的趣味性——它们代表着我们在“理解AI系统并确保其可靠性”这一目标上迈出了重要的一步。我们也希望这些发现对其他团队有用,并有可能在其他领域发挥作用:例如,可解释性技术已经在医学成像和基因组学等领域找到了用途,因为剖析为科学应用而训练的模型的内部机制,可以揭示关于科学的新见解。
与此同时,我们也认识到当前方法的局限性。即使在简短、简单的提示上,我们的方法也只捕捉到了Claude执行的总计算量的一小部分,而且我们看到的机制可能会有一些基于我们工具的伪影,而这些伪影并不能反映底层模型中正在发生的真实情况。目前,即使是对只有几十个词的提示,要理解我们看到的回路也需要花费几个小时的人工努力。为了扩展到现代模型中动辄数千字、支持复杂思维链的规模,我们需要改进这套方法,并(也许在AI的协助下)改进我们如何理解我们所看到的东西。
随着AI系统变得越来越强大,并被部署在越来越重要的环境中,Anthropic正在投资一系列方法,包括实时监控、模型特性改进和对齐科学。像这样的可解释性研究是风险最高、回报也最高的投资之一,这是一项重大的科学挑战,有潜力为确保AI透明度提供独特的工具。对模型内部机制的透明度,使我们能够检查它是否与人类价值观保持一致——以及它是否值得我们信任。
有关详细信息,请阅读论文。在下文中,我们邀请您简短地浏览一下我们在调查中发现的一些最引人注目的“AI生物学”成果。
AI生物学之旅
Claude如何掌握多语言
Claude能流利地说几十种语言——从英语、法语到中文和他加禄语。这种多语言能力是如何运作的?是否有一个并行的“法语Claude”和“中文Claude”在用各自的语言处理请求?还是内部存在某种跨语言的核心?
英语、法语和中文之间存在共享的特征,这表明了某种程度的概念普遍性。
最近对较小模型的研究显示出了跨语言共享语法机制的端倪。我们通过用不同语言向Claude询问“小的反义词”来调查这一点,我们发现代表“小”和“相反”概念的核心特征被激活,并触发了一个代表“大”的概念,然后该概念才被翻译成问题的语言输出。我们发现这种共享的回路线路随着模型规模的扩大而增加,与较小的模型相比,Claude 3.5 Haiku在不同语言之间共享的特征比例是前者的两倍多。
这为某种概念的普遍性提供了额外的证据——即存在一个共享的抽象空间,在被转化为特定语言之前,意义在这里存在,思考也可以在这里发生。更实际地说,这表明Claude可以用一种语言学习某些东西,并在使用另一种语言时应用这些知识。研究模型如何在不同环境中共享它所知道的知识,对于理解其跨越众多领域泛化的最先进的推理能力至关重要。
Claude会计划它的押韵吗?
Claude是如何写押韵诗的?看看这首小诗:
He saw a carrot and had to grab it,
His hunger was like a starving rabbit
(他看到一根胡萝卜,忍不住去抓,他饿得就像一只饥饿的兔子)
为了写出第二行,模型必须同时满足两个约束条件:需要押韵(与“grab it”押韵),以及需要合理(他为什么要抓胡萝卜?)。我们原本猜测Claude在写到行末之前并没有太多的预见,只是逐词写作,然后在行末确保挑选一个押韵的词。因此,我们预期会看到一个有并行路径的回路,一条路径确保最后一个词在语义上合理,另一条路径确保它押韵。
相反,我们发现Claude会提前规划。在开始写第二行之前,它开始“思考”可能与主题相关且与“grab it”押韵的词汇。然后,带着这些计划,它写出了一行以那个计划好的单词结尾的句子。

心算
Claude并非被设计为计算器——它是在文本上训练的,没有配备数学算法。然而不知何故,它可以“在脑海中”正确地将数字相加。一个被训练来预测序列中下一个词的系统,是如何学会在不写出每一步的情况下计算(比如)36+59的?
也许答案很无趣:模型可能直接记住了海量的加法表,并简单地输出给定算式的答案,因为该答案就存在于其训练数据中。另一种可能性是,它遵循了我们在学校学到的传统笔算加法算法。
相反,我们发现Claude采用了多条并行工作的计算路径。一条路径计算出答案的粗略近似值,另一条路径则专注于精确确定总和的最后一位数字。这些路径相互作用并结合产生最终答案。加法虽然是一种简单的行为,但理解它是如何在这种涉及近似和精确策略混合的细节层面上运作的,或许也能教会我们一些关于Claude如何处理更复杂问题的知识。

Claude的解释总是真实的吗?
最近发布的模型(如Claude 3.7 Sonnet)可以在给出最终答案之前长时间地“大声思考”。通常这种扩展的思考会给出更好的答案,但有时这种“思维链”最终会产生误导;Claude有时会编造听起来合理的步骤来达到它想要的目标。从可靠性的角度来看,问题在于Claude“伪造”的推理可能非常有说服力。我们探索了一种可解释性方法,以帮助区分“真实”(faithful)和“不真实”(unfaithful)的推理。
当被要求解决一个需要计算0.64平方根的问题时,Claude产生了一个真实的思维链,其内部特征代表了计算64的平方根这一中间步骤。但是,当被要求计算一个难以轻松计算的大数的余弦值时,Claude有时会表现出哲学家哈里·法兰克福(Harry Frankfurt)所说的“胡扯”(bullshitting)——随便给出一个答案,不管它是真是假。即使它声称自己进行过计算,我们的可解释性技术也完全没有发现该计算曾发生过的证据。更有趣的是,当给出一个关于答案的提示时,Claude有时会反向推导,寻找能推导至该目标的中间步骤,从而展示出一种“动机性推理”(motivated reasoning)的形式。

多步推理
正如我们在上面讨论的,语言模型回答复杂问题的一种方式是直接记住答案。例如,如果问“达拉斯所在的州的首府是哪里?”,一个只会“死记硬背”的模型可能直接学会输出“奥斯汀”,而根本不知道达拉斯、得克萨斯州和奥斯汀之间的关系。例如,它可能在训练期间看到过完全相同的问答。
但我们的研究揭示了Claude内部发生了更复杂的事情。当我们问Claude一个需要多步推理的问题时,我们可以在Claude的思考过程中识别出中间的概念步骤。在达拉斯的例子中,我们观察到Claude首先激活了代表“达拉斯在得克萨斯州”的特征,然后将其连接到一个单独的概念,表明“得克萨斯州的首府是奥斯汀”。换句话说,模型是在结合独立的事实来得出最终答案,而不是机械地反刍背下的回复。
我们的方法允许我们人为地改变这些中间步骤,并看看它如何影响Claude的答案。例如,在上面的例子中,我们可以进行干预,将“得克萨斯”的概念换成“加利福尼亚”的概念;当我们这样做时,模型的输出就从“奥斯汀”变成了“萨克拉门托”。这进一步证明了模型确实在利用中间步骤来得出答案。
幻觉
为什么语言模型有时会产生幻觉——也就是说,捏造信息?在最基础的层面上,语言模型训练本身就激励了幻觉:模型总是被要求去猜测下一个词。从这个角度来看,主要的挑战实际上是如何让模型不产生幻觉。像Claude这样的模型拥有相对成功(虽然不完美)的反幻觉训练;如果它们不知道答案,它们通常会拒绝回答,而不是去随意推测。我们想了解这一机制是如何运作的。
事实证明,在Claude中,拒绝回答是默认行为:我们发现了一个默认“开启”的回路,它会导致模型声明它没有足够的信息来回答任何给定的问题。然而,当模型被问及它熟知的事物时——例如篮球运动员迈克尔·乔丹——一个代表“已知实体”的竞争性特征会被激活,并抑制这种默认回路。这使得Claude在知道答案时能够回答问题。相反,当被问及一个完全未知的实体(如“Michael Batkin”)时,它会拒绝回答。
通过干预模型并激活“已知答案”特征(或抑制“未知名称”/“无法回答”特征),我们能够让模型(非常一致地!)产生Michael Batkin会下国际象棋的幻觉。
有时,这种“已知答案”回路的“错误触发”会自然发生,即便没有我们的干预,从而导致幻觉。在我们的论文中,我们展示了当Claude认识一个名字,但对那个人几乎一无所知时,可能会发生这种错误触发。在这些情况下,“已知实体”特征可能仍然会激活,然后错误地抑制了默认的“不知道”特征。一旦模型决定它需要回答问题,它就开始虚构:生成一个听起来合理但遗憾的是并不真实的回复。
越狱
越狱是旨在绕过安全护栏的提示策略,以使模型产生AI开发者不希望它产生的输出——而且这些输出有时是有害的。我们研究了一种越狱方法,它欺骗模型产生关于制造炸弹的输出。越狱技术有很多,但在本例中,特定方法涉及让模型破译一个隐藏的密码,将“Babies Outlive Mustard Block”句子中每个单词的首字母(B-O-M-B,炸弹)拼凑在一起,然后根据该信息采取行动。这足以让模型感到困惑,以至于它被诱骗产生了它原本绝不会输出的内容。
为什么这对模型来说如此令人困惑?为什么它会顺着写下那个句子,并产生制造炸弹的指令?
我们发现,这部分是由语法连贯性和安全机制之间的紧张关系引起的。一旦Claude开始生成一个句子,许多特征会对其“施加压力”,要求它保持语法和语义的连贯性,并把句子顺利完成。甚至当它检测到自己实际上应该拒绝回答时,这种机制依然在发挥作用。
在我们的案例研究中,在模型无意中拼出“BOMB”并开始提供指令之后,我们观察到其随后的输出受到了促进语法正确性和自我一致性的特征的影响。这些特征在平时非常有用,但在这种特定情况下成了模型的阿喀琉斯之踵。
模型只有在完成了一个语法连贯的句子(并因此释放了推动它走向连贯的特征压力)之后,才成功地转向拒绝。它把新起的一句作为一个机会,给出了之前未能给出的拒绝:“然而,我无法提供详细的指示……”。
以下内容为论文节选:
§ 5 多语言回路 (Multilingual Circuits)
Claude 能够流利地说几十种语言——从英语、法语到中文和他加禄语。这种多语言能力是如何运作的?内部是否存在针对不同语言并行运行的“法语版 Claude”和“中文版 Claude”,还是存在某种跨语言的通用核心?
我们发现该模型混合使用了特定语言回路(language-specific circuits)和抽象的、独立于语言的回路(language-independent circuits)。与较小且能力较弱的模型相比,在 Claude 3.5 Haiku 中,这种与语言无关的回路占据了更主导的地位。
为了研究这一点,我们提出了一组简单的跨语言提示词(Prompts),这些提示词要求模型计算一个词的反义词:
- 英文:The opposite of “small” is “ -> large(“小”的反义词是 -> 大)
- 法文:Le contraire de “petit” est “ -> grand
- 中文:“小”的反义词是“ -> 大
在每一种情况中,我们都可以进行干预,改变基础的语义操作机制。本节将展示这些干预操作。最后,我们将证明“多语言特征”在模型中广泛存在,并且随着模型规模的扩大,它们在模型表征中所占的比例也越来越高。
§ 5.1 编辑操作:从反义词(Antonyms)到同义词(Synonyms)
如果我们抑制主导性的“反义词/相反(antonym/opposite)”特征,并注入相应的“同义词(synonym)”特征,模型输出就会相应地从反义词改变为同义词。
值得注意的是,尽管我们的干预需要施加非自然强度的刺激(例如,我们需要在同义词提示上施加10倍的激活值),但干预开始生效的交叉点在不同语言之间表现得相当一致。
§ 5.2 编辑操作数:从“小(Small)”到“热(Hot)”
在我们的第二个干预实验中,我们将操作数从“小(small)”更改为“热(hot)”。通过操纵模型内独立于语言的“小”特征,并注入“热”的特征,即使输入语言保持不变,模型也会在所有受测语言中将其输出逻辑转换为“热”的反义词,即“冷(cold/froid/冷)”。
§ 5.3 编辑输出语言
我们的最终干预实验是改变输出语言。在模型的前几层中,针对最后一个词元(token)的位置,模型会使用特定语言的“引用特征(quote features)”来追踪我们正在使用的语言。通过修改这些特征,我们可以迫使模型用另一种语言来输出结果(例如,接收法文的输入,但强行让它输出英文的“large”)。
§ 5.4 法语回路的详细分析
上述的归因图(attribution graphs)是高度简化的。值得我们更详细地审视一个具体例子。在这里,我们选择检查法文回路。
在一个稍详细的法语提示归因图中,最有趣的交互之一似乎是由 QK(Query-Key)调节的效应,这在我们目前的方法中是不可见的(但已在干预实验中得到验证)。一个关键的交互(在“反义词”特征和“大”特征之间)似乎是通过参与注意力头(attention heads)的 QK 回路、改变注意力头关注的位置来介导的。这被视为一种“反例”,具体证明了我们目前的回路分析方法的一个弱点。
除此之外,还有几点值得注意:
- 我们能看到多词元的单词 “contraire”(反义词)被“反词元化(detokenized)”以激活抽象的多语言特征。
- 我们还看到了一个“预测大小(predict size)”的特征组(在更简化的图中我们省略了它,因为它的影响较弱)。
- 我们可以看到特定语言的引用特征(quote French)正在跟踪我们当前所处的语言环境,尽管完整的回路表明模型从其他单词中也获取了语言线索。
这种结构与我们在其他语言中观察到的回路大致相似。
§ 5.5 多语言特征有多普遍?
这个现象在多大程度上具有普遍性?在上述例子以及我们研究过的其他例子中,我们一致地看到,计算的“核心(crux)”是由语言无关的特征执行的。
例如,在以下三个简单的提示中,关键的语义转换在每种语言中都使用了相同的重要节点,尽管它们的输入不共享任何词元(tokens):
- 茄子的颜色是 -> 紫 (紫/purple/violette)
- 秘鲁的首都是 -> 利马 (利马/Lima)
- 黄金的化学符号是 -> Au
这启发了一个简单的实验来估计跨语言泛化的程度:测量相同的特征在被翻译成不同语言的文本上有多频繁地被激活。也就是说,如果相同的特征在同一段文本的各种翻译版本上激活,而不在不相关的文本上激活,那么模型一定是以一种跨语言统一的格式在表征输入。
为了测试这一点,我们收集了一个涵盖不同主题段落的数据集,以及它们的法文和中文翻译版本。对于每个段落及其翻译,我们记录在上下文中任何位置激活的特征集。对于每个“段落、语言对和模型层级”,我们计算**交并比(Intersection over Union, IoU)**来衡量重叠程度。作为基准,我们将其与相同语言对中不相关段落的 IoU 测量值进行比较。
结果表明:
- 模型在开头和结尾层级的特征是高度特定于语言的(这与文本的词元化和去词元化假设相符)。
- 而中间层级的特征则更加语言无关(language-agnostic)。
- 此外我们观察到,与较小的 18层(18L)模型相比,Claude 3.5 Haiku 表现出了更高程度的泛化能力,并在**不共享字母表的语言对(如英-中、法-中)**上展示了尤其显著的泛化能力提升。相比之下,在语言学上更相近的英语-法语比较中,两个模型共享的特征都较多,差距较小。
§ 5.6 模型是用英语思考的吗?(Do Models Think in English?)
随着研究人员开始从机制上调查模型的多语言属性,文献中出现了一种对立观点。一方面,许多研究人员发现了多语言神经元、特征以及多语言表征和计算的证据。另一方面,部分研究提出了模型“偏向于”英语表征的证据,或者介于两者之间——表征是多语言的,但与英语最对齐。
我们应该如何看待这些相互冲突的证据?
在我们看来,Claude 3.5 Haiku 确实在使用真正的多语言特征,特别是在网络的中间层。然而,在重要的机制方面,英语确实享有特权地位(English is privileged)。
例如:
- 多语言特征对相应的“英语输出节点”具有更显著的直接权重(direct weights)。
- 而非英语的输出则更多地依赖于“用 Y 语言说 X(say-X-in-language-Y)”的特征来进行强有力的介导。
- 此外,英文的引用特征(English quote features)似乎被作为某种默认或中心枢纽来参与计算。
§ 6 加法 (Addition)
我们在上文的入门示例中看到了 Claude 3.5 Haiku 如何结合离散事实进行推理,以推导出一个新事实。当它面对从未见过的新问题,比如加法问题时,又是如何进行推理的呢?在本节中,我们探讨模型用来将数字相加的内部机制,并展示这些数字计算特征(features)是如何在一个计算图中相互连接的。
我们使用“操作数图(operand plots)”来系统分析特征在加法问题上的作用:这些图展示了针对形式为 calc: a+b= 的 10,000 个提示(其中 $a$ 和 $b$ 遍历 0 到 99 的所有数对)中,某个特征在 = 这个 token 上的激活情况。这些图中的几何图案代表了特征响应中的结构:
- 对角线代表对题目中“和”敏感的特征。
- 水平和垂直线代表分别对第一个或第二个输入敏感的特征。
- 孤立的点代表对输入的特定组合敏感的“查找表(lookup table)”特征。
- 重复出现的图案代表模块化信息(例如“最后一位数字模 10 是 X”)。
- 模糊/涂抹的图案代表上述类别的低精度版本。
图 25 (说明): 我们系统地分析了在 $a, b \in [0,99]$ 的形式为
calc: a+b=的一两位数加法提示上激活的特征类型。我们识别出了具有三种不同作用的特征:“加 X (add X)”、“查找表 (lookup table)”以及“求和 (sum)”,它们在各种规模和不同的模(moduli)上运行。
我们现在复现 calc: 36+59= 的归因图。
- **低精度(Low-precision)*的“加上某个接近 57 的数”的特征馈入了一个针对“将某个接近 36 的数加上某个接近 60 的数”的*查找表特征,该特征又进一步馈入“和接近 92”的特征。
- 这条低精度的路径与右侧的**高精度模块化特征(modular features)**相辅相成(即:“左操作数以 9 结尾”的特征 $\rightarrow$ 馈入“加上某个精确以 9 结尾的数” $\rightarrow$ 馈入“将以 6 结尾的数加上以 9 结尾的数” $\rightarrow$ 最终馈入“和以 5 结尾”)。
这些路径结合在一起,给出了正确答案 95。(在图表中,我们用 _ 表示“这里可以是任何数字”,用 ~ 表示“大约”。)
图 26 (说明): Haiku 进行两位数加法的简化归因图。输入的特征被馈入可分离的处理路径。大部分计算都发生在
=这个 token 上。模型最终计算出关于和的信息:它模 10 的值、模 100 的值以及它近似的数量级。
我们很好奇 Claude 是否能清晰地表达它正在使用的这种启发式计算策略,所以我们询问了它。
Human: Answer in one word. What is 36+59? (用一个词回答。36+59是多少?)
Assistant: 95
Human: Briefly, how did you get that? (简短地说,你是怎么算出这个结果的?)
Assistant: I added the ones (6+9=15), carried the 1, then added the tens (3+5+1=9), resulting in 95. (我把个位相加 (6+9=15),进了1,然后把十位相加 (3+5+1=9),得出95。)
显然它自己并不知道!
这是一个简单的例子,表明模型拥有某种能力,但对其并没有“元认知(metacognitive)”的洞察力。模型学会提供解释的过程(通过在其训练数据中模拟各种写出来的解释步骤),与模型学会直接执行某项任务的过程(即反向传播导致这些复杂内部回路产生的神秘结果)是不同的。我们在第 11 节“思维链的真实性(Chain-of-thought Faithfulness)”中,会给出显式推理并不等同于内部算法的相关例子。
§ 6.1 加法特征的泛化能力 (Generalization of Addition Features)
上面的提示呈现了一个形式为“a + b =”的“纯粹”加法问题。然而,模型需要在极其广泛的语境中执行算术运算。下面,我们展示上图中的一个加法特征是如何在极其多样的(有时是非常不明显的)需要进行加法运算的环境中被使用的。接下来,我们展示加法特征的输出除了简单地让模型说出总和的值之外,还可以如何以灵活的方式被运用。
§ 6.1.1 泛化到输入语境 (Generalization to the input context)
在检查数据集示例时我们注意到,在 36+59 提示中响应“尾数为 6 和 9 相加”(或反之)的那个查找表特征,在算术以外的许多不同的语境中也处于活跃状态。
通过详细检查这些示例,我们发现当此特征激活时,通常确实有理由去预测“下一个 token 可能会以 5 结尾”,而这正是由 6 和 9 相加得来的。想想下面的文本,特征激活的 token 已被高亮显示:
224.15.54,44 | 224.16.31,81 | o,3r | 0,41 | +0,01 | 59873 | 66 | 42,70 | 15,33 | -6 | 57,08 | 8 | 8
225.16.10,23 | 225.16.47,73 | o,43 | o,3o | 0,12 | 587g6 | 67 | 42,84 | I5,32 | + 1 | 57,o5 | 7 | 9
226.16.27,53 | 226.17. 5,16 | o,54 | 0,20 | o,23 | 57727 | 67 | 42,98 | 15,32 | 8 | 57,02 | 5 | 10
上述样本由天文测量数据组成;特征最活跃的 token 是在模型预测测量周期结束时的分钟数时。之前的测量持续时间为 38-39 分钟,并且该周期从第 6 分钟开始,因此模型预测结束时间为第 45 分钟。
再看一个简单的表格:
| Month | New Customers | Accumulated Customers | NAME_1 Revenue | Cost | Net Revenue |
| — | — | — | — | — | — |
| 3 | 1000 | 2000 | $59,800 | $17,940 | $41,860 |
| 4 | 1000 | 3000 | $89,700 | $26,880 | $62,820 |
| 5 | 1000 | 4000 | $119,600 | $35,820 | $83, |
这是一个简单的表格,其中成本(Cost,35,820 美元)在这一列中遵循等差数列(从 26,880 美元增加了 8,970 美元。80+70=150,尾数 5 即将出现)。
理解模型究竟是如何在各种繁杂的数据中实现这一点的——无论是识别科学期刊、解析天文数据,还是估算税务信息——将是未来工作面临的一个挑战。
§ 6.1.2 计算作用的灵活性 (Flexibility of computational role)
在上述例子中,模型输出的数字是直接作为(可能是隐藏在深处的!)加法问题的结果。在这些情况下,诸如“_6+_9”这样的查找表特征去激活诸如“说出一个以 5 结尾的数字”之类的输出特征是有意义的,因为模型实际上确实需要说出一个以 5 结尾的数字。
然而,计算常常作为更大型问题中的“中间步骤”被执行。在这种情况下,我们不想让模型把中间结果当成最终答案脱口而出!模型是如何表示并存储中间计算以供日后使用,并将其与“最终答案”区分开来的呢?
在这个例子中,我们考虑提示 assert (4 + 5) * 3 ==,模型正确地补全了 27。我们在归因图中观察到了几个关键成分:
- 模型使用一个加法查找表特征(“4 + 5”)计算了加法部分,并结合“乘以 3”和“9 的倍数”等路径,使用一个乘法查找表特征(“3 × 9”)计算了乘法部分。
- 激活了一组**“表达式类型(expression type)”特征**,这些特征代表了某种将总和与另一个量相乘的数学表达式。这些表达式类型特征帮助激活了两个相关的查找表特征。
- 表达式类型特征还激活了一个似乎代表**“作为中间步骤计算出的 9”**的特征,它发出一个信号,表明“4+5=9”的结果并不打算作为最终答案输出。
有趣的是,这个中间特征最强烈的负向(抑制)直接输出效应是抑制“9”的输出,这表明它可能旨在抵消直接“说 9”的冲动。
换言之,“4 + 5”这些特征具有符号相反的双重效应——在默认情况下,它们会驱动模型产生说出“9”的冲动;但是,如果在存在适当的上下文线索表明问题还有更多步骤(在此例中为乘法)的情况下,它们也会触发将 9 作为中间步骤的下游回路。
§ 8 实体识别与幻觉 (Entity Recognition and Hallucinations)
众所周知,语言模型有时会产生幻觉(hallucinate);也就是说,在回答问题时捏造虚假信息。当模型被问及相对冷僻的事实或话题时,幻觉尤为常见,这根源于语言模型的预训练目标——该目标鼓励模型为文本块猜测合理的补全(completions)。
作为一个例子,请考虑由作为基础模型(base model,即没有 Human/Assistant 格式)运行的 Haiku 3.5 给出的以下幻觉续写:
Prompt (提示): Michael Batkin plays the sport of (迈克尔·巴特金从事的运动是)
Completion (补全): Pickleball, which is a paddle sport that combines elements of tennis, badminton, and table tennis. (匹克球,这是一种结合了网球、羽毛球和乒乓球元素的球拍运动。)
这种行为是合理的,因为在模型的训练数据中,像这样的句子很可能以一项运动的名称来补全。在没有任何关于“Michael Batkin”到底是谁的进一步信息的情况下,模型本质上必须随机猜测一项合理的运动。
然而,在微调(finetuning)期间,模型被训练为在扮演 Assistant(助手)角色时避免这种行为。这导致了如下的响应:
Human: Which sport does Michael Batkin play? Answer in one word. (迈克尔·巴特金从事什么运动?用一个词回答。)
Assistant: I apologize, but I cannot find a definitive record of a sports figure named Michael Batkin. Without additional context or information, I cannot confidently state which sport, if any, he plays. (我道歉,但我找不到名为迈克尔·巴特金的体育人物的确切记录。如果没有额外的背景或信息,我无法自信地说出他从事什么运动(如果有的话)。)
鉴于幻觉在某种意义上是一种“自然”行为,而微调缓解了这种行为,那么寻找阻止模型产生幻觉的回路(circuits)是有意义的。
在本节中,我们提供证据表明:
- 模型包含导致其拒绝回答问题的**“默认”回路**。
- 当模型被问及关于它所知道的事物的问题时,它会激活一组特征,这些特征会**抑制(inhibit)**这个默认回路,从而允许模型回答该问题。
- 至少有一些幻觉可以归因于这种抑制回路的**“错误触发(misfire)”**。例如,当向模型询问特定作者撰写的论文时,即使模型缺乏对该作者具体论文的知识,它也可能会激活某些“已知答案”特征。
我们的结果与 Ferrando 等人 [40] 最近的发现相关,该研究使用稀疏自编码器(sparse autoencoders)寻找代表已知和未知实体的特征,并表明这些特征在模型评估其是否能够回答有关某个实体的问题时起到了因果作用。我们证实了这些发现,并阐明了构成这些发现基础的新回路机制。
[图片概要:图 32]
展示了关键实体识别机制的总结。
Unknown Name(未知名字) 和Known Answer(已知答案) 共同作用于Can't Answer(无法回答)。蓝色且带有 T 型末端的连线表示抑制性输入(inhibitory inputs,即带有负权重的归因图连边)。
§ 8.1 默认拒绝回路 (Default Refusal Circuits)
让我们考虑 Human/Assistant 提示的归因图,定位在 Assistant 道歉的第一个词元(token)上。一组与体育相关的特征激活了推动模型说出某项运动名称的特征。然而,这条回路路径被另一条导致模型开始“我道歉(I apologize)”响应的并行回路给“以票数压倒(outvoted)”了。
该回路的核心是一组**“无法回答(can’t answer)”**特征,当助手纠正或质疑用户问题的预设,或者声明它没有足够的信息来给出响应时,这些特征就会激活。
这些特征被那些在 Human/Assistant 提示中广泛触发的特征直接激活。这一情况表明,“无法回答”特征在任何 Human/Assistant 提示中都是默认激活的!换句话说,模型默认对用户的请求持怀疑态度。
“无法回答”特征也被一组**陌生名字(unfamiliar name)**特征所促进,而后者又被“Michael Batkin”的各个词元和一个通用的“名字(first names)”特征所激活。这表明,每当出现一个名字时,这些未知名字特征也会“默认”被激活。
§ 8.2 一条抑制性的“已知答案”回路 (An Inhibitory “Known Answer” Circuit)
如果模型默认激活了促进拒绝的“无法回答”和“未知名字”特征,那么它究竟是如何给出提供信息的答案的呢?我们假设:这些特征被代表模型所熟知的实体或话题的特征给**抑制(suppressed)**了。
未知实体 Michael Batkin 未能抑制这些特征,但我们可以想象,与知名实体(如迈克尔·乔丹)相关的特征能够成功地抑制它们。
为了测试这一假设,我们针对以下提示计算了归因图:
Human: Which sport does Michael Jordan play? Answer in one word.
Assistant: Basketball
我们将焦点放在“无法回答”特征上。我们确认,正如预期的那样,与 Michael Batkin 提示相比,在响应该提示时,所有这些特征要么是不活跃的,要么活跃度较弱。我们在归因图中还观察到,这些特征被以下因素**抑制(inhibited)**了:
- 与迈克尔·乔丹相关的特征
- 一组**“已知答案(known answer)”和“已知实体(known entity)”**特征。当助手被问及它可能了解的人或事物时,这些特征就会激活。
- 反过来,这些已知答案和已知实体特征是被一组与迈克尔·乔丹相关的特征激活的。
结合我们对这两个提示的分析,机制总结如下:
[图片概要:图 33]
展示了两个简化的归因图对比:
- 对于 Batkin(未知):模型输入直接触发了“Unknown Name”,顺势触发“Can’t Answer”,最终输出拒绝回答。
- 对于 Jordan(已知):模型输入触发了“Michael Jordan”专属特征,进而触发“Known Answer”特征。这个“Known Answer”节点向下的“Unknown Name”和“Can’t Answer”节点发送了强烈的负向抑制信号(蓝色 T 型箭头),将其关闭,同时促使模型输出“Basketball”。
这个回路符合我们的假设,即已知实体或话题会抑制原本默认活跃的“无法回答”特征。如果这是真的,我们应该能够通过提升“已知答案/实体”特征,在 Michael Batkin 的提示中抑制“无法回答”特征,从而诱导产生幻觉。的确如此!这样做会导致模型选择一个看似随机的运动名称(甚至包括国际象棋 Chess!)。
相反,在 Jordan 提示中抑制“已知答案”特征,会导致模型有时回复暗示其对答案不确定的词语(例如“Hypothetical/假设的”、“Underspecified/规定不明确的”)。
[图片概要:图 34]
包含了对上述 Jordan 和 Batkin 图进行干预测试的各项数据:
- 在 Batkin 图中,人工将“Known Answer”提高,会导致输出变成 Chess, Tennis 等随机运动。
- 在 Jordan 图中,人工将“Known Answer”降低 20 倍,会导致模型输出偏离 Basketball,转而输出犹豫或拒绝。
我们也对“无法回答”和“未知名字”特征进行了干预实验,大部分结果支持我们的回路假设。然而,我们得到了一些意想不到的结果。例如,显然仅仅激活“未知名字”特征并不足以在迈克尔·乔丹的提示中诱导其拒绝。更一般地说,要获得显著效果所需的干预强度(intervention strengths)相对于原始提示上的特征激活度而言非常高。这表明我们所识别的特征/连接仅仅捕捉到了全部情况的一部分(参见姐妹篇论文中的局限性章节)。
§ 8.3 自然幻觉的案例研究:学术论文 (Case Study of a Natural Hallucination: Academic Papers)
上面识别出的回路旨在防止模型在不知道答案时产生幻觉(通过拒绝回答),并在它确实知道答案时抑制这种拒绝响应。
然而,有时模型确实会产生幻觉!模型可能产生幻觉的一个语境是提供引文——列出与话题或作者相关的论文标题。例如,考虑以下交互:
Human: Name one paper written by Andrej Karpathy. (说出一篇由安德烈·卡帕斯撰写的论文。)
Assistant: One notable paper by Andrej Karpathy is “ImageNet Classification with Deep Convolutional Neural Networks” […] (安德烈·卡帕斯撰写的一篇著名论文是《使用深度卷积神经网络的 ImageNet 分类》…)
事实上,Andrej Karpathy 并不是那篇论文的作者。然而,模型做出了一个合理的猜测——Andrej Karpathy 以研究深度学习而闻名,而那正是一篇著名的深度学习论文。这种行为不太令人惊讶——一旦模型承诺给出答案,由于它知道 Karpathy 是一名深度学习研究员,它做出尽可能合理的猜测是合情合理的。
我们真正感兴趣的是:为什么模型未能识别出它其实并不确信该问题的答案?
例如,当我们向模型询问一个不太知名的作者(对不起 Josh!)时,它承认了无知:
Human: Name one paper written by Josh Batson.
Assistant: I apologize, but I cannot confidently name a specific paper written by Josh Batson without verifying the information… (我道歉,但在没有核实信息的情况下,我无法自信地说出…)
这种行为是由与之前的“Michael Batkin”示例中极其相似的回路机制驱动的。一组“无法回答”特征促进了该响应,并且它们是被“Assistant”特征以及似乎代表未知名字的两个特征激活的。
上面识别出的“已知答案”特征均未激活。如果我们激活这些特征,就会抑制“无法回答”和“未知名字”特征,并导致模型产生幻觉。随着激活程度的增加,这种效果也会增强。
[图片概要:图 35]
展示了对 Josh Batson 提示的干预。人为将“Known Answer”特征增强 15 倍后,模型会无中生有地编造出诸如 “The Batson Principle” 这样探讨商业伦理的虚假著作。
这些实验为理解在 Karpathy 提示中发生的事情提供了线索——也许模型仅仅因为认出了 Andrej Karpathy 的名字,就激活了“已知答案/实体”特征(即使它并不知道该问题的答案)!
事实上,我们发现在 Michael Jordan 提示中识别出的几个“已知答案”和“已知实体”特征确实处于激活状态,尽管相对于它们在 Jordan 提示上的激活度较弱。这些特征向“未知名字”和“无法回答”特征提供了抑制性输入。如果我们在实验中大幅抑制这些特征(减弱其力量),就会导致“未知名字”和“无法回答”的激活度增加,并最终导致模型转变为诚实的拒绝回答。
[图片概要:图 36]
在 Karpathy 提示上抑制“Known Answer”:
- 抑制 5 倍:模型开始变得犹豫,加上了免责声明“我不太确定这是确切的标题…”。
- 抑制 10 倍:模型彻底认输,回复“我道歉,但我无法说出具体的论文名称,请提供更多上下文…”。
常见回路组件与结构 (Commonly Observed Circuit Components and Structure)
在研究大量归因图(attribution graphs)的过程中,我们对这些图的结构以及其中常见的组件进行了各种广泛的观察:
输入、抽象和输出特征 (Input, abstract, and output features)。 在大多数提示词(prompts)中,穿过归因图的路径始于代表词元(tokens)或其他底层输入属性的“输入特征”,并终于“输出特征”(最好通过它们所促进或抑制的输出词元来理解这些输出特征)。通常,代表更高层概念或计算的更抽象的特征位于图的中间。这与 Elhage 等人 [33] 提出的“去词元化 → 抽象特征 → 重词元化”图景大体一致。
汇聚路径与捷径 (Convergent paths and shortcuts)。 源节点通常通过多条不同的路径(往往长度不同)影响目标节点。例如,在 § 3“多步推理”中,我们观察到“得克萨斯”特征和“说出一个首府”特征既通过直接连接到输出,也通过“说出奥斯汀”特征的间接连接,来增加“奥斯汀”响应的权重。类似地,尽管我们主要关注从 达拉斯 → 得克萨斯 → 奥斯汀 的两步路径,但从“达拉斯”特征到“奥斯汀”特征也存在直接的正向连接!在 Alon [55] 的分类法中,这对应于“相干前馈环路(coherent feedforward loop)”,这是生物系统中常见的一种回路模体(motif)。
“涂抹”在各个词元位置上的特征 (Features “smeared” across token positions)。 在许多情况下,我们发现同一个特征在许多相邻的词元位置上都处于活跃状态。尽管该特征的每个实例原则上在归因图中参与的方式可能不同,但我们通常发现,一个特征的重复实例具有相似的输入/输出边。这表明某些特征的作用是维持模型上下文的一致表征。
长程连接 (Long-range connections)。 任何给定层中的特征都可以与任何下游层中的特征建立直接的输出边——也就是说,边可以“跳过”层。由于残差流(residual stream)中的路径存在,原则上即使我们使用单层转码器(transcoders)也会出现这种情况;然而,使用跨层转码器会使长程边变得更加明显(量化数据见姊妹篇论文)。在极端情况下,我们发现模型第一层中与底层词元相关的特征有时会对后续层面的特征产生重大影响,甚至直接影响输出,例如算术问题中的“=”号会促进“简单数字”的输出。
特殊词元的特殊作用 (A special role for special tokens)。 在几个实例中,我们观察到模型将重要信息存储在换行符、句号或其他标点/分隔符上。例如,在我们关于诗歌写作规划的案例研究中,我们观察到模型在下一行之前的换行符上,表征了几个可能用于该行结尾的押韵候选词。在关于有害请求/拒绝的研究中,我们注意到“有害请求”特征经常在人类请求之后、“Assistant”之前的换行符上触发。文献中也有类似的观察结果;例如,[56] 发现参与决定情感的注意力头通常依赖于存储在逗号词元中的信息,而 [57] 发现新闻文章标题中的时间信息存储在随后的句号词元中。
“默认”回路 (“Default” circuits)。 我们观察到了几个在特定上下文中似乎“默认”处于活跃状态的回路实例。例如,在 § 8“幻觉”中,我们发现了从“Assistant”特征直接指向“无法回答问题”特征的正向连接,表明模型的默认状态是假设它无法回答某个问题。类似地,我们发现了从通用名称相关特征指向“未知名字”特征的连接,这表明存在一种机制:除非另有证明,否则假设名字是不熟悉的。当遇到已知答案的问题或熟悉的实体时,这些特征会被相应的特征所抑制,从而允许相反的证据推翻这种默认状态。
注意力往往在早期发挥作用 (Attention often does its work early)。 我们修剪后的归因图通常(尽管并非总是)具有一种特征性的“形状”——最终词元位置包含贯穿模型所有层的节点,而较早的词元位置通常只包含较早层中的节点(其余的被修剪掉了)。具有这种形状的图表明,在给定词元位置上与文本补全相关的大部分计算,是在从较早层的先前词元“获取”信息之后,响应该词元位置发生的。
多面特征的上下文依赖作用 (Context-dependent roles of multifaceted features)。 特征通常代表极其具体的概念组合(在某些情况下这是不可取的;参见关于特征分裂的局限性部分)。例如,在我们的州首府示例中,我们识别出的一个与得克萨斯州相关的特征,会在与得克萨斯州法律/政府相关的提示上激活。然而,在那个特定提示的上下文中(“事实:包含达拉斯的州的首府是” → “奥斯汀”),该特征的法律相关“侧面”与其在计算中的作用并不是特别相关。但是,在其他提示中,该特征的这一侧面可能非常重要!因此,即使一个特征在不同上下文中具有一致的含义(因此我们仍然认为它是可解释的),其含义的不同侧面也可能在其不同上下文的功能作用中展现出相关性。
信心降低特征?(Confidence reduction features?) 我们经常在模型的晚期层中观察到具有两个属性的特征:(1)它们通常在某个特定词元之前立即激活,但是(2)它们对该词元具有很强的负向输出权重。例如,在我们的入门示例中,除了“说出奥斯汀”特征外,我们还注意到了一个特征,它在“奥斯汀”极有可能是下一个词元的情况下,反而在阻止模型说出奥斯汀。在我们的诗歌示例中,针对“rabbit”也有一个类似特征(尽管有趣的是,该特征虽然降低了“rabbit”的权重,却增加了“ra”和“bit”等词元的权重)。我们怀疑这些特征参与了调节模型对其输出的信心。但是,我们不确定它们的确切作用,为什么它们如此常见,以及为什么它们只在晚期模型层中突出(关于神经元层面的相关结果,请参见 [58, 59])。
“无聊”回路 (“Boring” circuits)。 在这篇论文中,我们主要关注理解“有趣的”回路,这些回路构成了模型行为的“核心(crux)”。然而,在给定提示上,很大一部分活跃的特征和图的连边通常是“无聊的”,因为它们似乎履行的是一种基本的、显而易见的作用。举一个具体的例子,在与加法相关的提示中,归因图中的许多特征似乎仅仅代表了“该提示与数学/数字有关”这一事实,而许多其他特征则增加了模型输出数字的概率。这些特征对模型的功能至关重要,但不能解释其计算中“有趣”的部分(在这种情况下,它到底是如何决定输出哪个具体数字的)。






