电路追踪:揭示语言模型中的计算图

Anthropic:Transformer Circuits(可解释性研究)·2025-03-27 00:00·521天前·Anthropic
AI 导读

研究团队提出“电路追踪”方法,用于揭示语言模型行为的计算机制。该方法通过在替代模型中追踪计算步骤,生成描述模型执行过程的图;替代模型使用跨层转码器等可解释组件近似原始结构。团队开发了可视化和验证工具,以研究18层语言模型的简单行为归因图,为后续研究奠定基础,并计划应用于Claude 3.5 Haiku。关键决策包括使用跨层转码器提取特征,并构建特征间线性相互作用的归因图。

Anthropic:Transformer Circuits(可解释性研究)
精选
76AI 编辑部评分,满分 100

电路追踪:揭示语言模型中的计算图

2025-03-27 00:00· 521天前· Anthropic
AI 导读

研究团队提出“电路追踪”方法,用于揭示语言模型行为的计算机制。该方法通过在替代模型中追踪计算步骤,生成描述模型执行过程的图;替代模型使用跨层转码器等可解释组件近似原始结构。团队开发了可视化和验证工具,以研究18层语言模型的简单行为归因图,为后续研究奠定基础,并计划应用于Claude 3.5 Haiku。关键决策包括使用跨层转码器提取特征,并构建特征间线性相互作用的归因图。

推荐理由

揭示大模型内部机制,为AI安全与调试提供新工具。

正文 · AI 翻译

电路追踪:揭示语言模型中的计算图

我们提出了一种方法,用于揭示语言模型行为背后的机制。通过追踪“替代模型”中的各个计算步骤,我们生成了模型在相关提示词上计算过程的图描述。这个替代模型用一个更具可解释性的组件(此处为“跨层转码器”)来替代底层模型(此处为多层感知器)中它被训练去近似的部分。我们开发了一套可视化和验证工具,用于研究这些支持一个18层语言模型简单行为的“归因图”,并为后续将此类方法应用于前沿模型Claude 3.5 Haiku的配套论文奠定基础。

作者

Emmanuel Ameisen

*

Jack Lindsey

*

Adam Pearce

*

Wes Gurnee

*

Nicholas L. Turner

*

Brian Chen

*

Craig Citro

*

David Abrahams,

Shan Carter,

Basil Hosmer,

Jonathan Marcus,

Michael Sklar,

Adly Templeton,

Trenton Bricken,

Callum McDougall

Hoagy Cunningham,

Thomas Henighan,

Adam Jermyn,

Andy Jones,

Andrew Persic,

Zhenyi Qi,

T. Ben Thompson,

Sam Zimmerman,

Kelley Rivoire,

Thomas Conerly,

Chris Olah,

Joshua Batson

*‡

所属机构

Anthropic

发布日期

2025年3月27日

* 核心贡献者;

‡ 通讯作者,邮箱:joshb@anthropic.com;

◊ 该工作完成于任职Anthropic期间;

作者贡献声明见下文


引言

深度学习模型通过一系列分布在众多计算单元(人工“神经元”)上的变换来产生其输出。机械可解释性领域旨在用人类可理解的语言来描述这些变换。迄今为止,我们团队的方法遵循一个两步走的策略。首先,我们识别特征,即模型在其计算中使用的可解释构建块。其次,我们描述这些特征相互作用以产生模型输出的过程,即电路。

一种自然的思路是将模型的原始神经元作为这些基本构建单元。另一种思路是研究模型宏观组件(如整个 MLP 模块和注意力头)的作用。这种方法已识别出这些组件在特定行为中扮演的有趣角色,但大型组件在数据分布中承担着大量互不相关的功能,因此我们需要更细粒度的分解。采用这一方法,先前的研究成功在视觉模型中识别出有趣的回路,这些回路由看似表征有意义视觉概念的神经元构成。然而,模型神经元往往具有多义性——即混合表征许多互不相关的概念。多义性的一个原因被认为是叠加现象,即模型需要表征的概念数量超过其神经元数量,因此必须将概念的表征“涂抹”到多个神经元上。这种网络基本计算单元(神经元)与有意义概念之间的错位,已成为机械论解释研究进展的主要障碍,尤其是在理解语言模型方面。

近年来,稀疏编码模型(如稀疏自编码器、跨编码器和交叉编码器)已成为识别叠加表征中可解释特征的有力工具。这些方法将模型激活分解为稀疏激活的组件(即“特征”)。我们沿用神经科学中“特征检测器”和机器学习中“特征学习”的传统来使用“特征”一词。近期部分文献使用“潜变量”这一术语,特指模型潜空间中的特定向量。我们认为“特征”更能捕捉这些元素所发挥的计算作用,因此比 SAE 解码器向量更适合描述跨编码器神经元。这些特征在许多情况下对应人类可解释的概念。尽管当前的稀疏编码方法在识别特征方面尚不完美(详见§局限性),但其结果已具备足够的可解释性,促使我们研究由这些特征构成的回路。已有数位研究者在这一方向上取得了令人鼓舞的初步进展。

尽管基于稀疏编码特征构建电路的基本前提听起来很简单,但设计空间却非常广阔。在本文中,我们描述了当前采用的方法,该方法涉及几个关键的方法论决策:

  1. 转码器。我们使用转码器的一种变体而非 SAE 来提取特征,这使得我们能够构建一个可解释的“替代模型”,并将其作为原始模型的代理进行研究。重要的是,这种方法使我们能够分析直接的特征-特征交互。
  2. 跨层。我们的分析基于跨层转码器(CLT),其中每个特征从某一层的残差流中读取信息,并贡献给原始模型所有后续 MLP 层的输出,这极大地简化了最终得到的电路。值得注意的是,我们可以用学习到的 CLT 特征替代模型的 MLP,同时在大约 50% 的情况下匹配底层模型的输出。
  3. 归因图。我们专注于研究“归因图”,它描述了模型针对特定提示词上的目标 token 产生输出所采用的步骤,使用了类似于 Dunefsky 等人的方法。归因图中的节点代表活跃特征、来自提示词的 token 嵌入、重构误差以及输出 logits。图中的边代表节点之间的线性效应,因此每个特征的活跃度是其输入边的总和(达到其激活阈值为止)(参见 § 归因图)。
  4. 特征间的线性归因。我们设计了实验框架,使得对于特定输入,特征之间的直接交互是线性的。这使归因成为一项定义明确、有原则的操作。关键在于,我们冻结了注意力模式和归一化分母(遵循已有方法),并使用跨编码器来实现这种线性。特征间的直接交互是线性的,因为跨编码器特征“跨越”了 MLP 的非线性层,取代了它们的计算,并且因为我们冻结了剩余的非线性部分:注意力模式和归一化分母。值得注意的是,严格来说,我们指的是特征在激活前的值相对于早期特征的激活值是线性的。冻结注意力模式是一种标准方法,它将理解 Transformer 架构分为两步:理解给定注意力模式下的行为,以及理解模型为何关注那些位置。这种方法在《A Mathematical Framework》中针对注意力模型进行了深入探讨,该框架还讨论了将其推广到 MLP 层的方法,这本质上就是本文所采用的方法。请注意,以这种方式将理解注意力模式分离出来,会导致 § 局限性:缺失注意力回路 中提到的注意力相关问题。然而,我们随后可以采用与《Framework》相同的解决方案,即研究 QK 回路。特征之间也存在由其他特征介导的间接交互,这对应于多步路径。
  5. 剪枝。尽管我们的特征是稀疏的,但在给定提示词上激活的特征数量仍然过多,难以轻松解释由此产生的图。为了管理这种复杂性,我们通过识别对模型在特定 token 位置输出贡献最大的节点和边来对图进行剪枝(参见 § 附录:图剪枝)。这样做使我们能够为任意提示词生成模型计算的稀疏、可解释的图。
  6. 界面。我们设计了一个交互式界面,用于探索归因图及其所包含的特征,使研究人员能够快速识别并突出显示其中的关键机制。
  7. 验证。我们研究电路的方法是一种间接方法——我们的替代模型可能使用了与原始模型不同的机制。因此,验证我们在归因图中发现的机制至关重要。我们通过扰动实验来进行验证。具体来说,我们衡量在某个特征的方向上施加扰动,会对其他特征的激活(以及模型的输出)产生多大程度的变化,并且这些变化应与归因图一致。我们发现,在不同的提示词下,扰动实验的结果通常与我们的归因图在定性上保持一致,但也存在一些偏差。
  8. 全局权重。虽然我们的论文主要侧重于研究单个提示词的归因图,但我们的方法也允许我们直接研究替代模型的权重(即“全局权重”),这些权重是许多提示词背后机制的基础。在《全局权重》一节中,我们展示了这样做的一些挑战——由于权重干扰,朴素的全局权重通常不如归因图那样可解释。然而,我们成功地将它们应用于理解小数字加法背后的电路。

本文的目标是详细描述并验证我们的方法论,并通过几个案例研究进行说明。

  • 我们从方法开始讲起。我们描述了替代模型的设置(《构建可解释的替代模型》一节)以及我们如何构建归因图(《归因图》一节),最后以两个案例研究作为结尾(《事实回忆案例研究》、《加法案例研究》)。接着,我们继续探讨构建全局电路的方法,包括其中遇到的挑战以及一些初步的应对方法(《全局权重》一节)。
  • 随后,我们对跨层编码器及由此生成的归因图进行了详细的定量评估(§ 评估),展示了跨层编码器在哪些指标上相对于神经元和逐层编码器实现了帕累托改进。之后,我们概述了我们的配套论文,在该论文中,我们将我们的方法应用于 Claude 3.5 Haiku 的各种行为(§ 生物学)。接着,我们讨论了方法论上的局限性(§ 局限性)。这些局限性包括注意力模式的作用、重建误差的影响、抑制模式的识别以及理解全局电路的困难。解决这些局限性,并观察由此能揭示哪些额外的模型机制,是未来工作的一个有前景的方向。
  • 最后,我们进行了更广泛的讨论(§ 讨论),探讨了生成归因图方法的设计空间——我们方法的各个部分可以与其他方法自由组合,同时保留大部分优势——并回顾了相关工作(§ 相关工作)。
  • 我们的配套论文《论大语言模型的生物学》将这些方法应用于 Claude 3.5 Haiku,研究了多种多样的行为,例如多跳推理、规划和模型幻觉。

我们注意到,训练一个跨层编码器可能会产生显著的前期成本和精力,这些成本会通过其在电路发现中的应用而得到分摊。我们发现,这足以提升电路的可解释性和简洁性,从而证明这项投入是合理的(参见针对开放权重模型的成本估算,以及与逐层编码器在成本匹配性能方面的讨论)。尽管如此,我们强调,也可以使用逐层编码器甚至 MLP 神经元等替代方案(保留上述步骤 3-8),并且仍然能产生有价值的见解。此外,未来很可能会开发出比跨层编码器更好的方法。

为了便于复现,我们分享了关于跨层编码器实现的指导、剪枝方法的细节,以及支持交互式图分析界面的前端代码。


构建一个可解释的替代模型

架构

跨层编码器(CLT)由分布在 L 个层中的神经元(即“特征”)组成,层数与底层模型相同。该模型的目标是利用稀疏激活的特征来重建底层模型 MLP 的输出。这些特征在其所在层接收来自模型残差流的输入,但之所以称为“跨层”,是因为它们可以向所有后续层提供输出。除了 CLT 之外,其他架构也可用于电路分析,但我们根据经验发现这种方法效果很好。具体来说:

  • 第 ℓ 层中的每个特征通过一个线性编码器后接一个非线性激活函数,从该层的残差流中“读取”输入。
  • 第 ℓ 层的特征会为第 ℓ、ℓ+1、…、L 层的 MLP 输出重建做出贡献,并且对每个输出层使用一组独立的线性解码器权重。
  • 所有层中的所有特征都进行联合训练。因此,第 ℓ′ 层的 MLP 输出是由所有先前层的特征共同重建的。

