0. 出发点:固定大小的记忆
KDA(Kimi Delta Attention)是 Kimi K3 里负责长序列的那 69 层(总共 93 层)。它要解决的问题是把随序列线性膨胀的 KV cache 换成一个固定大小的状态矩阵:O(n⋅d) 变 O(d2),上下文翻倍时状态大小不变。
代价是这个 dk×dv 的矩阵要承载任意长度的序列,记忆必须可写、可改、可遗忘。演进路线就是一步步补齐这三件事:
- 线性注意力:St=St−1+ϕ(kt)vt⊤,只能累加(同一个 key 写两次读出的是叠加,即记忆碰撞);
- Mamba-2:加标量衰减门 St=αtSt−1+ktvt⊤,会遗忘但衰减全局统一;
- DeltaNet:改为差值写入 St=(I−βtktkt⊤)St−1+βtktvt⊤,支持定点改写;
- GDN:两者结合 St=αt(I−βtktkt⊤)St−1+βtktvt⊤;
- KDA:把标量门拆成逐通道门 Diag(αt),各维度独立决定衰减速度,并加数值下界。
线性注意力与 SSM 两条路线的推导见前置篇《线性注意力与 SSM:两条技术路线的完整推导》,本文直接用其结论。
记号约定:两套写法互为转置
文献里状态矩阵有两种摆法,内容等价、互为转置,混用会让推导看起来「中途换了个式子」:
|
主约定(与 KDA 论文一致) |
转置约定(chunkwise 推导常用) |
| 状态形状 |
St∈Rdk×dv |
S^t∈Rdv×dk |
| 读出 |
ot=St⊤qt |
ot=S^tqt |
| 写入项 |
ktvt⊤ |
vtkt⊤ |
| 擦除算子 |
左乘 (I−βtktkt⊤)St−1 |
右乘 S^t−1(I−βtktkt⊤) |
关系就是一次转置 S^t=St⊤。由于擦除算子 Ht=I−βtktkt⊤ 对称,转置可以直接穿过它。后文若看到 kv⊤ 与 vk⊤ 互换、擦除算子从左跑到右,那是切换了约定,不是等式变了。