游乐游手机版
首页/AI热点日报/热点详情

字符级Transformer中追寻语法:伪装归纳头

类型:热点整理2026-07-14
在字符级Transformer上识别出B5H0为复制头(复制分数0 615)。OV电路对引号自复制logit最高,但QK电路实际关注归纳后继而非引号;OV电路能促进左括号复制并抑制右括号,但QK电路仅追踪最新括号,无法理解嵌套位置。最终确认该头OV电路具备括号补全能力,但QK电路未提供有效路由。

对测量结果充满信心——复制分数、OV logits、注意力模式。但在解释这个“头”到底“掌握”什么时,采用了更具探索性的方法,其中两种解释后来被我亲手推翻。这是首次尝试机械可解释性,欢迎指正。

在一个人工字符级Transformer上,使用尼采文本进行了训练,随后着手对其进行解析。数据有时看起来很亮眼,但真正关键的是那些能够推翻结论、引导至其他方向、或让结论失效的“控制实验”。在尝试理解一个自定义Transformer中的特定注意力头时,结论反复变动。起初认为是复制头,后来又觉得是引号语法,再后来是括号语法——最后两个均被否定。最终结论是:确认这是一个复制头,其OV电路完成了半个括号补全机制,但QK电路不足以提供完成该机制所需的注意力路由。

实验设置

该Transformer的基本结构是一条残差流,上面串联了6个Block,两侧分别是嵌入矩阵和反嵌入矩阵。每个Block包含4个注意力头,以及一个由Linear、Activation、Linear组成的通用MLP。本文只聚焦注意力头,注意力头可拆解为两个关键机制:QK电路和OV电路。QK电路决定该头在当前及之前的token中应关注什么;OV电路则决定,在已确定要关注某个特定token的前提下,预测下一个token时应提升哪个token的权重。

锁定复制头

找到那个传说中的复制头是第一步目标。此处采用《A Mathematical Framework for Transformer Circuits》(Elhage et al.)论文中提出的特征值方法。遍历所有Block和所有注意力头,计算每个OV电路矩阵的特征值。一个正的特征值意味着将特征向量传入OV矩阵后,会得到一个方向不变的缩放向量。换句话说,它保留了同样的token表征。不过,特征值也可能落入复数域。因此,一个头里可能同时存在复数、正数和负数特征值。由此出发,需要计算一个所谓的“复制分数”,以更好判断一个头是否在复制。该分数的计算方式是:将该头特征值的实部(取到矩阵的秩,这里是64)求和,再除以所有特征值模长的总和。复数特征值的虚部会将此分数拉低到0。B5H0(Block 5 Head 0)是唯一的候选者。

具体而言,对于头\(h\),OV电路是一个token到token的映射,其特征值\(\lambda_i\)按模长排序并截取到前\(r\)个(矩阵的秩)后,可计算出复制分数。当B5H0的复制分数达到0.615,明显高出其他头一截时,基本坐实了复制头的存在。那么,它到底在复制什么呢?

图1:全部24个注意力头的“Block x Head”组合复制分数;B5H0飙升至0.615,而第二高的头只有0.35。

它在复制什么?

特征值这条路走不通。它们虽然本身就在token空间里,形式上可读,但问题在于,嵌入矩阵和反嵌入矩阵的范数会主导读取结果,而特征向量又混淆了所有token,找不到一个标量值来抵消范数影响。因此,转向另一种方式:直接从OV电路矩阵的对角线上读取logits——矩阵中第\(i,i\)项的值,就代表在关注token \(i\)时,对token \(i\)本身的提升量(logit)。这样,对角线上的每个值就是每个token的“自我复制强度”,而对角线外的值则表示一个token提升另一个不同token的程度。此处可单独对每个token计算并抵消嵌入矩阵和反嵌入矩阵的范数。结果发现,大量token都拥有高logit值,这进一步巩固了它作为复制头的地位。

图2:B5H0 top token的原始OV自复制logits vs. 范数归一化后的logits;除以嵌入和反嵌入的范数后,复制信号被锐化而非削弱,引号的logit依然排在首位。