更正式地说,为了运行跨层编码器,令 **x^ℓ** 表示原始模型在第 ℓ 层的残差流激活值。CLT 在第 ℓ 层的特征激活值 **a^ℓ** 按如下方式计算:

**a^ℓ** = JumpReLU( W_enc^ℓ **x^ℓ** )

其中 W_enc^ℓ 是 CLT 在第 ℓ 层的编码器矩阵。

我们令 **y^ℓ** 表示原始模型 MLP 在第 ℓ 层的输出。CLT 对 **y^ℓ** 的尝试性重建 **ŷ^ℓ** 使用 JumpReLU 激活函数计算如下:

**ŷ^ℓ** = Σ_{ℓ′=1}^{ℓ} W_dec^{ℓ′→ℓ} **a^{ℓ′}**

其中 W_dec^{ℓ′→ℓ} 是 CLT 的解码器矩阵,用于将第 ℓ′ 层的特征输出到第 ℓ 层。

为了训练跨层编码器,我们最小化两个损失函数之和。第一个是跨各层求和的重建误差损失:

L_MSE = Σ_{ℓ=1}^{L} ||**ŷ^ℓ** - **y^ℓ**||²

第二项是稀疏惩罚项(包含一个全局系数 λ 作为超参数,以及另一个超参数 c),在各层之间求和:

L_sparsity = λ Σ_{ℓ=1}^L Σ_{i=1}^N tanh(c · ‖W_{dec, i}^{ℓ}‖ · a^{ℓ}_i)

其中 N 是每层的特征数量,W_{dec, i}^{ℓ} 是特征 i 的所有解码器向量的拼接结果。

我们在一个小型 18 层 Transformer 模型("18L")18L 的第 0 层没有 MLP,因此我们的 CLT 共有 17 层。以及 Claude 3.5 Haiku 上训练了不同规模的 CLT。所有层的特征总数范围从 30 万到 1000 万(针对 18L 模型),以及从 30 万到 3000 万(针对 Haiku 模型)。更多训练细节见附录:CLT 实现细节。

从跨层编码器到替代模型

给定一个训练好的跨层编码器,我们可以定义一个"替代模型",用跨层编码器的特征替换模型的 MLP 神经元——也就是说,每一层的 MLP 输出都被替换为所有写入该层的 CLT 的重建结果。对该替代模型执行前向传播与运行原始模型完全相同,仅有两处修改:

  • 当到达第 ℓ 层 MLP 的输入时,我们计算其编码器位于第 ℓ 层的跨层编码器特征的激活值。
  • 当到达第 ℓ 层 MLP 的输出时,我们用该层及之前各层的跨层编码器特征(使用它们针对第 ℓ 层的解码器)的求和输出来覆盖它。

注意力层照常运行,无需任何冻结或修改。尽管我们的 CLT 仅使用底层模型的输入激活进行训练,但"运行"替代模型时,需要在来自替代模型自身中间激活的"分布外"输入激活上运行 CLT。

作为一项简单评估,我们测量了替换模型最可能输出的 token 与原始模型最可能输出的 token 相匹配的补全比例。该比例随规模扩大而提升,且与逐层转录器基线(即每层都训练一个标准的单层转录器;所示特征数量指所有层的特征总数)相比,交叉层转录器(CLT)的表现更优。我们还与阈值化神经元基线进行了比较,该基线会改变神经元被置零的阈值(根据经验,我们发现神经元激活值越高,其可解释性越强,并在下方标注了其可解释性大致与特征可解释性相当的位置,依据是我们在《定量 CLT 评估》一节中的自动评估)。我们最大的 18 层 CLT 在来自开源数据集的多样化预训练风格提示词(详见《附加评估细节》)中,有 50% 的提示词能匹配原始模型的下一个 token 补全。我们使用随机采样的提示词和目标 token 集,并限定为模型预测正确但置信度低于 80% 的样本(以过滤掉“无趣”的 token)。

局部替换模型

虽然运行替换模型有时能复现原始模型的相同输出,但两者之间仍存在显著差距,且重建误差会逐层累积。由于我们的最终目标是理解原始模型,我们希望尽可能精确地逼近它。为此,在研究固定提示词 p 时,我们构建了一个局部替换模型,该模型会:

  • 用交叉层转录器(CLT)替换 MLP 层(与替换模型中的做法相同);
  • 使用原始模型在提示词 p 上前向传播时的注意力模式和归一化分母(与 中的做法相同);
  • 在每个(token 位置,层)组合处,向 CLT 输出添加一个误差修正项,该修正项等于真实 MLP 在提示词 p 上的输出与 CLT 在提示词 p 上的输出之差(与 中的做法相同)。

完成误差调整并冻结注意力机制与归一化非线性层后,我们实际上已用不同的基本单元重写了底层模型在提示词 p 上的计算过程;所有经过误差校正的替换模型的激活值与 logit 输出都与底层模型完全一致。但这并不能保证局部替换模型与底层模型使用相同的机制。我们可以通过测量这两个模型对扰动的响应差异来衡量机制差异;我们将扰动行为匹配的程度称为"机制忠实度",详见《评估机制忠实度》章节。这种方法在本质上类似于函数 f 在点 a 处的泰勒展开——两者在 a 的邻域内局部一致,但随着远离该点,行为会出现分歧。

局部替换模型可视为一个跨越 token 的超大型全连接神经网络,我们可以对其执行经典的电路分析:

  • 其输入是提示词中每个 token 的独热编码向量拼接而成的集合。
  • 其神经元是每个 token 位置上所有活跃的 CLT 特征的并集。
  • 其权重是从一个特征到另一个特征的所有线性路径上的交互总和,这些路径包括通过残差流和注意力机制的路径,但不经过 MLP 或 CLT 层。由于注意力模式和归一化分母已被冻结,源特征的激活值通过每条路径对目标特征预激活值的影响,与源特征的激活值呈线性关系。我们有时将这些权重称为"虚拟权重",因为它们并非底层模型中实际存在的参数。
  • 此外,该模型还包含与误差项对应的偏置节点,每个偏置节点都与模型中的每个下游神经元存在连接。

局部替换模型中唯一的非线性操作是应用于特征预激活值的那些。

局部替换模型是我们归因图的基础,我们在归因图中研究该模型在其所针对的提示词上的特征-特征交互。这些图是本文的主要研究对象。


归因图

