把 Transformer 的"加号残差"换成"跨层 attention",48B 的 Kimi Linear 居然真的把它训起来了——Attention Residuals 这事比你想象的更工程
- 关联论文:2603.15031
如果你用过 LLaMA、Qwen、Kimi,或者你自己训过一个超过 70 亿参数的模型,你大概率踩过一个"玄学坑":模型越深,效果不一定越好。很多团队甚至发现,从 32 层加到 64 层,验证集 perplexity 不降反升,loss 出现平台甚至掉点。
这事在 2023 年之前还有过几次小范围讨论。但真正把锅摆到台面上、给出解法的,是 arXiv 2603.15031 这篇 Attention Residuals(AttnRes)——把 Transformer 里那条"每层都用权重 1 把自己这层加到主线上"的固定残差,换成沿深度方向做 softmax attention,让每一层用学到的、随输入变化的权重,从前面所有层的输出里挑该听谁的。
更让人意外的是,这件事不是在 toy 模型上玩的——它已经作为 drop-in 替换,集成进 Kimi Linear(48B 总参 / 3B 激活),在 1.4T token 的预训练上验证有效。这是真正工业级的活证据,不是论文里的 small-scale ablation。
0 · 一分钟 TL;DR
- 问题:深层 Transformer 的固定 PreNorm 残差(
x_{l+1} = x_l + f_l(Norm(x_l)))会随着层数 L 增大,把每一层的真实贡献逐渐稀释,hidden state 在深度方向上漂移,深层训练效果变差甚至掉点。 - 方法:把"沿深度方向的固定残差"换成"沿深度方向的 softmax attention"——
x_{l+1} = Σ_i α_i · v_i + f_l(x_l),其中 α_i 由当前层 query 和前置层 key 算出来。 - 证据:作为 drop-in 集成进 Kimi Linear(48B/3B),1.4T token 预训练上验证有效。Block AttnRes(block size B=4/8/12)把"对所有前置层做 attention"的工程开销压到 < 1%。
- 意义:MoE / 深层模型长期被"残差稀释"拖垮,AttnRes 给了一条架构侧的解,区别于单纯调学习率、init scale 或 norm 位置——前者改不动主结构,后者只是打补丁。
1 · 为什么这件事重要(如果你在做 LLM)
1.1 残差连接的隐藏代价
过去 5 年所有主流 LLM——LLaMA、Qwen、Kimi、DeepSeek——几乎都用同一种骨架:
x_{l+1} = x_l + f_l(x_l) # PostNorm(早期)
或
x_{l+1} = x_l + f_l(Norm(x_l)) # PreNorm(主流)
残差 + PreNorm 让深层网络能训得动,但它有一个隐藏代价:每一层都用固定权重 1 把自己这层加到主线上。
当层数 L 很大时,主线信号被前面所有层的"等权累加"慢慢稀释——论文里称之为 PreNorm dilution:
- 每一层自己的贡献相对主线越来越小;
- 梯度回流不均匀,深层梯度的有效尺度被压扁;
- 深层和浅层的 hidden state magnitude 差距拉大,模型在深度方向"漂移"。
直觉上:传统残差不管某一层对当前 token 重不重要,都把它"等权加进来"——即使该层的贡献对当前 token 是冗余甚至有噪声的。这违背了"深层抽象"的目标。
1.2 MoE / 深层模型更痛
MoE(Mixture of Experts)模型——比如 Kimi Linear 这种 48B 总参 / 3B 激活的架构——在每一层多了一个 routing 决策:哪些 expert 被激活、贡献多少。如果残差是"等权累加"的,expert 的重要性信号被平均掉了,深层 MoE 的"专家分工"红利被打折。
AttnRes 的关键判断:聚合方式本身就该是 input-dependent 的,应该让每一层用学到的、随输入变化的权重去挑前面哪些层对该 token 最有用。
2 · 论文怎么干(用人话讲)
2.1 范式层面:从固定残差到 attention 残差
标准 PreNorm 残差(沿深度方向固定聚合):
x_{l+1} = x_l + f_l(x_l) # 权重恒为 1
Attention Residuals(沿深度方向学权重):
对当前层 l 的输入 x_l:
q_l = W_q · x_l
k_i = W_k · x_i (i = 1..l-1,前置层输出)
v_i = W_v · x_i
α_i = softmax_i( q_l · k_i / sqrt(d) )
x_{l+1} = Σ_i α_i · v_i + f_l(x_l)
x_{l+1} 不再是 x_l + f_l(x_l),而是"前面所有层输出的 attention 加权和 + 当前层自己的变换"。这是把"序列维度的 self-attention"思想移植到"深度维度"——同样的 query/key/value 范式,作用对象从 token 变成了层。
2.2 工程问题:对所有前置层做 attention 太贵
最朴素的实现是"每一层都对前面 64 层做 attention",显存和延迟爆炸。论文给出 Block AttnRes:
- 把 L 层分成若干个 block(如每 8 层一个 block);
- block 内部维持标准 PreNorm 残差;
- block 边界处才做跨 block attention(query 来自 block 内最后一层,key/value 来自前面所有 block 的输出);
- block 大小 B ∈ {4, 8, 12, 16},可消融。
这一步把"对所有前置层做 attention"的工程开销压到 < 1%(论文量级估算,abstract 未给绝对数字)。Block boundary cache 是关键:每个 block 的输出需要缓存供后续 block 读取。
2.3 集成进 Kimi Linear
AttnRes 作为 drop-in 替换集成进 Kimi Linear(48B 总参 / 3B 激活),1.4T token 预训练上验证有效。"drop-in"的意思是:替换残差聚合方式,不改 Transformer block 内部结构、不改 attention head 维度、不改 MoE routing。
⚠️ 注意:"集成"≠"已上线生产"。原文摘要措辞偏研究侧,是否为 Moonshot AI 生产部署架构之一,需核验。解读中"集成进 Kimi Linear"应理解为"实验性集成"而非"已替换 Kimi K2 / K3 的生产骨架"。
3 · 为什么这事对你(工程读者)真有用
3.1 如果你在训 50B+ 的 Dense / MoE 模型
你大概率踩过这种坑:训练到 100B token 之后 loss 不再下降,深层 gradient norm 远小于浅层,"加层"反而掉点。如果你能:
- 维护 block boundary cache(与流水线并行调度对齐);
- 消融 block size B ∈ {4, 8, 12, 16};
- 训练 tokens 规模 ≥ 500B(短训练看不到收益);
那 AttnRes 是一条值得尝试的架构侧优化。它不动现有 Transformer block 内部,改的是 block 间的聚合方式——这比换架构(如换成 Mamba / SSM)风险小得多。
3.2 如果你在做推理优化 / KV cache 调优
AttnRes 不直接解决推理延迟——它解决的是"深层训练效果"。但 Block AttnRes 的 block boundary cache 思路,可以借鉴到"分层 KV cache"——只 cache block 边界的 hidden state 给后续 block 用,省掉逐层 attention 的 KV cache 开销。
3.3 如果你在做模型架构调研
AttnRes 的关键意义是让"残差连接"不再是金科玉律。过去 5 年几乎所有 LLM 都用同一种残差;AttnRes 用实验告诉你:残差聚合方式本身是一个可学习的设计选择,并且这个选择在深层模型上的边际收益很大。
4 · 落地前要避的 5 个坑
- block size 选型是成败关键:B 太小(如 2)≈ 标准残差,AttnRes 优势被吃掉;B 太大(如 32)≈ 完整跨层 attention,显存爆炸。建议先在 ≤ 7B 模型上扫 B ∈ {4, 6, 8, 12, 16}。
- 缓存管理增加训练框架复杂度:
block_outputs_cache必须与流水线并行调度严格对齐;Megatron-LM / DeepSpeed 用户需要在自定义 Transformer Block 钩子里实现缓存逻辑。 - attention 权重 collapse:学习率太高时,跨层 attention softmax 容易塌缩到对某几个 block 持续高权重。缓解:warmup 阶段强制 temperature = 1.0,等权重稳定后再开启 learned temperature。
- drop-in 说法有前提:Block AttnRes 需要修改模型 forward 逻辑,并非单纯替换残差函数;SGLang / vLLM 等推理框架的适配需要改 attention kernel 加跨 block 的 K/V 读取,改动比训练侧更大。
- 与某些注意力变体的冲突:与 StreamingLLM(sink tokens)、Gradient Cache(续训优化)的兼容性未经充分消融;叠加使用前建议做小规模 ablation。
5 · 关键数字与边界(abstract verbatim)
| 指标 | 数值 | 来源 |
|---|---|---|
| 集成对象 | Kimi Linear(48B 总参 / 3B 激活) | abstract |
| 训练规模 | 1.4T tokens 预训练 | abstract |
| Block AttnRes 开销 | "< 1%" | ⚠ 量级估算,abstract 未给绝对数字 |
| Block size B 推荐值 | 原文未给 | ❌ 解读未擅自填充 |
| 提交时间 | 2026-03-16 v1 | arXiv |
⚠ abstract 仅定性陈述"全面提升",未给具体 benchmark 数字;部署时不宜直接引用为"绝对提升"。
6 · 一句话总结
AttnRes 把"沿深度方向固定权重 1 的残差"换成"沿深度方向的 softmax attention",让深层模型自己学"哪一层对当前 token 最重要",并用 Block AttnRes 把工程开销压到 < 1%;它已在 Kimi Linear 48B/3B、1.4T token 预训练上验证有效,是 2026 年少数真正动了 Transformer 主结构且被工业级训练验证的架构创新——而不是另一篇只有 small-scale ablation 的"架构玩具"。
本稿基于已含「工程落地与核查(Jay)」节的深度解读(explainers/2603-15031.md)改写。
三个标题变体
- 数字钩子版:把 Transformer 的"加号"换成"跨层 attention",48B 的 Kimi Linear 居然真的把它训起来了
- 拟人化版:深层模型越训越差的真凶找到了——是"等权累加"在拖后腿
- 类比版:相当于给深度神经网络加了一道"自适应路由",让每一层自己决定听前面哪一层的话
📱 小红书风格卡片文案
🧠 深层 Transformer 越训越差?问题出在"等权累加"的残差上
你有没有遇到过这种玄学:
模型从 32 层加到 64 层,验证集 perplexity 不降反升,loss 平台甚至掉点
这事在 arXiv 2603.15031(Attention Residuals · 2026-03 提交)面前有了答案。
传统 Transformer 的残差长这样:
x_{l+1} = x_l + f_l(Norm(x_l)) # 权重恒为 1
每一层都把自己"等权"加到主线上。但当层数 L 很大时,主线信号被前面所有层的"等权累加"慢慢稀释——论文叫它 PreNorm dilution:
- 每一层贡献相对主线越来越小
- 梯度回流不均匀,深层有效尺度被压扁
- hidden state 在深度方向上漂移
AttnRes 的关键替换:
x_{l+1} = Σ_i α_i · v_i + f_l(x_l) # α_i 由 softmax attention 学出来
把"沿深度方向的固定残差"换成"沿深度方向的 softmax attention"——让每一层用学到的、随输入变化的权重,挑前面哪些层对当前 token 最有用。
工程上不是玩具:
✅ 集成进 Kimi Linear(48B 总参 / 3B 激活)
✅ 1.4T token 预训练验证有效
✅ Block AttnRes(B=4/8/12)把跨层 attention 开销压到 < 1%
避坑清单:
⚠️ block size 选型是关键:B=2 ≈ 没换,B=32 显存爆炸
⚠️ block_outputs_cache 要与流水线并行严格对齐
⚠️ attention collapse:warmup 阶段强制 temperature = 1.0
⚠️ drop-in 是有限度的:SGLang / vLLM 推理侧需改 attention kernel
🎯 一句话:AttnRes 把"沿深度方向的固定残差"换成"softmax attention",让深层模型自己学"听谁的话"——这是 2026 年少数真正动了 Transformer 主结构且被工业级训练验证的架构创新。