The Key to Going Linear: Analysis-Driven Transformer Linearization
By Anna Kuzina, Paul N. Whatmough, Babak Ehteshami Bejnordi
"This paper identifies that delta-style state updates (key-dependent orthogonal projections) are crucial for linearizing transformers, and introduces sink tokens, short convolutions, and fixed-budget cache routing to close the gap with full attention."
Abstract
The quadratic cost of causal self-attention severely bottlenecks long-context transformer inference. While numerous post hoc linearization pipelines exist, it is difficult to identify which components preserve model quality. This work isolates the effect of state update design in a strict frozen-backbone regime. We show that softmax relies on key-dependent, rank-1 orthogonal projections, elucidating why delta-style networks outperform purely gated accumulation. We identify a potential source of approximation errors and introduce structural interventions, specifically sink tokens, short convolutions, and fixed-budget cache routing, which reduces the remaining gap. We scale this linearization approach across LLaMA and Qwen models up to 32B parameters, outperforming prior post hoc baselines on MMLU and matching the long-context retrieval of complex adaptive-caching frameworks.
Technical Analysis & Implementation
Core Methodology§
The paper aims to linearize pretrained transformers (frozen backbone) by replacing softmax attention with a linear attention mechanism. The key insight is that softmax implicitly computes a rank-1 orthogonal projection of the value vectors, conditioned on the query. This is formalized as:
$$ \text{softmax}(QK^\top)V = \sum_{i} a_i v_i, \quad a_i = \frac{\exp(q^\top k_i)}{\sum_j \exp(q^\top k_j)} $$
The authors show that this can be approximated by a linear state update if the state is updated with a delta rule (akin to a linear gating with key-dependent orthogonal projections). In contrast, purely gated accumulation (e.g., linear attention with cumulative sum) fails to capture the dynamic reweighting of softmax.
They identify two sources of approximation error: (1) non-stationary token representations due to layer norms and residual connections, and (2) the need for unbounded memory state. To mitigate these, they introduce three structural interventions:
- Sink tokens: Additional learnable tokens that absorb attention mass and stabilize the state.
- Short convolutions: A 1D causal convolution applied to key and value sequences before linearization, smoothing out local context.
- Fixed-budget cache routing: A mechanism to bound the state size by routing tokens to a fixed number of buckets, ensuring O(1) memory per layer.
Implementation Details§
Given a frozen transformer with softmax attention, they replace it with:
$$ \text{State}_t = \text{State}_{t-1} + \Delta(\text{State}_{t-1}, k_t, v_t) $$
where $\Delta$ is either a gated accumulation or a delta rule. The delta rule is:
$$ \Delta S = (v_t - S_{t-1}\phi(k_t)) \otimes \phi(k_t) $$
with $\phi$ a kernel feature map (here, simply identity). Sink tokens are prepended to the sequence as learned embeddings. Short convolutions are applied per channel with kernel size 3. Cache routing uses a fixed number of slots (e.g., 64) and routes each token to the nearest slot via learned keys.
Code Snippet§
import torch
import torch.nn as nn
class LinearAttentionLayer(nn.Module):
def __init__(self, d_model, num_sinks=1, conv_kernel=3, num_slots=64):
super().__init__()
self.sink_tokens = nn.Parameter(torch.randn(1, num_sinks, d_model))
self.short_conv = nn.Conv1d(d_model, d_model, kernel_size=conv_kernel, padding=conv_kernel-1, bias=False)
self.state = None
self.num_slots = num_slots
self.slot_keys = nn.Parameter(torch.randn(num_slots, d_model))
def forward(self, q, k, v, cache=None):
# Add sink tokens
batch_size = q.shape[0]
sinks = self.sink_tokens.expand(batch_size, -1, -1)
k = torch.cat([sinks, k], dim=1)
v = torch.cat([sinks, v], dim=1)
# Short convolution (apply on last dim)
k = self.short_conv(k.transpose(1,2)).transpose(1,2)[:, :-self.short_conv.padding[0], :]
v = self.short_conv(v.transpose(1,2)).transpose(1,2)[:, :-self.short_conv.padding[0], :]
# Fixed-budget cache routing
# Simplified: assign each token to nearest slot, then accumulate
# For brevity, assume state is maintained externally
output = []
for t in range(q.shape[1]):
# delta update
state = cache if cache is not None else torch.zeros(batch_size, self.num_slots, v.shape[-1], device=q.device)
# Compute routing weights
scores = torch.matmul(k[:, t:t+1, :], self.slot_keys.T) # (B, 1, num_slots)
weights = torch.softmax(scores, dim=-1)
# Update state: delta rule
state = state + torch.matmul(weights.transpose(1,2), (v[:, t:t+1, :] - state))
# Attend using state
out = torch.matmul(q[:, t:t+1, :], state.transpose(1,2)) # simplified
output.append(out)
return torch.cat(output, dim=1), stateResults§
The approach is scaled to LLaMA and Qwen models up to 32B parameters. It outperforms prior post hoc linearization baselines on MMLU and achieves long-context retrieval accuracy comparable to complex adaptive-caching frameworks (e.g., Infini-Attention).
Interactive LLM Token & Cost Calculator
Estimate token usage and model pricing. Enter your prompt below to see how it is parsed into tokens and calculate the exact API cost for different providers.
Cost Breakdown (USD)
API Pricing Comparison (per Million Tokens)
| Model | Input | Output |
|---|---|---|
| GPT-5.5 Pro | $30.00 | $180.00 |
| GLM 4.7 Flash | $0.06 | $0.40 |
| Claude Haiku 4.5 | $1.00 | $5.00 |
| GPT-5.2-Codex | $1.75 | $14.00 |
| DeepSeek V3.1 | $0.21 | $0.79 |
| Mistral Medium 3.1 | $0.40 | $2.00 |
| MiniMax M1 | $0.40 | $2.20 |
| Gemini 2.5 Flash | $0.30 | $2.50 |
| o3 Pro | $20.00 | $80.00 |
| Gemini 2.5 Pro Preview 06-05 | $1.25 | $10.00 |
| GPT-4o-mini | $0.15 | $0.60 |
| Qwen Plus 0728 (thinking) | $0.26 | $0.78 |
| Claude Opus 4 | $15.00 | $75.00 |
| o4 Mini | $1.10 | $4.40 |
| Claude Sonnet 5 | $2.00 | $10.00 |
| GPT-4.1 Mini | $0.40 | $1.60 |
| Claude Opus 4.8 | $5.00 | $25.00 |
| Claude Opus 4.7 | $5.00 | $25.00 |
| Claude Opus 4.6 | $5.00 | $25.00 |
| Claude Opus 4.7 (Fast) | $30.00 | $150.00 |
| o1 | $15.00 | $60.00 |
| GPT-4o (2024-11-20) | $2.50 | $10.00 |
| Gemini 3.1 Flash Lite | $0.25 | $1.50 |
| Claude Opus 4.5 | $5.00 | $25.00 |
| GLM 4.5V | $0.60 | $1.80 |
| GPT-5 Chat | $1.25 | $10.00 |
| GPT Chat Latest | $5.00 | $30.00 |
| GPT-5 Nano | $0.05 | $0.40 |
| Mistral Large 2407 | $2.00 | $6.00 |
| Claude Sonnet 4.6 | $3.00 | $15.00 |
| gpt-oss-120b | $0.03 | $0.15 |
| DeepSeek V3 0324 | $0.24 | $0.90 |
| o1-pro | $150.00 | $600.00 |
| Mistral Small 3.1 24B | $0.35 | $0.56 |
| MoonshotAI Kimi Latest | $0.65 | $3.41 |
| Google Gemini Flash Latest | $1.50 | $9.00 |
| GPT-5 Mini | $0.25 | $2.00 |
| gpt-oss-20b | $0.03 | $0.14 |
| Claude Opus 4.1 | $15.00 | $75.00 |
| Qwen2.5 7B Instruct | $0.04 | $0.10 |
| Llama 3.2 3B Instruct | $0.05 | $0.33 |
| Gemini 2.5 Pro | $1.25 | $10.00 |
| Mistral Nemo | $0.02 | $0.03 |
| Llama 4 Scout | $0.10 | $0.30 |
| Llama 4 Maverick | $0.15 | $0.60 |
| GPT-4o-mini (2024-07-18) | $0.15 | $0.60 |
| ERNIE 4.0 | $1.20 | $2.40 |
| Qwen2.5 72B Instruct | $0.36 | $0.40 |
| Command R (08-2024) | $0.15 | $0.60 |
| Llama 3.2 11B Vision | $0.34 | $0.34 |
| Command R+ | $2.50 | $10.00 |
| Mistral Large | $2.00 | $6.00 |
| GPT-3.5 Turbo (older v0613) | $1.00 | $2.00 |
| Grok 4.3 | $1.25 | $2.50 |
| DeepSeek V4 Pro | $0.43 | $0.87 |
| GPT-4o (2024-05-13) | $5.00 | $15.00 |
| Llama 3 8B Instruct | $0.14 | $0.14 |
| Mixtral 8x22B Instruct | $2.00 | $6.00 |
| GPT-4 Turbo Preview | $10.00 | $30.00 |
| Claude 3 Haiku | $0.25 | $1.25 |
| DeepSeek V4 Flash | $0.09 | $0.18 |
| Qwen3 30B A3B Instruct 2507 | $0.05 | $0.19 |
| MiniMax M2.7 | $0.18 | $0.72 |
| GPT-5.4 Nano | $0.20 | $1.25 |
| Mistral Small 3 | $0.07 | $0.20 |
| GLM 4.5 Air | $0.13 | $0.85 |
| Qwen3 Coder 480B A35B | $0.22 | $1.80 |
| UI-TARS 7B | $0.10 | $0.20 |
| Hunyuan A13B Instruct | $0.14 | $0.57 |
| GPT-5.5 | $5.00 | $30.00 |
| Mistral Small 4 | $0.15 | $0.60 |
| GLM 5 Turbo | $1.20 | $4.00 |
| GPT-5 | $1.25 | $10.00 |
| o3 Mini | $1.10 | $4.40 |
| GPT-4o | $2.50 | $10.00 |
| Doubao Pro | $0.80 | $1.60 |
| Mistral Large 2 | $0.60 | $1.80 |
| Claude Fable 5 | $10.00 | $50.00 |
| Qwen3.7 Plus | $0.32 | $1.28 |
| Qwen3 30B A3B Thinking 2507 | $0.13 | $1.56 |
| Mistral Small 3.2 24B | $0.07 | $0.20 |
| Gemma 3n 4B | $0.06 | $0.12 |
| Gemini 2.5 Pro Preview 05-06 | $1.25 | $10.00 |
| MiniMax M3 | $0.30 | $1.20 |
| Step 3.7 Flash | $0.20 | $1.15 |
| Claude Opus 4.8 (Fast) | $10.00 | $50.00 |
| Qwen3.7 Max | $1.25 | $3.75 |
| Step 3.5 Flash | $0.10 | $0.30 |
| Kimi K2.5 | $0.38 | $2.02 |
| o3 | $2.00 | $8.00 |
| Gemini 3.5 Flash | $1.50 | $9.00 |
| GLM 5V Turbo | $1.20 | $4.00 |
| Grok 4.20 Multi-Agent | $1.25 | $2.50 |
| GPT-5 Image Mini | $2.50 | $2.00 |
| Gemini 3.1 Pro | $2.00 | $12.00 |
| Gemini 3.1 Flash | $0.25 | $1.50 |
| DeepSeek V3.2 | $0.23 | $0.34 |
| Nano Banana Pro (Gemini 3 Pro Image Preview) | $2.00 | $12.00 |
| GPT-5.1 | $1.25 | $10.00 |
| Llama 3.3 70B Instruct | $0.10 | $0.32 |
| Mistral Large 3 | $0.50 | $1.50 |
| Command R | $0.15 | $0.60 |
| Grok 4.20 | $1.25 | $2.50 |
| Grok 4.20 | $1.25 | $2.50 |
| DeepSeek R1 | $0.70 | $2.50 |
| Qwen 2.5-Coder 32B | $0.35 | $0.70 |
| Yi-Lightning | $0.15 | $0.30 |
| GPT-5.4 Mini | $0.75 | $4.50 |
| Seed-2.0-Mini | $0.10 | $0.40 |
| Qwen3.5-122B-A10B | $0.26 | $2.08 |
| Qwen3.5-Flash | $0.07 | $0.26 |
| Qwen Plus 0728 | $0.26 | $0.78 |
| Qwen3 235B A22B Thinking 2507 | $0.15 | $1.50 |
| Seed-2.0-Lite | $0.25 | $2.00 |
| GPT-5.1 Chat | $1.25 | $10.00 |
| Mixtral 8x22B | $0.50 | $1.00 |
| Qwen3.5 397B A17B | $0.39 | $2.45 |
| MiniMax M2.5 | $0.12 | $0.48 |
| GPT-5.1-Codex | $1.25 | $10.00 |
| Kimi K2 0711 | $0.57 | $2.30 |
| Llama 3.1 405B | $0.80 | $0.80 |
| Nano Banana 2 (Gemini 3.1 Flash Image) | $0.50 | $3.00 |
| GPT-5.1-Codex-Max | $1.25 | $10.00 |
| Ministral 3 14B 2512 | $0.20 | $0.20 |
| Llama 3.1 8B | $0.04 | $0.04 |
| GPT-4.1 | $2.00 | $8.00 |
| Ministral 3 8B 2512 | $0.15 | $0.15 |
| Ministral 3 3B 2512 | $0.10 | $0.10 |
| Mistral Medium 3 | $0.40 | $2.00 |
| MiniMax M2 | $0.26 | $1.02 |
| Qwen3 VL 32B Instruct | $0.10 | $0.42 |
| Qwen3 VL 8B Instruct | $0.12 | $0.46 |
| GPT-5 Image | $10.00 | $10.00 |
| GPT-4.1 Nano | $0.10 | $0.40 |
| Llama 4 Maverick | $0.15 | $0.60 |
| Hunyuan Pro | $0.60 | $1.20 |
| Grok 4.5 | $2.00 | $6.00 |
| Google Gemini Pro Latest | $2.00 | $12.00 |
| Qwen3.6 35B A3B | $0.14 | $1.00 |
| Qwen3.6 Max Preview | $1.04 | $6.24 |
| Hy3 preview | $0.06 | $0.21 |
| Qwen 2.5 72B | $0.40 | $0.80 |
| Nano Banana 2 (Gemini 3.1 Flash Image Preview) | $0.50 | $3.00 |
| Claude Sonnet 4.5 | $3.00 | $15.00 |
| GPT-5.4 Image 2 | $8.00 | $15.00 |
| Claude Opus Latest | $5.00 | $25.00 |
| Kimi K2.6 | $0.65 | $3.41 |
| GLM 5.1 | $0.97 | $3.04 |
| Gemma 4 26B A4B | $0.06 | $0.33 |
| Qwen3.5-35B-A3B | $0.14 | $1.00 |
| o3 Deep Research | $10.00 | $40.00 |
| o4 Mini Deep Research | $2.00 | $8.00 |
| R1 0528 | $0.50 | $2.15 |
| Llama Guard 4 12B | $0.18 | $0.18 |
| Qwen3 30B A3B | $0.12 | $0.50 |
| Qwen3 8B | $0.12 | $0.46 |
| Gemma 3 4B | $0.05 | $0.10 |
| Gemma 4 31B | $0.12 | $0.35 |
| Qwen3.6 Plus | $0.33 | $1.95 |
| Qwen3.5-9B | $0.10 | $0.15 |
| GLM 4.7 | $0.40 | $1.75 |
| Gemini 3 Flash Preview | $0.50 | $3.00 |
| GPT-5.2 Chat | $1.75 | $14.00 |
| Nano Banana (Gemini 2.5 Flash Image) | $0.30 | $2.50 |
| Qwen3 VL 30B A3B Thinking | $0.13 | $1.56 |
| Qwen3 VL 30B A3B Instruct | $0.13 | $0.52 |
| Claude 3.5 Sonnet v2 | $3.00 | $15.00 |
| Gemini 2.0 Flash | $0.10 | $0.40 |
| GPT-5.4 Pro | $30.00 | $180.00 |
| GPT-5.4 | $2.50 | $15.00 |
| GPT-5 Pro | $15.00 | $120.00 |
| GLM 4.6 | $0.43 | $1.74 |
| Qwen3 Max | $0.78 | $3.90 |
| GLM 5.2 | $0.93 | $3.00 |
| GPT-5.3 Chat | $1.75 | $14.00 |
| Gemini 3.1 Flash Lite Preview | $0.25 | $1.50 |
| Qwen3.5-27B | $0.20 | $1.56 |
| Gemini 3.1 Pro Preview Custom Tools | $2.00 | $12.00 |
| GPT-5.3-Codex | $1.75 | $14.00 |
| Gemini 3.1 Pro Preview | $2.00 | $12.00 |
| Qwen3.5 Plus 2026-02-15 | $0.26 | $1.56 |
| GLM 5 | $0.60 | $1.92 |
| Qwen3 Max Thinking | $0.78 | $3.90 |
| Qwen3 Coder Next | $0.11 | $0.80 |
| MiniMax M2-her | $0.30 | $1.20 |
| GPT Audio | $2.50 | $10.00 |
| GPT Audio Mini | $0.60 | $2.40 |
| Seed 1.6 Flash | $0.07 | $0.30 |
| Hy3 | $0.14 | $0.58 |
| Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image) | $0.25 | $1.50 |
| Nano Banana Pro (Gemini 3 Pro Image) | $2.00 | $12.00 |
| Kimi K2.7 Code | $0.74 | $3.50 |
| Claude Fable Latest | $10.00 | $50.00 |
| KAT-Coder-Pro V2 | $0.30 | $1.20 |
| Seed 1.6 | $0.25 | $2.00 |
| GPT-5.2 Pro | $21.00 | $168.00 |
| GLM 4.6V | $0.30 | $0.90 |
| Codestral 2508 | $0.30 | $0.90 |
| Qwen3 Coder 30B A3B Instruct | $0.07 | $0.27 |
| Grok Build 0.1 | $1.00 | $2.00 |
| Mistral Medium 3.5 | $1.50 | $7.50 |
| Anthropic Claude Haiku Latest | $1.00 | $5.00 |
| Anthropic Claude Sonnet Latest | $2.00 | $10.00 |
| Qwen3.5 Plus 2026-04-20 | $0.30 | $1.80 |
| Qwen3.6 Flash | $0.19 | $1.13 |
| Qwen3.6 27B | $0.28 | $2.40 |
| DeepSeek V3.2 Exp | $0.27 | $0.41 |
| Kimi K2 0905 | $0.60 | $2.50 |
| Lyria 3 Pro Preview | $0.00 | $0.00 |
| Lyria 3 Clip Preview | $0.00 | $0.00 |
| GPT-5.2 | $1.75 | $14.00 |
| Devstral 2 2512 | $0.40 | $2.00 |
| Mistral Large 3 2512 | $0.50 | $1.50 |
| GPT-5 Codex | $1.25 | $10.00 |
| DeepSeek V3.1 Terminus | $0.27 | $0.95 |
| GLM 4.5 | $0.60 | $2.20 |
| Gemini 2.5 Flash Lite | $0.10 | $0.40 |
| Qwen3 235B A22B Instruct 2507 | $0.09 | $0.10 |
| Qwen3 32B | $0.08 | $0.28 |
| Gemma 3 12B | $0.05 | $0.15 |
| Command A | $2.50 | $10.00 |
| GPT-4o-mini Search Preview | $0.15 | $0.60 |
| GPT-4o Search Preview | $2.50 | $10.00 |
| MiniMax M2.1 | $0.30 | $1.20 |
| GPT-5.1-Codex-Mini | $0.25 | $2.00 |
| Qwen-Plus | $0.26 | $0.78 |
| DeepSeek V3 | $0.20 | $0.80 |
| Command R7B (12-2024) | $0.04 | $0.15 |
| Llama 3.3 70B Instruct | $0.10 | $0.32 |
| Qwen2.5 Coder 32B Instruct | $0.66 | $1.00 |
| GPT-4o (2024-08-06) | $2.50 | $10.00 |
| Llama 3.1 8B Instruct | $0.02 | $0.03 |
| GPT-3.5 Turbo | $0.50 | $1.50 |
| Kimi K2 Thinking | $0.60 | $2.50 |
| Voxtral Small 24B 2507 | $0.10 | $0.30 |
| gpt-oss-safeguard-20b | $0.07 | $0.30 |
| Qwen3 VL 8B Thinking | $0.12 | $1.36 |
| Llama 3.1 70B Instruct | $0.40 | $0.40 |
| Gemini 2.5 Flash Lite Preview 09-2025 | $0.10 | $0.40 |
| Qwen2.5 VL 72B Instruct | $0.80 | $1.00 |
| R1 Distill Llama 70B | $0.80 | $0.80 |
| R1 | $0.70 | $2.50 |
| Qwen3 VL 235B A22B Thinking | $0.26 | $2.60 |
| Qwen3 VL 235B A22B Instruct | $0.20 | $0.88 |
| Qwen3 Coder Plus | $0.65 | $3.25 |
| Qwen3 Coder Flash | $0.20 | $0.97 |
| MiniMax-01 | $0.20 | $1.10 |
| Qwen3 Next 80B A3B Thinking | $0.10 | $0.78 |
| Qwen3 Next 80B A3B Instruct | $0.09 | $1.10 |
| ERNIE 4.5 VL 424B A47B | $0.42 | $1.25 |
| Claude Sonnet 4 | $3.00 | $15.00 |
| Qwen3 14B | $0.10 | $0.24 |
| Qwen3 235B A22B | $0.46 | $1.82 |
| o4 Mini High | $1.10 | $4.40 |
| Gemma 2 27B | $0.65 | $0.65 |
| Gemma 3 27B | $0.08 | $0.16 |
| Saba | $0.20 | $0.60 |
| o3 Mini High | $1.10 | $4.40 |
| Llama 3.2 1B Instruct | $0.03 | $0.20 |
| Llama 3.2 11B Vision Instruct | $0.34 | $0.34 |
| GPT-4 Turbo | $10.00 | $30.00 |
| GPT-3.5 Turbo Instruct | $1.50 | $2.00 |
| GPT-3.5 Turbo 16k | $3.00 | $4.00 |
| GPT-4 | $30.00 | $60.00 |