Transformer电路的数学框架:拆解注意力机制与可解释性分析
2026/9/15 3:06:51 网站建设 项目流程

前阵子有个朋友发了一个项目标题给我看,叫“Transformer 电路的数学框架(2021)”,我第一反应是:这是把变压器等效电路写成数学表达式了?还是运放电路的传递函数推导?往下翻了翻热搜词才反应过来,这说的是深度学习里那个 Transformer,不是电气工程里那个 Transformer。

但是说实话,这个话题本身就特别容易让人误会。热搜词里一半是“i2c电路”“buck电路”“差分放大电路”这种硬件术语,另一半是“transformer模型详解”“vision transformer”“transformer代码”这类 AI 内容。两边都叫 Transformer,干的活完全不同,却都在 2021 年前后迎来了各自的爆发期。而“Transformer 电路的数学框架”这个标题,指的其实是 Anthropic 和 OpenAI 在 2021 年陆续发表的一系列可解释性研究,核心是用电路和线性代数的视角,把 Transformer 内部的计算过程拆解成可以逐层分析的结构

如果你看过原论文 A Mathematical Framework for Transformer Circuits,你会发现它本质上不是教你搭电路,也不是给你讲 Transformer 怎么用,而是在回答一个更硬核的问题:Transformer 内部到底在算什么,它是怎么算的,我们能不能像分析电路原理图一样,把每一根“导线”上的信号都理清楚

这篇博文我想把这件事讲明白。我会从电路视角切入,把注意力机制拆成 QK 电路和 OV 电路,把残差流解释成一条“总线”,把叠加理解为一种高维空间里的编排策略。适合三类人看:一是已经跑过 Transformer 代码、想深入理解内部机制的人,二是做模型可解释性研究、想找一个分析框架的初学者,三是纯粹被标题吸引过来、想搞清楚“Transformer 和电路到底有什么关系”的好奇读者。

1. 先厘清:此 Transformer 非彼 Transformer

1.1 电气电路和神经网络电路的区别

电气工程里的 transformer 叫变压器,靠电磁感应实现电压变换和能量传递,典型应用场景是输配电、开关电源、阻抗匹配。热搜词里那些“反激变压器”“EMI 滤波”“自耦调压器”,说的都是这一类硬件。

深度学习里的 Transformer 是 2017 年 Google 提出的一种神经网络架构,核心是注意力机制,最早用于机器翻译,后来横扫 NLP,再后来被 ViT、Swin Transformer 带到计算机视觉领域。它跟变压器唯一的共同点就是名字里带 transformer,英文撞车纯属巧合。

那为什么 2021 年的论文会把神经网络和“电路”扯上关系?因为研究者发现,Transformer 的前向传播过程可以类比成信号在电路网络中的流动:每个神经元、每个注意力头都是元器件,它们之间的连接就是导线,特征就是导线上的信号。用电路的语言去描述神经网络,就能把黑盒变成白盒,把“模型学到了什么”变成“某个子电路在完成什么功能”。

1.2 这篇论文到底在做什么

A Mathematical Framework for Transformer Circuits 是 OpenAI 在 2021 年提出的理论框架,后来 Anthropic 也沿着这条线做了大量延伸研究。它的核心主张是:Transformer 可以被拆解成一系列“电路”,每个电路完成一个简单的子任务,多个电路组合在一起,就形成了复杂的行为。

这个视角有三个关键优势:

  • 可解释性:一个复杂的模型可以被拆成若干独立子电路,每个子电路的结构和功能都比较容易理解。
  • 可预测性:如果知道每个子电路的输入输出关系,就能预测整个模型在某些输入上的行为,而不需要完全打开黑盒。
  • 可干预性:找到负责某个行为的子电路之后,我们可以定点修改它,从而实现可控的行为调整。

2021 年这个时间节点也很重要。那一年 Transformer 已经在 NLP 领域全面铺开,ViT 也刚把 Transformer 带到视觉领域,大家都在用它,但没人真正说得清里面发生了什么。这套数学框架算是第一批系统性的“拆机报告”,后来很多著名的可解释性工作,比如 Indirect Object Identification 电路分析、 Induction Heads 的发现,都是建立在这套框架之上的。

说句题外话:如果你搜“transformer电路短路”想找的是电气故障处理,那这篇文章也能看,但你会失望,因为我不讲变压器绕组短路,也不讲 I2C 的上拉电阻计算。这里讲的是一套理解神经网络内部结构的思维方式。

