从 GPT-2 到 Kimi K3:大模型架构如何演进
[!info] 来源 整理自 ali(@waterloo_intern)于 2026-07-27 发布的 X Article:22580: From GPT2 to Kimi3, Explained。本文不是逐句翻译,而是对原文论证主线的中文重组。
一句话总结
从 GPT-2 到 Kimi K3,不只是把参数量扩大了 22580 倍。更关键的演进是:模型不断重新设计信息如何存储、旧信息如何被更新或遗忘,以及需要的信息如何被检索。
Kimi K3 最终组合了四种互补能力:
- KDA:以固定大小的循环状态保存长序列信息;
- 周期性 MLA:保留对 token 上下文的精确 softmax 检索;
- 稀疏 MoE:增加参数容量,但避免每个 token 激活全部参数;
- AttnRes:让深层网络选择性读取较早层的表示。
文章主线
GPT-2 / Softmax Attention
↓ KV cache 随序列增长,访存开销大
Linear Attention
↓ 固定状态高效,但信息会相互干扰
DeltaNet
↓ 能精确替换关联,但缺少全局遗忘
Gated DeltaNet
↓ 增加可学习衰减,但控制仍较粗
Kimi Delta Attention(KDA)
↓ 逐通道精细控制记忆衰减
Kimi K3
= KDA + 周期性 MLA + Latent MoE + AttnRes
1. GPT-2:标准 Decoder-only Transformer
GPT-2 的输入由 token embedding 和 positional embedding 相加得到。每个 Transformer block 包含 self-attention 和 MLP,并通过残差连接组织起来。最后的 hidden state 经 language-model head 映射为词表 logits。
自回归生成时,每一步只用最后一个位置的 logits 选择下一个 token,但模型需要利用此前全部 token。若每次都重新计算历史 token 的 K、V 投影,会产生大量重复工作,因此引入 KV cache 保存历史 token 的 key 和 value。
KV cache 解决了重复计算,却带来新的问题:
- cache 容量随序列长度 \(N\) 线性增长;
- decode 每一步都需要从 HBM 读取历史 K、V;
- 长上下文下容易形成显存容量与内存带宽瓶颈。
原文以约 124M 参数的 GPT-2 为基准:词表约 50k、12 层、12 个注意力头、hidden size 为 768。若按 Kimi K3 的 2.8T 总参数计算,一个 Kimi K3 约等于 22580 个 GPT-2 的参数量。
22580 这个数字揭示的是尺度差异,但全文真正讨论的是:这些新增容量被放在了哪里,以及它们解决了什么问题。
2. Linear Attention:把增长的 KV cache 压缩为固定状态
标准 softmax attention 可以简写为:
\[ \operatorname{Attn}(Q,K,V)=\operatorname{softmax}(QK^T)V \]
softmax 作用在 \(QK^T\) 之后,因此不能简单改变矩阵乘法顺序。Linear Attention 对 \(Q\)、\(K\) 分别应用非负特征映射 \(\phi\),例如 \(\mathrm{ELU}(x)+1\):
\[ \operatorname{Attn}(Q,K,V) \approx \frac{\phi(Q)(\phi(K)^TV)}{\phi(Q)(\phi(K)^T\mathbf{1})} \]
利用乘法结合律,可以先维护固定大小的状态:
\[ S_t=S_{t-1}+\phi(k_t)^Tv_t \]
随后用 query 从状态中读取:
\[ o_t=\phi(q_t)S_t \]
这样,历史 K、V 不再沿 token 维不断拼接,而被折叠进一个固定的 \(D\times D\) 状态。其优势是 decode 状态不随序列长度增长。
代价是:\(\phi\) 对 softmax kernel 的表达能力有限,因此可能损失精确性。Linear Attention 保留了“非负打分—归一化—对 value 加权平均”的基本契约,但使用了更容易重排计算、也更弱的特征映射。
3. DeltaNet:固定容量记忆需要覆盖策略
Linear Attention 的核心状态是有限容量的关联记忆。若不断执行加法更新:
\[ S_t=S_{t-1}+k_t^Tv_t \]
不同 key-value 关联会被写入同一个矩阵。当序列长度远大于状态容量时,关联会互相干扰,而且旧信息从未被移除。
Delta rule 的思路不是直接叠加新 value,而是先读取当前 key 已经指向的内容,再只写入差值:
\[ v_{old}=k_tS_{t-1} \]
\[ u_t=\beta_t(v_t-v_{old}) \]
\[ S_t=S_{t-1}+k_t^Tu_t \]
其中 \(\beta_t\) 控制写入强度。直观上,这相当于:
- 在 key 指向的位置读取旧关联;
- 计算目标 value 与旧 value 的差;
- 删除旧信息并写入新信息。
因此,DeltaNet 能对某个特定关联做更精确的替换,而不是让信息无止境叠加。
Chunk-wise 并行
Delta rule 看起来是严格递归的:第 \(t\) 步依赖第 \(t-1\) 步状态,不利于 GPU prefill。DeltaNet 通过数学重参数化和 chunk-wise 算法提高并行性:
- 序列被切成大小为 \(C\) 的 chunk;
- chunk 内采用类似 masked attention 的并行矩阵运算;
- chunk 间通过固定状态递归传递信息。
两个极端是:
- \(C=N\):退化为标准 \(O(N^2)\) attention;
- \(C=1\):退化为逐 token 的 linear attention。
中间的 \(C\) 在 FLOPs 与 GPU 矩阵乘法效率之间折中。原文指出实践中常用 64 或 128,因为这类粒度更适合 tensor core。\(C=1\) 的 FLOPs 最少,但 wall-clock time 不一定最好。
4. Gated DeltaNet:在精确替换之外加入遗忘
Delta rule 能替换某个 key 对应的关联,却不擅长:
- 上下文切换时一次性清除多条旧关联;
- 让整个记忆随时间衰减;
- 主动释放有限状态中的容量。
Mamba 类更新提供了整体衰减思路:
\[ S_t=\alpha_tS_{t-1}+k_t^Tv_t \]
其中 \(0\leq\alpha_t\leq1\):
- \(\alpha_t\approx1\):保留旧状态;
- \(\alpha_t\approx0\):清空旧状态。
但统一的标量衰减会等比例遗忘所有关联,无法区分不同信息的重要性。Gated DeltaNet 因而将两者结合:
- Delta rule 负责定向替换某一关联;
- gate 负责让旧状态自适应衰减。
其本质是同时具备“写什么”和“忘多少”的能力。
5. Kimi Delta Attention:从标量遗忘到逐通道遗忘
Kimi Linear 的关键改进是将粗粒度标量 gate 变为更细粒度的逐通道 decay。也就是说,不再让整个状态按同一比例遗忘,而是让每个 channel 学习不同的衰减值。
这给固定容量记忆增加了更有针对性的容量:不同通道可以保留不同时间尺度、不同重要程度的信息。
原文将 Kimi Linear 相对 DeltaNet Transformer 的变化概括为:
- 使用 KDA 与 Multi-head Latent Attention(MLA) 交错的混合结构;
- 以 Mixture-of-Experts(MoE) 替代普通 MLP;
- 通过 alpha projection 为 DeltaNet 增加逐通道记忆控制能力。
这里的扩容不是盲目堆参数,而是把容量放到有明确功能的位置:提高对记忆衰减的控制精度。
6. Kimi K3:混合记忆、检索与稀疏容量
据原文介绍,Kimi K3 的 language backbone 包含 23 个四层 macrocycle。每个 macrocycle 中:
- 前 3 层使用 Kimi Delta Attention;
- 第 4 层使用 Multi-head Latent Attention;
- 第 1 层使用 dense FFN;
- 其余层使用 latent MoE。
相对 Kimi Linear,Kimi K3 还加入或强化了:
- 更大规模;
- 每 12 层一次的 blockwise AttnRes;
- MLA query LoRA 与 output gating;
- latent-space MoE;
- SiTU activation;
- Gated MLA。
6.1 KDA 与 MLA 为什么共存
两种机制承担不同角色:
- KDA 将历史压缩到固定大小状态,decode 高效,但必然丢失部分信息;
- MLA 保留基于 softmax 的 token 级检索,可以精确访问上下文,但成本随上下文增长。
因此,Kimi K3 不是完全用 linear attention 替代 softmax attention,而是采用混合结构:大部分层使用常量状态的 KDA,周期性插入 MLA 修复精确检索能力。
6.2 Latent MoE
传统 MoE 用 router 将 token 分配给少数专家。原文给出的 Kimi K3 配置为:
- 共 898 个专家;
- 2 个 shared experts 处理所有 token;
- 其余 896 个专家中,每个 token 选择 16 个。
MoE 增加总参数容量,但每个 token 只激活一小部分专家,从而避免计算量与总参数量同比增长。
Kimi K3 还让专家在压缩后的 latent space 中工作。原文称这种设计接近将 FLOPs 减半,并抵消新 activation 带来的部分 kernel 开销。
6.3 SiTU 与工程实现
Kimi K3 用 SiTU 替换传统 SwiGLU 路径中的激活方式。原文强调了一个重要的系统事实:架构上的数学改进不等于实际推理更快。
如果没有 fused kernel,新 activation 路径可能接近原路径的 3 倍慢;因此模型架构必须与 kernel 实现共同设计。latent-space experts 的计算压缩,就是抵消额外操作的一种方式。
7. AttnRes:沿网络深度选择性读取历史表示
普通残差流可以写成:
\[ h_l=h_1+\sum_{i=1}^{l-1}f_i(h_i) \]
其中所有前层输出以同等权重累加。这样有两个问题:
- 不同层可能需要不同类型的早期表示,但无法选择;
- 随深度增加,残差不断累积,后层需要产生更大的输出才能影响整体状态,可能造成 residual dilution、hidden-state growth 和训练不稳定。
AttnRes 为每项增加可学习权重:
\[ h_l=\alpha_0h_1+\sum_{i=1}^{l-1}\alpha_if_i(h_i) \]
权重 \(\alpha_i\) 由 query-key 点积得到,并经归一化后形成对早期 residual states 的加权组合。因此当前层不必只依赖直接前驱,而能选择性检索更早、更有用的深度表示。
Kimi K3 并非每层执行一次 AttnRes,而是在固定 block 边界应用。原文描述为每 12 层一次;23 个四层 macrocycle 共 92 层,对应 8 个 block 表示。这样在控制开销的同时,保留大部分收益。
原文给出的结果是:AttnRes 约增加 2% 推理延迟,同时带来:
- 对早期表示的选择性检索,缓解 residual dilution 与 hidden-state growth;
- 约 1.25 倍 compute advantage。
AttnRes 与 MLA 解决的是同一类问题的两个方向:
- MLA 沿序列维度检索此前 token;
- AttnRes 沿网络深度检索此前层表示。
8. 如何理解整条演进链
| 架构 | 主要收益 | 暴露的问题 | 下一步改进 |
|---|---|---|---|
| Softmax Attention + KV cache | token 级精确检索 | KV cache 随 \(N\) 增长,访存成本高 | 固定状态 |
| Linear Attention | 常量大小循环状态 | 加法写入导致关联干扰 | Delta rule |
| DeltaNet | 精确替换指定关联 | 缺少整体遗忘和上下文切换能力 | Gate / decay |
| Gated DeltaNet | 写入与整体衰减结合 | 标量衰减过于粗粒度 | 逐通道 decay |
| KDA / Kimi Linear | 精细记忆管理 | 固定状态仍会丢信息 | 周期性 MLA |
| Kimi K3 | 混合检索、稀疏容量与深度检索 | 系统复杂度与 kernel 实现要求提高 | 软硬件协同优化 |
核心洞见
1. 固定容量记忆必须有淘汰策略
只要状态维度固定,容量就一定有限。纯加法更新迟早会使不同关联互相干扰。因此模型必须学习:
- 哪些信息值得保留;
- 哪些关联应该替换;
- 何时需要衰减或清空;
- 固定状态丢失的信息应从哪里重新检索。
这也是 gate、routing、decay 和 attention 反复出现的共同原因。
2. Attention 的核心价值是选择性读取
attention 不只是一种 \(O(N^2)\) 算子,更重要的是它提供了内容寻址的 selective read:根据当前 query 选择与之相关的信息。
Kimi K3 在三个维度使用了“选择”:
- KDA 的 gate 选择保留或忘记哪些状态;
- MoE router 选择激活哪些专家;
- MLA 与 AttnRes 分别在 token 维和 depth 维选择读取哪些表示。
3. Scaling 仍然重要,但容量必须有功能位置
22580 倍参数差距并不能单独解释架构进步。原文的主张是:每一次扩容都应该针对前一代系统的明确瓶颈,例如:
- 用状态矩阵替代无限增长的 cache;
- 用 Delta rule 修复关联覆盖问题;
- 用 channel-wise decay 提升记忆控制精度;
- 用 MoE 增加稀疏容量;
- 用 MLA 和 AttnRes 补回固定状态无法保存的信息。
4. 理论 FLOPs 最低不代表实际最快
chunk size、tensor core 粒度、kernel fusion、HBM 访问和中间张量布局都会影响实际性能。因此理解现代模型不能只看公式,还要同时看:
- prefill 与 decode 的不同瓶颈;
- 计算复杂度与访存复杂度;
- GPU 是否能高效执行该算子;
- 新结构是否有成熟 fused kernel。
我的归纳
可以把 Kimi K3 看成一个多层级记忆系统:
- KDA 是工作记忆:容量固定、更新快,适合大多数 token;
- MLA 是上下文档案检索:成本更高,但能精确回看原始 token;
- AttnRes 是深度记忆检索:从早期网络层恢复被后续残差稀释的表示;
- MoE 是知识容量池:按需激活不同参数子集。
这解释了为什么最终方案是混合架构,而不是让某一种 attention 完全取代其他机制:不同机制在容量、精度、计算和访存之间有不同的 Pareto 前沿。
阅读时需要注意
- 原文是一篇个人 worklog,包含作者基于论文与实现的解释,不等同于 Kimi 官方技术报告。
- “2.8T”“898 experts”“AttnRes 开销约 2%”“1.25x compute advantage”等数字均按原文记录;严谨引用时应继续回溯 Kimi K3 官方报告或代码。
- 原文包含大量示意图和实现片段。本笔记保留了概念与关键公式,没有逐张搬运图片或逐段复制代码。
- 原文标题写作
GPT2、Kimi3,正文写作GPT-2、KimiK3;本文统一记为 GPT-2 与 Kimi K3。