
大模型越做越大,层数越堆越多。
但有一个问题一直没人正面解决:堆得越深,后面的层越来越不管用。
Kimi刚刚发了一篇论文,把这个问题挖出来,给出了解法,在自家48B大模型上验证有效,所有测试任务全部提升。

论文代码已开源:
先说问题是什么
现在所有主流大模型,内部都有一个叫残差连接的东西。
它的工作方式非常简单:每一层处理完信息之后,把处理结果和原来的输入加在一起,传给下一层。
2015年被何凯明大神用在图像识别里大放异彩,之后就成了所有深度学习模型的标配,一直用到今天。
它解决了一个重要问题:让梯度能顺畅地往回传,使得几百层的深度网络可以被训练起来。
但它有一个隐藏的毛病,长期以来没被重视。
每一层做完累加之后,信息就被压进了一个混合状态里。越往后,这个混合状态就越臃肿,前面所有层的内容都混在里面,权重还完全一样。
后面的层没有办法说:我现在需要的是第5层的信息,不是第12层的。 它只能接收一锅乱炖。
这带来了一个实际后果:
随着网络越来越深,这个混合状态的数值会越来越大。后面的层想要让自己的输出还能有影响力,就必须学习输出更大的数值,才能在这个越来越大的池子里不被淹没。
研究人员把这个问题叫做 PreNorm稀释——越深的层,贡献越被稀释。实验证明,一个很深的模型里,删掉相当多的层,效果几乎不变。大量层形同虚设。
Kimi的解法:让每一层自己选择听谁的
Kimi的思路其实很直觉:
既然问题是每层只能接收一个乱炖的混合状态,那就不要混了,让每层自己去选。
他们提出的方案叫Attention Residuals(AttnRes),中文可以理解为注意力残差。

原来的做法:每一层 = 前面所有层的输出,等权加在一起
新的做法:每一层 = 前面所有层的输出,按需加权求和,权重由这一层自己学
关键是这个权重怎么来的——用的是大家已经熟悉的注意力机制,就是Transformer里让模型决定关注哪些词的那个机制。只不过这里不是关注哪些词,而是关注哪些层。
每一层有一个自己专属的小向量(只有一个,极其轻量),用它去跟前面所有层的输出算相似度,相似度高的层权重就大,相似度低的权重就小,最后加权求和。
这样,注意力层和MLP层可以关注不同的历史层,早期层的信息不会被淹没,可以按需取用。
整个改动增加的参数量,相比几十亿参数的大模型来说,可以忽略不计。
但有个工程问题需要解决
这个方案理论上很美,工程上有个麻烦。
每一层要关注前面所有层的输出,就必须把前面所有层的输出都存着。
对于一个几十层的小模型,这没问题。
但现代大模型动辄上百层,训练时还会把模型切成很多份分布到不同的机器上(叫流水线并行),每台机器都要维护所有层的输出,机器之间还要传来传去——内存压力和通信压力都会暴增。
Block AttnRes:一个工程上的聪明妥协
Kimi的解法是:不用存每一层,改为存每一组。
把所有层分成若干个块(block),每个块内部还是用传统方式累加,但把整个块压缩成一个向量存起来。跨块之间,再用注意力机制选择。
这样存储量从正比于层数,变成正比于块数。
实验发现,分成大约8块就能恢复Full AttnRes绝大部分的效果,而内存和通信开销只是原来的一小部分。
训练额外开销边际,推理延迟额外增加不到2%。
实验结果:提升是实实在在的
Kimi用五个不同大小的模型做了Scaling Law实验,覆盖从小到大的算力范围。
结论是:Block AttnRes在每个规模下都比基线表现更好,相当于用同等性能,只需要基线0.8倍的算力(反过来说,同等算力能多训练1.25倍)。

在48B大模型上用1.4T tokens完整预训练后,测了十几个benchmark,AttnRes版本全部高于基线,没有一个跌分。
提升最明显的是需要多步推理的任务:
- • GPQA-Diamond(科学推理):+7.5分
- • Math(数学):+3.6分
- • HumanEval(代码生成):+3.1分
知识类任务也有稳定提升,只是幅度小一些。
Kimi的解释是:深度方向的信息流改善后,后面的层可以有选择地调用前面某层的中间结果,这对需要多步推理的任务帮助最大。
训练过程中发生了什么变化
对比两个模型的训练动态,能看到三个明显变化。
第一,验证损失。 AttnRes从一开始就比基线低,差距在训练后期越来越大。
第二,每层的输出大小。 基线模型里,随着层数加深,每层输出的数值越来越大,到后面已经很夸张——这正是前面说的稀释问题的体现。AttnRes里,这种增长被限制在块内,块边界处会重置,整体保持在一个稳定范围内。
第三,梯度分布。 基线模型里,最早的几层梯度异常地大,其他层相对很小,整个模型各层受到的训练信号很不均匀。AttnRes的各层梯度分布明显更均匀,每一层都在被有效地训练。

模型学到了什么
Kimi还可视化了训练好的模型,看看每一层实际上在关注哪些前驱层。
结论挺有意思:
大多数层还是主要关注自己的直接前驱(局部性被保留),但会出现一些有规律的跳跃——比如某些层会专门关注最早的嵌入层,或者跳过中间很多层,回溯到某个特定的早期层。
注意力层和MLP层的关注模式也不一样:MLP层更依赖近期的表示,注意力层的感受野更宽。
这些都不是人工设定的,是模型自己学出来的。
这件事的意义
残差连接在过去十年成为所有深度学习模型的基础组件,用了这么久几乎没有根本性的改动。
AttnRes第一次在这个层面上动了真格,用注意力机制替换了固定的均匀累加,让深度方向的信息聚合变得可学习、可选择。
改动本身足够轻量,可以直接替换进现有架构,不需要改变其他任何东西。
代码已开源,感兴趣的可以直接去看: