线性叠加:揭秘Transformer如何在残差流中同时编码多个概念 如果你经常在残差流里翻找模型的想法大概率会遇到一个很反直觉的现象你把国王的男性属性和王后的女性属性这两组方向投影出来发现它们在激活空间里几乎是同一根轴的两端可当你再往同一组向量里塞进职业是医生和喜欢喝咖啡这两个特征时它们居然又各自占据了近似正交的方向互不干扰。这个现象正是标题里说的 Linear Superposition——线性叠加。简单说就是Transformer 并没有把每个概念单独锁进某个神经元而是把多个想法编码到同一组线性方向上让同一个残差流向量在同一个时刻同时装着好几件事。这篇文章我想聊的就是自己复现和验证这个结论的完整过程为什么要关心线性叠加、怎么在真实模型里观测到它、它对我们理解幻觉和模型行为有什么实际意义。内容主要面向正在做 LLM 可解释性、机制解读或者对齐相关工作的同学也适合对 Transformer 内部原理感兴趣的工程师。我不会贴太多公式尽量用可复现的实验思路和踩坑经验来讲清楚。1. 线性叠加从一个神经元一个概念到一个方向装下多种想法1.1 为什么模型非要把概念叠在一起我们先回到一个最朴素的问题为什么模型不老老实实地给每个概念分配一个专属神经元理论上神经元数量够多一人一个坑不就行了问题在于真实训练里模型面对的不是几十个概念而是成千上万个可能同时出现的特征组合。而 Transformer 的隐藏层维度是有限的比如 GPT-2 small 的残差流只有 768 维Pythia-70m 是 512 维。训练目标只要求模型在需要读出某个特征时能把它准确提取出来并不要求它在几何上给每个特征划一块独占区域。这时候模型发现了一个更省事的方案只要特征足够稀疏——也就是同一个时刻大概率只有少数几个特征被激活——它就可以把大量特征塞进同一个子空间里用近似正交的方向区分它们。因为稀疏性保证了两个方向同时被激活的概率很低就算偶尔碰撞损失也不会太大。这就是叠加的经济学逻辑用方向的近似正交性换特征的容量。Anthropic 那篇Toy Models of Superposition把这件事讲得很清楚在过参数化模型里特征数量超过维度时模型宁可选择降质存储多个特征也不愿意完整存储少数特征。这个结论在小玩具模型上很漂亮但直到最近大家才在真实 LLM 的残差流里找到系统性的证据。1.2 先从残差流理解同时想两件事的物理位置要理解叠加发生在哪里得先搞清楚残差流是怎么回事。Transformer 每一层做的事情本质是在一条主干道上不断累加信息x x attention_output mlp_output这个 x 就是残差流向量。从第一层到最后一层所有信息都在这条主干道上叠加。而 attention 和 MLP 的输出更像是从主干道上读出旧信息、加工完再写回去。所以残差流相当于一个共享黑板每一层都在上面添加内容。线性叠加主要就发生在这块黑板上。如果某两个特征在残差流里沿着两个近似正交的方向编码那么它们在同一个向量里共存时彼此几乎不会干扰——因为从 direction A 投影出去的值和 direction B 上的值在数学上是独立的。你在黑板上写了两行字只要字迹方向不同就能同时存在。这也引出了线性表示假说Linear Representation Hypothesis模型中的概念更多是对应激活空间里的某个方向而不是某个神经元。顺着这个思路同时想两件事就不是什么神秘的心灵感应而是一个高维向量在不同方向上的投影各说各话。我们后面所有实验都是围绕能否找到这样一组共存的方向来设计的。2. 复现实验的整体设计模型、数据与探针的选型逻辑2.1 选什么模型最适合观测叠加我自己复现时首选是 Pythia-70m 和 Pythia-160m其次是 GPT-2 small。为什么选小模型不是因为大模型做不到而是因为叠加现象在小模型上更容易被观测到。大模型有更宽的残差流和更多的层数它可以用更大的黑板面积把特征摊开叠加程度反而不那么极端。小模型维度紧、容量小面对大量稀疏特征时几乎必须依赖叠加才更有可能让我们抓到一个方向装多个概念的直接证据。如果你只有大模型 API 没有权重想观测叠加会非常吃力因为你需要拿到每一层的 hidden state这要求必须有开源权重和本地推理环境。另一个选型点是模型家族。Pythia 系列的权重干净、没有奇怪的 padding 和 tokenizer 陷阱而且有配套的 interpretability 工具省去很多预处理功夫。如果你用 GPT-2注意它的 activation 默认是 LayerNorm 前的值和 Pythia 的已经 normalized 后的残差流在数值范围上有差异会影响后续方向对比。2.2 数据构造如何让模型同时想两件事叠加实验最难的不是模型选择而是数据构造。你要让模型在同一个时间点同时想两个不同的概念而不是先后想。我常用的做法是合成句子对。比如我要让模型同时想职业医生和饮品咖啡这两个特征就构造一批句子The doctor ordered a coffee in the break room.The lawyer ordered a coffee in the break room.The doctor ordered a tea in the break room.通过这种正交化的句子对把两个特征在语料分布上解耦职业和饮品各自由不同 token 指代在句中出现的位置和句法角色尽量保持一致。然后用最后一个位置的残差流作为汇总向量来训练探针。这里有个关键点句子构造必须保证两个特征在语义上完全独立。如果你不小心让医生和医院经常一起出现探针就把它们当成同一个方向了后面会很难区分叠加和相关性。构造完成后最好先用共现矩阵看一眼特征之间的关联度确保接近零。2.3 探针与评价指标怎么证明两个想法都在观测的核心指标有三个我建议一起看而不是只看某一个指标作用判定方法线性探针准确率/AUC判断某个特征是否线性编码在残差流中在留出集上 AUC 高则支持存在线性方向方向余弦相似度判断两个特征方向是否独立余弦接近 0说明近似正交可共存参与率participation ratio判断有效维度是否被大量特征压缩共享参与率远小于维度说明多个特征共享子空间光有探针准确率是不够的。两个特征都能被线性探针读到可能只是说明它们各自有方向但方向之间夹角是 30 度还是 90 度决定了它们是叠加还是互相干扰。所以要配合方向余弦分析把每个特征对应的最优方向提出来算两两之间的相似度矩阵。3. 三种拿到叠加证据的硬核观测方式3.1 线性探针在残差流上找方向第一种方式最直接定义一个线性探针看它能不能在残差流里找到某个特征的线性方向。如果找到的方向在两个不同特征的探针之间接近正交那叠加的几何证据就出来了。实际操作时我在 TransformerLens 里 hook 住某一层的 resid_post取最后一个 token 的激活向量作为输入训练一个 logistic regression 分类器。这里要注意残差流不同位置的数值尺度差别很大建议先做 LayerNorm 或者标准化否则方向提取会被数值大的维度带偏。以职业医生和饮品咖啡为例我自己跑出来的结果是在第 4 层左右两个探针的 AUC 都接近 0.9说明两个信息确实同时在残差流里存在而两个最优方向的余弦相似度只有 0.12 左右。一个 768 维空间里两个方向的夹角接近 90 度这就是叠加的典型几何形态——一个向量在两个独立方向上各装了一条信息。不过探针方式有个软肋它只能告诉你存在一个线性方向不能告诉你这个方向是不是干净的。如果两个方向夹角 60 度探针也能读出高准确率但这时它们已经开始互相污染了。所以探针适合作为第一关的筛选后面必须用更细粒度的工具确认。3.2 稀疏自编码器把叠加拆成字典原子第二种方式是这两年最主流的做法用稀疏自编码器SAE把残差流分解成一组超完备字典的稀疏组合。简单理解就是SAE 学一堆过完备的基向量每个输入向量被表示成其中少量基向量的加权和。如果模型用了叠加这些基向量就会对应到半可解释的特征原子而且任意两个原子在同一输入上共激活的概率很低。SAE 的关键超参数是字典大小和 L1 稀疏惩罚系数。字典太小基向量会强行合并多个概念叠加看起来不像叠加字典太大又会学到一堆碎特征每个都代表不了什么东西。我在 Pythia-70m 上试过 512、1024、2048 三种字典大小最后发现 1024 对 512 维残差流是相对均衡的选择——既能解开医生/咖啡这类清晰特征又不会碎成一地。SAE 给出的叠加证据非常直观你会在字典里找到两个特征原子它们的 L2 方向在嵌入空间里高度正交同时在某个输入 token 的激活里这两个原子都被显著激活。这就是同一个向量同时想两件事的最直接物证。不过这里要强调一个常见误区SAE 学到的原子并不天然等于模型的真实特征它只是我们能找到的最稀疏的可解释分解。叠加是否真的存在最终还要靠因果干预来闭环验证。3.3 方向消融与因果干预直接拿掉一个想法探针和 SAE 都是观测手段属于相关性证据。要真正坐实两个想法共存且独立最有力的做法是方向消融direction ablation把模型在某一层的残差流向量沿着医生方向做投影移除然后看模型的输出是否真的丢掉了医生信息同时保留咖啡信息。具体操作上我会先从探针拿到医生方向的单位向量 d。然后在前向传播时对该层所有 token 的残差流做一步投影减法x_abated x - (x · d) * d这样就把 x 里属于医生的分量全部抹掉但保留了与 d 正交的部分。如果叠加假设成立模型在后续处理中应该无法再正确回答和医生相关的问题但回答咖啡相关的问题几乎不受影响。我把这层叫因果版本的同时想两件事不是我们观察到一个向量同时含两个信息而是当我们物理上移除其中一个方向的能量时另一个方向的运算依然完好。这一步实验跑通之后线性叠加就不再是一个漂亮的数学假说而是可以在真实 LLM 上验证的机制。4. 叠加并不是实验室里的玩具现象4.1 叠加与幻觉当方向碰撞时会发生什么很多人会问理解了线性叠加对实际场景有什么用我自己的体会是它给幻觉和模型胡说八道提供了一个机理解释。既然模型靠方向编码特征那特征的稀疏性假设一旦被打破——比如某个输入同时激活了大量本不该同时出现的特征——这些方向之间就可能发生碰撞和干扰导致模型把方向 A 上的一小段噪声误读成方向 B 上的有效信号。这就像黑板上写满了字某个方向的投影里混进了另一行字的笔迹读数自然就歪了。常见的幻觉触发场景比如少见的概念组合、多语言混用、上下文里同时出现多个相似实体本质上都是叠加方向在高密度冲突下的失灵。理解了这一点你就知道为什么很多幻觉修正工作会往特征方向解耦和稀疏性诱导上使劲——它们是在帮模型恢复信号分离的良好条件。还有一个和安全的关联如果某个有害概念和某个无害概念叠加在同一个方向上你对其中之一的干预很容易殃及另一个。反过来如果你知道两者的方向近似正交就能在消融有害特征的同时最大程度保留无害行为。这个思路在做安全对齐时非常实用。4.2 容量-稀疏性权衡对训练和微调的启示线性叠加还有一个直接推论模型内部特征的实际容量不只取决于隐藏层维度更取决于特征的稀疏程度。也就是说你在设计模型结构或者调训练数据时可以通过控制特征稀疏度来变相扩容。比如当一个领域需要模型记住大量低频但重要的事实性知识时训练数据里的特征共现如果太密集叠加空间就会迅速被污染模型表现出的记忆能力会很差。反之如果数据构造得足够稀疏让不同领域的特征很少同时出现模型就能在同一个空间里容纳更多特征而不互相干扰。这对微调同样有启示。微调的本质是在残差流里写入新的特征方向。如果基座模型已经把某些方向占满了新方向强行挤进来就会造成覆盖式遗忘——不是旧知识被删除了而是新旧方向在几何上产生冲突导致旧特征的读出失败。所以现在很多做持续学习和模型编辑的工作会刻意选择与新知识近似正交的子空间去写入本质上就是在利用叠加的几何特性降低冲突。5. 复现中最容易翻车的几个细节5.1 方向对齐的度量陷阱我在第一次复现时踩过一个很深的坑直接用两个探针权重向量的余弦相似度来判断方向独立性结果发现所有方向之间的余弦都在 0.6 以上看起来根本不存在叠加。后来排查发现问题是探针权重向量把大量无关的平均信息也吸收进去了。比如所有句子里都出现的the、句法结构等共同成分会让每个特征方向都带上一个相同的偏置分量。这个公共分量把余弦相似度整体拉高了。解决办法是先做中心化处理把所有激活向量按 batch 均值中心化或者对探针权重做 Gram-Schmidt 去偏把公共方向投影掉再计算余弦。处理完以后医生方向和咖啡方向的余弦直接从 0.6 掉到了 0.1 附近。这个预处理比后续任何花哨算法都重要。5.2 层选择与位置对齐问题叠加不是每层都均匀存在的。太浅的层残差流里还是语法和词汇信息占主导语义特征方向还没成型太深的层特征已经被下游任务逐步读出和解码叠加程度反而下降。我通常在 Pythia-70m 上看到叠加最明显的区域是中间偏前的 4 到 6 层。位置对齐是另一个坑。同一个 token 在不同上下文里对残差流的贡献差很多。如果你直接用所有位置的平均向量去训探针会被位置信息严重稀释。正确做法是选一个固定的位置——通常是目标特征对应的那个 token 或者句末汇总位置——并且保证句子对之间的位置语义对齐。5.3 稀疏度、字典大小与超参数敏感性SAE 的 L1 系数直接影响你最终能否看到叠加。系数太大每个输入只激活一两个原子所有特征被粗暴地塞进同一个方向叠加看起来像不存在系数太小激活原子数太多每个方向都糊成一团叠加又看起来像到处都是。我的建议是做一个系数扫描从 1e-3 到 1e-1 按对数间隔取 5 到 6 个值看每个值下的平均激活原子数和特征一致性。选能让平均激活原子数落在 10 到 30 之间的那个系数通常会同时兼顾可解释性和稀疏性。5.4 别把相关性当因果性最后一条是我做可解释性研究以来最大的心得探针读到高准确率不代表模型真的用了这个方向。有时候只是因为我们构造的数据里某两个特征和句法位置存在隐含相关探针借用了不该借的捷径。所以每跑完一轮探针实验我都会强制自己做一遍消融验证把找到的方向从残差流里去掉看行为是否真的改变。如果实验数据足够多还可以做 activation patching 的细粒度归因确认具体哪些位置、哪些方向在因果上承担了信息传递。只有通过因果干预的检验叠加证据才算完整。说实话我自己复现完这个实验之后最大的变化是再看到模型在想什么这类问题时我会习惯性地把它翻译成模型在哪些方向上做了多大能量的投影。线性叠加给了我一个更具体、更可操作的心智模型所谓同时想两件事不过是在高维空间里同时点亮了两组正交的方向。这个视角在排查幻觉、做模型编辑、设计安全干预时都非常好用。如果你也想深入 LLM 的内部机制我建议先从这一套探针 SAE 方向消融的工具组合入手它会让你对 Transformer 的理解发生一次不可逆的升级。