Abstract

Attention Residuals 是 Moonshot AI Kimi Team 在 2026 年 3 月 16 日发布的技术报告,项目代码同步开源在 GitHub

这篇论文讨论的是一个看起来很基础、但几乎所有大模型都会用到的模块:残差连接(Residual Connection)。

如果只看最常见的写法,残差连接很简单:

$$ h_l = h_{l-1} + f_{l-1}(h_{l-1}) $$

大部分介绍都会说,残差连接的作用是给梯度留一条“直通路径”,让深层网络更容易训练。这当然没错,但这篇论文指出,残差连接还有另一个同样重要、却更容易被忽略的作用:

  • 它决定了前面各层的信息,是怎么一路传到后面层的;
  • 它决定了“当前层到底能看到前面哪些层的信息”。

标准残差连接的做法,其实非常朴素:前面所有层的输出,全部直接加起来。也就是说,所有历史层一视同仁,没有筛选,没有权重竞争,没有“哪一层更重要”这种机制。

Attention Residuals(注意力残差,简称 AttnRes)做的事情可以用一句话概括:

  • 传统残差连接:把前面所有层的输出直接相加;
  • 注意力残差:让当前层先对前面各层打分,再做加权求和。

这就是这篇论文最核心的改动。

更具体地说,论文提出了两个版本:

  • Full Attention Residuals(全量注意力残差):当前层可以直接查看前面所有层的输出;
  • Block Attention Residuals(分块注意力残差):为了降低显存和通信开销,把前面很多层先压缩成块级表示,再做注意力聚合。

Introduction

先看传统残差连接到底在做什么。

第 $l$ 层的输入写成:

$$ h_l = h_{l-1} + f_{l-1}(h_{l-1}) $$

把这个递推一直展开,会得到:

$$ h_l = h_1 + \sum_{i=1}^{l-1} f_i(h_i) $$

这里的含义非常直接:第 $l$ 层看到的输入,不只是上一层的输出,而是“初始词向量(embedding)加上前面所有层输出的总和”。

这也是残差连接为什么一方面很好用,另一方面又会埋下问题的原因。

它的好处很清楚:

  • 早期层的信息可以一直往后传;
  • 反向传播时梯度有一条不经过复杂变换的路径;
  • 深层网络更容易训练稳定。

但它的限制也同样很清楚:

  • 前面所有层的输出都被混在同一个和里;
  • 当前层并不知道“哪些历史层更重要”;
  • 越往后,这个和会越大,单层输出在这个总和里所占的比例会越来越小。

这就是论文里一直在强调的一个现象:在 PreNorm(前归一化)架构下,残差主路径不会在每次相加后立刻重新归一化,所以隐藏状态的“总量”会随着深度持续累加。后面层如果还想让自己的输出有影响力,就只能把自己的输出做得越来越大。

这里把这句话单独展开一下。Attention Residuals 正文里直接给出了结论,理论背景主要来自On Layer Normalization in the Transformer ArchitectureSiameseNorm。这几篇文章连起来看,逻辑会更清楚。

为什么 PreNorm 会出现幅值增长 先把一个标准 Transformer block 里 LayerNorm(层归一化)到底放在哪里说清楚。

如果按一个完整 block 来写,PreNorm 的形式是:

$$ u_l = h_l + \text{Attn}(\text{LN}_1(h_l)) $$
$$ h_{l+1} = u_l + \text{MLP}(\text{LN}_2(u_l)) $$

$$ \begin{align} h_{l+1}&=h_l+\text{Attn}(\text{LN}_1(h_l))+\text{MLP}(\text{LN}_2(h_l+\text{Attn}(\text{LN}_1(h_l)))) \\ &=h_l+\Delta_l=h_l+f_l(h_l) \end{align} $$

也就是说,一个 block 里会发生两次“先归一化,再进子层,再加回主路径”的操作:

  1. 先对 $h_l$ 做归一化,再送进 Attention(注意力)子层;
  2. Attention 输出直接加回主路径,得到 $u_l$;
  3. 再对 $u_l$ 做归一化,再送进 MLP(前馈网络)子层;
  4. MLP 输出再直接加回主路径,得到 $h_{l+1}$。

注意最关键的一点:

  • 归一化发生在残差分支输入处;
  • 但“相加之后的主路径”本身没有在 block 内被重新归一化。

这就是 PreNorm(前归一化)和 PostNorm(后归一化)的本质区别。

PostNorm 如果写成同样的 block 形式,则是:

