Kimi K3:linear attention 这条路,Kimi 走下去了
Kimi K3 发布后,大家的注意力似乎都在 2.8T 的参数、到底蒸没蒸 Fable 上。
抛开这些,从 K2 一路追过来,真心觉得难能可贵的是,Kimi 在核心模型架构上仍然坚持走自己的技术路线,敢于 make a bet,也愿意为这个 bet 持续投入和付出。
现在大家都知道 attention 是 LLM 的核心机制。K3 在 attention 上的核心优化之一,就是大规模使用了 Kimi 提出的 Kimi Delta Attention(KDA)。
去年 Kimi 提出 KDA 时,更多还是技术路线上的一次 make a bet;而到了 K3,已经直接把 KDA 大规模应用在 2.8T 参数的模型上了。
Linear attention 到底在解决什么
KDA 实际上是 linear attention 这条路线的持续改进。而 linear attention 要解决的,就是模型一旦进入 long context 和长时间 Agent 任务,full attention 的 KV Cache 会吃掉越来越多的显存和带宽,导致 context 越长,模型越慢、越贵。
Full attention 会把前面所有 token 对应的 K/V 都存下来,用到的时候再回去找;linear attention 则是在读到信息时,直接把它压缩进一个固定大小的 state 里。无论 context 多长,这个 state 都不会继续变大。
所以简单来讲,linear attention 让大部分 attention 层生成下一个 token 的成本,不再随着上下文变长而增长。
但它的代价也很明显:既然 state 大小固定,就一定不可能什么都记住,这相当于对信息做了一次有损的压缩。于是问题从“怎么找到信息”,变成了“哪些信息应该记住,哪些信息应该忘掉”。
模型到底应该怎么“忘记”
Linear attention 过去几年的迭代,某种程度上一直在解决一个问题:模型到底应该怎么“忘记”。而 KDA,则是 Kimi 目前给出的答案。
为了更好理解,可以简单按“代际”来分:
- 朴素 linear attention:只会不断往 state 里叠加信息,什么都不会删,最后 state 越来越脏;
- DeltaNet:开始可以用新信息修正同一个 key 下的旧信息;
- Gated DeltaNet:加入了遗忘,但一个 head 里的所有信息只能按照相同的速度一起遗忘;
- KDA:把遗忘进一步细化到了每个维度,让不同类型的信息可以拥有不同的保留时长。可以简单理解为,句法、指代这种短期信息忘得快一点,实体、定义这种长期信息保留得更久。
所以整个演进过程大概就是:
只会记 → 会覆盖 → 会忘 → 知道不同的信息应该忘得有快有慢。
是不是有种通过改进 attention 来攻克人类记忆机制的即视感。
KDA 为什么不再需要 RoPE
另外一个很有意思的点是,KDA 层连 RoPE 位置编码都不需要了。
Full attention 仅靠内容相似度,无法区分已经看到的历史 token 之间的相对位置,所以通常需要额外加入位置编码,让模型知道谁在前、谁在后、相隔多远。
但 KDA 的 state 是按照 token 顺序不断更新的。越早写进去的信息,走到当前 token 时经历的衰减就越多。这种按顺序更新、沿途衰减的过程,本身已经隐式带上了先后和距离信息,而且还会根据内容动态变化,每个维度也可以不同。
换句话说,KDA 把位置信息也内化进了模型的记忆和遗忘机制里。
当然,K3 实际采用的是 3 层 KDA + 1 层 MLA 的混合架构,仍然保留了少量 full attention 来做精确检索,也没有为了技术路线的“纯粹性”把 full attention 全部干掉。
回过头来看,KDA 从论文中的一次技术探索,到真的被 scale 到 2.8T 参数的模型上,这个过程本身,比结果更有意义。
它真切地反映了 Kimi 不断提及的 taste 到底是什么:选择相信什么,敢于 make a bet,一步一个脚印,能坚持走下去,直到在无人区留下一条自己的路。