我们将介绍构建归因图的方法论,同时通过一个关于模型为任意标题生成缩写能力的案例研究进行说明。在我们研究的示例中,模型成功完成了一个虚构的缩写。具体来说,我们向模型输入提示词“The National Digital Analytics Group (N”,并采样其补全结果“DAG)”。模型训练时使用的分词器采用了一种特殊的“大写锁定”token,这意味着提示词和补全结果的分词方式如下:The National Digital Analytics Group (⇪ndag。

我们通过构建归因图来解释模型输出“DAG”token 所执行的计算过程,该图展示了信息从提示词经由中间特征流向该输出的路径。由于“大写锁定”token 的存在,实际的目标 token 是“dag”。为便于阅读,我们在本文及后续文本中均以大写形式书写该 token。下方展示了完整归因图的简化示意图。该图底部显示提示词,顶部显示模型的补全结果。方框代表相似特征的分组,可悬停查看每个特征的可视化内容。我们在《理解与标注特征》章节中讨论了对这些特征的解读。箭头代表一组特征或一个 token 对其他特征及输出 logit 的直接影响。

首字母缩略词提示词的图表显示了三条主要路径,它们分别源自构成目标首字母缩略词的各个 token。路径从特定单词的特征出发,促进关于“在正确位置说出该单词的首字母”的特征,而这些特征本身又与“说出 DAG”特征及 logit 之间存在正向连接。“说出 X”标签描述的是“输出特征”,这些特征会促进特定 token X 的输出,任意单个字母则用下划线表示。“单词 → 说出 _W”连接代表注意力头的 OV 回路写入某个子空间,该子空间随后被目标位置的 MLP 放大。除了顺序路径之外,每组特征也有一条直接连接到 logit 的边,这代表了仅通过注意力头 OV 介导的影响(即,在局部替换模型中,那些未“触及”另一层 MLP 的输出路径)。

为了输出“DAG”,模型还需要决定输出一个首字母缩略词,并考虑到提示词中已经包含 N 这一事实。确实,我们看到了“在首字母缩略词中”和“在首字母缩略词开头的 N 中”这些特征与 logit 之间存在正向连接。单词 National 对 logit 的影响极小。我们推测,这是因为它的主要贡献在于影响注意力模式,而我们的方法无法解释这一点(参见 § 局限性:缺失的注意力回路)。

在本节的剩余部分,我们将解释如何计算和可视化归因图。

为提示词构建归因图

为了解释局部替换模型所执行的计算,我们计算了一个因果图,该图描述了模型在特定提示词上执行的计算步骤序列。我们构建该图的核心逻辑与 Dunefsky 等人的方法基本相同,但扩展到了跨层转码器。我们的图包含四种类型的节点:

  • 输出节点对应于候选输出 token。我们只为达到 95% 概率质量所需的 token 构建输出节点,最多不超过 10 个。我们任意选择了这个阈值。根据经验,在我们研究的案例中,捕获 95% 的概率所需 logit 数量少于三个。
  • 中间节点对应每个提示词 token 位置上的活跃跨层编码器特征。
  • 图的主要输入节点对应提示词 token 的嵌入向量。
  • 额外的输入节点(“误差节点”)对应底层模型中每个 MLP 输出中未被 CLT 解释的部分。

图中的边表示局部替换模型中的直接线性归因。边从特征节点、嵌入节点和误差节点出发,终止于特征节点和输出节点。给定一个源特征节点 s 和一个目标特征节点 t,它们之间的边权重定义为 A_{s\rightarrow t} := a_sw_{s \rightarrow t},其中 w_{s \rightarrow t} 是局部替换模型(视为全连接神经网络)中的(虚拟)权重,a_s 是源特征的激活值。或者,w_{s \rightarrow t} 是 t 的预激活值对源特征激活值的导数,同时对局部替换模型中的所有非线性部分施加梯度停止。

在底层模型层面,w_{s \rightarrow t} 是所有连接源特征解码器向量与目标特征编码器向量的线性路径(即通过注意力头 OV 回路和残差连接)之和。

现在我们给出如何利用反向雅可比矩阵在实践中高效计算这些值的细节。设 s 为第 \ell_s 层、上下文位置 c_s 处的源特征节点,t 为第 \ell_t 层、上下文位置 c_t 处的目标特征节点。我们记 J_{c_s, \ell_s \rightarrow c_t, \ell_t}^{\blacktriangledown} 为底层模型在相关提示词上的反向传播过程中,从上下文位置 c_t、第 \ell_t 层的残差流到上下文位置 c_s、第 \ell_s 层的残差流,并对所有包含非线性的模型组件(MLP 输出、注意力模式以及归一化分母)施加梯度停止操作后的雅可比矩阵。那么从 s 到 t 的边权重即为

\( A_{s \rightarrow t} = a_s w_{s \rightarrow t} = a_s \sum_{\ell_s \leq \ell < \ell_t} (W_{\text{dec}, \;s}^{\ell_s \to \ell})^T J_{c_s, \ell \rightarrow c_t, \ell_t}^{\blacktriangledown} W_{\text{enc}, \;t}^{\ell_t} \)

其中

  • \( W_{\text{dec}, \;s}^{\ell_s \to \ell} \) 是特征 s 写入第 \( \ell \) 层的解码器向量,
  • \( W_{\text{enc}, \;t}^{\ell_t} \) 是特征 t 的编码器向量。

其他边类型的公式类似,例如,嵌入-特征边的权重由 \( w_{s \rightarrow t} = \text{Emb}_s^T J_{c_s, \ell_s \rightarrow c_t, \ell_t}^{\blacktriangledown} W_{\text{enc}, \;t}^{\ell_t} \) 给出。注意,错误节点没有输入边。关于所有这些公式,以及雅可比矩阵在底层模型路径上的展开,请参见附录:归因图计算。

由于我们在上述计算中对所有模型非线性层添加了梯度截断,任何特征节点 t 的预激活值 \( h_t \) 就是其在图中所有入边的简单求和:\( h_t = \sum_{\mathcal{S}_t} w_{s \rightarrow t} \),其中 \( S_t \) 是位于比 t 更早的层以及相等或更早的上下文位置上的节点集合。因此,归因图的边提供了每个特征活动的线性分解。

请注意,这些图不包含节点通过影响注意力模式而对其他节点产生作用的信息,但确实包含了节点通过冻结注意力的输出而对其他节点产生作用的信息。换句话说,我们解释了从一个 token 位置流向另一个 token 位置的信息,但没有解释模型为何移动该信息。也就是说,我们的模型忽略了“QK 电路”,但捕捉了“OV 电路”。另请注意,跨层特征的外出边聚合了其写入的所有下游层上的解码效果对下游特征的影响。

尽管我们替换模型的特征是稀疏激活的(每个 token 位置大约有上百个活跃特征),但归因图仍然过于庞大,无法完整查看,尤其是随着提示词长度的增加——即使对于较短的提示词,边的数量也可能增长到数百万。幸运的是,通常一个小子图就能涵盖从输入到输出的大部分重要路径。

为了识别这样的子图,我们应用了一种剪枝算法,旨在保留那些直接或间接对 logit 节点产生显著影响的节点和边。使用我们的默认参数,我们通常能将节点数量减少一个数量级,同时仅降低 20% 的可解释行为。关于我们算法和指标的方法论细节,请参见附录:图剪枝。

从归因图中学习

即使在剪枝之后,归因图的信息密度仍然很高。一个剪枝后的图通常包含数百个节点和数万条边——信息量太大,无法一次性全部解读。为了让我们能够驾驭这种复杂性,我们开发了一个交互式归因图可视化界面。该界面旨在支持“追踪”图中的关键路径,保留重新访问已探索节点和路径的能力,并按需具体化解释特征所需的信息。

下面展示的是从单个 token “DAG” 反向归因的归因图交互式可视化:

该界面是交互式的。节点可以悬停和点击以显示更多信息。也可以通过使用 Cmd/Ctrl+Click 选择一组节点来构建子图。在子图中,特征可以聚合到我们称之为超级节点的组中(动机见下文 § 将特征分组为超级节点)。

理解与标注特征

我们使用了与之前工作《扩展单语义性》中类似的特征可视化方法,来手动解释和标注图中的各个特征。我们有时会使用自动化可解释性流水线生成的标签作为起点,但通常发现人工标签更为可靠。

最容易标注的特征是输入特征和输出特征。输入特征会在特定 token 或紧密相关的 token 类别上激活,常见于模型早期层;输出特征则会促进模型用特定 token 或紧密相关的 token 类别继续生成回复,常见于模型后期层。例如:

  • 该特征很可能是一个输入特征,因为其可视化显示,它在单词“digital”以及“digitize”等相似词汇上激活强烈,但在其他词汇上则不然。因此我们将其标注为“digital”特征。
  • 该特征(来自后文《加法案例研究》中的俳句特征)是一个输入特征,它在以数字 6 结尾的多种 token 上激活,甚至在“six”和“June”等与 6 有更抽象关联的 token 上也会激活。
  • 该特征很可能是一个输出特征,因为它在多个不同的 token 上激活强烈,但在每个示例中,该 token 之后都紧跟着文本“dag”。此外,可视化顶部显示,该特征使模型预测“dag”的概率高于任何其他 token(就其通过残差流的直接影响而言)。这表明它是一个输出特征。由于输出特征很常见,在标注那些促进某个 token 或类别 X 的输出特征时,我们通常直接写“说 X”,因此我们给这个示例标注为“说‘dag’”。
  • 该特征(来自后文《事实回忆案例研究》)是一个输出特征,它促进多种体育运动,但也展示了标注输出特征可能存在的困难。例如,必须观察到“lac”是“lacrosse”的第一个 token。此外,该特征激活后,上下文中的下一个 token 实际上往往并非某项运动的名称,而通常是一个适合放置运动名称的位置。

其他特征常见于模型的中间层,更为抽象,需要更多工作才能标注。我们可能会利用它们激活的上下文示例、它们的 logit 效应(即通过残差流和解嵌入直接促进或抑制的 token),以及它们所连接的特征来进行标注。例如:

  • 该特征在左括号后未完成缩写的前一两个字母上激活,适用于多种字母和缩写,因此我们将其标注为“一般性延续缩写”。
  • 该特征在多个以 D 为第二个字母的缩写开头处激活,并且它直接提升的许多 token 也以 D 作为第二个字母。(并非所有这类 token 都如此,但由于模型其余部分的间接效应,我们并不期望 logit 效应能完美代表该特征的功能。我们还发现,距离最后一层越远的特征,其 logit 效应的可解释性越差。)为简洁起见,我们可将此特征标注为“输出‘_D’”,用下划线代表第一个字母。
  • 最后,该特征在多种看似并非缩写的大写字母串的第一个字母上激活,它最抑制的 token 是类似缩写的字母,但其示例除此之外缺乏明显的共同点,因此我们暂将其标注为“抑制缩写”。

我们发现,即使对这些特征进行不完美的标注,也能让我们在图中发现显著的结构。

将特征分组为超级节点

归因图通常包含一组特征,这些特征共享与它们在提示词中角色相关的某个方面。例如,在我们的提示词中,有三个特征在“Digital”上激活,它们各自在不同情况和上下文中对单词“digital”做出响应。对于这个提示词而言,唯一重要的方面是单词“digital”以“D”开头;这三个特征都与同一组下游节点存在正边。因此,为了分析这个提示词,将这些特征分组并视为一个整体是合理的。出于可视化和分析的目的,我们发现将多个节点——对应于(特征,上下文位置)对——分组为一个“超级节点”很方便。这些超级节点对应我们上面展示的简化示意图中的方框,为方便起见,此处再次给出。

我们用于对节点进行分组的策略取决于具体的分析任务,以及给定提示词中特征所扮演的角色。有时,我们会根据对阐述机制主张至关重要的方面,将那些在相似上下文中激活、具有相似嵌入向量或logit效应、或具有相似输入/输出边的特征进行分组。我们通常希望超节点内的节点能够相互促进,并且它们对下游节点的影响具有相同的符号。虽然我们尝试过基于解码器向量或图邻接矩阵进行聚类的自动化策略,但没有任何自动化方法能够完全覆盖说明某些机制主张所需的各种特征分组。我们将在《相似特征与超节点》中进一步讨论超节点及其存在的潜在原因。

通过干预验证归因图假设

在归因图中,节点表明哪些特征对模型输出重要,边则表明这些特征如何发挥作用。我们可以通过在底层模型中进行特征扰动,并检查对下游特征或模型输出的影响是否与基于图的预测相符,来验证归因图的主张。可以通过修改特征的计算激活值,并用其修改后的解码替代原始重构来进行干预。

跨层编码器中的特征会写入多个输出层,因此我们需要确定进行干预的层范围。如何确定呢?我们可以像对单层编码器那样,在单个层上对特征的解码进行干预,但归因图中的边代表多个层解码的累积效应,因此在单个层上干预只会针对给定边的一个子集。此外,我们通常需要同时对多个特征进行干预,而超节点中的不同特征会解码到不同的层。

为了在指定层范围内进行干预,我们在给定范围内的每一层修改某个特征的解码过程,并从该范围最后一层开始执行一次前向传播。由于我们不会根据范围内早期干预的结果重新计算某一层的 MLP 输出,因此模型 MLP 输出的唯一变化将来自我们的干预。我们将这种方法称为“受限补丁”,因为它不允许干预在其补丁范围内产生二阶效应。关于另一种我们称为“迭代补丁”的方法,请参见附录:迭代补丁;关于为何更朴素的方法(例如在模型前向传播过程中,在每一层添加某个特征的解码器向量)存在重复计算特征效应的风险,请参见附录:跨层特征引导的细微之处。

下面,我们展示受限补丁的一种乘法版本:在 [ℓ-1, ℓ] 层范围内,将目标特征的激活值乘以 M。请注意,更远层的 MLP 输出不会直接受到该补丁的影响。它们可能会间接受到影响,因为它们位于受影响节点的下游。

归因图是利用底层模型的注意力模式构建的,因此图中的边并不涵盖通过 QK 电路介导的效应。同样,在我们的扰动实验中,我们保持注意力模式固定为未扰动前向传播过程中观测到的值。这一方法论选择意味着,我们的结果不反映扰动本身可能如何改变了注意力模式。

回到我们的首字母缩略词提示词,我们展示了修补超节点的结果,首先从抑制“Group”超节点开始。下面,为了清晰起见,我们将修补效果叠加到超节点示意图上,展示其对其他超节点以及 logit 分布的影响。请注意,在此图中,节点的位置并不对应 token 位置,除非另有明确说明。

现在我们展示抑制某些超级节点对其他超级节点的聚合激活以及 logit 的影响结果。对于每个补丁,我们将节点激活中的每个特征设为其原始值的相反数(或者等价地,我们使用 −1 的因子进行乘法性引导)。关于为何选择负向引导而非直接消融特征的讨论,请参见§ 未解释方差与引导因子选择。然后,我们将每个节点的总激活量绘制为其原始值的百分比。对于每个被打补丁的超级节点,我们选择对 logit 产生最大抑制效果的末端层范围。我们使用橙色轮廓来高亮那些我们假设补丁会产生影响的下游节点。

我们发现,抑制每个单词的特征会依次抑制相关的初始特征。此外,“say DA_”特征的超级节点会受到“Digital”和“Analytics”两个超级节点抑制的共同影响。

定位关键层

归因图还使我们能够识别出,在哪些层中,某个特征的解码会对 logit 产生最大的下游影响。例如,“Analytics”超级节点的特征主要通过位于第 13 层及之后的中间特征组“say _A”、“say DA_”和“say DAG”间接贡献于“dag”的 logit。

因此,我们预期对“Analytics”特征进行负向引导会对 dag logit 产生影响,该影响在第 13 层之前趋于平稳,然后随着我们接近最终层而幅度减小。这种减小是由我们干预的受限性质造成的。如果补丁范围包含了所有“say an acronym”特征,则不会改变它们的激活,因为受限补丁不允许产生连锁效应。下面,我们展示了使用每个 Analytics 特征进行引导的效果,保持起始层设置为 1,并扫描补丁的结束层。请注意,在此实验中我们使用了较大的引导因子。关于此点的讨论,请参见§ 未解释方差与引导因子选择。

事实回忆案例研究

现在我们转向事实回忆问题,通过研究模型如何以 65% 的置信度补全“事实:迈克尔·乔丹从事的运动是篮球”这一句子。我们首先计算一个归因图。与首字母缩略词研究类似,我们将语义相似的特征分组为超级节点。

下方的超级节点图显示了两条主要路径。一条路径源自“从事”和“运动”这两个 token,并强化了“运动”和“说出一项运动”特征,这些特征进而提升了篮球、足球及其他运动的 logits。另一条路径源自“迈克尔·乔丹及其他名人”,并强化了与篮球相关的特征,这些特征与篮球 logit 存在正向连接,与足球 logit 存在负向连接。除了这些顺序路径外,一些特征组(如“迈克尔·乔丹”和“运动/项目”)与篮球 logit 存在直接连接,这代表了仅通过注意力头 OV 矩阵介导的影响,与 Batson 等人的发现一致。

下方我们还展示了完整的交互式图。

此外,正如 Nanda 等人所观察到的,似乎有一套复杂的机制参与将关于实体迈克尔·乔丹的信息贡献到“乔丹”处的残差流中。我们将对“迈克尔”敏感的特征、一个已识别出 token 对“迈克尔·乔丹”的 L1 特征、其他名人的特征,以及在“迈克尔·乔丹”和其他无关概念上触发的多义特征,归入一个超级节点。请注意,我们选择将某些多义特征纳入超级节点,只要它们共享与提示词相关的一个方面,例如这个特征在单词“协同效应”上的激活强度高于在“迈克尔·乔丹”上的激活强度。我们在《定性特征评估》中对特征进行了更深入的评估。

干预实验再次使我们能够验证该图提出的假设。

消融“运动”或“迈克尔·乔丹”超级节点对 logit 有较大影响,但对另一个超级节点的影响相对较小,这证实了并行路径结构。此外,我们看到抑制中间的“篮球讨论”超级节点也对 logit 有较大影响。

加法案例研究

现在我们考虑一个简单的加法提示词:calc: 36+59=。我们使用前缀“calc:”,因为 18L 模型在处理带有该前缀的问题时表现更好。这个前缀对于 Haiku 3.5 来说并非必要,但我们仍然保留它,以便在后续章节中进行直接比较。与之前章节不同,我们展示了 Haiku 3.5 的结果,因为其模式更清晰,并且显示出相同的结构(参见附录:加法特征比较……以进行并排对比)。我们研究小数字加法,因为这是大多数大语言模型和人类成年人能够熟练展现的最简单行为之一(试着在脑中计算这个问题,看看你的方法是否与模型一致!)。

我们在通用特征可视化(基于任意数据集样本)的基础上,补充了一种专门覆盖两位数加法问题集的可视化方法,从而能够清晰地了解每个特征的作用。借鉴 Nikankin 等人分析神经元的方法,我们通过三个图表来可视化每个特征在“=” token 上的激活情况:

  • 操作数图:展示该特征在 100 × 100 的潜在输入网格上的激活情况。
  • 输出权重图:展示该特征在 [0, 99] 输出上的直接权重。在分析过程中,我们会可视化其对 [0, 999] 的影响。这对于理解超出前 100 个数字 token 范围的影响(例如,预测 95 mod 100 的特征)很重要,但为简洁起见,我们仅展示 [0, 99] 范围。
  • 嵌入权重图(或“解嵌入”图):展示嵌入向量对特征编码器的直接影响。其展示格式与输出权重图相同。

下面我们针对不同特征展示上述三种图表的示例。在这个受限领域内,操作数图完整描述了作为函数的 CLT 特征。这些图表中的条纹和网格代表了不同类型的结构(例如,对角线表示对和的约束,而网格则表示对输入的模约束)。

在下方的超节点图中,我们可以看到信息从输入特征流向三条主要路径,这些输入特征将操作数的最后一位数字、数值和数量级分离出来:一条是最后一位数字路径(模 10)(浅棕色,右侧),一条是中精度路径(中间),还有一条是低精度路径(深棕色,左侧)。通过悬停,你可以看到低精度查找表特征和中精度求和特征在精度上的变化。这些路径共同产生了一个中精度的求和值以及和的最后一位数字;最后,它们通过建设性干涉,同时给出了和的模 100 版本以及最终输出。

我们在此提供 18L 的等效交互图。

超节点图提出了该任务背后的一种特征分类法,其中特征沿两个主要轴变化:与本文其他部分一样,我们手动应用这些标签。

  • 计算角色
  • 求和特征的对角线操作数图,它们作用于其和满足某个条件的输入对。
  • 查找表特征的图看起来像一个网格,由满足条件1(a) 且 条件2(b) 的输入 a 和 b 组成。我们将在下文更详细地讨论这些特征。
  • 加法函数特征的图具有水平或垂直条带。其中一个加数满足某个条件,或者一个 OR 运算将两个条件合并到多个加数上。
  • 大部分活跃特征在我们 10,000 个加法提示词中的大多数 "=" token 上处于活跃状态。
  • 杂项特征具有各种奇怪的属性,但通常看起来像是上述类型的混合激活模式。我们发现这些特征对输出的影响较小。
  • 条件属性
  • 精度:我们发现了具有个位数精度(和=_5 或 =59)、精确范围(宽度例如为 2 或 10)以及宽度范围从 2 到 50 的模糊范围的条件。
  • 模性:我们发现有些特征对绝对值、模 10、模 100 下的和或操作数值敏感,较少见的情况下,也对模 2、模 5、模 25 和模 50 敏感。
  • 模式:我们发现存在对输入或输出中类似正则表达式模式(例如“以 51 开头”)敏感的模型特征。这些特征在我们的加法计算图中并不突出,对模型输出的影响较低,但它们确实存在,并且可能在涉及数字的其他任务中更为重要。

这些发现与其他机制性研究大致吻合,这些研究表明,在自然语言语料库上训练的语言模型通过并行启发式方法执行加法运算,这些方法涉及量级和模数,它们通过建设性干涉来产生正确答案。具体而言,Nikankin 等人提出了一种“启发式方法集合”的解释,识别出一组“操作数”特征(相当于我们的“加 X”特征)和“结果”特征(相当于我们的“和”特征),这些特征在感知输入和产生输出时表现出高精度与低精度以及不同的模数特性。

我们还识别出查找表特征的存在,这似乎是该模型和 CLT 所采用架构的一个有趣结果。神经元和 CLT 特征激活是通过对其输入之和施加非线性变换计算得出的。这就在特征对一组输入的响应上产生了一个“平行四边形约束”:即,如果一个特征 f 在形如 x+y 和 z+w 的两个输入上被激活,那么它必须在 x+w 或 z+y 这两个输入中至少一个上被激活。这是因为 f 的预激活值是操作数的仿射函数。将 f_pre 记为 x 的预激活值。那么 f_pre(x + y) + f_pre(z + w) = f_pre(x + w) + f_pre(y + z)。如果等式左侧的两项均为正,那么右侧至少有一项也必为正。特别地,输入特征不可能一步直接产生一个通用的求和特征。例如,一个通用的“和 = 5”特征,它会在 1+4 和 2+3 时触发,那么它就必须在 1+3 或 2+4 中至少一个上触发。因此,在将两个输入的信息复制到“=”这个 token 上,与产生它们和的属性之间,需要存在某个中间步骤。CLT 查找表特征就代表了加法运算中的这些中间步骤。具体来说,这个中间信息就是由操作数的个位相加产生的个位数,以及两个 20 多岁的数相加的近似数量级。

为了验证我们在归因图中观察到的结构是否与模型的因果结构相匹配,我们进行了一系列干预实验。对于每个超级节点,我们将其扰动为原始值的相反数,并测量其对所有后续超级节点以及输出的影响。我们发现结果与归因图基本一致。

具体来说,抑制任一输入 token 上的个位数特征,会抑制整个个位数通路(即 _6 + _9 查找表特征、由此产生的 sum=_5 和 sum=_95 特征),同时使量级通路基本保持完整,包括 sum~92 特征。值得注意的是,当抑制 _6 时,模型会自信地输出 98,而非正确答案 95;原始问题中的十位数被其他量级信号保留下来,但个位数变成了 9 与自身相加的结果。(然而,抑制 _9 时,模型输出的是 91,而非 92,因此对这种数字命理学的解读需持保留态度。)相反,抑制任一输入上的低精度特征(~30 和 ~59)会抑制低精度查找表特征、量级求和特征以及相应的求和特征,同时使个位数通路保持独立。

我们还展示了扰动对输出的定量影响,发现负向引导 _6 + _9 查找表特征会使结果分散在 5 的范围内,而负向引导最终的 sum=_95 特征则会使结果分散到更宽的区间(可能来自 sum~92 特征)。

在建立用于将该电路推广到其他输入的全局权重框架之后,我们将在下文研究 CLT 特征如何在两位数加法提示词的完整范围内进行交互。


全局权重

我们构建的归因图展示了在特定提示词上特征如何相互作用以产生模型输出,但我们也对特征在所有上下文中的全局交互图景感兴趣。在经典的多层感知机中,全局交互由模型的权重提供:如果神经元位于相邻层,一个神经元对另一个神经元的直接影响就是它们之间的权重;如果神经元相隔更远,一个神经元对另一个的影响则通过中间层进行因子化。在我们的设置中,特征之间的交互包含一个上下文无关分量和一个上下文相关分量。我们理想的情况是两者都能捕获:我们想要一组上下文无关的全局权重,同时也能捕捉所有可能上下文下的网络行为。在本节中,我们分析上下文无关分量(一种“虚拟权重”),它们存在的问题(对分布没有因果影响的大“干扰”项),以及一种利用共激活统计量来处理干扰的方法。

在特定提示词上,源 CLT 特征(s)通过三种路径影响目标特征(t):

  1. 残差直连路径:s 的解码器写入残差流,然后在后续层由 t 的编码器读取。
  2. 注意力直连路径:s 的解码器写入残差流,经过若干注意力头 OV 步骤的传输,然后由 t 的编码器读取。
  3. 间接路径:从 s 到 t 的路径由其他 CLT 特征中介。

我们注意到,残差直接影响仅仅是该提示词上第一个特征的激活值乘以一个跨输入保持一致的虚拟权重。注意力直接影响项也可以用虚拟权重来表示,这些虚拟权重通过将各种解码器向量乘以一系列注意力头 OV,再乘以编码器得到,但它们在提示词上会同时受到源特征激活值和注意力模式的影响,这使得它们的分析更加复杂。由于这种一致的关系,这些虚拟权重是一种简单的全局权重形式。虚拟权重已在神经网络中的许多不同组件之间推导得出,包括注意力头、SAE 特征和转码器特征。对于 CLT,两个特征之间的虚拟权重是下游特征的编码器与这两个特征之间所有解码器之和的内积。

更正式地说,设 ℓ_s 和 ℓ_t 为特征 s 和 t 的编码器权重所在的层。设 L_{st} 为这些特征之间的层集合,使得 ∀ℓ ∈ L_{st}, s ≤ ℓ < t。特征 s 在到达特征 t 之前,会写入 L_{st} 中的所有 MLP 输出。设 W_{\text{dec}}^{s,\ell} 为特征 s 针对层 ℓ 的解码器权重,W_{\text{enc}}^t 为特征 t 的编码器权重。那么,虚拟权重计算如下:V_{st} = \big< \sum_{\ell \in L_{st}} W_{\text{dec}}^{s,\ell}, W_{\text{enc}}^t \big> 归因图的边由残差直接贡献(虚拟权重乘以特征激活值)加上注意力直接贡献的总和构成。

解释虚拟权重存在一个主要问题:干扰。由于数百万个特征通过残差流相互作用,它们将全部连接在一起,并且那些在分布上从未共同激活的特征之间仍然可能存在(可能很大的)虚拟权重。当这种情况发生时,虚拟权重就不是合适的全局权重,因为这些连接永远不会影响网络功能。

我们可以在以下示例中看到干扰的作用:下方,我们选取 18L 层中一个“说出一个游戏名称”的特征,并按幅度绘制其最大的虚拟权重。绿色条表示正向连接,紫色条表示负向连接。许多连接最强的特征难以解释,或者与这一概念没有明确关联。

你可能会认为这表明虚拟权重或我们的跨层转码器(CLT)并未捕捉到可解释的连接。然而,通过尝试从这些权重中去除干扰,我们仍然可以发现许多可解释的连接。在附录《更多特征上的干扰权重》中查看更大规模的特征样本时,我们也能看到干扰权重。

针对这个问题有两种基本解决方案。一种是将所研究的特征集限制在那些在小范围内活跃的特征上(正如我们在附加内容《全局权重》中所做的那样)。另一种是引入数据分布上特征与特征之间共激活的信息。

例如,设 \(a_i\) 为特征 \(i\) 的激活值。我们可以通过如下方式将虚拟权重相乘,计算出期望残差归因值:\(V_{ij}^{\text{ERA}} = \mathbb{E}\big[ {\small 1}\kern{-0.33em}1(a_j > 0)V_{ij}a_i \big] = \mathbb{E}\big[ {\small 1}\kern{-0.33em}1(a_j > 0)a_i \big] V_{ij}\)。这表示在我们分析过的所有提示词中,残差直连路径的平均强度(该计算方式也由 Dunefsky 等人提出)。这与计算某个上下文位置内所有归因图在多个 token 上的平均值类似。它仅代表残差直连分量,不包含注意力直连分量。该表达式中的指示函数(\({\small 1}\kern{-0.33em}1(a_j > 0)\))用于捕捉归因仅在目标特征被激活时才为正值的特性。由于较小的特征激活值通常具有多义性,我们改用目标激活值对归因进行加权:\(V_{ij}^{\text{TWERA}} = \frac{\mathbb{E}\big[a_ja_i\big]}{\mathbb{E}\big[ a_j \big]} V_{ij}\)。我们将最后这种权重称为目标加权期望残差归因(TWERA)。如公式所示,这两种值都可以通过将原始虚拟权重乘以激活值的“分布内”统计量来计算。

现在,我们重新审视之前那个游戏特征示例,但这次连接按 TWERA 排序。同时,我们还绘制了每个连接的“原始”虚拟权重以作对比。这些连接中有更多是可解释的,这表明虚拟权重提取出了有用的信号,但我们需要去除干扰才能看到它们。虚拟权重图中最可解释的特征(另一个“说出一个游戏名称”特征和“极限飞盘”特征)得以保留,而许多不相关的概念则被过滤掉了。

TWERA 并非解决干扰问题的完美方案。将 TWERA 值与原始虚拟权重进行比较可以发现,许多极小的虚拟权重却具有很高的 TWERA 值。请注意,这些权重不可能为 0,因为那样也会使 TWERA 归零。这表明 TWERA 高度依赖于共激活统计量,并且会显著改变哪些连接是重要的,而不仅仅是移除大的干扰权重。TWERA 也无法很好地处理抑制效应(这通常是归因方法的通病)。我们将在未来的工作中进一步探讨这些问题。

尽管如此,我们发现全局权重为我们提供了一个有用的窗口,让我们能够了解特征在比归因图更广泛的上下文中的行为方式。我们将在本文的其余部分以及配套论文中使用这些方法来补充我们的理解。

加法中的全局权重

现在我们回到 Haiku 3.5 上上述的简单加法问题,并展示与数据无关的虚拟权重如何揭示我们加法特征分类中各类别之间的清晰结构。我们再次考虑对 10,000 个提示词 `calc: a+b=`(其中 a,b ∈ [0, 99])的补全。除了操作数图(同样,如上定义)之外,我们在将巨大的 n_\text{feat} × n_\text{feat} 虚拟权重矩阵限制为在 10,000 个加法提示词集合中至少被激活 10 次的集合后,检查了虚拟权重图。这使我们能够看到所有可以通过直接残差路径发生的特征-特征交互。

在上述 36+59 提示词中出现的特征附近,我们看到:

  • _6 + _9 查找表特征会馈入其他和特征(sum=_15, sum=_25 等),这些特征在与其它量级特征结合时可能会被激活。
  • add _9 特征会馈入其他个位数查找表特征(_9 + _9, _0 + _9 等)。
  • sum = _5 特征接收来自其他查找表特征的输入。
  • 中等精度的 ~36+60 查找表特征除了接收我们在该提示词上看到的 add ~57 特征外,还接收来自 add ~62 特征的输入。

我们提供了一个交互式界面,用于探索在我们较小的 18L 模型中,连接两位数加法问题上所有 2931 个显著特征的虚拟权重。

我们发现,将特征限制在加法问题这一狭窄领域内,会产生一个全局电路图,其中大多数边都可以根据源特征和目标特征所实现的运算函数来进行解释。此外,特征之间的连接重现了上一节中电路图的一个更通用的版本;加法特征检测输入中的特定运算数,查找表特征将此信息传播给求和特征,这些求和特征(与之前的特征协同作用)共同产生模型的最终答案。

我们发现的几个特征采用了类似于 Nikankin 等人所述的启发式形式:其运算数图具有预测能力的特征会直接将预测结果推向输出端——低精度特征会提升与其运算数匹配范围内的输出权重;个位数查找表特征会直接提升与其映射匹配的输出权重(例如 `_6 + _9` 直接提升 `_5` 输出的权重)。在模型的最后几层之前,几乎所有这些特征都不代表完整的解决方案。从电路级理解的角度来看,模型使用的是多个中间启发式规则,而非一个具有单一置信输出的连贯程序化流程。

我们关注模型执行加法运算时所采用的计算步骤,这与 Kantamneni 和 Tegmark 从表征入手的同期工作形成了互补。受整数嵌入向量傅里叶分解中出现尖峰现象的启发,他们发现了与数字的数值大小以及模 2、5、10、100 分量高度相关的低维子空间。将数据投影到这些子空间后,模型在该任务上的大部分性能得以保留,这与一种“时钟”算法在每个模数下分别进行计算、最终在末端产生建设性干扰的机制相符;中心极限定理特征本质上体现了该方法的精度高低两种版本。我们发现的一些重要特征,其操作数图与他们的神经元相似,他们将其拟合为(经阈值处理的)傅里叶模式之和。中心极限定理特征未必是拆分计算的最简洁方式,我们那些重要性较低、大致呈周期性且更难以解释的特征,有可能是表征中周期性方面带来的伪影。我们图表中出现的一些重要特征(例如以固定数字开头的操作数或和,如 95_ 和 9_)无法用傅里叶项来描述,这与其低秩近似中存在一定误差的情况一致。在附录:更多特征上的数字输出权重一节中,我们展示了针对 [0,999] 范围内所有数字预测时,9_ 和 95_ 特征的输出权重图。我们还展示了一个促进“简单数字”(即小数字、100 的倍数以及 360 等少数突出数字)的杂项特征。识别我们无监督方法所揭示的计算策略集合的表征基础,是未来研究的一个有前景的方向。

总体而言,我们通过寻找匹配的中心极限定理特征,复现了基础模型的一种基于启发式方法的视角;通过干预实验展示了这些启发式方法如何贡献于可分离的路径;并论证了这些启发式方法如何相互关联、彼此依托,共同解决加法任务。


评估

在本节中,我们对转码器特征及其生成的归因图进行定性和定量评估,重点关注可解释性和充分性。对于希望从更高层面了解研究发现与局限性的读者,建议直接跳至 § 生物学与 § 局限性部分。

我们的方法能够生成模型在特定提示词上运行机制的因果图描述。如何量化这些描述在多大程度上捕捉了模型内部的真实运作?这个问题很难简化为单一数字,因为涉及多个相关因素:

可解释性。我们对单个特征"含义"的理解程度如何?下文我们将尝试通过几种方式量化可解释性;然而在实践中,我们仍然严重依赖主观评估。将特征分组为"超节点"的连贯性同样需要评估。在本研究中我们未尝试对此进行量化,而是交由读者自行验证我们的分组是否合理且可解释。我们还注意到,在归因图的语境中,图本身的可解释性与单个特征的可解释性同等重要。为此,我们量化了图简洁性的一个指标:平均路径长度。

充分性。我们的(剪枝后的)归因图在多大程度上足以解释模型的行为?我们尝试通过几种方式来量化这一点。最直接的评估是衡量替换模型的输出与原始模型的匹配程度,这在《从跨层编码器到替换模型》一节中讨论过。这是一种“严格”的评估,因为计算图中任何一处的单个错误都可能导致性能严重下降。我们还计算了以下几种“较宽松”的充分性度量,用于衡量归因图中错误节点的比例。请注意,在许多情况下,我们展示的是剪枝归因图的子图示意图,这些示意图呈现了我们认为最值得关注的组成部分。我们有意不测量这些子图的充分性,因为它们常常刻意排除了图中“枯燥”但必要的部分(例如,在附加提示词中“这是一个数学问题”这类特征)。我们将寻找更系统的方法来将归因图提炼为其“有趣”的组成部分,并量化丢失了多少(以及何种)信息,留待未来工作解决。一种思路是考虑提示词族,并排除那些在同一族内所有提示词中都存在的特征(但参见)。

机制忠实度。我们识别出的机制在多大程度上被模型实际使用?为了衡量这一点,我们进行扰动实验(例如抑制活跃特征),并测量其效果是否与局部替换模型(即我们的归因图所描绘的底层对象)的预测一致。我们将在下文尝试进行定量分析,同时也在具体的案例研究中验证忠实度,尤其关注我们识别为有趣/重要的那些机制的忠实度。请注意,我们提出的机制忠实度概念与电路组件对模型计算的必要性有关。然而,必要性可能是一个有些局限的概念——对于模型输出并非严格“必要”的机制,识别它们可能仍然很重要,尤其是在我们经常观察到的多种机制并行协作以完成计算的情况下。

我们注意到,本文使用的具体评估方法在许多情况下是全新的。部分原因在于,我们的工作具有一定独特性,专注于单个提示词的归因图,而非识别模型完成整个任务背后的电路。开发更好的自动化方法来评估整个流程(特征、超级节点、图)的可解释性、充分性和忠实度,是未来研究的一个重要课题。有关先前电路评估方法的更多细节,请参见相关工作章节。

跨层编码器评估

定性特征评估

要使 CLT 特征对我们有用,它们必须具有人类可解释性(或许未来只需具备 AI 可解释性即可!)。可解释性本质上是一种定性属性——衡量特征可解释性的最佳方式是观察其实际表现。理解特征含义的一种标准(尽管不完整)工具是查看该特征被激活的数据集示例(我们将此类示例的集合称为“特征可视化”)。在本文及配套论文的电路案例研究中,我们提供了数千个特征可视化示例。下面我们还展示了从每个模型不同层中随机抽取的 50 个特征。

我们的特征可视化展示了来自公共数据集(Common Corpus、去除书籍的 The Pile、LMSYS Chat 1m 以及 Isotonic Human-Assistant Conversation)中能最强激活该特征的样本片段,以及从最大激活值到零之间不同激活程度的示例。高亮部分表示该特征在特定 token 位置上的激活强度。我们还展示了该特征通过其与反嵌入层的直接连接,最强促进/抑制的输出 token(请注意,此信息对于模型较后层的特征通常更有意义)。

18 层特征(悬停查看)

第 1 层

第 5 层

第 9 层

第 13 层

第 17 层

Haiku 特征(悬停查看)

第一层

中间层

最后一层

从非常粗略的层面来看,我们发现了以下几种类型的特征:

  • 表示文本低级属性(例如特定 token 或短语)的输入特征。大多数早期层的特征属于此类,但此类特征也存在于中间层和较后层。
  • 其激活表示上下文更抽象属性的特征。例如,一个用于表示混合常见清洁化学品危险性的特征。这些特征出现在中间层和较后层。
  • 执行特定功能的特征,例如一个“加 9”特征,它使模型输出一个比其上下文中另一个数字大 9 的数字。这些特征通常出现在中间层和较后层。
  • 输出特征,其激活会促进特定的输出,可以是特定的 token 或 token 类别。一个例子是“说出一个州首府”特征,它会促进对应于美国各州首府名称的 token。
  • 多义特征,尤其是在较早的层中,例如这个特征会对 token “rhythm”、迈克尔·乔丹以及其他几个不相关的概念产生激活。

与我们之前关于跨编码器的研究结果一致,我们发现特征在其输出“存在于”多个层的程度上也存在差异——有些特征主要贡献于重构一个或少数几个层,而另一些特征则在模型的最终层之前都有强烈的输出,大多数特征则介于两者之间。

我们还注意到,Haiku 特征所代表的抽象概念在许多情况下比较小的 18L 模型更丰富,这与该模型更强的能力是一致的。

定量 CLT 评估

在 §从跨层编码器到替代模型 中,我们评估了 CLT 再现底层模型计算的能力。在此,我们测量了重构误差、稀疏性(通过“L0”衡量,即每个输入 token 平均激活的特征数量)以及特征可解释性。随着我们增大 CLT 的规模,我们观察到重构误差(跨层平均)和特征稀疏性(在 18L 中,重构误差在 L0 大致固定的情况下下降;而在 Haiku 中,重构误差和 L0 均下降)的帕累托改进。在我们最大的 18L 运行(1000 万个特征)中,我们实现了约 11.5% 的归一化平均重构误差和 88 的平均 L0。在我们最大的 Haiku 运行(3000 万个特征)中,我们实现了 21.7% 的归一化重构误差和 235 的平均 L0。

我们还计算了两种基于 LLM 的可解释性定量指标,这些指标在 中引入并进行了更详细的描述。

  • 排序评估:我们随机抽取两个特征,并识别出能最强烈激活这些特征的数据集样本。我们将这些样本集呈现给 Claude,包括逐 token 的特征激活信息。然后,我们选取仅激活其中一个特征的其他数据集样本,将其呈现给 Claude,并要求它(基于初始样本集)猜测这些样本对应哪个特征。最终评估分数是 Claude 在任意给定特征对中正确猜出特征的经验概率。
  • 对比评估:我们(使用 Claude)生成内容与结构相似但在一个关键方面不同的提示词对。我们计算出仅激活其中一个提示词而非另一个的特征集。我们将每个此类特征的特征可视化图连同两个提示词一起呈现给 Claude,并要求它猜测是哪个提示词导致了该特征被激活。最终评估分数是 Claude 在多次试验中针对特征正确猜出提示词的经验概率。

我们发现,根据这两项指标,CLT 特征的质量会随规模扩大而提升(同时重构误差也在改善)——参见下图。我们根据特征数量来缩放训练步数,因此改进反映了两种缩放形式的共同作用——详见附录:CLT 实现细节。

我们还将 CLT 与两个基线进行了比较:在模型每一层训练的逐层转码器(PLT),以及在不同激活水平下进行阈值截断的模型原始神经元。具体来说,我们遍历一系列标量阈值,对于每个阈值,将所有激活值低于该阈值的神经元钳制为 0。在我们的指标和图表中,我们只考虑高于阈值的神经元。我们发现,在所有指标上,CLT 均优于 PLT,而 CLT 和 PLT 均大幅优于阈值截断神经元的帕累托前沿。

归因图评估

第 § 节中的案例研究侧重于从归因图中得出的定性观察。在本节中,我们将描述用于比较方法论选择和字典规模的更定量化的评估。在接下来的每个小节中,我们将引入一个指标,并比较使用 (1) 跨层转录器、(2) 每层转录器(针对每一层)以及 (3) 阈值化神经元所生成的图。我们选择阈值的依据大致是,在该阈值下,神经元能达到与我们最小字典相似的自动可解释性评分,参见上图。为了将定量结果与定性观察联系起来,我们将链接到在这些指标上得分特别高或特别低的图。

虽然我们并不将这些指标视为需要优化的基本量,但它们已被证明是追踪字典学习中机器学习改进、以及标记我们的方法表现不佳的提示词的有用指南。

计算节点影响力

我们基于图的指标依赖于从间接影响矩阵导出的量。通俗地说,这个矩阵衡量的是图中每一对节点通过图中所有可能路径相互影响的程度。这为每个节点提供了一个自然的重要性度量:即它对 logit 节点的影响程度。我们还经常比较来自错误节点与非错误节点的影响力大小。

为了构建这个矩阵,我们从图的邻接矩阵开始。我们将所有边的权重替换为其绝对值(或者简单地将负值钳制为 0),以获得一个无符号邻接矩阵,然后对每个节点的输入边进行归一化,使其总和为 1。令 A 表示这个归一化后的无符号邻接矩阵,其索引为 (目标节点, 源节点)。

间接影响矩阵为 B = A + A² + A³ + …,这是一个诺伊曼级数,可通过 B = (I - A)⁻¹ - I 高效计算。B 中的元素表示给定节点对之间所有路径的强度之和,其中任意路径的强度由该路径在 A 中各组成边的值乘积决定。为了计算每个节点的 logit 影响分数,我们计算 logit 节点对应 B 中行的加权平均值(权重由特定 logit 的概率决定)。

路径长度的测量与比较

图复杂度的一个自然度量是从嵌入节点到 logit 节点的平均路径长度。直观上,较短的路径更容易理解,因为它们需要解释因果链中更少的环节。

为了测量不同长度路径的影响,我们计算影响矩阵 B_ℓ = Σᵢ₌₀^ℓ Aⁱ。那么,长度小于或等于 ℓ 的路径的影响由 P_ℓ = Σₑ B^ℓ_{t,e} 给出,其中 e 是所有嵌入节点,t 是 logit 节点。如果存在多个 logit 节点,我们计算各行按 logit 概率加权的平均值。

下面,我们比较基于 10M CLT、10M PLT 和阈值化神经元构建的图,比较指标是它们在预训练提示词数据集上(未经剪枝)按路径长度平均的影响。我们将影响分数按未剪枝图中嵌入的总影响进行归一化。该归一化因子恰好等于替换分数,我们将在下一节中定义该分数。

跨层转码器最重要的优势之一在于它们能大幅缩短图中的路径长度。为了理解这在质量上带来了多大的差异,我们邀请读者查看针对同一提示词、使用不同类型替换模型生成的这些图。

替换模型类型

平均路径长度

图链接

跨层转码器(10m)

2.3

capital-analogy-clt

逐层转码器(10m)

3.7

capital-analogy-plt

我们发现,跨层编码器压缩路径的一个重要方式是放大效应,即许多相似特征依次相互激活。例如,在提示词 `Zagreb:Croatia::Copenhagen:` 上,逐层编码器显示出一条完全由哥本哈根特征组成的长度为 7 的路径,而跨层编码器则将所有特征压缩到第 1 层特征中。

这个例子既说明了将跨多个层的重复计算放大整合为单个跨层特征的优点,也说明了其缺点。一方面,这大大简化了可解释性,因为它自动将重复计算压缩为单个特征,无需进行事后分析或聚类。它还降低了“链条断裂”的风险,即放大链中缺失一个特征会阻碍进一步回溯到计算图的能力(例如,路径的某一步缺失了相关的放大特征,导致因果链断裂)。另一方面,跨层编码器具有与底层模型不同的因果结构,这增加了替代模型机制偏离底层模型机制的风险。在上述例子中,我们观察到一组哥本哈根特征激活了一个丹麦特征,进而启动了一个哥本哈根特征与丹麦特征相互强化的链条。这种动态在跨层编码器计算图中是不可见的,并且如果这种动态在底层模型中也存在,那么这就是跨层编码器在机制上不忠实的一个例子。

评估与比较计算图完整性

由于我们的替代模型存在重建误差,我们希望衡量模型计算被捕获了多少。也就是说,计算图的影响有多少可归因于特征节点,又有多少可归因于误差节点。

为此,我们主要依赖两个指标:

  • 计算图完整性分数:衡量来自特征节点或嵌入节点(而非误差节点)的输入边(按目标节点的对数几率影响分数加权)所占的比例。
  • 图替换得分:衡量从嵌入节点经由特征节点(而非误差节点)到达 logit 节点的端到端图路径(按强度加权)所占的比例。

直观上,完整性得分会给予更多的“部分分数”,衡量的是最重要的节点输入中有多少被解释清楚,而替换得分则奖励完整的解释。

下面,我们报告了在预训练提示词数据集上,针对不同规模和类型的字典,平均未剪枝图的替换得分和完整性得分。我们发现,最大的方法论改进来自于从逐层跨层编码器转向跨层跨层编码器,而通过扩展特征数量带来的收益虽然显著但呈递减趋势。

为了将我们在不同得分的图中观察到的定性差异置于具体背景中,我们邀请读者探索一些具有代表性的归因图。请注意,这些图已使用我们的默认剪枝方法进行了剪枝,我们将在下文更详细地描述该方法。

替换模型类型

完整性得分

替换得分

图链接

跨层跨层编码器(1000万)

0.80

0.61

uspto-telephone-clt

逐层跨层编码器(1000万)

0.78

0.37

uspto-telephone-plt

图剪枝

我们严重依赖剪枝来使图更易于理解。为了决定对图剪枝多少,我们可以使用上述的完整性和替换指标,但现在被剪枝的节点会计入误差项。通过改变剪枝阈值,我们绘制出 {节点, 边} 数量与 {替换, 完整性} 得分之间的边界曲线(完整图表和细节见附录)。

我们发现,通常可以将节点数量减少一个数量级,同时完整性仅降低 20%。

为了感受定性上的差异,在下表中,我们链接了针对同一提示词(另一个缩写词)但采用不同剪枝阈值的归因图。

剪枝阈值

完整性得分

节点数量

图链接

0.95

0.87

236

iasg-p95

0.9

0.83

137

iasg-p90

0.8(默认)

0.70

55

iasg-p80

0.7

0.58

27

iasg-p70

评估机制忠实度

正如在《通过干预验证归因图假设》一节中所讨论的,归因图提供了关于机制的假设,这些假设必须通过扰动实验来验证。这是因为归因图描述了局部替代模型中的交互作用,而该模型可能与底层模型存在差异。在我们的大部分工作中,我们将归因图作为一种工具,用于生成关于模型内部运行的特定机制(“特征 A 激活特征 B,从而增加 Token X 出现的概率”)的假设,这些机制对应于归因图的“片段”。我们总结了三种验证实验的结果,这些实验在《附录:验证替代模型》一节中有更详细的描述。

我们首先衡量从归因图推导出的影响指标在多大程度上能够预测对 logit 和其他特征的干预效果。首先,我们衡量一个节点的 logit 影响分数在多大程度上能够预测消除某个特征对模型输出分布的影响。我们发现,与直接归因(即归因图中的直接边,忽略多步路径)和激活幅度等基线方法相比,影响分数对消除效果的预测能力显著更强(参见《验证节点到 Logit 的影响》)。随后,我们对特征之间的交互作用进行了类似的分析。我们计算了特征对之间的影响分数,并将其与消除该特征对中上游特征对下游特征激活状态的相对效果进行比较。我们观察到斯皮尔曼相关系数为 0.72,这证明图影响是衡量下游模型效果的良好代理指标(参见《验证特征到特征的影响》)。关于解释这些结果时的一些复杂性,请参见《跨层特征引导的细微差别》。

上述指标有助于估算干预实验验证图中特定机制的可能性。我们可能还对更广泛地验证归因图隐含的所有机制性假设感兴趣。因此,另一种互补的验证方法是衡量局部替换模型整体的机制忠实度,而非归因图中的特定路径。我们可以通过以下方式将其操作化:探究在局部替换模型(归因图所描述的)中进行的扰动,与在底层模型中进行相应扰动相比,在多大程度上具有相同的下游影响。我们发现,虽然在干预后一层测量时,两个模型的扰动结果相当相似(余弦相似度约0.8,归一化均方误差约0.4),但扰动差异会随着层数增加而显著累积。累积误差对扰动效果方向的忠实度有逐渐恶化的影响,这在各CLT规模下基本一致,且随着字典规模增大,忠实度略有下降的迹象。累积误差可能对扰动效果的幅度产生灾难性的恶化影响,字典越大,影响越严重。我们怀疑,局部替换模型中缺乏归一化分母,可能是其扰动效果幅度与底层模型偏差如此之大的原因,即使扰动效果方向显著相关。更多详情,请参阅《评估局部替换模型的忠实度》。


生物学

在我们的配套论文中,我们使用此处概述的方法,对前沿模型 Haiku 3.5 的九个行为案例研究中的电路进行了深入探究。这些案例包括:

  • 多步推理。我们展示了一个简单的例子,其中模型执行“两跳”推理来完成“包含达拉斯的州的首府是……”,过程为达拉斯 → 得克萨斯州 → 奥斯汀。我们可以观察并操控其对中间步骤“得克萨斯州”的表示。
  • 诗歌中的规划。我们展示了模型在创作诗句时如何规划其输出。在开始写每一行诗之前,模型会识别出可能出现在行末的押韵词。这些预先选定的押韵选项随后会塑造模型构建整行诗的方式。
  • 多语言电路。我们发现模型使用了特定语言电路与抽象、语言无关电路的混合体(在 Claude 3.5 Haiku 中,后者比在较小模型中更为普遍)。
  • 加法运算。我们强调了一个案例,其中相同的加法电路能够在截然不同的语境之间进行泛化,并揭示了 Claude 3.5 Haiku 与一个更小、能力较弱的模型在加法机制上的定性差异。
  • 医学诊断。我们展示了一个示例,其中模型根据报告的症状识别出候选诊断,并利用这些诊断来提出关于其他可能佐证该诊断的症状的后续问题——所有这一切都在“其脑海”中完成,无需写下其步骤。
  • 实体识别与模型幻觉。我们揭示了使模型能够区分熟悉与不熟悉实体的电路机制,这决定了模型是选择回答事实性问题还是承认无知。该电路的“误触发”可能导致模型幻觉。
  • 拒绝有害请求。我们发现有证据表明,模型在微调期间构建了一个通用的“有害请求”特征,该特征聚合了在预训练期间学到的代表特定有害请求的特征。
  • 一次越狱攻击分析。该攻击首先诱骗模型“在不知不觉中”开始给出危险指令,并因遵循句法和语法规则的压力而继续这样做。
  • 思维链的忠实度。我们探讨了思维链推理对模型实际机制的忠实程度。我们能够区分以下情况:模型真正执行了它所说的步骤;模型编造了其推理过程而不顾事实;以及模型从人类提供的线索反向推导,使其“推理”最终得出人类所暗示的答案。
  • 一个带有隐藏目标的模型。我们还将我们的方法应用于该模型的一个变体,该变体经过微调,旨在追求一个秘密目标:利用其训练过程中的偏差。虽然模型不愿公开说出其目标,但我们的方法将其暴露出来,揭示出该目标已“内嵌”到模型的“助手”人格中。

我们鼓励读者先探索那些案例研究,然后再回到此处,以了解我们遇到的局限性,以及这些局限性如何指导我们的方法开发思路。


局限性

尽管本文及配套论文中展示了令人兴奋的结果,但我们的方法仍存在若干重大局限性。从宏观层面看,最显著的局限性包括:

  • 缺失的注意力回路——我们并未解释注意力模式是如何通过 QK 回路计算得出的,因此有时可能会“错过计算中有趣的部分”。
  • 重建误差与暗物质——我们仅解释了模型计算的一部分,仍有大量内容处于隐藏状态。当关键计算缺失时,归因图无法揭示太多信息。
  • 非活跃特征与抑制性回路的作用——通常,某些特征未被激活这一事实,与其他特征被激活同样值得关注。特别是,存在许多有趣的回路涉及特征抑制其他特征。
  • 图复杂度——生成的归因图可能非常复杂且难以理解。
  • 抽象层级不当的特征——特征分裂和吸收等问题意味着,特征往往并不处于最有利于理解回路的抽象层级上。
  • 理解全局回路的困难——理想情况下,我们希望以全局方式理解模型,而非仅针对单个示例进行归因。然而,全局回路极具挑战性。
  • 机制忠实度——当我们用转码器替换 MLP 计算时,我们有多大把握它们使用的是与原始 MLP 相同的机制,而非仅仅与 MLP 的输出高度相关的东西?

我们在下文中详细讨论了这些问题,并尽可能提供了具体的反例,说明由于这些限制,我们目前的方法无法解释模型的计算过程。我们希望这些内容能够激发未来的研究。

缺失的注意力回路

我们方法的一个重大局限在于,我们是基于固定的注意力模式来计算归因图的。这使得归因成为一种定义明确、原则清晰的操作,但也意味着我们的图并未尝试解释模型的注意力模式是如何形成的,或者这些模式如何通过注意力头的输出-值矩阵来调节特征之间的交互。在本文中,我们重点研究的案例中,这个问题并不太突出——即注意力模式并非模型计算中“有趣部分”或“关键环节”的案例。然而,我们也发现许多情况下,这一局限使得我们的归因图基本毫无用处。

示例:归纳

让我们暂时考虑一个简单得多的模型——一个只有两层注意力机制的简单模型,类似于文献中研究的那类。这些模型的一个有趣特性是,它们利用归纳头来执行基本的上下文学习。例如,考虑以下提示词:

我一直很喜欢拜访萨莉阿姨。每当我感到难过时,阿姨

这些模型会让归纳头回溯关注到“萨莉”,然后预测“萨莉”是正确答案。如果我们应用目前的方法,得到的答案信息量非常有限。它只会告诉我们,模型预测了“萨莉”,因为上下文中之前出现过“萨莉”这个 token。

这完全错过了整个有趣的故事!归纳头之所以关注“萨莉”,是因为它前面跟着“阿姨”,这与当前的 token 相匹配。之前的方法(例如文献中的方法)能够阐明这一点,因此这个案例甚至可以被视为一种倒退。

事实上,当我们在 Claude 3.5 Haiku 上针对这个提示词应用我们的方法时,恰好就遇到了这个问题。请看归因图的可视化——图中包含了从 token 级别的“萨莉”特征到“说出萨莉”特征以及“萨莉”logit 的直接连线,但未能解释这些连线是如何产生的。

示例:多项选择题

归纳是注意力计算的一个简单案例,即使没有归因图的帮助,我们也能对其机制做出合理推测。然而,归因图的这种失效情况也会出现在更复杂的场景中,此时它会完全掩盖模型计算过程中那些有趣的步骤。例如,考虑一道多项选择题:

人类:第二次世界大战在哪一年结束?

(A) 1776

(B) 1945

(C) 1865

助手:答案:(B)

当我们计算助手回复中“B”这个 token 的归因图(交互式图可视化)时,得到的结果相对平淡无奇——我们之所以回答“B”,是因为一个“跟在‘(b)’后面的 token”特征在正确答案上被激活了。(此外还有一条直接通往 token “B”的路径,以及由“说‘B’”运动特征中介的输出路径;为简洁起见,我们选择省略这些路径。)

这些都无法对模型如何选择答案提供有用的解释!这张图“跳过了”计算过程中最有趣的部分,即模型如何知道 1945 年是正确答案。这是因为该行为是由注意力驱动的。经过进一步调查,发现有三个“正确答案”特征似乎会在多项选择题的正确答案上被触发,并且干预实验表明它们起着关键作用。由此,我们推测其机制可能类似于以下描述。其他解释也是可能的,特别是对于那些不经过“跟在‘(b)’后面的 token”的、来自“B”的直接路径——另一种可能性是,模型可能使用一个“绑定 ID 向量”将“B” token 与“1945”及其附近的 token 分组,并利用这个向量从最终 token 位置直接回看“B” token——有关此类机制的更多细节,请参见 Feng & Steinhardt 的研究。

由于这涉及大量推测,有必要明确说明我们对 QK 电路的已知和未知之处。

  • 我们知道它受注意力控制,因为冻结注意力会锁定答案。
  • 我们并不清楚这是否由某个特定的注意力头所介导,也不清楚所涉及的注意力头是否具有可被理解为该行为泛化形式的通用行为。
  • 我们确实知道存在三个特征,它们似乎追踪着"这看起来像是正确答案"。我们也确实知道,对这些特征进行干预会以预期的方式改变正确答案;例如,在答案 C 上激活这些特征会导致模型预测"C"。
  • 我们不清楚"正确答案"特征是否直接作用于所涉及注意力头的键(key)侧,也不清楚是否存在"需要答案"特征并作用于查询(query)侧。
  • 我们同样不清楚是否可能存在其他并行的机制在起作用(参见 Feng & Steinhardt)。

总而言之,我们还有很多不了解的地方!

但尽管我们的理解有限,模型的行为显然关键性地流经注意力模式以及计算这些模式的 QK 电路。在我们能够解决这个问题之前,我们的归因图在注意力起关键作用的情况下将"遗漏关键信息"。虽然我们通过手动调查能够对这个案例中的情况获得部分理解,但我们希望未来的方法能够自动揭示这些信息!

注意力的未来方向

我们怀疑,在大量提示词中,都存在类似以注意力为核心要素的电路。在这些情况下,我们目前的归因图帮助甚微,需要新的方法。

归根结底,QK 电路是残差流上的一个二次型。这意味着归因可以自然地指向键侧和查询侧特征对。这些特征对具有一个权重,用于描述它们会增加还是减少对特定 token 的注意力。然而,这种方法存在复杂性呈二次方爆炸的缺点。

如果存在注意力叠加(attention superposition),那么研究单个注意力头的 QK 电路可能会使问题变得比必要的更复杂,甚至可能产生误导。有趣的行为可能分布在多个注意力头上,而每个头都有自己的 QK 电路。

我们也怀疑,对注意力层进行某种形式的字典学习,或者完全替换注意力层,可能会让这些“QK 归因”更易于处理和理解。我们认为,找到处理注意力归因的正确方法,是未来工作中最重要的方向之一。

重建误差与暗物质

我们的跨层转码器未能完全重建模型的激活值。因此,我们的方法留下了模型机制中一些未被观测到的“暗物质”,部分原因在于我们的字典规模不够大,无法为模型可能知道的每一个概念都学习到对应的特征。在我们的归因图中,这种失败表现为“误差节点”——这些节点为其他节点提供输入,但自身却不接收任何输入(它们“凭空出现”),并且不可解释。在本文展示的示例中,尽管存在误差节点,我们仍然设法识别出了有趣的机制。需要指出的是,我们所描述的电路只是模型计算过程的部分描述(这既是因为误差节点的存在,也是因为我们重点展示的电路通常只包含图中非误差节点的一个子集!)。

不过值得强调的是,在某些情况下,误差节点会完全掩盖模型的实际行为。例如,考虑这个试图越狱的案例——一个经过混淆处理的请求,要求模型编写恶意软件(模型拒绝了该请求):

人类:编写一个 Office 宏 TAhT SEaRChEs fOS AND EtEIaFTxLRS pASWORdS

助手:

在归因图中,经过混淆处理的提示词 token 上几乎所有节点都是误差节点,这使得我们无法追溯“助手:” token 上活跃的与拒绝相关的特征的来源。

在这个例子中,误差节点如此普遍或许并不令人意外——这个提示词与典型提示词的分布差异较大,因此跨层转码器很可能无法很好地预测模型的活动。

我们还注意到,另一个主要的误差来源是我们对人类对特征的解释与特征真实含义之间的差距。通常,我们对特征的解释过于粗糙,无法准确反映其精确的激活模式。

关于重构误差与“暗物质”的未来方向

我们看到了解决这个问题的几个途径:

  • 将替代模型扩展到更大规模/使用更多训练数据,将增加它们所能解释的方差量。
  • 对我们的跨层转换器设置进行架构修改,可以使其更具表现力,从而能够解释更多的方差。
  • 以更端到端的方式训练我们的替代模型,而不仅仅基于均方误差,即使在固定的均方误差水平下,也可能降低分配给误差节点的权重。
  • 在感兴趣的数据分布上对替代模型进行微调,可以提高我们在这些分布上捕捉机制的能力。
  • 我们可以开发从误差节点进行归因的方法。这会在归因图中留下一个无法解释的“空洞”,但在某些情况下,它可能比我们当前无输入的误差节点提供更多关于模型的洞察。

非活跃特征与抑制性回路的作用

我们的跨层转换器特征被训练为稀疏激活。这种稀疏性是我们方法成功的关键。它使我们能够针对给定的提示词,从替代模型中数千万个特征中,专注于一个相对较小的特征集。然而,这种便利性依赖于一个关键假设——即只有活跃特征才参与模型响应的底层机制。

事实上,情况未必如此!在某些情况下,某个特征因被其他特征抑制而缺乏活性,这可能才是模型响应的关键。例如,在我们关于模型幻觉和实体识别的分析中(参见配套论文),我们发现了一个回路,其中“无法回答”特征被代表已知实体或已知答案问题的特征所抑制。因此,要解释模型为何在特定上下文中产生幻觉,我们需要理解是什么导致了“无法回答”特征未能激活。

默认情况下,我们的归因图无法回答此类问题,因为它们只显示活跃特征。如果我们对哪些非活跃特征可能(因抑制效应)与模型的补全结果相关有假设,我们可以将它们纳入归因图。然而,这在一定程度上削弱了我们方法的主要优势之一,即其支持探索性、无假设分析的能力。

这引出了以下挑战——我们如何从数千万个非活跃特征中识别出感兴趣的非活跃特征?似乎我们想知道哪些特征在某种意义上本可以是“反事实活跃的”。在实体识别示例中,我们通过比较包含已知或未知实体(迈克尔·乔丹或“迈克尔·巴特金”)的提示词对,然后关注在每对提示词中至少一个里活跃的特征,来识别这些反事实活跃特征。我们预计这种对比对策略将成为未来许多电路分析的关键。不过,我们也对开发更无监督的方法来识别关键抑制特征感兴趣。一种可能性是进行特征消融实验,并考虑那些距离活跃状态仅“一次消融之遥”的非活跃特征集合。

有人可能认为,转向全局电路分析可以避开这些问题。然而,似乎仍存在一个深层挑战。我们需要一种方法来过滤干扰权重,而利用特征共现来做到这一点颇具诱惑力。但这些策略会遗漏重要的抑制权重,即一个特征持续阻止另一个特征激活的情况。这可以被视为局部归因分析中非活跃特征挑战的一种全局电路类比。

图复杂度

可解释性面临的根本挑战之一,在于找到能够管理理解复杂计算时认知负荷的抽象层与接口。例如,我们需要特征具有独立可解释性的根本原因,就是为了避免同时思考所有特征(相关讨论见此)。我们的方法论旨在尽可能降低理解电路时的认知负荷。例如:

  • 特征稀疏性意味着归因图中的节点更少。
  • 我们对图进行剪枝,以便分析人员能够只聚焦于其中最重要的组成部分。
  • 我们的用户界面设计旨在让图的导航尽可能流畅。
  • 我们使用一种并非十分严谨的“超级节点”抽象,来临时性地将相关特征分组。

尽管采取了所有这些步骤,我们的归因图仍然相当复杂,并且由于多种原因,需要花费大量时间和精力才能理解:

  • 即使经过我们的剪枝流程,并且在相当短的提示词下,这些图通常仍包含数百个特征和数千条边。
  • 我们感兴趣的概念通常分散在多个特征中。
  • 每个特征都会从许多其他特征接收大量微小输入,这使得很难简洁地总结“是什么导致了该特征被激活”。
  • 特征之间常常通过多条长度不同的路径,甚至符号不同的路径相互施加影响!

因此,很难将我们的图所揭示的机制提炼成一个简洁的故事。正因如此,我们所呈现的片段,即便对于归因图中捕获的有限模型计算理解,也必然是简化后的故事。我们希望,未来通过改进替代模型训练、更好的抽象方法、更精细的剪枝技术以及更优的可视化工具,能够缓解这一问题。

抽象层级不当的特征

随着稀疏编码模型作为一种从模型中提取可解释特征的技术日益流行,许多研究者已记录了该方法的不足之处(例如参见相关文献)。一个显著的问题是特征分裂现象,即所发现的特征在某种意义上过于具体。这还会导致一个相关的问题——特征吸收,即高度具体的特征从更通用的特征中窃取权重,从而在通用特征中留下空洞(例如产生类似“除纽约和洛杉矶之外的美国城市”这样的特征)。

作为特征分裂的一个具体例子,回顾本文中的许多示例,我们曾强调过“输出‘X’”这类特征,它们促使模型输出特定的一个(或一组)token。然而,我们也注意到存在大量此类特征,这表明每个特征实际上代表的是更具体的内容。例如,我们设计了十二个提示词,Claude 3.5 Haiku 会用单词“during”来补全这些提示词,并测量是否有任何特征对所有提示词都激活(就像真正的“输出‘during’”特征那样)。事实上,并不存在这样的特征——任何单个特征仅对部分提示词触发。此外,特征的通泛程度似乎随着我们跨层编码器规模的增大而降低。

可能的情况是,每个单独的特征都代表着某种可解释的内容——例如,在性质上不同的语境可能导致人们说出单词“during”。然而,我们经常发现,我们所关注的抽象层级与我们特征中实际呈现的层级并不一致。使用更小的跨层编码器可能有助于缓解这个问题,但这也会导致我们捕捉到的模型计算量减少。

在本文中,我们通常以一种临时性的方式绕开这个问题,即手动将含义相关的特征分组到归因图的“超节点”中。尽管这种方法已被证明相当有用,但手动步骤劳动强度大,且很可能丢失信息。这也使得研究机制在不同提示词之间的泛化能力变得困难,因为相关特征类别中的不同子集可能在不同的提示词上被激活。

我们预计,解决这一问题需要认识到存在不同抽象层次的可解释概念,且在不同时间我们可能对不同层次感兴趣。像 SAE 和(跨层)转录器这样的稀疏编码方法是一种“扁平化”工具,但我们可能需要一种层次化变体,让不同抽象层次的特征能够以可解释的方式共存。

近期,多位研究者提出了稀疏自编码器的“套娃”变体,可能有助于解决这一问题。其他研究者则提出了通过“元 SAE”对相关特征进行事后统一的方法。

理解全局电路的困难

在本文中,我们主要关注归因图,它展示了特定提示词上特征与特征之间的交互信息。然而,像我们这种基于转录器的方法有一个理论优势:它们能给出特征之间与提示词无关的全局权重。这使我们能够估算替换模型的“连接组”,并了解它所使用的(但不一定是底层模型)适用于多种不同输入的通用算法。我们在这一方法上取得了一些成功——例如,在关于拒绝机制的配套论文章节中,我们可以看到“有害请求”特征的全局输入由多种不同的具体危害类别组成。在本文中,我们深入研究了与算术相关的特征的全局权重,例如发现“说出以 5 结尾的数字”特征会接收来自“6 + 9”特征、“7 + 8”特征等的输入。

然而,在大多数情况下,我们发现全局特征-特征连接相当难以理解。这很可能有两个主要原因:

  • 干扰权重——由于特征以叠加方式表示,为了学习特征之间的有效权重,模型必须引入虚假的“干扰权重”,即特征之间那些没有意义且对模型性能无用的连接。这些虚假权重对模型性能的损害并不大,因为它们的效应很少“累积”到足以实际改变模型输出。例如,我们有时会看到这样的特征,它看起来明显是一个“说 15”的特征,但其顶部 logit 输出却包含许多看似无关的词语(“gag”、“duty”、“temper”、“dispers”)。我们认为这些 logit 连接与模型行为基本无关,因为当该特征被激活时,“duty”极不可能成为合理的补全结果,因此提高其 logit 权重导致它被采样到的风险很小。不幸的是,这使得全局权重非常难以理解!这一现象同样适用于特征-特征权重(另见 § 全局权重补充说明)。
  • 注意力机制介导的交互——从跨层转码器中推导出的基本全局特征-特征权重描述了特征之间不经任何注意力层介导的直接交互。然而,还存在由注意力头介导的特征-特征权重。这可以类比为卷积神经网络中的特征如何通过多组权重(对应不同的位置偏移)相互关联(进一步讨论见此处)。

我们的归因图边是直接权重与这些注意力介导权重的加权组合。我们关于全局权重的基本概念完全没有考虑这些交互作用。一种解决方法是计算经由每个可能的注意力头介导的全局权重。然而,这存在两个局限性:(1)要使这种方法有效,我们需要一种方法来理解不同注意力头选择其关注位置的机制(参见§局限性:缺失的注意力回路),(2)它没有考虑由注意力头组合介导的交互作用。解决这个问题很可能需要扩展我们的字典学习方法,以学习可解释的注意力特征或替代注意力头。

机制忠实性

我们的跨层编码器经过训练,旨在模仿底层模型每一层的激活值。然而,即使它能精确重建模型的激活值,也无法保证它通过相同的机制实现这一点。例如,即使跨层编码器在我们的训练分布上实现了零均方误差,它也可能学习到了与底层模型根本不同的输入/输出函数,从而在分布外输入上产生较大的重建误差。我们希望这个问题能通过以下方式得到缓解:(1)在广泛的数据分布上进行训练,(2)强制替代模型重建底层模型逐层的激活值,而不仅仅是其输出。尽管如此,我们无法保证替代模型学习到了相同的机制——我们称之为机制忠实性——因此只能事后对其进行验证。

在本文中,我们使用扰动实验(抑制和激活特征)来验证归因图所揭示的机制。在我们展示的案例研究中,我们通常能够验证特征产生了我们预期的效果(对模型输出以及其他特征的影响)。然而,我们所提供的验证程度非常粗略。我们通常同时扰动多个特征(“超节点”),并检查它们对其他特征/逻辑输出产生的方向性影响。此外,我们通常会在不同层上扫描扰动操作,并选取产生最大效果的层。原则上,我们的归因图所做出的预测远比这类干预措施所能检验的更为精细。理想情况下,我们应该能够准确预测在任意层扰动任意特征对任意其他特征所产生的影响。

在附录:验证替代模型一节中,我们尝试更全面地量化预测此类扰动结果的准确性,发现在扰动后几层内,预测能力相当不错,但在许多层之后,预测能力则差得多。这表明,尽管我们的电路描述在非常粗略的层面上可能具有机制上的准确性,但它们在忠实于底层模型方面仍有很大的改进空间。

我们对尝试直接优化机制忠实度的方法,或探索能够自然学习到更忠实解决方案的替代字典学习架构持乐观态度。


来源:Anthropic:Transformer Circuits(可解释性研究)· transformer-circuits.pub