2. 数学电路框架的核心元件拆解

2.1 残差流:所有信号共享的主干道

理解这套框架,第一个要建立的概念是残差流。Transformer 的每一层都做同样的事情:先做注意力计算,再做 MLP 计算,然后把结果加回到输入上。因为有了这个“加回去”的操作,每一层的输入和输出共享同一个高维空间,这个空间在论文里被称为残差流。

怎么理解残差流?我习惯把它想成一条城市主干道。每条小巷里的车辆最终都要汇入主干道,主干道上的车辆也可以随时拐进任何一条小巷。在 Transformer 里,token 的 embedding 就是主干道上的车,每一层的注意力头和 MLP 就是小巷里的装卸站点。车辆从主干道拐进来,经过处理后再回到主干道,继续往下开。

残差流的数学形式很简单。设第 l 层的输入为 x_l,注意力子层的输出为 attn_l,MLP 子层的输出为 mlp_l,那么:

x_{l+1} = x_l + attn_l(x_l) + mlp_l(x_l)

注意这里的加法意味着信息可以原封不动地跳过某一层继续传递。如果某个注意力头或 MLP 的输出是零向量,那这条路径就相当于不存在。这就是为什么残差结构能让梯度更好地流动——它给信息提供了一条“高速通道”,不需要每层都做非线性变换。

从电路的角度看,残差流就是一条贯穿全模型的公共总线。所有子电路都挂在总线上读写信息。这和电气工程里的 I2C 总线在概念上有异曲同工之妙——多个设备挂载在同一条线上,通过地址区分彼此,数据传输靠时钟同步。当然这只是类比,实际机制完全不同,但“共享通道+分时复用”这个思想是相似的。

2.2 注意力头的双重身份:QK 电路与 OV 电路

注意力机制是整个 Transformer 的核心。标准形式大家都见过:

Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) V

其中 Q、K、V 分别由输入经过三个权重矩阵 W_Q、W_K、W_V 得到。输出还要再过一层 W_O 投影回残差流。

2021 年那套框架最有洞察力的一点,是把注意力头拆分成两个独立的子电路:QK 电路负责决定哪些 token 之间会发生交互,OV 电路负责决定信息被搬运之后如何变换

  • QK 电路:由 W_Q 和 W_K 共同决定,功能是计算每个位置对其他位置的注意力权重。它回答的问题是“我应该关注谁”。
  • OV 电路:由 W_V 和 W_O 共同决定,功能是定义一个线性映射:从源 token 的特征空间到目标 token 的特征空间。它回答的问题是“我应该搬运什么信息”。

把注意力头拆成这两个部分之后,很多现象就能得到解释。

比如在机器翻译中,源语言的“it”需要指代前文某个名词。QK 电路负责让“it”关注到那个名词的位置,OV 电路负责把那个名词的语义信息移动到“it”的残差流中。前一个是路由功能,后一个是数据传输功能。你跑代码的时候看到 attention map 上某个格子的权重很高,那只是 QK 电路的表现,真正影响输出的还有 OV 电路在搬运什么。

用电路的语言说,QK 电路是一个“开关矩阵”,决定信号的连接关系;OV 电路是一个“滤波放大器”,决定通过信号的幅度和相位。这两个部分加在一起,一个注意力头就变成了一个完整的信号处理模块。

2.3 为什么叫电路而不叫网络

你可能想问:这个名字是不是有点故弄玄虚?其实不是。这套框架借用了电路理论里一个非常核心的分析思路:把复杂系统拆成元件和连接关系,分别分析每个元件的功能,再组合成系统级理解

在很多情况下,Transformer 内部的行为确实足够“电路化”。研究者发现,某些注意力头组合起来可以实现精确的“指针运算”——比如 Induction Head,它能让模型根据前文出现过的模式预测下一个 token,这就像电路里的 D 触发器记住状态一样。还有一些头组合可以实现算术运算,比如将一维的数值特征从源 token 复制到目标 token,这在空间里就是一次线性变换。

当然,真实模型中的子电路往往比理论假设复杂得多。特征之间会叠加,子电路会互相干扰,不是所有行为都可以干净地拆开。但用电路作为起点,至少给了我们一套分析工具,而不是两手一摊说“神经网络是黑盒”。

3. 叠加:用几何方式理解 Transformer 的“超容量”之谜

