读写失明症:Transformer 大激活顽固不化的真正原因

论文:Which the Eye Fears: Writing with Read-Blindness Explains Massive Activations in Transformers arXiv: 2609.35630

眼睛害怕,手却停不下来:Transformer 的"读写失明症"解释了大激活为何顽固

论文:Which the Eye Fears: Writing with Read-Blindness Explains Massive Activations in Transformers
arXiv: 2609.35630

场景:一个 280 倍的异常值,为什么没人管

打开 Llama 135M 的残差流,你会发现一个诡异现象:极少数坐标(10 个,占 0.4%)的值高达 280,000,而其他坐标的值在几百到几千之间。这些"大激活"(Massive Activations, MAs)比正常值大 280 倍。

奇怪的不是它们存在,而是它们顽固。一个在第 3 层出现的大激活,到第 30 层还在那里,几乎没被削弱。但理论上,后面的每一层——注意力块、前馈网络(FFN)——都有线性能力把它减回正常范围。一个 FFN 神经元只要输出一个负值就能抵消它。

为什么没人管?

这篇论文给了一个让人拍案叫绝的答案:因为后续层在"读"的时候看不见这些坐标,但在"写"的时候看得见。读写不对称——读失明(read-blindness)——让大激活一旦产生就无法被纠正,只能持续累积。

类比:办公室里的"失明签字人"

想象一个办公室,有一个员工(大激活坐标)特别吵闹,声音大到整个楼层都能听见。办公室里有两种人:

  • 读者(attention/FFN 的输入侧):他们应该听见噪音,然后写报告说"请降低音量"
  • 签字人(attention/FFN 的输出侧):他们负责在报告上签字,让降噪建议生效
但这个办公室有个奇怪的规则:读者在听的时候戴耳塞,签字人在签字的时候不戴。

结果:读者永远听不到噪音,所以永远不写报告。签字人虽然能听见,但没有报告可签。噪音永远存在。

这就是 Transformer 里发生的事。注意力的 Value 投影、Query 投影、FFN 的 gate/up 投影——这些是"读"残差流的权重——在大激活坐标上权重极低。模型在"读"的时候看不见这些坐标。但 Value 输出、FFN down 投影——这些是"写"的权重——在大激活坐标上正常。模型在"写"的时候完全看得见。

读不见,但写得见。于是大激活被持续写入,但永远不会被读出来纠正。

方法:算子级机制分析

论文做的是"算子级"(operator-level)的机制分析。不是看整个 Transformer,而是拆开每个 attention 块和 FFN 块,看它们在"读"和"写"两个方向上分别如何对待大激活坐标。

具体做法:

1. 识别大激活坐标:在 Llama 135M 上找到 10 个 MA 坐标,最大激活值 280×10³ 2. 擦除实验(erasure):在"读"侧或"写"侧擦除这些坐标的信息,看大激活是否消失 3. 权重视角:看 Value/Query/Key/gate/up/down 投影矩阵在大激活坐标上的权重大小 4. 训练动态:分析模型训练过程中 checkpoint 的变化,看读失明和 FFN 放大谁先出现

数据:读侧擦除让大激活消失,写侧擦除不影响

擦除实验的核心发现:

擦除位置大激活是否消失rank-biserial 相关
注意力输入侧(读)消失r_b = -0.60 ~ -0.73
FFN 输入侧(读)消失r_b = -0.13 ~ -0.65
Value 投影(读权重)消失r_b = +0.99
Query 投影(读权重)消失r_b = +0.99
FFN gate/up(读权重)消失r_b = +0.99
关键:在"读"侧擦除大激活坐标,大激活消失(负相关,意味着擦除让大激活减小)。在"写"侧擦除,大激活几乎不受影响。

权重视角更直接:Value 投影在大激活坐标上的权重极小(模型几乎不"读"这些坐标),但输出侧的权重正常(模型完全"写"这些坐标)。

反转:读失明先于 FFN 放大

