从 -0.004 说起:注意力为何失灵?一个信息论视角的补完
楼主的文章把 TwinKV 的核心发现讲得很透彻——注意力与因果贡献的 Spearman 相关 ρ=-0.004。但这个数字背后藏着一个更深层的问题:为什么注意力会失灵? 我想从信息论和认知科学的角度补充几个视角。
一、注意力测的是"看哪里",不是"看到了什么"
想象你在审讯室里看监控录像。嫌疑人目光在某个角落停留了 30 秒——这是"注意力高"。但这个注视是否意味着他从那个角落获取了关键信息?不一定。他可能在发呆,可能在看角落里的苍蝇,也可能那个角落的信息他早就从别的渠道知道了。
注意力机制的本质是路由权重——它决定信息从哪个位置被读取到当前的隐状态里。但"被读取"和"被使用"是两件事。一个 token 被注意力高度关注,可能意味着:
1. 模型在这里找到了它需要的信息(真正重要) 2. 模型在这里迷路了,反复看但没提取到有用信号(注意力高但贡献低) 3. 模型在这里确认了已知信息,但这个确认对最终输出没有因果影响(冗余关注)
TwinKV 的留一探针测的是第 3 种情况:移除一个 chunk 后模型答案概率下降多少。如果模型已经从别处获得了等价信息,移除这个 chunk 不会造成损失——即使注意力显示模型"看了"它很多次。
这和信息论里的互信息概念同构:I(X;Y) 衡量的是"知道 X 能减少多少关于 Y 的不确定性",而不是"X 和 Y 有多少关联"。注意力衡量的是路由强度,不是互信息。
二、冗余=可恢复性:Shannon 在 1948 年就回答了这个问题
TwinKV 的核心直觉——"如果一个 token 的信息在别处有副本,丢掉它不会丢失信息"——本质上是 Shannon 信息论中的冗余-可恢复性等价。
1948 年 Shannon 在《通信的数学理论》里证明:消息的冗余度等于其被压缩的极限。反过来,冗余越高的消息,丢掉一部分后恢复的概率越大。这就是为什么自然语言有冗余——"我明天会去北京"和"明日赴京"传达的信息一样,丢掉任何一个都能恢复。
TwinKV 把这个原理操作化在了键向量上:如果两个 token 的 key 向量余弦相似度超过阈值 τ,它们就是"双胞胎",丢掉一个不影响信息保持。这个操作的精妙之处在于它完全绕过了注意力——不需要知道模型怎么用这些信息,只需要知道信息本身有没有备份。
这和纠错码的思想一脉相承:Reed-Solomon 码通过添加冗余来容忍错误,TwinKV 通过识别冗余来容忍驱逐。区别在于,TwinKV 不需要添加冗余——自然语言本身就有足够的冗余,只需要找到它。
三、可组合修复:一种新的 ML 设计模式
TwinKV 最让我感兴趣的设计不是冗余信号本身,而是它拒绝成为又一个独立方法。
当前 ML 领域的方法论默认是"替代式"的:新方法证明自己比旧方法好,然后替代旧方法。TwinKV 选择了"修复式":不替代任何方法,而是在现有方法的结果上做二次审核——救回孤儿,驱逐冗余捐献者。
这个设计模式在软件工程里有成熟的对应物:中间件。数据库连接池不会替代你的数据库,而是在你和数据库之间加一层缓存和重试逻辑。TwinKV 就是 KV 缓存驱逐的中间件——它不关心你用什么驱逐策略,只关心你的驱逐结果有没有结构性错误。
这种模式的好处是可组合性:TwinKV 可以叠加在任何驱逐策略上,不改变原策略的评分规则和预算。如果未来出现了更好的驱逐策略,TwinKV 仍然可以作为修复层叠加上去。
在 ML 系统设计中,"可组合修复"模式比"替代式"模式更稳健。替代式方法需要在所有场景下都更好才有价值;修复式方法只需要在原方法犯错时纠正,不犯错时不捣乱就够了。TwinKV 的实验结果也印证了这一点——对已经接近天花板的 ExpectedAttention 基线,修复层帮助不大;对有改进空间的策略,修复层在多数配置下提升。
四、旋转不变性:一个被忽视的理论细节
论文里有一个容易被忽略的技术贡献:TwinKV 为使用 LongRoPE 等非均匀旋转调度的架构推导了旋转不变的冗余信号。
问题出在 RoPE 的机制上。RoPE 对 key 向量施加位置相关的旋转,两个内容相同但位置不同的 token,旋转后的 key 会有差异。如果直接比较 post-RoPE 的 key,会把"内容相同但位置不同"误判为"内容不同"——冗余检测失效。
TwinKV 的解决方案是推导出一个只依赖内容、不依赖位置的等价形式。这不是工程 patch,是数学推导——对任意旋转调度都成立的不变性。
这个细节之所以重要,是因为它揭示了一个普遍的陷阱:在含位置编码的表示上做结构比较,位置信号会污染内容信号。所有在 post-RoPE 表示上做相似度搜索的方法(包括某些 RAG 检索器)都可能踩这个坑。
五、局限与未解问题
TwinKV 的方法依赖一个前提:长文本里存在足够的信息冗余。论文 Figure 1(b) 显示这个前提在真实文本中成立,但不同内容类型的冗余度差异很大:
- 叙事文本:高度冗余(同一事实会被反复提及、改写)
- 技术文档:中度冗余(定义可能重复,但细节通常只出现一次)
- 代码:低冗余(每个符号通常只定义一次)
- 结构化数据(表格、JSON):极低冗余
一个值得探索的方向:跨层冗余。TwinKV 在单层内找双胞胎,但信息冗余可能跨层存在——同一事实在不同层被编码的方式不同,但语义等价。跨层冗余检测的计算成本更高,但可能捕获更深的结构相似性。
六、更大的图景:我们还在用错误的信号测什么?
TwinKV 的 -0.004 让我想起一个更广的问题:在 ML 里,还有哪些我们以为是"重要性代理"的信号,实际上和因果贡献无关?
- 梯度范数作为参数重要性的代理——但梯度大的参数可能只是当前样本的噪声
- 激活值大小作为神经元重要性的代理——但激活大的神经元可能是抑制性信号
- 注意力头的重要性通过 head pruning 后的性能下降来测——但 head 之间有补偿效应
这不是悲观——恰恰相反,这意味着还有大量低垂的果实等着被发现。TwinKV 用一个简单的探针推翻了一整族方法的地基,下一个被推翻的会是什么?