Attention Residuals:让每一层自己决定回头翻哪一层

残差连接是过去十年最稳的那块地基,稳到几乎没人再动它。但它有个从没变过的假设:每一层只读上一层的输出。xl=xl1+F(xl1)x_l = x_{l-1} + F(x_{l-1}),信息像流水线一样一层顺一层往下传。网络一深,早期层那点信号要挤过几十上百次加法才能到达顶层,一路被稀释、被覆盖。

Kimi K3 的 Attention Residuals(AttnRes)改的就是这个假设:不再规定每层只读上一层,而是让每一层用一个可学的"探针",自己去所有更早的层里挑该读的东西。代价小得意外——每层多一个 RMSNorm 和一个向量——但它把"跨层信息怎么流"从写死的加法变成了学出来的注意力。

标准残差:只能顺着流

先摆清楚要改什么。标准 Transformer 的层间连接是:

xl=xl1+Fl(xl1)x_l = x_{l-1} + F_l(x_{l-1})

ll 层的输入只有l1l-1 层的输出。第 3 层想用第 0 层(embedding)的某个特征,没有直达通道,只能指望中间每一层都"顺手把它带上"。层一多,这种间接携带既不可靠,也占用了本该拿去做别的事的表示容量。

DenseNet 早年试过一种暴力解法:把前面所有层的输出拼起来喂给当前层。信息是通了,但拼接让维度和计算量随深度膨胀,大模型扛不住。AttnRes 想要 DenseNet 的连通性,但不想付它的成本。

AttnRes:用一个 pseudo-query 在历史层上做注意力

h0h_0 为 embedding 输出,h1,,hl1h_1, \dots, h_{l-1} 为前面各个 block 的输出。到第 ll 层时,AttnRes 不直接拿 hl1h_{l-1} 当输入,而是先在 {h0,h1,,hl1}\{h_0, h_1, \dots, h_{l-1}\} 上算一组注意力权重,加权聚合出这一层真正的输入。

权重从哪来?每一层配一个可学习的 pseudo-query 向量 qlq_l(伪查询——它不来自某个 token,而是这一层自己的参数)。它和每个历史层输出算相似度,softmax 成权重:

αl,i=exp ⁣(qlRMSNorm(hi))j=0l1exp ⁣(qlRMSNorm(hj)),x~l=i=0l1αl,ihi\alpha_{l,i} = \frac{\exp\!\big(q_l^\top\, \operatorname{RMSNorm}(h_i)\big)}{\sum_{j=0}^{l-1}\exp\!\big(q_l^\top\, \operatorname{RMSNorm}(h_j)\big)}, \qquad \tilde{x}_l = \sum_{i=0}^{l-1}\alpha_{l,i}\, h_i

于是每一层可以选择性地去翻任意一层:需要 embedding 里的原始 token 信息,就给 h0h_0 高权重;需要中段某层抽出的语法结构,就往那儿看。跨层不再是顺序加法,而是一次按需检索。

每层只增加两样东西:一个 RMSNorm(把各层输出拉到可比的尺度再算相似度)和一个 pseudo-query 向量。所以它便宜——据报告,训练开销约 4%、推理开销约 2%。

零初始化:让它从"等权平均"稳稳起步

新机制最怕一上来就把训练带偏。AttnRes 的处理很干净:所有 pseudo-query 向量初始化为零

ql=0q_l = 0 时,ql()q_l^\top(\cdot) 对每个历史层都给出相同的打分,softmax 出来就是均匀分布:

αl,iql=0=1l,x~l=1li=0l1hi\alpha_{l,i}\big|_{q_l=0} = \frac{1}{l}, \qquad \tilde{x}_l = \frac{1}{l}\sum_{i=0}^{l-1} h_i

也就是说,训练起点处 AttnRes 退化成"对所有历史层做等权平均"——一个温和、无偏、不会破坏已有优化行为的初始状态。然后 qlq_l 从零慢慢学出偏好,网络自己决定每层该重点看谁。这一招和很多稳态注入的残差改动同源(让新增路径以零贡献起步),是它敢加在 2.8T 规模模型上还不翻车的原因。

为什么有用

  • 梯度更短的回传路径:顶层的梯度可以经由注意力权重直达任意早期层,不必逐层穿过几十次变换。深网络的梯度衰减因此缓解。
  • 表示不被中间层挤占:早期特征有了直达高层的通道,中间层不用再费容量去"背"和自己任务无关的信息,可以更专注地做自己的变换。
  • 深度可扩展:信息流通了,加深带来的边际收益能维持得更久——这正是 K3 想要的,它是个很深的模型。

和相邻思路的关系

  • DenseNet:目标相近(全层连通),但 DenseNet 靠拼接、维度膨胀;AttnRes 靠注意力加权、维度不变,成本可控。
  • Hyper-Connections / 可学习残差权重:都在放松"只读上一层"的约束。AttnRes 的特点是用一个 per-layer 的 pseudo-query 做内容无关的层级选择(权重只依赖各层输出与该层探针,不随 token 位置变),结构简单、参数极少。
  • 它不改注意力本身:AttnRes 动的是层与层之间的连接,token 内部那套自注意力照旧。两者正交,可以叠加。

踩坑

  • RMSNorm 不能省:各层输出的尺度差异很大,不先归一化,相似度打分会被大尺度的层直接主导,注意力退化成"总看那几层"。
  • 成本随深度累积:第 ll 层要在 ll 个历史输出上算权重,越靠顶层要看的越多。单层便宜,但整体是个随深度增长的开销——报告给的 4%/2% 是在 K3 那个深度下的整体数,换个深度得重新掂量。
  • 要留着历史输出:既然要回看 h0hl1h_0 \dots h_{l-1},这些中间输出在前向时得保留,显存占用比"只留上一层"高。推理时也一样。

小结

AttnRes 只问了一个很朴素的问题:凭什么每一层只能读上一层?它的回答是给每层一个零初始化的 pseudo-query,让层自己在所有历史输出上做一次注意力、按需聚合。零初始化保证它从等权平均稳稳起步,RMSNorm 保证打分公平,整体只花 4%/2% 的开销。换来的是更顺的梯度、更省的中间层容量、更能吃深度的网络——这是 K3 在 KDA 和 LatentMoE 之外,为"把网络做深还不塌"下的另一步棋。

参考:Attention Residuals 技术报告(arXiv.15031)、Kimi K3 技术报告(arXiv.24653)。文中公式是对其机制的重建,用于说明原理;精确形式、消融与数字以官方报告为准。