Kimi Delta Attention in one page: the recurrence, every symbol, and the design choices that separate it from its ancestors.
The recurrence
S_t = (I − β_t k_t k_tᵀ) · Diag(α_t) · S_{t−1} + β_t k_t v_tᵀ
└──────┬───────┘ └────┬────┘ └──┬──┘ └────┬────┘
② ERASE ① FADE old state ③ WRITE
õ_t = S_tᵀ q_t READ — one matvec, no history scan
§2.1.1, eq. 1 of the technical report. Order of operations: fade the old state channel-by-channel, erase what the current key already retrieves, then write the new association.
Every symbol
Symbol
Shape
What it is
S_t
d_k × d_v
The recurrent state. A memory matrix mapping keys to values. Fixed size regardless of sequence length.
q_t, k_t
d_k
Query and key. Both pass through ShortConv → Swish → L2Norm.
v_t
d_v
Value. ShortConv → Swish, no L2Norm.
α_t
d_k
Per-channel retention factor, in (e−5, 1). The fade. Each channel decays at its own rate.
β_t
scalar
Write strength, in (0,1). How firmly this token commits its value.
z_t
d_k
Decay logits, from a low-rank projection plus per-head bias. Becomes α via eq. 5.
§2.1.1, eq. 2. ShortConv gives each projection a small local receptive field before the recurrence. L2Norm on q and k bounds the erase term.
The output gate
y_t = W_o [ Sigmoid(W_g x_t) ⊙ RMSNorm(õ_t) ]
§2.1.1, eq. 6. K3 changed this from Kimi Linear's low-rank gate to an input-dependent full-rank projection. Head-wise RMSNorm is applied to the recurrent output before gating.
Lower-bounded decay — the g_min trick
Kimi Linear
Kimi K3
Mapping
g = −e^A · Softplus(z)
g = g_min · Sigmoid(e^A z)
Range of g
(−∞, 0)
(−5, 0)
Min retention α
unbounded below
e−5 ≈ 6.7 × 10−3
Cumulative log-decay per 16-token tile
unbounded
(−80, 0)
Reciprocal rescale factor
can overflow BF16
< e80, inside BF16 range
Diagonal tiles computed by
explicit position-pair path
dense Tensor Core matmul
Why this is the whole point
The chunkwise form rescales keys by 1/Γ, a reciprocal of accumulated decay. Unbounded decay means that reciprocal can overflow in BF16, which forced Kimi Linear to handle diagonal tiles on a slow special-case path. Bounding the log-decay below at −5 caps the reciprocal at e80, inside BF16 range, so every tile can use dense Tensor Core matrix multiplication. A constant chosen for numerics deleted an entire slow code path.
§2.1.1, eqs. 3–4. Recurrent across chunks, parallel within each chunk. This is what makes a sequential recurrence trainable on a GPU. Tril keeps the diagonal because each output reads the state after the current token's update. The UT transform and full derivation live in the Kimi Linear paper.