Moonshot 提出注意力残差 AttnRes:改掉传统残差连接,推理表现大涨
Moonshot AI 提出名为 AttnRes(注意力残差)的新架构,用动态注意力聚合取代 Transformer 中传统的固定残差连接。模型可按需回看早期各层特征,解决深层特征稀释问题。分块版本以极小开销达到基准模型 1.25 倍算力的效果,多步推理与代码能力提升明显。

只要搭过稍微深一点的神经网络,你多半对残差连接(Residual Connection)感激涕零。正是当年把输入直接加到输出上的神来之笔,才让深度学习摆脱了梯度消失的噩梦,一路催生出今天庞大的 Transformer 军团。
但这套用了近十年的老办法,其实一直揣着个暗病:它对所有层一视同仁。随着模型越堆越深,每一层的新特征只能像往大水缸里倒水一样硬挤进去,前面积累的特征被无限稀释,隐藏状态的数值也跟着野蛮膨胀。
Moonshot AI(Kimi 团队)最近在开源社区给出了新解法,他们提出了一种叫 AttnRes(注意力残差)的架构,把 Transformer 沿用多年的固定残差累加,换成了自适应的注意力机制。
让每一层自己挑选过去的记忆
传统的残差结构说白了就是加法:每一层算出来的东西,原封不动按固定权重累加在一起。这就好比你在写一份长篇报告,每写完一页就得把前面所有草稿死板地装订在一块,越往后翻越厚,前面关键的草稿反而找不到了。
AttnRes 的思路很直接:既然我们在同一层处理 token 之间关系时用了注意力,为什么跨越不同层深度时不行?
在 AttnRes 架构里,每一层都有一个轻量的学习查询向量。当模型计算当前层时,它不再机械累加前一层,而是通过 softmax 注意力,主动在前面所有层的输出里挑选有用的特征。如果某一层需要底层细粒度的语法线索,它就可以直接把注意力拉回最初几层,而不需要经过中间几十层的层层稀释。
但如果每一层都回头看所有的历史层,显存占用会直接飙升到 O(Ld)。为了能真正落地,Moonshot 团队设计了 Block AttnRes。
他们把网络切分成若干个块,比如通常划分为 8 个块。块内依然保留计算开销极低的传统残差,而块与块之间才动用注意力机制聚合。这样一来,显存占用瞬间从 O(Ld) 降到了 O(Nd),几乎没有增加多少训练负担。
复杂推理跳涨 7.5 分,算力效率白捡 25%
根据 Moonshot 放出的实验数据,Block AttnRes 几乎完全继承了全量注意力残差的能力。
最显眼的数据是在算力利用率上:采用了 Block AttnRes 的模型,在相同训练步数下达到的损失值,直接追平了基准模型多花 1.25 倍算力才训出来的效果。换句话说,光是改动残差连接方式,就凭空省下了四分之一的训练算力。
在能力评测上,它在多步复杂推理和代码任务里的提升尤为剧烈。在极具挑战的高难度理科基准 GPQA-Diamond 上,AttnRes 把分数从 36.9 直接拉到了 44.4,涨幅高达 7.5 分;在代码评测 HumanEval 上,从 59.1 提高到 62.2;在 MBPP 上从 72.0 提升到 73.9。
通用任务和中文基准也都有不同程度的涨幅,MMLU 从 73.5 涨到 74.6,BBH 提高 1.7 分达到 78.0,中文 C-Eval 也从 79.6 提升到 82.5。同时,实验证明它有效遏制了 PreNorm 带来的输出幅度失控,让各层之间的梯度范数分布平缓得多。
为什么重要
我们认为,这项工作最聪明的地方,在于它精准踩中了当前大模型预训练的深水区盲点。过去两年里,全行业都在卷注意力机制内部的优化、稀疏化以及上下文窗口的长度,但大家几乎把层与层之间的骨架默认当成了不可触碰的公理。
Moonshot 证明了残差连接这种基础积木依然存在巨大的调优红利。特别是通过 Block 分块折中,把理论创新转化成几乎零开销的即插即用模块,这种工程品味值得同行借鉴。对正在预训练自研模型的团队来说,只要几行 PyTorch 代码就能白拿 1.25 倍算力等效的增益,尤其是让多步推理能力提升明显,吸引力非常大。
不过,我们看起来这也是一把双刃剑。尽管 Block 结构控制了显存峰值,但在千卡、万卡级别超大规模集群的流水线并行(Pipeline Parallelism)下,跨越多个 block 的跨层注意力必然会打破原本严格局限在 stage 内的通信界限,带来额外的跨卡通信调度成本。如何在大规模并行训练框架下优雅支持它,可能是开发者下一步需要填的坑。
来源 (1)
- github.com(在新标签页打开)原文github.com