$$ u_l = \text{LN}_1(h_l + \text{Attn}(h_l)) $$
$$ h_{l+1} = \text{LN}_2(u_l + \text{MLP}(u_l)) $$

也就是说,PostNorm 是每次残差相加后,立刻把主路径重新归一化;而 PreNorm 是只归一化分支输入,不归一化主路径本身。

这个差别看起来只是 LayerNorm 放前还是放后,但对 hidden state(隐藏状态)的尺度变化影响非常大。

所以这篇论文的逻辑其实是:

  1. PreNorm 的主路径会持续累积;
  2. 单层增量相对主路径的占比越来越小;
  3. 后面层必须输出更大的量才有存在感;
  4. 这会造成深度利用率下降;
  5. 因此不应该继续让所有历史层都用固定系数 1 去做累加,而应该改成可选择的注意力聚合。

用一句更直白的话说,传统残差连接像是把前面所有层的结果都倒进同一个桶里。桶会越来越满,但当前层并不能把桶里的内容再拆开来看,只能接着在这个混合结果上继续算。

Attention Residuals(注意力残差)想解决的,就是这个“都倒进同一个桶里”的问题。

论文的思路很像序列建模的发展过程:

  • 循环神经网络(RNN)是把过去所有词元(token)压成一个状态;
  • Transformer 用注意力机制(Attention)替代了这种单状态递推;
  • 传统残差连接也在 depth(深度)维度上做了类似的单状态递推;
  • 那么自然也可以考虑:在深度维度上,用注意力替代简单的递推累加。

Motivation

这篇论文的动机部分其实就是在回答一个问题:

为什么“残差连接把前面所有层全部加起来”会成为一个值得单独处理的问题?

Training Deep Networks via Residuals

残差连接最经典的作用,是让梯度更容易往前传。

对中间层 $h_l$ 来说,损失函数对它的梯度可以写成:

$$ \frac{\partial \mathcal L}{\partial h_l} = \frac{\partial \mathcal L}{\partial h_L} \prod_{j=l}^{L-1} \left( I + \frac{\partial f_j}{\partial h_j} \right) $$

把这个乘积展开,里面总会有一个恒等项 $I$。这意味着不管网络有多深,梯度总有一条“直接穿过去”的路,所以深层网络比纯粹堆叠普通层更稳定。

但如果看前向传播,问题就出来了。

第 $l$ 层的输入是:

$$ h_l = h_1 + \sum_{i=1}^{l-1} f_i(h_i) $$

这里面前面每一层的输出,系数都是 1。

也就是说,传统残差连接默认做了三个假设:

  1. 前面每一层都同样重要;
  2. 当前层不需要区分“哪一层的信息更有用”;
  3. 把所有历史层直接相加,不会带来严重的信息淹没问题。

论文认为,这三个假设在现代大模型里都太强了。

因为一旦深度很大,这种简单相加会带来三个问题:

  1. 无法选择历史层

当前层拿到的是一个总和,而不是一组独立的历史层表示。所以它只能看“混合后的结果”,不能看“某一层单独的结果”。

  1. 早期信息越来越容易被淹没

假设第 $i$ 层输出对第 $l$ 层输入的相对贡献写成:

$$ \frac{\Vert f_i(h_i)\Vert}{\left\Vert h_1 + \sum_{j=1}^{l-1} f_j(h_j)\right\Vert} $$

随着 $l$ 增大,分母会越来越大,而单层输出的占比会越来越小。

  1. 越往后的层,越需要把输出做大

因为如果输出幅值不够大,自己的影响就会被前面越来越大的 residual stream(残差流)淹没。

这也是论文里说的 PreNorm dilution(前归一化稀释)问题:前面所有层不断累加,导致单层贡献越来越“稀”。

所以,论文真正要改的不是“梯度路径”本身,而是“信息在深度维度上怎么聚合”这件事。

Attention Residuals: A Unified View of Time and Depth

这一节是整篇论文最核心的部分。

The Duality of Time and Depth

论文先给出一个很重要的类比:

  • 在时间维度上,RNN 用一个状态去压缩过去所有词元(token);
  • 在深度维度上,传统残差连接也用一个状态去压缩过去所有层。

如果把这件事写成公式,会更清楚。

传统残差连接展开后是:

$$ h_l = h_1 + \sum_{i=1}^{l-1} f_i(h_i) $$

注意力残差则写成:

$$ h_l = \alpha_{0 \to l} h_1 + \sum_{i=1}^{l-1} \alpha_{i \to l} f_i(h_i) $$

其中这些权重满足:

$$ \sum_{i=0}^{l-1} \alpha_{i \to l} = 1 $$

这个改动看起来只是“把 1 换成了可学习的 $\alpha$”,但含义完全不同。

传统残差连接里,每一层都固定占 1 份权重,没有竞争。

注意力残差里,所有历史层共享同一份总权重。某一层权重大了,其他层的权重就会变小。这意味着当前层不再是“把历史全收下”,而是“在历史里挑重点”。

这也是传统残差连接和注意力残差连接最本质的区别。

Full Attention Residuals

Full Attention Residuals(全量注意力残差)的思路很直接:当前层直接看前面所有层,然后用 softmax 归一化注意力去决定该取哪些层。

论文定义的权重是:

$$ \alpha_{i \to l} = \frac{\phi(q_l, k_i)} {\sum_{j=0}^{l-1} \phi(q_l, k_j)} $$

其中打分函数是:

$$ \phi(q, k) = \exp \left(q^T \text{RMSNorm}(k)\right) $$

这里有三个对象:

  • $q_l$:第 $l$ 层自己的 query(查询向量);
  • $k_i$:前面第 $i$ 个来源的 key(键向量);
  • $v_i$:前面第 $i$ 个来源的 value(值向量)。

论文采用的定义是:

$$ q_l = w_l $$
$$ k_i = v_i = \begin{cases} h_1, & i = 0 \\\\ f_i(h_i), & 1 \le i \le l-1 \end{cases} $$

最终第 $l$ 层的输入是:

$$ h_l = \sum_{i=0}^{l-1} \alpha_{i \to l} v_i $$

这组公式本身不复杂,但背后的设计点很值得展开。

和传统残差连接的区别到底是什么 把两者并排看最清楚。

传统残差连接:

$$ h_l = h_1 + \sum_{i=1}^{l-1} f_i(h_i) $$

注意力残差连接:

$$ h_l = \alpha_{0 \to l} h_1 + \sum_{i=1}^{l-1} \alpha_{i \to l} f_i(h_i) $$

两者的差别可以概括成四点:

  1. 传统残差连接是固定求和,注意力残差是动态加权求和

传统残差里,每个历史层的系数都固定等于 1。当前层没有选择权。

注意力残差里,每个历史层的权重都由当前层动态决定。

  1. 传统残差连接只能看“混合结果”,注意力残差能看“单个历史层”

传统残差把所有历史层先混起来再往后传,后面的层无法再知道“哪一部分来自哪一层”。

注意力残差直接对历史层逐个打分,所以它保留了“按层选择”的能力。

  1. 传统残差连接的总幅值容易随着深度变大,注意力残差会把总权重归一化

传统残差连接的权重一直在累加,所以隐藏状态(hidden state)的规模更容易随着层数增长。

注意力残差因为用了 softmax,所有权重加起来恒等于 1,至少在残差聚合这一段上,规模更容易控制。

  1. 传统残差连接默认“大家都重要”,注意力残差允许“有些层比别的层更重要”

这对于大模型尤其重要,因为不同层往往分工不同:

  • 有些层更偏词法和局部模式;
  • 有些层更偏信息路由;
  • 有些层更偏组合和推理。

如果当前层不能主动决定“该多看谁”,就只能接受一个固定的历史混合物。

为什么 query(查询向量)用一个可学习向量,而不是当前隐藏状态

论文这里用了一个很轻量的设计:每层只额外引入一个向量 $w_l$,把它当作 query(查询向量)。

也就是说,当前层的查询不是从输入里现算出来的,而是一个层级参数。

这么做有两个作用:

  • 参数开销很小,每层只多一个长度为 $d$ 的向量;
  • 更重要的是,它和前向隐藏状态(hidden state)解耦了,后面系统实现里就可以把同一个 block 内很多层的 query 一起算。

论文也做了消融实验:如果把 query 改成从当前隐藏状态(hidden state)投影出来,效果还会更好一点,但工程代价会明显上升。

为什么 key 上要加 RMSNorm(均方根归一化) 这一点很容易被忽略,但其实很重要。

如果直接用:

$$ \exp(q_l^T k_i) $$

去打分,那么幅值很大的层,哪怕方向并不更匹配,也可能因为数值更大而拿到更高权重。

而论文真正想做的是“内容选择”,不是“谁的向量绝对值更大谁赢”。