3.1 参数不够用怎么办

如果你在一个小模型上做可解释性分析,很快会遇到一个现象:模型明明只有 d_model 维的残差流,但它能表达的特征数量远大于 d_model。以 GPT-2 small 为例,残差流维度是 768,但研究者发现模型里存在着远超 768 个不同的可解释特征。

这不是模型 bug,而是一种被称为叠加的特性。2021 年那套框架里的另一个重要概念就是叠加,由 Anthropic 在后续的 Toy Models of Superposition 中详细拆解。

叠加的原理可以这样理解:高维空间中的方向远不止坐标轴方向的数目。在 768 维空间里,你可以找到无数个单位向量,它们两两之间都能保持足够大的夹角。每个特征只需要占据一个方向,不一定要与另一个特征完全正交,只要夹角足够大,模型就能在大多数情况下区分它们。

这就好比一个房间里可以同时开很多场小型聚会,只要大家站的角落够分散,互相不干扰就行。但如果聚会的音量都开到最大,就会开始互相干扰。模型面临的也是类似问题:特征越密集,彼此之间的串扰就越大。

3.2 稀疏性是叠加的前提

叠加能成立,前提是特征是稀疏的。所谓稀疏,是指任何给定输入下,只有一小部分特征是活跃的。

举个例子,一个文本模型可能学到了“红色”和“蓝色”两个特征,但它处理的大部分句子可能只涉及其中一个。如果两个特征很少同时活跃,模型就可以让它们占用相近的方向,因为冲突概率低。

这有点类似于压缩感知的理论框架。在信号处理中,如果一个信号在某个基底下是稀疏的,就可以用远低于奈奎斯特率的采样率恢复出完整信号。Transformer 的叠加行为也是同一个思想:在高维空间里用少量维度表示大量稀疏特征,代价是偶尔的串扰,收益是参数效率大幅提高。

在分析真实模型时,叠加对电路解释有一个重要影响:你不能把两个特征简单地看成两个正交方向,因为模型可能故意让它们部分重叠。如果你只做特征方向的线性探测,很可能会高估特征的独立性,导致错误解读。

4. 从理论到实操:怎么用这个框架分析模型

4.1 一个最小化的分析流程

理论讲再多,不如动手试一试。我建议你跑一个最小的流程:选一个小模型,比如 2 层 Transformer,在合成数据上训练,然后尝试找出模型完成某个简单任务时用到的子电路。

流程大致分四步:

  1. 定义任务:比如“复制任务”——输入一串 token,输出其中某个位置的 token。这个任务足够简单,模型一定能学会,而且内部机制相对清晰。
  2. 训练模型:用一个小型 GPT 或者 Transformer 实现,不用去碰那些大模型。
  3. 激活分析:把测试样本输入模型,记录每一层注意力头的输出。观察哪些头在任务相关的位置上产生了高注意力权重。
  4. 因果干预:把某个头的输出清零或者替换,观察模型行为是否发生显著变化。如果清掉头 A 之后模型完全无法完成复制任务,那说明头 A 是这个子电路的关键元件。

这四步听起来简单,实际上每一步都有不少坑。比如因果干预就非常容易误判:你把某个头清零之后模型行为变了,可能是这个头本身在完成任务,也可能是模型的其他部分为了补偿这个头的存在而产生了依赖。标准做法是同时做两种干预:激活替换和激活消融。前者把某个头的输出替换成另一个输入的激活,后者直接置零。对比两者的结果,才能判断头是否真的在传输信息。

4.2 从哪里找到现成的工具

如果你不想从零开始写,可以直接用现成的开源工具。

OpenAI 的 Transformer Debugger 是一个很好的起点,它允许你点击模型中的每个注意力头和神经元,查看它们的激活模式。Anthropic 的 Golden Gate Claude 也是一个可视化分析工具,虽然偏向自家的模型,但交互界面非常直观。Python 生态里,TransformerLens 这个库几乎成了机械可解释性的标配,它支持加载多种预训练模型,把残差流、注意力头、MLP 的激活全部暴露给你,还能做激活替换和路径归因。

我个人更推荐用 TransformerLens 入门。倒不是说它有多强,而是它的 API 设计很贴合这套电路框架的思维模式。你可以直接拿到残差流的值,也可以把输出分解成每个注意力头的贡献,这正好对应“总线与子电路”的心智模型。

安装很简单:

pip install transformer_lens