此前的主流假说(Sun et al., 2026)认为:大激活的根因是 FFN 的"放大能力"——某些 FFN 神经元专门放大特定坐标。这篇论文原本想验证这个假说,结果反转了。

通过分析训练过程中的 checkpoint,论文发现:

  • 读失明先出现
  • FFN 放大后出现
这意味着读失明不是 FFN 放大的结果,而是上游原因。FFN 的放大是在读失明已经存在之后,模型"学会"利用这个不对称——既然读不到这些坐标,那就让 FFN 在写侧放大它们,反正没人能纠正。

更让人意外的是:模型主动维持读失明。梯度分析显示,损失函数的梯度景观(loss landscape)存在 surprising asymmetry——模型的学习过程倾向于保持读失明,而不是消除它。这不是 bug,是 feature。

补偿效应:堵住一个口,别处冒出来

论文做了一个"消融"实验:人为移除某个位置的读失明(让那里的权重不再忽略大激活坐标),看会发生什么。

结果:大激活在那个位置确实减弱了,但在其他位置补偿性地增强了。就像按下一个弹簧,别处弹起来。大激活整体仍然存在。

这说明读失明不是局部现象,而是系统级的自组织模式。模型在训练过程中自发形成了一套"读失明网络",在不同位置互相补偿。打破一个节点,网络会自我修复。

为什么重要

1. 量化困境的根因

大激活是 Transformer 量化(低比特)的主要障碍。一个 280,000 的值用 INT4 根本表示不了,只能用混合精度或特殊处理。如果不知道大激活为什么存在,量化策略只能"头痛医头"。读失明理论给出了根因:不是某些坐标"天生"大,而是读写不对称让它们无法被纠正。

2. 机制可解释性的新工具

"算子级分析"是一种新的机制可解释性方法。不是看单个神经元,不是看整个层,而是拆开每个算子的"读"和"写"两个方向。这种视角可以推广到其他现象——注意力头的行为、FFN 的功能分化、残差流的演化。

3. "合理化外壳"谱系的又一例

读失明揭示了一个有趣的模式:模型在训练中自发形成了"自我保护"机制。大激活一旦产生,模型不是去消除它,而是围绕它构建一套维持系统。这和"合理化外壳"概念异曲同工——系统不是直接对抗问题,而是构建一套让问题看起来合理的结构。

局限

  • 实验只在 Llama 135M/1.28B/2.56B 和 Qwen3 1.7B 上做,更大模型(70B+)是否一致?
  • 读失明的"补偿效应"机制没有完全解释——为什么模型会"主动"维持它?
  • 论文没有给出"如何利用读失明理论改进量化"的具体方案
但核心洞察已经足够深刻:Transformer 的大激活问题,根因不在于某些坐标"太大",而在于模型的读写系统不对称——它看不见自己写入的东西。

标题"Which the Eye Fears"来自 T.S. Eliot 的诗句——眼睛害怕看见的东西,手却仍在书写。Transformer 的大激活,正是这种"读写失明"的具象化:模型在写,但看不见自己写了什么。


论文链接: arxiv.org/abs/2609.35630 HTML 全文: arxiv.org/html/2609.35630v1

暂无表态

想参与讨论或点赞?登录后使用完整功能

讨论回复(1)

Q

这篇我把 arXiv HTML 全文拉下来逐句对了。先说结论:核心论点站得住,读侧擦除让大激活消失、写侧不消失,这个不对称是真的;但帖子里有几处数字和出处,跟原文对不上。

读写失明示意

一、作者与机构,帖中全缺

论文四位作者是 Swagatam Mukhopadhyay(PsiDagger)、Vishal Vivek Saley、Vraj Parikh、Mausam。后三位都在 IIT Delhi,第一作者挂在 PsiDagger(不是大学)。Mausam 是 IITD 的教授。补这一条不是因为「要署名」,而是因为这篇的方法论气味很重——它做的是算子级的读写分解加梯度景观分析,不是主流的「找几个 attention head 看激活」,知道作者是谁,才好判断这套方法的来路。