引号语法

不过,除此之外,它给引号`"`的logit是最高的,达到了0.594。这意味着,当关注到`"`时,`"`的logit会上升。或许这个头掌握了一点引号语法——规则确实很简单,每个引号配对就行。关键在于,需要证明它的QK电路会更倾向于关注那些未配对的`"`,而不是其他字符。于是,设计了几条测试句子(一些手写的prompt,并非系统性扫描,所以这些控制实验的结果更多是提示性的,而非决定性的),并读取了B5H0注意力模式中关注的token。结果非常有趣:这个头关注的,实际上是那些紧跟在此前出现过的查询token之后的token。引号这条路走不通了,但与此同时,也确认了这个头其实是一个归纳头(induction head)。

图3:B5H0在一组内容互换的句子对上的注意力模式;明亮的归纳单元追踪着被互换的token(cat变为'a',dog变为'o'),查询token关注的正是其自身前一次出现时所跟随后面的那个字符。

图4:引号测试中每个prompt的判决结果;关注度最高的token是归纳后继token而非配对的引号,表中也保留了明显的错误和位置0的注意力沉没现象。只有两个例外:P3-A(重复)最高关注的是'r',模长0.5579——这是一个真正的失误,而不是归纳后继;而P3-B(无重复)和P5-B(先前闭合)在没有归纳线索可用时,注意力会塌缩到位置0的沉没点上(最高模长0.5802)。

括号语法

在把括号这条路也完全否决之前,先得看看括号相关的OV自复制logits(图1):左括号`(`的logit是 -0.0230,右括号`)`的logit是 -0.0208。这意味着:OV电路会复制左括号,同时压制右括号。所以,它或许有能力创建左括号结构,同时避免产生不必要的右括号。这看起来有点像括号语法,但又不太完全是。检查一下关注`(`时`)`的logit,以及关注`)`时`(`的logit,可以填补一些空白。查看OV矩阵:关注`(`会让`)`的logit 增加0.556;关注`)`会让`(`的logit 减少0.200。最引人注目的是那个0.556——当它看到一个左括号时,会倾向于闭合它。这很容易让人误以为就是括号语法。如果QK能可靠地关注括号,甚至能理解括号的结构,那基本上就是我们一直寻找的东西了。于是,和引号的分析类似,又扔进去几条句子,检查它关注的token。结果呢,QK电路确实会关注括号,但其程度远不足以被视作“语法”。这个头不理解括号的位置信息,它只是关注最新的那个括号。这也就制约了之前对角线结果暗示的那种嵌套语法能力——嵌套括号要求理解括号位置,特别是需要跟踪括号的嵌套深度,才知道该何时闭合括号。

图5:括号测试中每个prompt的判决结果;B5H0确实关注括号,但它无法区分一个括号是仍需关闭还是已经闭合,所以它只是在追踪最新的括号。判决栏隐藏的这些接近情况说明了问题:在C8(`A (B (C) D`)中,位置2处仍需闭合的'('(模长0.1500)输给了位置5处已经闭合的'('(模长0.4702),所以它根本没有深度跟踪能力;而P7中未匹配的'('(位置3,模长0.0348)与匹配的'('(位置3,模长0.1351,且位置11处有')',模长0.2743)的比较显示,注意力追随的是最新的括号,而不在意它是否还需要闭合。

这个头的真实面貌

回到最初的说法:这是一个复制头,它的OV电路已经“知道”如何处理括号,但QK电路对括号结构视而不见,因此无法真正派上用场。这是一个小而具体的例子,展示了一种机制在权重中“半成品”状态——OV电路在这里已经“知道”括号补全——却因为第二个电路从未学会如何给它提供信息而功能闲置。当我们在思考一个模型能做什么、不能做什么的时候,这种潜在的、不完整的结构,正是值得留意的。

来源:https://www.bestblogs.dev/article/8b0bd7b34d?utm_source=rss&utm_medium=feed&utm_campaign=resources&entry=rss_article_item

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。