所以它先做:

$$ \exp \left(q_l^T \text{RMSNorm}(k_i)\right) $$

这样历史层之间的幅值差异不会直接主导 softmax 权重。

为什么所有 query 要零初始化 论文特别强调,所有 $w_l$ 必须初始化为 0。

原因很简单。当 $w_l = 0$ 时,所有历史层的得分都一样,所以一开始的权重就是均匀分布。

也就是说,训练一开始时,Full Attention Residuals(全量注意力残差)不是随机乱选历史层,而是先从“平均看所有历史层”开始,再慢慢学会选择。

这会明显减轻训练初期的不稳定。

Attention Residuals overview
图1:Attention Residuals 总览。左图是传统残差连接,中图是全量注意力残差,右图是分块注意力残差。图片来自原论文 Figure 1。

Full Attention Residuals 的代价 全量注意力残差的好处是最直接、最完整,但代价也最直接。

如果网络有 $L$ 层,那么第 $l$ 层要看前面 $l-1$ 个历史层。所有层加起来,残差这一部分的计算规模大致是:

  • 计算量:$O(L^2 d)$
  • 历史层缓存访问:$O(Ld)$

在小规模训练里,这不一定是问题,因为这些中间层本来就要保存下来用于反向传播。

但在大规模预训练里,问题会立刻变重,特别是下面两种场景:

  • activation recomputation(激活重算):原本可以丢掉的中间层现在不能轻易丢;
  • pipeline parallelism(流水线并行):这些历史表示还要在不同 stage 之间传来传去。

这就引出了论文的第二个版本。

Block Attention Residuals

Block Attention Residuals(分块注意力残差)的目标非常明确:保留“按层选择历史”的能力,但把系统代价压下来。

这一部分的符号定义直接对应原论文Attention Residuals里对 Block Attention Residuals(分块注意力残差)的公式化描述,整体结构示意可以结合论文的 Figure 1(c) 和 Figure 3 一起看。

它的做法也很直观:

  • 不再让每一层都直接看前面所有单层输出;
  • 而是把若干层分成一个 block(块);
  • 同一个 block 里的层,先用普通残差把结果累加起来;
  • block 和 block 之间,再做注意力聚合。

设第 $n$ 个 block 的层集合是 $\mathcal B_n$,那么这个 block 的总表示写成:

$$ b_n = \sum_{j \in \mathcal B_n} f_j(h_j) $$

如果只累加到 block 内前 $i$ 层,那么部分和写成:

$$ b_n^i = \sum_{j \in \mathcal B_n,\ j \le i} f_j(h_j) $$

论文还定义:

$$ b_0 = h_1 $$

也就是把最初的输入词向量(token embedding)单独当成一个固定来源保留下来。

对于第 $n$ 个 block 内第 $i$ 层,注意力看到的 value 集合分两种情况:

第一种,如果它是这个 block 的第一层,那么它只能看:

$$ [b_0, b_1, \cdots, b_{n-1}] $$

第二种,如果它已经是 block 中后面的层,那么它还能额外看到当前 block 的部分和:

$$ [b_0, b_1, \cdots, b_{n-1}, b_n^{i-1}] $$

这一步非常关键,因为它说明 Block Attention Residuals(分块注意力残差)并不是简单地把很多层粗暴压扁掉了,而是采用了一个分工结构:

  • 块内仍然保留顺序细节;
  • 块间只保留压缩后的摘要。

于是它在“表达能力”和“工程成本”之间做了一个折中。

这个设计和传统残差连接的区别也很容易看清:

  • 传统残差连接:所有历史层一直混在一个总和里;
  • 分块注意力残差:近处的信息保留更细,远处的信息先压成块摘要,再按需读取。

论文最终发现,用大约 8 个 blocks,已经能恢复 Full Attention Residuals(全量注意力残差)的大部分收益。

References

[1] Kimi Team. “Attention Residuals” arXiv 2026.

[2] Moonshot AI. “Attention-Residuals” GitHub repository.

[3] Xiong et al. “On Layer Normalization in the Transformer Architecture” ICML 2020.

[4] Li et al. “SiameseNorm: Breaking the Barrier to Reconciling Pre/Post-Norm” arXiv 2026.

[5] Zhang and Sennrich. “Root Mean Square Layer Normalization” NeurIPS 2019.

[6] Kimi Team. “Kimi Linear: An Expressive, Efficient Attention Architecture” arXiv 2025.