Kimi Delta Attention:推导、实现与社区反馈

Kimi Delta Attention:推导、实现与社区反馈

Kimi Delta Attention 基于 DeltaNet 并实现了每通道遗忘

Kimi Delta Attention(KDA)保留了 DeltaNet 的 delta‑rule 写入方式,但将标量保持门 αₜ 替换为向量 αₜ ∈ [0,1]^{dₖ},并以对角矩阵 Dₜ = Diag(αₜ) 的形式应用。这使得每个 key 通道可以独立地被遗忘或保留,而 Gated DeltaNet 对整个状态只使用单一的 αₜ。其余递推过程——预测、校正、写入和读取——保持不变。

推导从 softmax 注意力到 KDA 的三步过程

从因果 softmax 注意力出发,去除 softmax 得到线性注意力,其状态为 Sₜ = Σ_{i≤t} |v_i⟩⟨k_i|。认识到更新行为类似于 +=,DeltaNet 引入误差驱动写入 eₜ = βₜ(|v_t⟩ − S_{t−1}|k_t⟩),使得 Sₜ = S_{t−1} + eₜ⟨k_t|。Gated DeltaNet 在 delta 更新之前加入全局遗忘因子 αₜSₜ = αₜ S_{t−1} + βₜ(|v_t⟩ − αₜ S_{t−1}|k_t⟩)⟨k_t|。KDA 通过将 αₜ 设为对角矩阵实现每通道遗忘:Sₜ = S_{t‑1} Dₜ + βₜ(|v_t⟩ − S_{t‑1} Dₜ|k_t⟩)⟨k_t|

高效执行可使用融合递归内核或分块内核

对于自回归解码,融合递归 Triton 内核一次处理一个 token:

state *= exp(g_t)[:,None]
prediction = sum(state * k_t[:,None], axis=0)
residual = β_t * (v_t - prediction)
state += k_t[:,None] * residual[None,:]
output = sum(state * (q_t * SCALE)[:,None], axis=0)

对于训练和长预填,分块实现将相同的递推重新组织为矩阵乘法,计算临时误差、通过三角求解恢复因果依赖、快速前进状态并产生因果输出——全部在不形成稠密逆矩阵的情况下完成,因为 I+R_c 为单位对角的三角矩阵。

社区反馈凸显了推导的清晰度以及事后谦逊的态度

许多评论者赞赏在 bra‑ket 与传统数学记号之间的切换,认为这让形状和操作更清晰。有人写道:“I like the math vs physics toggle.” 另一位指出:“The toggle is really useful. Liked it!!” bra‑ket 的选择被描述为一种免责声明,最终帮助了理解:“You know its a doozy when the author writes a disclaimer at the top saying that bra‑ket notation was chosen in order to make the algorithm and data structures clearer.” 多位读者表示他们自己不可能发明该方法,例如:“after a cursory read, I can confidently say I could not, in fact, have come up with Kimi Delta Attention” 与 “Now way I could have come up with Kimi Delta Attention.” 有人观察到事后看来该方案显而易见,呼应了 “Egg of Columbus” 的想法:“Anyone could've done that! You never said we could break the egg!” 少数人质疑文章是否由 LLM 生成,引用身份解释作为线索。还有人欣赏逐步推导的增量方式,称其让复杂主题“way more understandable”。也有人请求对符号如 dₖ 的复习,表明虽然记号有帮助,但仍希望获得更多维度背景信息。

Kimi Delta Attention 提供了概念上简单却有效的线性注意力扩展

通过将标量保持提升为每通道对角矩阵,KDA 解决了 Gated DeltaNet 中所有通道共享同一遗忘率的限制。得到的状态更新仍是对角加低秩操作,既支持低延迟递归解码,又适用于高吞吐量的分块训练。文章从 softmax 注意力经 DeltaNet、Gated DeltaNet 到 KDA 的完整推导,为许多读者提供了一条易于理解的路径,即便他们承认自己不会独立得出该方案。

Sources