开发者生态
evening
你可以想出 Kimi Delta 的注意力
2026-07-28
1 阅读
约10分钟阅读
AnhTho_FR
字号:
数学符号 ⟨k|q⟩ kᵀq 关于符号的注释:本文默认使用 bra-ket 符号,因为(在我受量子启发的观点中)它使这个推导中的形状非常清晰。上面的数学符号开关使用传统的粗体向量和显式转置重写每个方程。 Bra-ket 模式下,∣ q ⟩ \lvert q\rangle ∣ q ⟩ 为列向量,⟨ k ∣ \langle k\rvert ⟨ k ∣ 为行向量,⟨ k ∣ q ⟩ \langle k\rvert q\rangle ⟨ k ∣ q ⟩ 为数字,∣ v ⟩ ⟨ k ∣ \lvert v\rangle\langle k\rvert ∣ v ⟩ ⟨ k ∣ 是一个矩阵。默认情况下,向量面向右,而写入线性注意状态时,键面向左。我们使用一个因果注意力头和实值向量,假设 DeltaNet 的键已标准化,并让状态从键空间映射到值空间。现代线性注意力变体很复杂,乍一看并不容易看出它们的设计目的。供参考的是 Kimi Delta Attention (KDA) 的状态更新方程: S ~ t = S t − 1 Diag ( α t ) \widetilde S_t = S_{t-1}\operatorname{Diag}(\alpha_t) S t = S t − 1 Diag ( α t ) ∣ v ^ t ⟩ = S ~ t ∣ k t ⟩ \lvert\widehat v_t\rangle = \widetilde S_t\lvert k_t\rangle ∣ v t ⟩ = St ∣ k t ⟩ ∣ e t ⟩ = β t ( ∣ v t ⟩ − ∣ v ^ t ⟩ ) \lvert e_t\rangle = \beta_t \left( \lvert v_t\rangle-\lvert\widehat v_t\rangle \right) ∣ e t ⟩ = β t ( ∣ v t ⟩ − ∣ v t ⟩ ) S t = S ~ t + ∣ e t ⟩ ⟨ k t ∣ S_t = \widetilde S_t+\lvert e_t\rangle\langle k_t\rvert S t = S t + ∣ e t ⟩ ⟨ k t ∣ ∣ o t ⟩ = S t ( d k − 1 / 2 ∣ q t ⟩ ) \lvert o_t\rangle = S_t\left(d_k^{-1/2}\lvert q_t\rangle\right) ∣ o t ⟩ = S t ( d k − 1/2 ∣ q t ⟩ ) 它们如此难以理解的原因是,这是过去几年开发的一系列线性注意力变体中的最新成员,其复杂性不可避免膨胀到从外部看最新的变体似乎无法访问。在这篇文章中,我们将介绍线性注意力变体的 DeltaNet 系列,其中两个被最新的 Qwen 和 Kimi 模型系列使用,并展示如何通过断言有关隐藏状态的简单事情来得出相同的方程。这就是我们将采取的路线:softmax 注意力 → 线性注意力 → DeltaNet → 门控 DeltaNet → KDA 只有在导出 KDA 后,我们才会转向执行它的循环和分块 Triton 程序。 1. 从二次注意力开始 对于 token t t t 处的查询,普通因果 Softmax 注意力为 a t i = exp ( s ⟨ k i ∣ q t ⟩ ) Σ j ≤ t exp ( s ⟨ k j ∣ q t ⟩ ) , s = d k − 1 / 2 、 ∣ ot ⟩ = Σ i ≤ t a t i ∣ vi ⟩ 。 \begin{aligned} a_{ti} &= \frac{ \exp\!\left(s\langle k_i\rvert q_t\rangle\right) }{ \sum_{j\leq t} \exp\!\left(s\langle k_j\rvert q_t\rangle\right) }, \qquad s=d_k^{-1/2},\\ \lvert o_t\rangle &= \sum_{i\leq t}a_{ti}\lvert v_i\rangle。 \end{对齐} a t i ∣ o t ⟩ = Σ j ≤ t exp ( s ⟨ k j ∣ q t ⟩ ) exp ( s ⟨ k i ∣ q t ⟩ ) , s = d k − 1/2 , = i ≤ t Σ a t i ∣ v i ⟩ 。 每个注意力权重都是一个标量。它测量一个键和一个查询之间的相似度,然后 softmax 将该查询的所有分数转换为分布。输出是值向量的加权和。在长度为 T T T 的序列上,存在 T 2 T^2 T 2 个密钥查询对。在自回归推理期间,我们可以缓存键和值而不是重新计算它们,但缓存仍然随着序列而增长,并且每个新查询仍然必须检查整个历史记录。重新安排此计算的障碍是 softmax。它的分母共同取决于当前查询和每个较早的键。因此,暂时将其删除。 1.1 删除softmax 为了清楚起见,将常数尺度s s s 吸收到查询中。故意的简单版本的注意力是 ∣ ot ⟩ = Σ i ≤ t ⟨ k i ∣ q t ⟩ ∣ vi ⟩ 。 \lvert o_t\rangle = \sum_{i\leq t} \langle k_i\rvert q_t\rangle \lvert v_i\rangle。 ∣ o t ⟩ = i ≤ t Σ ⟨ k i ∣ q t ⟩ ∣ vi ⟩ .标量内积可以向右移动: ∣ o t ⟩ = Σ i ≤ t ∣ vi ⟩ ⟨ k i ∣ q t ⟩ = ( Σ i ≤ t ∣ vi ⟩ ⟨ k i ∣ ) ∣ q t ⟩ 。 \begin{对齐} \lvert o_t\rangle &= \sum_{i\leq t} \lvert v_i\rangle \langle k_i\rvert q_t\rangle\\ &= \left( \sum_{i\leq t} \lvert v_i\rangle\langle k_i\rvert \right) \lvert q_t\rangle。 \end{对齐} ∣ o t ∣ vi ⟩ ⟨ k i ∣ ) ∣ q t ⟩ . 依赖于过去的所有内容现在都可以收集到一个固定大小的矩阵中 V × K V \times K V × K : S t = Σ i ≤ t ∣ vi i ⟩ ⟨ k i ∣ \boxed{ S_t = \sum_{i\leq t} \lvert v_i\rangle\langle k_i\rvert } S t = i ≤ t Σ ∣ v i ⟩ ⟨ k i ∣ 并且注意力变成了循环写入,然后是读取: St t = St − 1 + ∣ v t ⟩ ⟨ k t ∣ , ∣ o t ⟩ = S t ∣ q t ⟩ 。 \boxed{ \begin{aligned} S_t &= S_{t-1} + \lvert
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