8分钟阅读,聊聊长上下文背后的一场温柔妥协。
如果有人问你:”你能记住我们三个月前说过的一句话吗?”
你可能会愣一下,然后开始回忆:”好像…在某个下午…关于什么来着…”
人类的记忆本身就是有损的。我们记不住每个细节,但我们记住了那些”重要的东西”——情绪、场景、核心观点。细节会模糊,但理解还在。
Kimi的Delta Attention(KDA),其实就在做同一件事:用有损的记忆,换取理解未来的能力。
一、当上下文突破一百万
2025年,大模型的战场悄悄变了。
从”32K够不够”到”128K是不是新标准”,再到”1M上下文成常态”。大家都在拼谁能在一次对话里装下更多信息。
但问题来了:传统Attention机制是O(n²)的复杂度。每增加一个token,计算量都要跟所有历史token做一次交互。
1M上下文意味着什么?如果每层都用标准MHA,推理成本会爆炸——用户等不起,服务器也烧不起。
Kimi的选择不是”用更强的硬件硬扛”,而是”换一种记忆方式”。
二、像RNN,但不一样
初看KDA,很多人会说:”这不就是RNN吗?”
确实很像。KDA把Attention的历史信息压缩成一个固定大小的状态矩阵,跟RNN把历史压缩进隐藏状态hₜ,思路一模一样。
但有个关键区别:
RNN要一步步串行计算,训练起来极慢。KDA基于Delta Rule,配合DPLR算法,实现了训练时完全并行,推理时退化成RNN式串行。
所以它本质是”可并行训练的RNN”——继承了RNN的线性复杂度,又突破了RNN的训练效率瓶颈。
这就像你不用再从第一天开始一步步回忆,而是可以直接带着压缩好的”记忆包”继续生活。
三、信息会丢失吗?当然会
压缩必然带来损失。长序列后,早期token的位置信息会逐渐模糊。这是线性注意力的宿命。
但KDA做了三件事,把这个损失控制在一个”可接受”的范围:
第一,混合架构。
每4层中,3层用KDA线性注意力,1层用完整标准MHA。这层MHA就像”记忆锚点”,定期把被压缩丢失的细节重新捞回来。
第二,大容量状态矩阵。
不像RNN用几百维的h,KDA的状态矩阵是 d × dN(比如4096 × 65536)。容量巨大,能装下几十万token的语义信息而不溢出。
第三,门控擦除机制。
普通RNN是不断累加,旧信息会被新信息覆盖。KDA有可学习的遗忘门,能主动”忘记”过时的东西,只保留重要的。
这就像人类记忆:你记不清三个月前对话的具体措辞,但你记住了当时的情绪和结论。细节丢了,但理解还在。
四、1M上下文的现实权衡
实测效果:Kimi Linear在1M上下文场景下,比MHA快6.3倍,质量损失只有2-3%。
这个2-3%是怎么来的?
不是所有任务都完美适配。
- 长文本总结、问答、写作 → KDA很好用
- 代码补全、RAG检索、精确定位 → KDA吃力
所以KDA不是”完胜MHA的新技术”,而是”在长文本这个特定场景下,给了我们一个新的选择”。
它不追求”完全不丢信息”,而是承认”有些信息可以丢,有些不能丢”。然后用混合架构守住底线。
五、KV Cache的新玩法
传统的KV Cache是按token粒度缓存的——缓存前100个token的K和V,新请求来了直接从第101个开始。
KDA不能这么玩,因为历史被压缩进状态矩阵了,没有独立的K/V向量。
但它可以缓存状态矩阵本身:相同prefix的请求直接加载已算好的状态,增量更新就行。
每来一个新token,只需要:
- 编码当前token得到kₜ和vₜ
- 计算外积vₜ ⊗ kₜ^T
- 加到缓存的状态矩阵S_{t-1}上
不需要回看任何历史token。计算量从 O(总长度 × d²) 降到了 O(新token数 × d²)。
本质还是prefix caching,只是换了个载体——从独立的K/V向量,变成了整个状态矩阵。
六、Delta Rule的数学本质
KDA的核心更新公式其实很简单:
S_t = λ · S_{t-1} + v_t ⊗ k_t^T
- S_t 是当前时刻的状态矩阵
- S_{t-1} 是上一时刻的状态矩阵
- λ 是可学习的门控系数(控制遗忘速度)
- v_t ⊗ k_t^T 是当前token的外积
- ⊗ 是外积运算
每一步只需要当前token的k和v,就能更新状态矩阵。历史信息全部藏在S_{t-1}里。
这就是线性注意力的本质:把O(n²)的交互压缩成O(n)的状态更新。
七、训练时的DPLR并行化
你可能会问:”这不就是RNN吗?怎么并行训练?”
关键在于Delta Rule的数学性质配合DPLR(Diagonal Plus Low-Rank)算法。
训练时,KDA不逐步展开,而是把整个序列一起处理:
- 用DPLR分解把状态矩阵的更新分解成可并行的形式
- 实现O(n)复杂度的全序列并行训练
- 推理时退化成标准的Delta Rule递归更新
这是KDA的核心创新点之一:训练并行、推理串行。
八、技术对比一览
| 维度 | MHA | KDA | Mamba |
|---|---|---|---|
| 训练并行度 | ✅ 完全并行 | ✅ 完全并行(DPLR) | ❌ 串行 |
| 推理复杂度 | O(n²) | O(n) | O(n) |
| 1M上下文可行性 | ❌ 太慢 | ✅ 可行 | ✅ 可行 |
| 精确检索能力 | ✅ 最佳 | ⚠️ 中等 | ⚠️ 中等 |
| KV Cache灵活性 | ✅ 可任意切分 | ⚠️ 整存整取 | ❌ 无KV |
| 质量损失 | 无 | 2-3% | 3-5% |
KDA不是完胜MHA,而是在长文本场景下的实用折中。
九、没有万能方案
MHA太慢,Linear Attention太崩。KDA选的是中间路线:用压缩换容量,用混合换精度。
技术选型的本质从来不是”找完美方案”,而是”找到当前约束下的最优平衡点”。
1M上下文的时代,不可能再用纯MHA硬扛;纯Linear Attention又扛不住长序列的质量需求。
KDA展示了一种思路:承认不可兼得,然后聪明地折中。
十、写在最后
为什么说KDA是”温柔的妥协”?
因为它没有试图”记住一切”。它知道——有些东西,记不住了就记不住吧。
重要的是:当你需要理解未来时,过去的那些东西,对你来说还够用吗?
Kimi的答案是:够用。代价是2-3%的精度损失,换来6.3倍的速度提升。
这不是完美。但这是在现实约束下,最务实的答案。
就像人类的记忆——我们记不住所有细节,但我们还是能理解过去,继续前行。
也许,这就是技术对现实的致敬。
十一、Kimi的落地实践
Kimi Delta Attention已经在Kimi Linear 48B、Kimi Linear 3B和Kimi K3(2.8万亿参数MoE)中落地使用。
实测数据显示:
- KV Cache减少75%
- 1M上下文下6.3倍加速
- 端到端质量损失仅2-3%
开源方面,Kimi发布了FlashKDA kernel,支持vLLM和SGLang部署。
从论文到工程落地,KDA展示了”从理论到产品”的完整路径。
十二、一些开放问题
KDA也不是终点。还有很多问题在探索中:
- 状态矩阵的遗忘门训练稳定性如何?在超长序列下能不能稳定学到”该忘什么”
- 能不能动态调整KDA:MHA的比例?而非固定的3:1
- 如果某个token编码错误,会不会污染整个状态矩阵?
- 如何提高状态矩阵的共享灵活性?现在只能整存整取
技术永远在演进,今天的”最佳方案”,明天可能就是新的起点。