把 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 个坑

  1. block size 选型是成败关键:B 太小(如 2)≈ 标准残差,AttnRes 优势被吃掉;B 太大(如 32)≈ 完整跨层 attention,显存爆炸。建议先在 ≤ 7B 模型上扫 B ∈ {4, 6, 8, 12, 16}。
  2. 缓存管理增加训练框架复杂度:block_outputs_cache 必须与流水线并行调度严格对齐;Megatron-LM / DeepSpeed 用户需要在自定义 Transformer Block 钩子里实现缓存逻辑。
  3. attention 权重 collapse:学习率太高时,跨层 attention softmax 容易塌缩到对某几个 block 持续高权重。缓解:warmup 阶段强制 temperature = 1.0,等权重稳定后再开启 learned temperature。
  4. drop-in 说法有前提:Block AttnRes 需要修改模型 forward 逻辑,并非单纯替换残差函数;SGLang / vLLM 等推理框架的适配需要改 attention kernel 加跨 block 的 K/V 读取,改动比训练侧更大。
  5. 与某些注意力变体的冲突:与 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)改写。

三个标题变体

  1. 数字钩子版:把 Transformer 的"加号"换成"跨层 attention",48B 的 Kimi Linear 居然真的把它训起来了
  2. 拟人化版:深层模型越训越差的真凶找到了——是"等权累加"在拖后腿
  3. 类比版:相当于给深度神经网络加了一道"自适应路由",让每一层自己决定听前面哪一层的话

📱 小红书风格卡片文案

🧠 深层 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 主结构且被工业级训练验证的架构创新。

Transformer #LLM架构 #残差连接 #Kimi #MoE #深度学习 #arXiv #AI论文 #每天学点AI