DeltaNet Explained (Part I)

DeltaNet explained Songlin Yang Part 1

Linear Attention

Get rid of the softmax:

\[(QK^T)V\]

for token \(t\), writing out the summation

\[\sum_{j=1}^t v_j (k_j^T q_t) = \sum_{j=1}^t (v_j k_j^T) q_t\]

So you can define the running \(S_t = \sum_{j=1}^t v_jk_j^T\) and have the update rule \(S_t = S_{t-1} + v_tk_t^T\) and not have a KV-cache, just a fixed \(d^2\) size state.

DeltaNet

Linear attention kind of sucks at associative recall

You can think of the state \(S_t\) as a key-value store, such that ideally \(S_t k_t = v_t\).

One good interpretation of DeltaNet is that on each successive token, it’s taking a gradient step wrt \(S\) to minimize \(L_t(S) = \frac{1}{2} \lVert S k_t - v_t \rVert^2\):

\[\nabla L_t(S) = (Sk_t - v_t)k_t^T\] \[S_t = S_{t-1} - \eta_t (S_{t-1}k_t - v_t)k_t^T\]

and somehow this is much better at associative recall