
前阵子有个朋友发了一个项目标题给我看叫“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 非彼 Transformer1.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_lMLP 子层的输出为 mlp_l那么x_{l1} 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在合成数据上训练然后尝试找出模型完成某个简单任务时用到的子电路。流程大致分四步定义任务比如“复制任务”——输入一串 token输出其中某个位置的 token。这个任务足够简单模型一定能学会而且内部机制相对清晰。训练模型用一个小型 GPT 或者 Transformer 实现不用去碰那些大模型。激活分析把测试样本输入模型记录每一层注意力头的输出。观察哪些头在任务相关的位置上产生了高注意力权重。因果干预把某个头的输出清零或者替换观察模型行为是否发生显著变化。如果清掉头 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就不再是一个神秘的黑盒子而是一张可以读懂的原理图。这种从“跑通代码”到“看懂内部”的跨越比调参带来的成就感强得多。