然后加载一个模型:

import transformer_lens model = transformer_lens.HookedTransformer.from_pretrained("gpt2-small")

接下来你就可以拿任意文本跑一遍前向传播,然后查看每个头的模式了。

4.3 实操看一个真实案例:Induction Head

如果你第一次做这种分析,我建议你复现最简单的 Induction Head 现象。它的行为是:如果序列中出现过 A B 这样的相邻 token 对,那么在后面的某个位置再次看到 A 时,模型会倾向于预测 B。

用 TransformerLens 可以很直观地看到这个现象。构造一个序列,比如[a, b, ..., a],然后观察第二个a位置上各层的注意力模式。如果模型正常训练过,你会发现在某些层上,第二个a的位置对第一个a后面的b位置有很高的注意力权重。

这就是 QK 电路在做匹配,OV 电路在把b的信息搬运到当前预测位置。你可以进一步做消融实验,把对应的头清零,预测就变成随机的,这就能确认该头是这组电路的关键部分。整个过程用一个 Notebook 就能跑完,不需要 GPU 集群,CPU 跑 GPT-2 small 的推理也完全够用。

5. 常见误区与排查方法

5.1 误区一:高注意力权重 = 重要特征

这是最容易踩的坑。注意力权重高只说明 QK 电路给了很高的相关性评分,不说明信息真的被 OV 电路用于输出。实际分析中,经常有注意力权重很高但 OV 电路输出近乎为零的头,也有注意力权重低但输出猛烈影响结果的头。

我之前做一个小实验时,用注意力权重做特征筛选,结果把两个真正重要的头全过滤掉了,留下一堆“注意力很认真但工作无效”的头。后来改成用激活替换和 logit lens 来评估贡献,才得到靠谱结果。现在我的习惯是:先看 attention pattern,再用 logit lens 看输出分布变化,最后做因果消融。三者结合才不会被单项指标误导。

5.2 误区二:不考虑特征叠加

如果你在某个神经元的激活里探测到“红色”特征,又在另一个神经元的激活里探测到“圆形”特征,不代表它们是两个独立元件。正如前文所说,模型在参数受限时会故意把多个特征压到相近的方向,导致你看到的单个方向激活实际上是多个特征的混合。

排查办法是控制变量。找一批输入,其中只有目标特征在变化,其他特征保持不变;然后再找另一批输入,其中目标特征变化之外还有其他特征同时变化。对比两组激活的差异,如果后者出现了前者没有的大幅波动,那大概率有叠加。这时候就需要用稀疏自编码器之类的工具把混合特征拆开。

5.3 误区三:把可解释性公式当万能钥匙

2021 年这篇论文提供的框架虽然在很多模型上有解释力,但它基于一个重要假设:注意力头的功能在一定程度上是独立的、线性的。现实中,多头注意力之间存在复杂的交互,MLP 层也不是简单的特征存储,叠加效应会让简单解释失真。

所以不要指望拿这套框架去解释一切模型行为。它更像是给你一套“第一性原理”的起点,让你能在简单场景中建立直觉,再逐步推广到复杂场景。真正做研究时,还是要结合随机干预、路径分析、修剪等手段交叉验证。

6. 个人实操体会

我最初接触这套框架时,最大的感受是:原来看不懂的 Transformer 前向传播,终于有了一个可以“动手拆”的图谱。

我曾经用 GPT-2 small 做了一个简单的语法判断任务分析,目标是找到模型判断“主语-动词是否一致”时用的子电路。按照 QK/OV 电路的方法,我先定位了哪些头在“主语”位置和“动词”位置之间建立了高注意力连接,再消融验证,最后发现关键的是第 4 层的几个头组合。整个过程如果用传统黑盒思路,只能看到整体准确率,根本定位不到内部元件。

还有一个经验想分享:当你真正开始做子电路分析时,用合成数据往往比用真实数据更容易发现清晰的结构。真实语言数据里的特征叠加太复杂,初学者很容易被噪音淹没。先用一个规则明确的任务把框架跑熟,再上真实场景,会顺利得多。

如果你也想深入,不妨从复现 Induction Head 开始,然后逐步增加任务复杂度。你会发现,一旦习惯了“残差流和子电路”这套语言,再看 Transformer,就不再是一个神秘的黑盒子,而是一张可以读懂的原理图。这种从“跑通代码”到“看懂内部”的跨越,比调参带来的成就感强得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询