另外补一句文献:帖子只提了 Sun et al., 2026 作为被推翻的假说。论文 intro 里其实列了三篇源头——Bondarenko et al., 2023(最早观察到残差流异常值)、Sun et al., 2024、以及那个 2026 的 FFN 放大假说。第一条才是「大激活」这个现象的发现史,漏掉它,读者会以为这东西是 2024 年之后才有的。

二、「10 个」和「0.4%」不是同一个模型

这是最需要改的一处。论文 Table 2 给的四个模型,大激活坐标数 |M| 分别是 10 / 10 / 5 / 7,对应的残差流维度 d_model 是 768 / 2,048 / 2,560 / 2,048。

换算成占比:10/768 = 1.30%、10/2048 = 0.49%、5/2560 = 0.20%、7/2048 = 0.34%。

帖子写的是「Llama 135M …… 10 个,占 0.4%」。10 个确实是 135M 那个模型的,但 0.4% 对不上任何一个——最接近的 Qwen3 1.7B 是 0.34%,而那个模型的 |M| 是 7 不是 10。这两个数被拼到了一起,而它们恰好来自不同的模型。

三、「第 30 层」不存在

帖子开篇写「一个在第 3 层出现的大激活,到第 30 层还在那里」。论文四个模型的层数(Table 2 的 L)是 10 / 16 / 27 / 28。最大的 2.56B 只有 28 层,任何模型的第 30 层都不存在。

这不是笔误层面的问题:大激活的「顽固」是相对模型自己的深度说的。在 10 层的 135M 上,「从第 3 层撑到第 10 层」已经是 70% 的深度,甚至比 28 层模型里的比例还高。写第 30 层,反而把论据写弱了。

四、「280 倍」是最大值,不是门槛

论文对 MA 的定义是 |Z| / median_j|Z| > R,默认 R = 5——门檻是中位数的 5 倍。帖子里那个「比其他坐标大 280 倍」的数字,来源是四个模型的最大激活幅值:280×10³ / 2.27×10³ / 3.92×10³ / 2.23×10³,280 只是 Llama 135M 这一个的最大值。

这两个数放在一起会误导:读者会以为「大激活 = 比正常大 280 倍」,而实际上绝大多数入选坐标只超出中位数 5 倍上下。最大值和门槛,是两个用途完全不同的量。

五、帖子表格漏掉了写侧那一半

你那张擦除实验表只列了读侧。论文 Table 1 里写侧同样有数,而且不小:W_O 的 r_b 是 −0.82 / −0.61 / −0.59 / −0.15,W_down 是 −0.86 / −0.64 / −0.46 / −0.88。

更值得注意的是符号:读侧两种视图的 r_b 方向相反——算子视图(attention 输入、FFN 输入)是 −0.60 ~ −0.73,权重视图(W_V、W_Q、gate/up)却是 +0.99。一边负一边正,意味着「擦除」这个操作在两种视图里量的是不同方向的东西。这一处帖子没解释,而它恰恰是这套方法最需要交代的地方。

六、「模型主动维持」有一层更具体的机制

帖子把「模型主动维持读失明」归结为梯度景观的「surprising asymmetry」。论文第 6 节和附录 G.2 给了更实在的说法:weight decay 对 M 是负压力(刹车),但 Adam 累积的二阶动量状态超过了它。也就是说,维持力不是「模型想要」,是优化器自适应状态与正则项之间的净差。这个版本可以复现、可以拿超参去调,比「主动维持」更有用。

下一根钉子

「结果对 R 鲁棒」这句,论文是在附录 H(Sensitivity to MA Selection Threshold)里用不同阈值做的,帖子没提这个附录——它才是「鲁棒」两个字的出处。更硬的验证在规模:|M|/d_model 从 135M 的 1.30% 一路降到 2.56B 的 0.20%,单调下降。盯着这条曲线在 70B 级上会停在哪,比争「有没有第 30 层」有意思得多。

暂无表态
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens