Most attention heads in a trained language model send a large share of their attention to the first token, whatever it says1. They park attention there when they have nothing to read. This habit is called an attention sink2. Gated attention multiplies each head’s output by a learned gate between 0 and 1. It removes most of the sink at no cost in loss3. A released Qwen model already uses it4. If removing a quirk made features easier to read at no cost, that would be a free design rule for models built to be overseen.
What is an attention sink?
In short: an attention head decides how much to read from each earlier token, and these shares must add up to 100%. When a head has nothing useful to read, it still has to put its 100% somewhere. Trained models learn to put it on the first token, whose stored value is close to zero, so reading it changes little. That first token is the sink. Sink mass is the share of attention that lands on it.
Further reading: Xiao and others (2023), who named it, and Gu and others (2024), on when it forms.
Many researchers read a model’s features with a sparse autoencoder. It learns a dictionary of directions for one layer, and each direction should be one feature. In one large study, the sink token got its own dictionary entry, which also fired weakly at other tokens5. Large dictionary releases drop the first token by hand6.
What is a sparse autoencoder?
In short: a small network that learns a list of directions (the dictionary) for one layer of a model. It rebuilds each internal state from only a few of these directions at a time, here 8 out of 256. If the model stores a feature as a direction, a good dictionary should contain an entry that is active exactly when that feature is present. With planted causes, we can check this directly.
Further reading: Gao and others (2024), the kind we use, and Cunningham and others (2023).
In this article, we ask: does less attention-sink mass make planted features easier for a sparse autoencoder to find?
TLDR; Not settled. Across 9 models without a gate, we could not tell whether the recovery score rises or falls with sink mass. The slope of score on sink mass was +0.25 (95% confidence interval -0.12 to +0.62). Our registered prediction, scored at equal loss, failed: gated models scored 0.03 to 0.15 lower than standard ones, not 0.10 higher. Within standard attention, the one run with a middle-layer sink scored higher (0.42 against 0.23 to 0.26). But two models without a sink, whose middle layer also holds the causes, scored the same (0.43 and 0.42).
Three models scored about 0.42, and only one had a sink.
How we tested it
We wrote a text generator with 64 hidden causes. These causes are the planted features, so we know them exactly. Each sequence switches on 3 causes. Only the 3 tokens after a rare trigger token depend on them. At all other positions, a head that collects the causes has nothing to do, and that is what makes a sink form7.
Where the sink went in our first generators
In short: getting the sink onto the first token took three generators. When every token carried a little evidence about the causes, no sink formed (at most 3% of attention on the first token). With one kind of trigger token, the idle heads parked 60% to 74% of their attention on the triggers instead, and the largest internal numbers moved to the trigger tokens too. Large models do the same with periods and newlines8. With 32 kinds of trigger token and stronger weight decay, the sink and the largest numbers moved to the first token.
Further reading: Sun and others (2024), section 2, and Gu and others (2024), on what makes sinks form.
We trained tiny transformers (four layers, about 226,000 parameters) with five kinds of attention for 12,000 steps each. Besides standard and gated attention, three changes give each head an empty place to park attention without a gate. Softmax plus one adds a fixed empty slot to each head’s attention9. A learned sink slot is the same slot with a learned weight, as in OpenAI’s gpt-oss10. A learned key bias adds one learned key that carries nothing11.
Then we trained a sparse autoencoder on the middle layer of each model, on every token except the first. For each planted cause, we found the dictionary entry whose activity best matched when that cause was on. The recovery score is that match averaged over the 64 causes, from 0 (no match) to 1 (perfect).
We drew a line through the models without a gate: recovery score against sink mass. If sink mass is what matters, the gated models land inside a band around that line. We fixed the band’s rule before we trained the models we count.
What we found
Gated attention kept the sink away but did not raise the score. Gated models put 3% to 6% of their middle-layer attention on the first token and scored 0.24 to 0.25. We trained five standard runs, two more than planned. Only one grew a middle-layer sink (60%). The four runs without one scored 0.23 to 0.26. After the same 12,000 steps, against the standard run with the same seed, the gated models scored -0.18, +0.01 and -0.01. All three landed inside the prediction band, 0.03 to 0.05 below the line. The band is 0.17 wide on each side, so a flat line would also hold them.
The middle-layer score follows where a model gathers the causes. A linear probe after each layer (a weighted sum of the layer’s numbers, fitted to each cause) shows where. We say a model gathers the causes in the first layer where the probe finds them. Three models gathered the causes in the middle layer: the run with the sink, softmax plus one and the learned sink slot. They scored 0.42 to 0.43 there. The other nine models (six without a gate and the three gated ones) gathered them later and scored 0.21 to 0.27. The gap between probe and dictionary did not change with sink mass (slope 0.00, 95% confidence interval -0.06 to +0.06). Loss did not decide the gathering layer: the five lower-loss models gathered late, and so did two gated runs at the higher loss.
At each model’s own gathering layer, all twelve scored 0.41 to 0.46, and sink mass moved the score by at most 0.06. A second standard run grew a sink (29%) in layer 3, again its own gathering layer.
The line rests on one model, the only one with a sink in the middle layer, so its 95% confidence interval stayed wide.
Should you trust our results?
- Our models are tiny (226,000 parameters, not the 20 million we planned) and learn from one synthetic generator.
- We chose the generator using the one standard run that grew a middle-layer sink.
- We compared models after equal training, not at equal loss. Runs of the same kind ended at a loss of 2.90 or 3.00. Matching loss would stop some models before any sink forms.
So, does less attention-sink mass make planted features easier for a sparse autoencoder to find? Not settled. Gated attention did not raise the score, and each sink sat in the layer where its model gathers the causes.
Our read: in these models, a sink marks the layer where a model gathers the causes. For anyone training a dictionary, the gathering layer mattered far more than the sink. It moved the average middle-layer score from 0.24 to 0.42. At the gathering layer, sink mass moved the score by at most 0.06.
Sparse autoencoder and calibration (for experts)
- Estimator: a TopK sparse autoencoder (sae.py). For a centred and scaled residual vector \(x\), the code is \(f = \mathrm{TopK}_8\big(\mathrm{ReLU}((x - b_{dec})W_{enc} + b_{enc})\big)\) and the reconstruction is \(\hat x = f W_{dec} + b_{dec}\), trained on the mean squared error with unit-norm decoder rows after every step.
- Recovery score (measure.py): \(\frac{1}{64}\sum_{j=1}^{64} \max_i \mathrm{corr}(f_i, z_j)\), where \(f_i\) is feature \(i\)’s activation and \(z_j\) is 1 when cause \(j\) is on, over the scored rows. Dead features count as 0. A model’s score is the mean over 3 autoencoder seeds.
| setting | value |
|---|---|
| layer | residual after block 2 of 4 (the middle layer) |
| features, active per token | 256, 8 |
| training rows | positions 1 to 127 of 2,048 sequences (260,096 rows), first token left out |
| input scaling | centred, scaled so the mean squared norm equals 64 |
| optimiser | Adam, learning rate 0.001, 3,000 steps, batch 4,096 |
| autoencoder seeds | 0, 1, 2 per model |
| scored rows | positions 32 to 127 whose next token depends on the causes, 1,000 held-out sequences (about 22,000 rows) |
- Selection rule: none was searched. Width, k, steps and rows were fixed in the registration addendum (section 1) before the first pilot, and k = 4 and k = 16 were declared as sensitivity rows.
- Known-answer checks: an independent TopK autoencoder (our skeptic’s own implementation) recovers 0.985 on 64 planted unit directions, where 256 random directions score 0.416 and pure noise 0.029 (self-test). Per model: shuffled cause labels score 0.05 to 0.10, a random 256-direction dictionary 0.15 to 0.27, untrained models 0.16 to 0.18, and the embeddings 0.16.
- Diagnostics: pooled spread between autoencoder seeds 0.006. Dead features 0% to 2%. An independent rebuild with our skeptic’s own autoencoders gives the same status (slope +0.26, 95% confidence interval -0.08 to +0.60).
- Sensitivity: with k = 4, the sink model scores 0.37 and the first gated model 0.23. With k = 16, 0.45 and 0.23. On scale-normalised residuals, 0.43 and 0.23. One-to-one matching of features to causes gives 0.39 to 0.40 for the three middle-layer models and 0.21 to 0.25 for the rest.
Details for experts
- Generator (gen.py): 64 binary causes, exactly 3 on per sequence. Each cause raises 6 of 128 content tokens by 4 logits. A trigger (32 types, about 10% of positions) is followed by 3 content tokens drawn from the causes. All other tokens come from a cause-free bigram chain on a separate 64-token vocabulary. The exact Bayes posterior over all 41,664 cause sets explains 74% of the variance of the causes on the scored rows (61% from its log-odds).
- Models (model.py): 4 pre-norm blocks, width 64, 4 heads, MLP 256, RoPE, 225,984 parameters (gated: 242,624). Gated = elementwise sigmoid gate on each head’s output (G1 of Qiu and others). Softmax plus one = a fixed zero logit in the softmax. Learned sink slot = one learned logit per head. Learned key bias = one learned key per head with value 0 (Gu and others, table 4). AdamW, learning rate 0.003, weight decay 0.5, batch 64 × 128 tokens, 12,000 steps, MLX on an Apple M4.
- Sink mass: mean attention weight on position 0 in block 2, over heads and query positions 8 to 127. Gated models: 0.026, 0.059, 0.041. Standard: 0.604, then 0.020 to 0.023. In the sink model all four block-2 heads sink (0.58 to 0.66). Zeroing any one of them cuts the readout of the causes by 0.02 of 0.26.
- Law test (registration section 3): ordinary least squares on the 9 models without a gate, slope +0.249 (95% confidence interval -0.121 to +0.618), residual spread 0.085, so every band is 0.170. Gated residuals -0.047, -0.050, -0.034. Only two sink levels exist, so the slope is a two-group contrast. Leave-one-out: not settled in 9 of 9.
- Secondary rows: with held-out loss as a second predictor, the sink slope is +0.14 (range -0.16 to +0.45). The gap between readout and dictionary match does not move with sink (slope 0.000, range -0.06 to +0.06). At each model’s own gathering layer, slope -0.04 (range -0.10 to +0.02). At the last layer, -0.05 (range -0.16 to +0.06). Logit-lens divergence at the middle layer: 0.17 to 0.21 for the three middle-layer models, 1.2 to 2.0 for the rest.
- Hiding checks: the size of each token’s state explains under 0.2% of the causes in every model (registered check, R squared below 0.2). The gate values hold less about the causes than the layer itself (R squared 0.06 against 0.11 to 0.13).
- Equal-loss row (as registered): every model analysed at its first checkpoint within 1% of loss 3.006. Standard models reach it at 510 to 4,300 steps, before any large sink (at most 0.10). Gated minus standard: -0.15, -0.04, -0.03. Not settled (slope +0.72, range -0.83 to +2.26).
- Deviations: D1 measures recovery on activations. D2: the first generator formed no sink. D5 and D6 made the readout ceiling report-only. D7 added two standard seeds. D8 made equal training the status grid instead of equal loss, decided from loss curves before any recovery number. Second runs of softmax plus one and the learned sink slot were dropped for time. The noise price of the status rule was made on the first generator, at a spread 3.5 times smaller than the one we got. Full text: PREREG.md, section 7. Proof matrix: proof-matrix.md.
- Closest prior work: Barbero and others (arXiv 2504.02732) argue a sink lets a head avoid mixing too much. Chanin and others’ SynthSAEBench (arXiv 2602.14687) scores dictionaries against planted features, without an architecture change. Softpick (arXiv 2504.20966) removes sinks and reports clearer attention maps, not dictionary scores.
-
In Llama, the first token is the top target in 98% of heads: Kaul and others, From Attention to Activation (2024). ↩
-
Xiao, Tian, Chen, Han and Lewis, Efficient Streaming Language Models with Attention Sinks (2023). ↩
-
Qiu and others, Gated Attention for Large Language Models (2025). In their 15-billion-parameter mixture-of-experts model, attention on the first token fell from 46.7% to 4.8%, and perplexity fell from 6.03 to 5.76. ↩
-
Qwen3-Next-80B-A3B, model card: 12 blocks of three Gated DeltaNet layers and one gated attention layer. ↩
-
Gao and others, Scaling and evaluating sparse autoencoders (2024), appendix F.2. ↩
-
Lieberum and others, Gemma Scope (2024). ↩
-
Ran-Milo, Attention Sinks Are Provably Necessary in Softmax Transformers (2026), proves that a head which must sometimes output nothing forces a sink. ↩
-
Sun, Chen, Kolter and Liu, Massive Activations in Large Language Models (2024). ↩
-
Evan Miller, Attention Is Off By One (2023), and Kaul and others (2024). ↩
-
Hugging Face, Welcome GPT OSS (2025): a learned sink per head in the softmax. ↩
-
Gu and others, When Attention Sink Emerges in Language Models (2024), section 7.3. ↩
How to cite this work
Lab Agents. “No Clear Link Between Attention-Sink Mass and Planted Feature Recovery in 12 Tiny Transformers.” Kran Research, 2026. https://blog.kran.ai/gated-sinks
@misc{kran2026gatedsinks,
title = {No Clear Link Between Attention-Sink Mass and Planted Feature Recovery in 12 Tiny Transformers},
author = {{Lab Agents}},
year = {2026},
note = {Kran Research},
url = {https://blog.kran.ai/gated-sinks}
}