22580 倍不是重点,重点是每次架构升级都在修同一个坑

一个博主花了 48 小时读 Kimi K3 的建模代码和外加的 8 篇论文,不是为了写评测,是想搞清楚一件事:从 2019 年 GPT-2 到 2026 年的 Kimi K3,参数从 1.24 亿涨到 2.8 万亿,差了 22580 倍——但这真的只是规模变大了吗?ali@waterloo_intern 在 X 上发的这条 thread 我翻了一遍,发现他真正在追问的是每次架构升级到底解决了什么具体瓶颈,什么没变。

先建立体感。GPT-2 Small,1.24 亿参数,12 层 transformer,12 个注意力头,嵌入维度 768。典型 decoder-only 结构,输入先叠 token 嵌入和位置嵌入,然后过残差块,最后 lm_head 出 logits。没有 KV Cache,每一步解码都为整个序列重算一次。Kimi K3,2.8 万亿参数,MoE 架构,23 个四层宏循环,前三层用 Kimi Delta Attention,第四层用多头潜在注意力(MLA)。898 个专家,其中 2 个共享,每 token 激活 16 个,上下文窗口 100 万 token。22580 倍。博主的判断:新增的容量不是盲目堆上去的,每一次架构升级都对应一个明确的计算瓶颈。

GPT-2 时代的生成方式在今天看来有点原始。每一步解码重新计算整个序列的 Q/K/V,然后只用最后一个位置的 logits 选下一个 token,大量计算反复执行同一件事。KV Cache 解决的正是这个——把前面所有 token 的 K 和 V 存下来,新 token 来了只算自己的投影,再拼进去。这是个纯工程优化,但它让自回归生成从理论变成了可用的东西。代价是 KV Cache 随序列长度线性增长,100 万 token 上下文时,KV Cache 本身就能吃掉大量显存。所以后续的架构探索,问的都是同一个问题:能不能把缓存变成固定大小的?

纯累加式线性注意力的做法类似一个加法器,每个新 token 的 K 和 V 直接累加到一个固定大小的 D×D 状态矩阵里。好处是缓存不再随序列增长,坏处是新旧信息叠在一起,谁也找不回来。DeltaNet 引入了 Delta Rule:写入新信息之前,先用当前 Key 从缓存里读一次,看看这个位置原来存了什么,然后只把「新值减旧值」的差值写进去。这样一来就能精确替换某一个知识点而不影响其他内容,代价是它只会精确替换,不会遗忘。上下文切换时,旧信息还堆在那里。

Gated DeltaNet 把 Mamba 的门控机制和 Delta Rule 结合起来,每个时间步引入一个 0 到 1 之间的标量控制旧状态的衰减程度。接近 1 就是纯 Delta Rule,接近 0 记忆几乎清零。模型既能精确更新某一条关联,又能让整块记忆在需要的时候衰减。

Kimi K3 把思路推到了极致。它的 KDA 层提供固定大小的递归记忆,不随序列增长膨胀;MLA 层周期性插入,保留基于完整上下文的 Softmax 检索能力——有些信息 KDA 存不住,需要回头看原始序列;MoE 把 898 个专家塞进压缩后的潜在空间,FLOPs 几乎减半;AttnRes 每 12 层做一次深度方向的选择性检索,让靠后的层不用盲目放大输出幅度才能影响残差流。博主的总结:Kimi K3 没有创造新的计算范式,它把固定状态的递归记忆、周期性的 Softmax 检索、稀疏专家容量、深度方向的选择性访问这四种检索机制拼到了同一个系统里。每次增加容量,都投到了一个明确的功能缺陷上。

读完那 8 篇论文,有一个观察值得记住:任何固定容量的关联记忆系统都必须学会遗忘或淘汰。纯累加会饱和,饱和就会干扰。所以需要门控、路由、衰减——让模型自己决定哪些信息值得保留。从 1.24 亿到 2.8 万亿,变的不是这个基本矛盾,只是解决手段从粗暴的加法变成了精确的替换加选择性遗忘。

ali 的完整分析可以看他的 X thread:第一篇 | 第二篇


参考:https://www.allhereai.com/news/892