Nelson Elhage, Tristan Hume, Catherine Olsson, Nicholas Schiefer et al. (Anthropic) — Transformer Circuits, September 2022

Toy Models of Superposition

A 768-dimensional vector should hold 768 things. Real models hold far more — and this paper builds the smallest possible machine that does it, then takes the machine apart on the table.

Prerequisites: dot products and what a ReLU is. Sparsity, tight frames, feature dimensionality, and the phase diagram are all built from zero.
10
Chapters
9
Interactive Sims
n > m
The Whole Puzzle
2022
Anthropic

Chapter 0: More Features Than Room

Take a sentence embedding out of a modern text encoder. It is a list of 768 floating-point numbers. Now start asking it questions.

Is this text English or Portuguese? Is it a question? Is it formal? Does it mention a person, a date, a price, a legal obligation? Is it sarcastic? Is it about medicine, and if so, about oncology, and if so, about a drug rather than a procedure? Does it contain a negation? Is it first person? Is it a fragment of code? Is it toxic? Is it a recipe step?

Train a small linear probe for each of those and you will find that a great many of them are readable off that one vector, with accuracy well above chance. Not a hundred properties. Thousands. People have found tens of thousands.

Stop and feel how strange that is. A vector of 768 numbers has 768 degrees of freedom. If each property you can read off needs its own private direction, and private means perpendicular to every other one, then 768 is a hard ceiling. You do not get 769. And yet the probes keep working.

This is the puzzle the paper is named after. Models appear to represent many more distinguishable properties than they have dimensions. Either the properties are not really separate, or the representation is not really what we assume it is. Superposition — the paper's answer, and the word it gave the field — is the claim that a model stores more features than it has dimensions by giving them directions that are almost, but not exactly, perpendicular, and relying on the fact that they are rarely active at the same time.

Two assumptions we are going to make explicit

Before the puzzle can even be stated precisely, two ideas that usually float around unnamed need to be nailed down.

The first is the linear representation hypothesis: the claim that the properties a network cares about are represented as directions in activation space, and that the strength of a property is the size of the component along its direction. Under this hypothesis a network's activation vector h decomposes as a sum:

h  =  x1 w1  +  x2 w2  +  …  +  xn wn

where each wi is a fixed direction (a unit-ish vector in the activation space) belonging to feature i, and each xi is a scalar saying how strongly feature i is present in this particular input. Nothing here is obvious. It is a hypothesis, it has real evidence behind it (word arithmetic in word2vec, steering vectors, linear probes, activation addition), and it has known exceptions. We will take it as given for this paper, because this paper is a study of what follows if it holds.

The second is the notion of a privileged basis. Some activation spaces come with a natural coordinate system and some do not. After an element-wise nonlinearity such as ReLU, the coordinate axes are special: the function treats coordinate 3 differently from the direction (0.6, 0.8, 0, …), because ReLU acts on each coordinate separately. That makes the neuron axes privileged. The residual stream of a transformer, by contrast, is only ever read and written by linear maps, so no basis is privileged there — you could rotate the whole thing and nothing would change.

Why the distinction matters for the whole rest of this lesson. If the basis is privileged, the interesting question is "does this neuron mean one thing or several?" — the polysemanticity question. If the basis is not privileged, the neuron question is meaningless and the only sensible question is "how many distinguishable directions live in here?" Superposition is the mechanism that makes the answer to the second question larger than the dimension, and it is the cause of the first question's uncomfortable answer.

The pigeonhole argument, and exactly where it leaks

Here is the argument that says you cannot have more features than dimensions, written carefully so we can find the crack in it.

Suppose you want to read feature i back out of h with a linear readout: pick a vector ri and compute ri · h. Substituting the decomposition above:

ri · h  =  xi (ri · wi)  +  ∑j ≠ i xj (ri · wj)

The first term is the signal: what we wanted. The second is the interference: everything else leaking in. If we demand the readout be exact for every possible input — that is, interference identically zero — then we need ri · wj = 0 for all ji. A set of directions with that property (a biorthogonal system) can have at most m members in m dimensions. Pigeonhole holds. Ceiling at 768.

Now find the crack. The argument demanded exactness for every possible input. Two words in that sentence are doing enormous work.

"Exactness." Nothing about a neural network requires zero error. Networks minimise a loss; a small non-zero interference is a small non-zero loss, and it can be worth paying if it buys something bigger.

"Every possible input." The interference term is a sum over the features that are actually present. If xj = 0, the term with wj vanishes no matter how badly aligned wi and wj are. And the properties we listed at the top of this chapter are almost all absent almost all of the time. Very few sentences mention oncology. Very few contain Python. Very few are recipes.

The one-sentence version of the whole paper. Interference is only paid when two features are simultaneously active. Sparse features are rarely simultaneously active. So a sparse world lets you sell the same dimension several times over, and only occasionally get caught.

How much room is there, really? A worked count

If we relax "perpendicular" to "nearly perpendicular", how many directions fit? This is a classical question with a clean answer, and the numbers are worth doing by hand because the scale is genuinely shocking.

Take two vectors drawn independently and uniformly from the unit sphere in Rm. Their dot product — which is the cosine of the angle between them — is a random number centred on zero. Its standard deviation is exactly

σ  =  1 / √m

and for large m it is very close to Gaussian. So in m = 1000 dimensions, two random directions have a typical cosine of 1/√1000 = 0.0316. They are, for practical purposes, perpendicular by accident. High-dimensional space is mostly empty in a way that low-dimensional intuition refuses to accept.

Now count. Suppose we are willing to tolerate a maximum absolute cosine of ε between any pair. The Gaussian tail bound gives, for a single pair,

P( |cos| > ε )  ≤  2 exp( − mε2 / 2 )

With N vectors there are N(N−1)/2 < N2/2 pairs. Requiring the expected number of violating pairs to stay below one gives N2 exp(−2/2) < 1, i.e.

N  <  exp( mε2 / 4 )

Worked example. Let m = 1000 and ε = 0.2 (we accept up to 0.2 cosine between any two feature directions — still quite perpendicular).

2/4 = 1000 × 0.04 / 4 = 40/4 = 10  →  N < e10 ≈ 22,026

Twenty-two thousand directions in a thousand dimensions, all pairwise within 0.2 cosine of perpendicular. Let us sanity-check that against the tail bound directly, because the number looks too good. With m = 1000, ε = 0.2 is 0.2/0.0316 = 6.3 standard deviations out. The bound gives P ≤ 2 exp(−1000 × 0.04/2) = 2e−20 = 4.1 × 10−9 per pair. The number of pairs is 22026 × 22025 / 2 ≈ 2.43 × 108. Multiply: 2.43 × 108 × 4.1 × 10−91.0 expected violations. The two calculations agree, as they must.

Read the exponent, not the number. The capacity is exp(2/4): exponential in the dimension. Doubling the dimension does not double the capacity, it squares it. This result is the Johnson–Lindenstrauss regime, and it is the reason the pigeonhole intuition is so badly wrong — the ceiling is not m, it is astronomically larger, as long as you can live with ε of slop.

And that is exactly the catch. ε of slop is not free. Every one of the 22,025 other features, if it is active, dumps up to 0.2 × its magnitude into your readout. If a hundred of them are active at once, the noise swamps the signal. Capacity in the JL sense is a statement about geometry; whether the geometry is usable is a statement about how many features fire at once. That second question is the one the toy model answers.

Almost-orthogonal packing — measured, not assumed

The histogram is a real Monte-Carlo measurement: the simulation draws 120 random unit vectors in m dimensions and computes all 7,140 pairwise cosines in your browser. The dashed curve is the predicted Gaussian of width 1/√m. Slide m up and watch the whole distribution collapse toward zero — that collapse is the extra room. The counter on the right applies the bound above at your chosen tolerance.

Dimensions m 16
Tolerance ε 0.20

Three things to notice while you play. First, at m = 2 the cosines are spread all the way across [−1, 1] — in the plane, there is no such thing as an accidental right angle, and the pigeonhole intuition is correct. Second, the collapse is fast: by m = 64 nearly every pair is already within 0.25. Third, the capacity counter goes superexponential in a way that stops feeling like a plot and starts feeling like a typo.

Why a toy model at all?

You could try to answer this question by studying GPT-2. People have. The trouble is that in a real model you do not know the ground truth: you do not know how many features there are, how important each one is, or how often it fires. Every measurement is confounded by the thing you are trying to measure.

The move this paper makes — and the reason it became a template for a whole subfield — is to build a system where you choose the ground truth. You decide there are exactly n features. You decide how important each one is. You decide how often each one fires. Then you give a model too few dimensions and watch what it does. Every phenomenon you observe, you can trace to a parameter you set.

QuestionIn a real language modelIn the toy model
How many features are there?Unknown. Possibly the central open problem.n. You typed it.
How important is each feature?Unknown, and entangled with the training distribution.Ii. A number in the loss.
How often does each fire?Estimable only after you can find features, which is the hard part.1 − S. A parameter of the data generator.
What are the feature directions?The thing you are trying to discover.The columns of W. You can print them.
Is it in superposition?Hard to establish; that is why this paper exists.Measurable exactly, chapter 4.
Think of it as a wind tunnel. Nobody confuses a wind-tunnel model with an aircraft. But you can put smoke through a wind tunnel and see the vortex, and then go looking for the same vortex on the real wing. This paper's contribution is not a model of a transformer. It is a smoke trail: a set of phenomena — phase changes, polytope geometry, sticky learning plateaus, polysemantic neurons — that are crisp enough in the toy to recognise in the wild.

What is a feature, exactly?

We have used the word twenty times without defining it, which is unforgivable in a lesson that promised to define every term. The reason for the delay is that the field genuinely does not agree, and the paper says so. Three working definitions circulate, and they are not equivalent.

DefinitionSays a feature is…Trouble with it
By the worldA property of the input that exists independently of any model — "contains a dog", "is written in French"Circular for interpretability: you find only the properties you thought to look for.
By the neuronWhatever a hidden unit responds toAssumes the answer. If units are polysemantic, this definition guarantees you can never notice.
By the directionA direction in activation space along which the model's computation is organisedUnderdetermined without a criterion. Which of the infinitely many directions count?

The paper adopts the third and adds the missing criterion by fiat: in the toy model, a feature is a coordinate of the input we generated. That is a cheat, and it is the right cheat, because it turns "what is a feature" from a philosophical question into a bookkeeping fact, and lets the paper study everything downstream of the definition without being blocked by it.

Keep the cheat visible. When later work claims to have "found features" in a real model with a sparse autoencoder, it is producing an estimate of the third definition, validated by interpretability and causal intervention rather than by matching a ground truth — because there is no ground truth to match. The toy model is the only place in this literature where the answer key exists.

The empirical trail that led here

Superposition was not proposed as a theory looking for evidence. It was proposed as an explanation for something people kept tripping over.

The circuits programme in computer vision, from about 2015 onward, spent years reading individual neurons of convolutional networks. Many were beautifully clean: curve detectors at particular orientations, high-low frequency detectors, dog-head detectors. And then there were the others — units that responded to cat faces and the fronts of cars and the legs of animals, with no story that unified them. Those units were named polysemantic, and for a long time they were treated as noise in an otherwise readable picture.

Two observations turned them from noise into a research problem. First, they were not rare — in most layers of most networks they are the majority. Second, they resisted every attempt to make them go away by better training. One direct attempt, the Softmax Linear Unit, replaced the activation function with one designed to encourage privileged-basis alignment; it improved matters and did not solve them, which is the signature of a phenomenon that is being selected for rather than tolerated.

If polysemanticity is selected for, there should be a reason — some pressure that makes a mixed neuron better than a clean one. That is the pressure this paper isolates.

The pigeonhole in two dimensions, made concrete

Before trusting the exponential-capacity result, it helps to feel where it comes from, and the cleanest way is to watch it fail. In the plane, place unit vectors so that every pair has |cos| ≤ 0.2, that is, every pair is at least 78.5° and at most 101.5° apart. How many fit?

Directions in the plane are just angles. Two angles are within the tolerance only if they differ by 78.5° to 101.5° (modulo 180°, since a direction and its negative have |cos| = 1 and are certainly not allowed). Placing the first at 0°, the second must land in a 23°-wide window near 90°. The third must be near-perpendicular to both — but anything perpendicular to 0° is near 90°, and anything near 90° is nearly parallel to the second vector. Two is the maximum. Formula check: exp(2/4) = exp(2 × 0.04/4) = exp(0.02) = 1.02, which is a bound of one — conservative, and correctly telling us the answer is a small integer.

Now the same question in m = 100. The bound gives exp(100 × 0.04/4) = exp(1) = 2.7, so still no promise. At m = 400: exp(4) = 55. At m = 1000: 22,026. The capacity does not creep — it stays at "basically nothing" and then explodes, because the exponent is 2 and squaring a small ε means you need a large m before anything happens at all.

Which is exactly why this is a large-model phenomenon. With 8 hidden units, superposition buys you almost nothing and the model may as well pick its favourite eight features. With 4,096, the geometry supports millions of nearly-orthogonal directions and the only remaining question is whether the interference is affordable — which is the question the rest of this lesson answers.

Where we are going

Chapters 1–3 — build it and break it
Every symbol of the toy model defined → the dense regime, where it behaves like PCA and superposition never appears → turn up sparsity and watch the geometry reorganise
Chapters 4–6 — the mathematics of sharing
Feature dimensionality and the polygon zoo → the phase diagram, derived in closed form → exactly when interference is worth paying for
Chapters 7–9 — consequences
Computing, not just storing, in superposition → what this predicts about the embedding vectors you actually ship → the limits of the toy and the sparse-autoencoder era it launched

One promise for the sceptics. Everything numeric in this lesson is either derived on the page or computed live in your browser by code you can read. The phase boundary in chapter 5 is a closed-form expression we will grind out by hand and then check against gradient descent running in the simulation. If they disagree, you should trust the simulation and email me.

The pigeonhole argument — "at most m features fit in m dimensions" — is a valid deduction. Which of its premises does superposition actually violate?

Chapter 1: The Toy Model, Symbol by Symbol

The model has three moving parts: a data generator you control completely, a bottleneck that is too small on purpose, and a loss that says which mistakes hurt. Every one of them is three lines of code. The interesting behaviour is entirely emergent.

Part one: the features are the data

In a real network, a "feature" is a hypothesis — some property you believe is represented, which you then have to go and find. In the toy model we invert this. The features are the input. We declare that the world contains exactly n independent properties, and we hand the model a vector listing their intensities:

x  =  ( x1, x2, …, xn )  ∈  Rn,    xi ≥ 0

Two properties of this vector are chosen by us, and they are the only two knobs that matter in the entire paper.

Sparsity S. Each coordinate is zero with probability S, and otherwise drawn uniformly from [0, 1], independently of the others:

xi = 0 with probability S   |   xi ~ Uniform[0,1] with probability 1 − S

We will write d = 1 − S for the density — the probability a given feature is on — because almost every formula in this lesson is cleaner in d. Sparsity S = 0.9 means density d = 0.1: one feature in ten is active in a given sample. S = 0 means d = 1: every feature always on.

Importance Ii. Not all features matter equally. In a language model, "is this English" is worth more than "does this mention the specific brand of stapler". We encode this as a per-feature weight in the loss. The paper's default is geometric decay:

Ii  =  r i−1,    r ∈ (0, 1]

With r = 0.7 and n = 5 the importances are 1, 0.7, 0.49, 0.343, 0.2401. With r = 1 they are all equal, which the paper calls the uniform case and which produces the cleanest geometry.

Why non-negative features, and why uniform on [0,1]? Two reasons, both load-bearing. First, real activations that come after a ReLU are non-negative, and "how much of this property is present" is naturally a magnitude rather than a signed quantity. Second — and this is the one that shapes the answer — non-negativity means interference has a sign. If two feature directions have a negative dot product, their crosstalk pushes the readout down, where a ReLU can clip it away for free. If it is positive, it pushes up, and creates a false positive. That asymmetry is why the geometries in chapter 4 look the way they do.

Part two: the bottleneck

The model has exactly one job: reproduce its input. That sounds pointless until you notice the shape of the hidden layer.

h  =  W x,    W ∈ Rm×n,    m < n

x′  =  ReLU( WT h  +  b ),    b ∈ Rn

Read that in shapes. Input x has n entries. The hidden vector h has m entries with m < n, so information must be lost — this is the whole experiment. Then the same matrix, transposed, maps back up to n, a bias is added, and a ReLU clips negatives.

Every piece of that is a decision. Let us justify each one, because a toy model is only as good as the honesty of its simplifications.

Design decisionWhyWhat would break otherwise
m < nThe bottleneck is the experiment. It forces the model to choose what to keep.With mn the identity is achievable exactly and nothing interesting happens.
Encoder is purely linearModels a residual stream: a linear write into a shared vector space.A nonlinear encoder could do genuine compression tricks, muddying the question of whether features are directions.
Decoder weights tied to WTFeature i is written along Wi and read along the same Wi. One geometry, not two.Untied weights let the readout be biorthogonal to the writes, hiding the interference we want to study.
ReLU only on the outputFeatures are non-negative, so clipping at zero is free accuracy — and it is the only nonlinearity in the system.Without it, the model is exactly linear and superposition provably never pays (chapter 3 proves this).
A bias b on the outputLets the model set a threshold: "ignore anything below this, it is probably crosstalk".Without a bias the ReLU can only clip negative interference, halving the cleanup mechanism.

The paper calls this the ReLU output model, and it also studies a linear variant with no output ReLU. The comparison is the cleanest experiment in the whole paper: the linear model never superposes, at any sparsity. Nonlinearity is not decoration here, it is the enabling condition.

Part three: the loss

L  =  Ex [  ∑i=1n Ii ( xi − x′i )2  ]

An importance-weighted mean squared error. Nothing more. But look at what it implies: because Ii multiplies the squared error of feature i, and because a feature the model completely ignores contributes Ii E[xi2], the loss has a natural unit — the cost of giving up.

We will need E[xi2] constantly, so compute it now. The feature is 0 with probability S and uniform on [0,1] with probability d. For U ~ Uniform[0,1], E[U2] = ∫01 u2 du = 1/3. So

E[ xi2 ] = d · (1/3) = d/3,     E[ xi ] = d · (1/2) = d/2
The cost of ignoring a feature, once and for all. If the model sets Wi = 0 and bi = 0, then xi = 0 always, and that feature contributes Ii E[xi2] = Ii d/3 to the loss. Every trade in this lesson is measured against that number. Note that it is linear in the density d — remember this; in chapter 3 it becomes the whole story.

The forward pass, with real numbers

Abstractions are cheap. Let us push actual numbers through the smallest interesting instance: n = 3 features into m = 2 dimensions.

Suppose training has produced these three columns for W (each column is one feature's direction; each has unit length):

W1 = (1, 0),    W2 = (0, 1),    W3 = (0.6, 0.8)

Features 1 and 2 got clean axes. Feature 3 was squeezed in between them, 53.13° from the first axis. Check its length: √(0.36 + 0.64) = √1 = 1. Good.

Case A: only feature 3 is active, at strength x3 = 0.7, with b = 0 for now.

h = 0.7 × (0.6, 0.8) = (0.42, 0.56)

Now read all three features back out with WTh, which is just the dot product of h with each column:

x′1 = (1,0)·(0.42,0.56) = 0.42
x′2 = (0,1)·(0.42,0.56) = 0.56
x′3 = (0.6,0.8)·(0.42,0.56) = 0.252 + 0.448 = 0.700  ✓

Feature 3 comes back perfectly. But features 1 and 2, which are not present at all, report 0.42 and 0.56. Those are hallucinations — pure interference — and with importance weights of 1 and 0.7 they cost

1 × 0.422 + 0.7 × 0.562 = 0.1764 + 0.2195 = 0.3959

Now switch on the bias. Set b = (−0.45, −0.60, 0) and redo the last step:

x′1 = ReLU(0.42 − 0.45) = ReLU(−0.03) = 0
x′2 = ReLU(0.56 − 0.60) = ReLU(−0.04) = 0
x′3 = ReLU(0.700 + 0) = 0.700  ✓

Loss: zero. The interference did not go away — the geometry is unchanged — it was filtered. This is the central mechanism of the entire paper, and you have just computed it by hand: a negative bias plus a ReLU is a noise gate.

The noise gate has a price, and here it is. That same bias of −0.45 also subtracts 0.45 from feature 1 when feature 1 is genuinely present. A true activation of x1 = 0.3 now reads out as ReLU(0.3 − 0.45) = 0 — a false negative. The model is trading missed weak activations for suppressed false positives, and the optimal trade depends on how often interference happens, which depends on sparsity. That is the whole tension, and it is why there is a phase diagram.

Case B: features 1 and 3 both active, x = (0.5, 0, 0.7), still with b = (−0.45, −0.60, 0).

h = 0.5×(1,0) + 0.7×(0.6,0.8) = (0.5 + 0.42, 0.56) = (0.92, 0.56)
x′1 = ReLU(0.92 − 0.45) = 0.47  (target 0.5, error −0.03)
x′2 = ReLU(0.56 − 0.60) = 0  (target 0, correct)
x′3 = ReLU(0.6×0.92 + 0.8×0.56) = ReLU(0.552 + 0.448) = 1.000  (target 0.7, error +0.30)

Weighted loss: 1 × 0.032 + 0.49 × 0.302 = 0.0009 + 0.0441 = 0.045. Compare with the 0.000 we got when only one feature fired.

Here is the number that runs the rest of the lesson. Sharing a dimension costs nothing when one feature fires and a lot when two do. The probability that a specific pair fires together is d2. So the cost of superposition scales like d2, while the benefit — not throwing a feature away — scales like d (that is the Iid/3 from the box above). As d → 0, the ratio benefit/cost → ∞. Superposition is not a trick; it is the limit of an inequality.
The forward pass, live

The three columns of W from the worked example, drawn as arrows in the 2-D hidden space. Move the feature sliders and watch h (the thick vector) move, then watch each feature's readout — a projection of h onto its own direction, minus its bias, clipped at zero. The bars on the right compare readout against truth. Turn the bias off to see the hallucinations return.

x₁ (axis 1) 0.00
x₂ (axis 2) 0.00
x₃ (shared) 0.70

The whole model, in tensor shapes

If you were to implement this — and you should, it is about twenty lines — here is exactly what flows where for a batch of B samples.

pytorch# n features, m hidden dims, B batch. n > m is the entire point.
W = nn.Parameter(torch.randn(m, n) / math.sqrt(n))   # (m, n)
b = nn.Parameter(torch.zeros(n))                     # (n,)

# ---- data generator: this IS the ground truth ----
u    = torch.rand(B, n)                    # (B, n)  magnitudes in [0,1]
mask = (torch.rand(B, n) > S).float()    # (B, n)  1 with prob d = 1-S
x    = u * mask                            # (B, n)  sparse, non-negative

# ---- forward ----
h  = x @ W.T                               # (B, n) @ (n, m) -> (B, m)   THE BOTTLENECK
xp = torch.relu(h @ W + b)                # (B, m) @ (m, n) -> (B, n)

# ---- importance-weighted MSE ----
I    = r ** torch.arange(n)               # (n,)   e.g. 1, .7, .49, ...
loss = (I * (x - xp) ** 2).sum(-1).mean()  # scalar

Two lines of that code deserve a second look.

h = x @ W.T is where the information is destroyed, and it is a sum: h = ∑j xj Wj. Every active feature adds its own direction, scaled by its intensity. The hidden vector is a superposition in the literal, physics sense of the word — a linear combination of contributions that have been added into the same medium.

xp = relu(h @ W + b) is where the model tries to un-add them. Written per feature: xi = ReLU( Wi · h + bi ) = ReLU( ∑j (Wi · Wj) xj + bi ). The whole model, therefore, is governed by one n × n matrix:

G  =  WT W,    Gij = Wi · Wj

This is the Gram matrix of the feature directions. Its diagonal Gii = ‖Wi2 is how strongly feature i is represented at all. Its off-diagonal Gij is exactly the interference of j onto i. The ideal — and the impossible — is G = In, the identity. But G = WTW with W of shape m × n has rank at most m, and the identity has rank n. That rank gap, in one line, is the pigeonhole argument restated in matrix form — and everything the model does is an approximation strategy for a matrix it cannot reach.

Restating the whole paper as a matrix question. "How should a rank-m positive semidefinite matrix with a unit-ish diagonal best approximate the n × n identity, when the error is measured on sparse non-negative inputs and passed through a ReLU?" Every polygon in chapter 4 is an answer to that question at a particular sparsity. It is a beautiful reframing, and it is also a warning: the answer depends on the input distribution, not just the matrices.

Training it: the gradient, derived

The simulations in this lesson run real gradient descent, so it is worth deriving the gradient once. It is short, and its structure explains how the geometry organises itself.

Write the forward pass per feature: pi = Wi · h + bi, then xi = ReLU(pi). Define

gi  =  ∂L/∂pi  =  2 Ii ( x′i − xi ) · 1[ pi > 0 ]

The indicator is the ReLU's derivative: a clipped output receives no gradient at all. Then ∂L/∂bi = gi, which is the easy one. The interesting one is Wi, because it appears twice in the computation graph — once writing feature i into h, once reading it back out. Both paths contribute:

∂L/∂Wi  =  gi h  +  xij gj Wj

The read path says: if feature i was read out too high, move its column away from the current hidden vector. The write path says something much more interesting: if feature i was active, move its column against the error-weighted sum of every other feature's direction. Feature i is being pushed away from exactly those features it is currently damaging, in proportion to the damage.

That second term is the geometry engine. It is a repulsion between feature directions whose strength is the product of "how often we are on together" and "how much that hurts". Sparsity enters the dynamics through the factor xi: the repulsion between i and j is only ever applied on samples where i is active and j contributed error. At high sparsity that is rare, the repulsion is weak, and the columns settle much closer together than they would otherwise dare.

One gradient step by hand. Take the chapter-1 setup, b = 0, and the sample x = (0, 0, 0.7) from Case A, with I = (1, 0.7, 0.49). We computed h = (0.42, 0.56) and the readouts (0.42, 0.56, 0.70). Errors: e = (0.42 − 0, 0.56 − 0, 0.70 − 0.70) = (0.42, 0.56, 0). All three pre-activations are positive, so no gradient is clipped, and

g = 2 × (1×0.42,  0.7×0.56,  0.49×0) = (0.840, 0.784, 0)

Now the write-path term for feature 3, which is the only active feature:

j gj Wj = 0.840(1,0) + 0.784(0,1) + 0(0.6,0.8) = (0.840, 0.784)
∂L/∂W3 = g3 h + x3 (0.840, 0.784) = 0 + 0.7 × (0.840, 0.784) = (0.588, 0.549)

Gradient descent moves W3 in the negative of that: from (0.6, 0.8) toward (0.6, 0.8) − η(0.588, 0.549). It is being pushed down and to the left — away from both axis features, into the third quadrant. Run that for a while and the three columns end up 120° apart. The triangle is not designed; it is the fixed point of this push.

And notice what the bias does to this story. Once b1 and b2 are negative enough that p1 and p2 go below zero on this sample, the indicators fire zero, g1 = g2 = 0, and the repulsion switches off entirely. The model stops pushing the features apart because it is no longer being hurt. That is the whole mechanism, visible in the gradient.

What the model can and cannot express

Since everything routes through G = WTW, it is worth being precise about which matrices are reachable.

G is symmetric, positive semidefinite, and of rank at most m. Conversely, every symmetric PSD matrix of rank ≤ m is WTW for some m × n matrix W (take the eigendecomposition and keep the non-zero part). So the model's expressible set is exactly:

{ G ∈ Rn×n : G = GT,  G ≽ 0,  rank(G) ≤ m }

The target — perfect reconstruction — is G = In, which has rank n. Since m < n, it is unreachable, and the model must pick the best available compromise. Two families of compromise exist, and chapters 2 and 3 are exactly the story of choosing between them:

CompromiseWhat G looks likeError structure
Truncate — keep m features exactlyAn m×m identity block, zeros elsewhereTotal loss on the dropped features, zero on the kept ones
Spread — represent all n approximatelyNear-identity diagonal, small non-zero off-diagonal everywhereSmall errors everywhere, paid only when features co-occur

Nothing in linear algebra picks between them. What picks between them is the distribution of the inputs, through the ReLU, and that is a fact about the data rather than about the matrices. Which is why the same architecture produces PCA in one regime and pentagon packing in another.

What "superposition" will mean, precisely

We can now define the word without hand-waving. Given a trained W:

Chapter 4 replaces this three-way qualitative split with a single continuous number per feature. But the qualitative version is enough to run the first experiment, which is the subject of chapter 2: what happens when nothing is sparse at all?

Five misreadings to head off now

This model is small enough that people form opinions about it quickly, and a few of those opinions are wrong in ways that matter later.

MisreadingWhy it is wrong
"Superposition is lossy compression, so it is just an autoencoder."An autoencoder is free to use any nonlinear code. This model's encoder is linear, so the code is a sum of fixed directions — and it is exactly that constraint that makes "feature = direction" meaningful. Remove it and you learn nothing about interpretability.
"The bottleneck is the point, so any dimensionality reduction shows this."PCA has a bottleneck and never superposes. The bottleneck plus sparsity plus a nonlinearity is the point. Take any one away and the phenomenon disappears — chapter 2 removes the sparsity, and the linear-model control removes the nonlinearity.
"Features must be correlated for this to work."Every feature in the default setup is statistically independent of every other. Correlation changes which features pair up; it is not required.
"More dimensions would fix it."Only if mn, and in a real model n is enormous and unknown. Widening a layer moves the boundary, it does not remove the regime — and chapter 6's scaling law shows the cost of buying your way out.
"The importance weights are a hack to make the plots look good."They are the toy's stand-in for the fact that a real loss cares about some properties more than others. Setting them all equal is a legitimate special case, and chapter 4 shows it produces the cleanest geometry, not a broken one.

One more that is subtler and worth stating on its own. It is tempting to read the toy model as saying "the network is compressing its inputs". It is not: the inputs to a real layer are not the features. The features are properties the network has computed, elsewhere, and this model is about the storage medium they have to fit through — a residual stream, an MLP activation, an embedding vector. The right mental picture is a bus with limited width carrying signals produced upstream, not a compressor applied to raw data.

The paper also studies a linear variant, identical except that the output ReLU is removed. Why is that comparison the most important control in the paper?

Chapter 2: The Dense Regime, or PCA in Disguise

Set S = 0. Every feature is on, every sample, with an intensity uniform on [0,1]. This is the world our intuitions were built in — the world where the pigeonhole argument is not just valid but binding — and it is the right place to start, because it establishes the baseline against which everything strange later will be measured.

The question: given n = 5 features, m = 2 dimensions, and importances 1, 0.7, 0.49, 0.343, 0.2401, what is the best the model can do?

The candidate that ought to win

Here is the obvious strategy. Pick a subset A of at most m features. Give each one its own orthogonal unit direction. Set the columns of every other feature to zero.

W1 = (1, 0),   W2 = (0, 1),   W3 = W4 = W5 = (0, 0)

The Gram matrix G = WTW is then diag(1, 1, 0, 0, 0). Features 1 and 2 are reconstructed exactly: x1 = ReLU(x1) = x1, and no other feature can touch them, because their columns are orthogonal to everything. Features 3, 4, 5 output whatever the bias says.

What should the bias say for a feature the model has given up on? Not zero. If Wi = 0, then xi = ReLU(bi) is a constant, and the constant that minimises E[(xic)2] is the mean:

E[(x − c)2] = Var(x) + (E[x] − c)2  →  c* = E[x],   residual = Var(x)

So an abandoned feature costs its variance, not its second moment. For a dense feature uniform on [0,1]: Var = 1/3 − (1/2)2 = 1/3 − 1/4 = 1/12.

Ldense, orthogonal = (I3 + I4 + I5) / 12 = (0.49 + 0.343 + 0.2401)/12 = 1.0731/12 = 0.0894
This is weighted PCA, and the reason is worth spelling out. Strip the ReLU for a moment and let the bias absorb the mean, so the problem becomes: choose a symmetric rank-m matrix A = WTW minimising ∑i Ii E[((x − μ) − A(x − μ))i2]. Because the features are independent, the centred covariance is diagonal — and because they all have the same marginal distribution, it is a multiple of the identity, σ2I. When the covariance is isotropic, "which subspace to keep" is decided entirely by the importance weights, and the answer is: the m coordinate axes with the largest Ii. Principal component analysis, with importance playing the role of variance.

That "independent, therefore diagonal" step is the one to remember. It is exactly what will fail to matter later: superposition is not driven by correlations between features. It is driven by their sparsity, which is a property of each feature's marginal distribution, not of any relationship between them.

Making the optimality argument properly

"Weighted PCA, so top-m" is a slogan. Here is the calculation behind it, because it takes ten lines and it makes the later comparisons trustworthy.

Drop the ReLU (in this regime it never activates on the solutions we care about) and let A = WTW, a symmetric positive semidefinite matrix of rank at most m. Let μ be the vector of feature means and let the bias take its optimal value b = (IA)μ, which centres the problem. Writing Λ = diag(I1In) and using that the centred covariance is σ2In (independent features, identical marginals):

L = σ2i Ii ‖(I − A)i2 = σ2 [ tr(Λ) − 2 tr(ΛA) + tr(ΛA2) ]

Now restrict to the natural family: A = PS, the orthogonal projection onto the coordinate subspace spanned by a set S of at most m features. Projections satisfy A2 = A, so the last two terms collapse:

L = σ2 [ tr(Λ) − tr(ΛPS) ] = σ2i ∉ S Ii

Which is minimised by taking S to be the m largest importances. Clean, and it reproduces the number we guessed. (That the coordinate projection also beats every non-projection rank-m matrix takes a little more work; the paper settles it empirically, and so does the simulation below.)

Tabulating for n = 5, r = 0.7, d = 1 so σ2 = 1/12:

Hidden dims mFeatures keptAbandoned importance ∑i∉SIiDense loss
1f10.7 + 0.49 + 0.343 + 0.2401 = 1.77310.14776
2f1, f20.49 + 0.343 + 0.2401 = 1.07310.08942
3f1, f2, f30.343 + 0.2401 = 0.58310.04859
4f1…f40.24010.02001
5all00 — no bottleneck, no problem

Each extra dimension buys exactly the importance of the next feature, divided by twelve. Predictable, monotone, boring — and worth writing down precisely so that chapter 3's departure from it is unmistakable.

The challenger, and why it loses

Now try the greedy alternative: cram three features into the plane. Put W1, W2, W3 at 120° from each other, all unit length — an equilateral triangle. Their pairwise dot products are all cos 120° = −1/2, so the Gram matrix has −0.5 everywhere off the diagonal of its top-left 3×3 block.

Take b = 0 for this candidate and read out feature 1:

x′1 = ReLU( x1 − 0.5 x2 − 0.5 x3 ) = ReLU( x1 − z ),    z ≡ (x2 + x3)/2

The error is x1x1. If x1 > z the ReLU is inactive and the error is exactly z. If x1z the output is clipped to zero and the error is x1. Both cases at once:

error1 = min( x1, z )

That is a genuinely pretty identity, and it lets us compute the expected squared error exactly. First, for any fixed z ∈ [0,1] and x ~ Uniform[0,1]:

01 min(x,z)2 dx = ∫0z x2 dx + ∫z1 z2 dx = z3/3 + z2(1 − z) = z2 − (2/3) z3

Now average over z = (x2 + x3)/2, the average of two independent uniforms. Its mean is 1/2 and its variance is (1/12 + 1/12)/4 = 1/24, so

E[z2] = 1/24 + 1/4 = 7/24 = 0.291667

And for the cube, expand E[(x2+x3)3] = E[x3] + 3E[x2]E[x] + 3E[x]E[x2] + E[x3] = 1/4 + 1/2 + 1/2 + 1/4 = 3/2, so E[z3] = (3/2)/8 = 3/16 = 0.1875. Therefore

E[ min(x1, z)2 ] = E[z2] − (2/3) E[z3] = 0.291667 − 0.125 = 1/6

Exactly one sixth. Each of the three superposed features pays 1/6, and features 4 and 5 are abandoned at 1/12 each (with the mean bias):

Ldense, triangle = (1 + 0.7 + 0.49)(1/6) + (0.343 + 0.2401)(1/12)
= 2.19 × 0.166667 + 0.5831 × 0.083333 = 0.3650 + 0.0486 = 0.4136
Four-and-a-half times worse. 0.4136 against 0.0894. In the dense regime, superposition is not a clever compromise — it is a rout. Every sample activates every feature, so every shared direction is paying its full interference bill on every single example, and the ReLU has nothing to filter because there is no such thing as a quiet moment.

Why the ReLU cannot help when nothing is sparse

Look again at error = min(x1, z). The ReLU helps precisely when x1z, because then it converts an error of z into an error of x1. In chapter 1 we saw the dream case: x1 = 0, so the error becomes min(0, z) = 0 and interference vanishes completely. In the dense regime x1 = 0 never happens. The gate is jammed open.

This also explains why a negative bias does not rescue the triangle. A bias of −β changes the readout to ReLU(x1z − β), which subtracts β from every true activation as well. In a world where the true activation is present every time, that is a pure loss.

The paper's cleanest control experiment. Remove the output ReLU entirely and the model becomes a tied linear autoencoder. That model is exactly weighted PCA at every sparsity level — it puts the top-m features on orthogonal axes and drops the rest, whether S is 0 or 0.999. It never superposes, because with no nonlinearity there is no mechanism to convert "rarely co-active" into "cheap". Superposition requires a nonlinearity to hide behind.
The dense regime, trained live

This runs real gradient descent in your browser — 900 Adam steps on batches of 128 sampled from the generator in chapter 1, with n = 5 and sparsity fixed at whatever you pick. Left: the squared length of each feature's column, which is how much of a dimension it got. Right: the Gram matrix G = WTW, where the diagonal is representation and the off-diagonal is interference. Start at S = 0 and confirm the prediction: a clean 2×2 identity block, three dead features, and a loss near 0.089.

Hidden dims m 2
Sparsity S 0.00
Importance r 0.70

Three experiments worth running before moving on.

One. At S = 0, slide m from 1 to 4 and watch the identity block grow. The model always keeps the most important features and always keeps them orthogonal. Count the survivors: it is exactly m, every time.

Two. At S = 0, push the importance decay r toward 1.0 so all five features matter equally. The model still keeps exactly two — but now which two is arbitrary, and if you nudge the slider you may see it switch. Ties are broken by initialisation noise, not by the objective.

Three. Now cheat and look ahead: push sparsity to 0.9 and watch the Gram matrix light up off the diagonal. That is chapter 3, and it should look, at first glance, like a bug.

The linear model never superposes — at any sparsity

The claim in the box above deserves its own argument, because it is the paper's cleanest structural result and it is easy to prove with what we already have.

Remove the output ReLU. The model is now x′ = Ax + b with A = WTW, and the loss is a quadratic form in A that depends on the data only through its mean and covariance. Look at what sparsity does to those two objects:

μi = d/2,     Cov = ( d/3 − d2/4 ) In

The covariance is still a multiple of the identity. Sparsity changed the scalar σ2 and nothing else. So the minimiser of the loss is the same matrix A at every sparsity level, and only the loss value shrinks. The linear model does weighted PCA at S = 0, at S = 0.9, and at S = 0.999, and it represents exactly m features every time.

What that isolates. Sparsity is invisible to a quadratic loss on a linear model, because a quadratic loss only ever sees second moments and sparsity does not change the shape of the second moment here. Superposition needs the model to be able to notice the difference between "one feature is on at strength 0.6" and "three features are on at strength 0.2" — two inputs a linear map treats identically if they happen to produce the same h. The ReLU is what breaks that tie, by treating a negative readout differently from a positive one. Nonlinearity is the enabling condition, stated as sharply as this paper states anything.

A summary of the dense world, so we can watch it break

PropertyDense regime (S = 0)
Features representedExactly m — the m most important
Feature directionsOrthogonal
Gram matrix GA rank-m identity block, zero elsewhere
InterferenceZero, by construction
Role of the ReLUNone — the solution is identical to the linear model
Role of the biasPredict the mean of the abandoned features
Neuron interpretabilityPerfect. Each hidden unit is one feature. Monosemantic.
The pigeonhole boundTight. m dimensions, m features, no argument.

Note the second-to-last row, because it is the one this whole research programme is about. In the dense regime, interpretability is trivial: read off the hidden units and each one is a feature. If real networks lived here, mechanistic interpretability would be a solved problem and this paper would not exist.

In the dense regime the model abandons features 3, 4, 5. What does the optimal solution set their output to, and what does that cost?

Chapter 3: Sparsity Flips the Phase

Everything in chapter 2 was correct and everything in chapter 2 was about a world that does not exist. Real features are rare. "Mentions a legal obligation" is off in the overwhelming majority of sentences. So let us turn the one knob we have not touched and redo the arithmetic.

Nothing about the model changes. Same W, same tied decoder, same ReLU, same loss. The only edit is to the data generator: each feature is now zero with probability S. And the solution the model converges to changes completely.

Redo the triangle, this time with holes in the data

Recall the exact error identity from chapter 2, which did not assume anything about density:

error1 = min( x1, z ),    z = (x2 + x3)/2

Now walk the cases, and watch how many of them are free.

Case 1: feature 1 is off (probability S = 1 − d). Then x1 = 0, so min(0, z) = 0 — the error is exactly zero no matter what features 2 and 3 are doing. The interference is entirely absorbed by the ReLU: it pushes the readout negative, and negative is clipped. This case costs nothing and it is the majority of samples.

Case 2: feature 1 is on, features 2 and 3 both off (probability d(1−d)2). Then z = 0 and the error is min(x1, 0) = 0. Perfect reconstruction. Also free.

Case 3: feature 1 on, exactly one of 2 or 3 on (probability 2d2(1−d)). Now z = U/2 with U ~ Uniform[0,1], so z is uniform on [0, 0.5]. Using the same integral as before, ∫ min(x,z)2 dx = z2 − (2/3)z3, and averaging with density 2 on [0, 0.5]:

2 ∫00.5 ( z2 − (2/3)z3 ) dz = 2 [ z3/3 − z4/6 ]00.5 = 2 ( 0.0416667 − 0.0104167 ) = 1/16

Case 4: all three on (probability d3). This is the chapter-2 calculation: expected squared error 1/6.

Assemble. Multiplying each case by its probability:

E[ error12 ] = 2d2(1−d) · (1/16)  +  d3 · (1/6)  =  d2 [ (1−d)/8  +  d/6 ]
Read the exponent. The interference cost starts at d2. Not d. Interference requires two features to show up at the same party, and at density d that happens with probability d2. Meanwhile the cost of abandoning a feature, from chapter 1, is Ii Var(xi) = Ii(d/3 − d2/4), which starts at d. Linear beats quadratic as d → 0. That single sentence is the paper.

The crossover, solved exactly

Put the two candidate solutions side by side at general density d, with n = 5, m = 2, I = (1, 0.7, 0.49, 0.343, 0.2401).

Lortho(d) = (I3+I4+I5)(d/3 − d2/4) = 1.0731 (d/3 − d2/4)
Ltri(d) = (I1+I2+I3) d2[ (1−d)/8 + d/6 ] + (I4+I5)(d/3 − d2/4)

Subtract. The features 4 and 5 term is identical in both and cancels, leaving a startlingly clean statement:

Lortho − Ltri = I3(d/3 − d2/4)(I1+I2+I3) d2[ (1−d)/8 + d/6 ]

In words: what you gain is feature 3 no longer being thrown away. What you pay is interference, charged to all three features that now share the plane. Superposition wins when the green term exceeds the red one.

Substitute the numbers. Using (1−d)/8 + d/6 = 0.125 + 0.0416667d:

0.49 ( d/3 − d2/4 ) = 2.19 d2 ( 0.125 + 0.0416667 d )

Divide both sides by d (the d = 0 root is trivial) and expand:

0.163333 − 0.1225 d = 0.27375 d + 0.0912500 d2
0.0912500 d2 + 0.39625 d − 0.163333 = 0

Quadratic formula. The discriminant is 0.396252 + 4(0.09125)(0.163333) = 0.157014 + 0.059617 = 0.216631, whose square root is 0.465436. So

d* = ( −0.39625 + 0.465436 ) / ( 2 × 0.09125 ) = 0.069186 / 0.18250 = 0.379

Below density 0.379 — that is, above 62% sparsity — the triangle beats the orthogonal pair. Let us verify at two points.

Density dLorthoLtriWinner
1.00 (dense)1.0731 × 0.08333 = 0.08942.19 × 0.16667 + 0.0486 = 0.4136Orthogonal, by 4.6×
0.501.0731 × 0.10417 = 0.11182.19 × 0.25 × 0.14583 + 0.0607 = 0.1405Orthogonal, narrowly
0.3791.0731 × 0.090423 = 0.097030.044289 + 0.052726 = 0.09701Dead heat — the phase boundary
0.101.0731 × 0.030833 = 0.03310.0219 × 0.129167 + 0.0180 = 0.0208Triangle, by 37%
0.011.0731 × 0.0033083 = 0.0035500.000219 × 0.12667 + 0.0019287 = 0.001957Triangle, by 45%
An honesty note about these numbers. Both candidates were hand-picked and neither is optimal. The triangle was evaluated with b = 0 and unit column norms; a trained model shrinks the norms and adds a small negative bias, so the true triangle loss is lower than our figure and the true crossover happens at a higher density than 0.379. So treat 0.379 as a conservative lower bound on where superposition takes over, and treat the algebra as what it is: proof that the crossover exists and a demonstration of what drives it. The simulation below runs actual gradient descent, unconstrained by our guesses.

The full ladder — configurations compete, not features

We compared two solutions and found a boundary. But two is not all of them, and the extra candidates hold a genuine surprise. In two dimensions with five features there is a handful of natural configurations, and it is worth pricing every one — including two that use a trick we have not yet met.

The trick both of the new candidates use is the antipodal pair: two features on the same axis pointing opposite ways, cij = −1. Chapter 5 derives its cost from scratch; the result is that such a pair errs only when both members fire, and then by

errori = min( xi, xj )  →  E[errori2] = d2 · (1/6)

C3b, an axis plus a pair. Give the most important feature its own private axis and hang an antipodal pair off the other. W1 = (1,0); W2 = (0,1); W3 = (0,−1). Feature 1 is orthogonal to everything and reconstructs exactly; features 2 and 3 pay the pair cost; features 4 and 5 are abandoned.

L3b(d) = (I2+I3) d2/6 + (I4+I5) v = 0.19833 d2 + 0.5831 v,    v ≡ d/3 − d2/4

C4, the square. Two antipodal pairs on perpendicular axes: W1 = (1,0), W3 = (−1,0), W2 = (0,1), W4 = (0,−1). Four features represented; each pays the pair cost; only feature 5 is abandoned.

Lsquare(d) = (I1+I2+I3+I4) d2/6 + I5 v = 0.42217 d2 + 0.2401 v

Two boundaries, each a one-line solve. C3b overtakes the orthogonal pair when

0.19833 d2 < 0.49 v = 0.16333 d − 0.1225 d2  ⇒  d < 0.16333/0.32083 = 0.509

and the square overtakes C3b when

0.22383 d2 < 0.343 v = 0.11433 d − 0.08575 d2  ⇒  d < 0.11433/0.30958 = 0.369

Now put every candidate on one table and read down the columns.

Density dC2 pair (2 feats)C3 triangle (3)C3b axis+pair (3)C4 square (4)Winner
1.000.08940.41360.24690.4422orthogonal pair
0.5090.112570.144120.112550.13456tie: C2 vs C3b
0.450.106640.121690.098110.10935axis + pair
0.3690.095470.093740.078880.07884tie: C3b vs square
0.200.060810.044720.040980.03049square
0.050.017210.010050.009850.00491square
The triangle never wins — and that is the point. It beat the orthogonal pair below d = 0.379, but at three represented features the axis-plus-pair arrangement is strictly cheaper, and by d = 0.369 the square is cheaper still. The lesson is not about triangles. It is that configurations compete, not features: the model does not decide "should feature 3 be admitted?", it decides "which whole arrangement of the plane is cheapest?", and the answer changes in discrete jumps.

Why are the antipodal arrangements so strong? Because every off-diagonal Gram entry in them is 0 or −1 — there is no positive interference anywhere. A zero costs nothing because there is no crosstalk at all; a −1 costs nothing unless both partners fire, and then the ReLU still salvages the smaller of the two. Positive dot products, which the triangle and the pentagon are forced into, are the expensive kind, and chapter 6 puts a number on exactly how expensive.

Where the pentagon comes from

So when does a five-sided figure ever appear? When importance stops decaying. Set r = 1 so all five features matter equally, and redo the comparison at small d.

In a pentagon each feature has two neighbours at cos 72° = +0.309 and two at cos 144° = −0.809. The positive ones are the expensive ones: when a +0.309 neighbour fires alone at strength U, feature i's readout becomes 0.309U whether or not feature i is present, so the error is charged with probability d — linear, not quadratic:

2 × d × E[(0.309U)2] = 2d × 0.0954915/3 = 0.06366 d per feature

Five features means a total positive-interference bill of 5 × 0.06366d = 0.3183d. The benefit of admitting the fifth feature rather than abandoning it is I5d/3 = 0.3333d at uniform importance. Benefit beats cost, narrowly — and a negative bias (chapter 6) widens the margin. So the pentagon appears.

Now put the decaying importances back: the fifth feature is worth I5 = 0.2401, so the benefit falls to 0.0800d while the bill stays near 0.176d (the sum of importances is smaller, but so is the payoff). The pentagon loses, and the square stands.

The rule underneath both cases. Configurations with only non-positive dot products are cheap at any sparsity, because their entire cost is quadratic in d. Configurations that force positive dot products carry a linear-in-d bill, so they are admitted only when the feature they let in is important enough to pay it. Uniform importance pays; steeply decaying importance does not. Slide the r control in the simulation below and you can watch the geometry change identity.

Why it is a phase change and not a gradual blend

You might expect feature 3 to "fade in" — a column that grows continuously from zero as sparsity rises. That is not what happens, and the reason is structural.

Consider a tiny column W3 = δu for a small δ and unit direction u. The benefit of representing feature 3 with such a stub is proportional to δ2 at best (the reconstruction is δ2x3, so the residual barely moves), while the cost — the interference this stub sprays onto features 1 and 2 — is also order δ2. The two are the same order, and near W3 = 0 the loss surface is nearly flat. So the model sits at zero until the balance tips, and then falls into a qualitatively new configuration.

Empirically this shows up in three ways the paper documents carefully:

Sparsity phase explorer — the headline experiment

Real training, live: n features into m = 2 dimensions, 900 Adam steps per slider move. The circle shows the learned columns of W as arrows — length is how much of a dimension the feature got, angle is its direction. Drag sparsity from 0 upward. Watch dead features wake up one at a time and the survivors rotate to share the plane as evenly as they can. The panel reports how many features are represented and the total dimensionality spent.

Sparsity S 0.00
Features n 5
Importance r 0.70

What to look for, in order.

At S = 0, two arrows at right angles and three at the origin. Exactly chapter 2.

At S ≈ 0.60 (density 0.398, inside the middle band of the table) a third arrow appears — and look at the dimensionality panel rather than the picture. Feature 1 reads D = 1.00, features 2 and 3 read about 0.50 each. That is C3b: one private axis plus one antipodal pair, exactly as priced, and the trained loss should land near 0.086 against the predicted 0.0857.

At S = 0.90 a fourth arrow joins and the four settle into a cross — two antipodal pairs, D = 0.50 each, ∑Di = 2.00, loss near the predicted 0.0116. C4, as advertised.

Push r to 1.0 at S = 0.99 and the fifth arrow joins, spreading the five into a pentagon with D = 0.40 each. Pull r down toward 0.4 and the tail features stop being worth their bill, so the model keeps fewer of them and gives the survivors longer columns. Importance buys privacy; sparsity buys seats.

Press "new random seed" near a boundary and watch the geometry sometimes change while the loss barely moves. Those are two nearly-degenerate minima, and they are the reason the paper says these solutions have the flavour of physical phases rather than of unique optima.

Reproduce it yourself in forty lines

Nothing in this chapter should be taken on trust, and the whole experiment fits on one screen. This is the complete program — data generator, model, training loop, and the two measurements that matter.

pythonimport torch, math

n, m, S, r = 5, 2, 0.9, 0.7          # features, dims, sparsity, importance decay
I = r ** torch.arange(n)                # (n,)  1, .7, .49, .343, .2401
W = torch.randn(m, n, requires_grad=True)
b = torch.zeros(n, requires_grad=True)
opt = torch.optim.Adam([W, b], lr=0.05)

def batch(B=1024):
    u = torch.rand(B, n)
    return u * (torch.rand(B, n) > S).float()   # sparse, non-negative

for step in range(4000):
    x  = batch()
    h  = x @ W.T                          # (B, m)   THE BOTTLENECK
    xp = torch.relu(h @ W + b)            # (B, n)
    loss = (I * (x - xp) ** 2).sum(-1).mean()
    opt.zero_grad(); loss.backward(); opt.step()

# ---- measurement 1: which features survived, and how long are they? ----
norms = W.norm(dim=0)                     # (n,)  one per feature
print("column norms:", norms.detach().round(decimals=2).tolist())

# ---- measurement 2: the Gram matrix — diagonal is signal, off is crosstalk ----
G = (W.T @ W).detach()
print("Gram:\n", G.round(decimals=2))

# ---- measurement 3: feature dimensionality D_i = |W_i|^2 / sum_j (What_i . W_j)^2 ----
Wn = W / norms.clamp(min=1e-9)               # unit columns
D  = norms**2 / ((Wn.T @ W) ** 2).sum(1)
print("dimensionality:", D.detach().round(decimals=2).tolist(), "total", float(D.sum()))

Run it at S = 0 and you should see column norms like [1.00, 1.00, 0.00, 0.00, 0.00], a Gram matrix that is a 2×2 identity block, and dimensionalities [1, 1, 0, 0, 0] summing to 2. Run it at S = 0.9 and the norms come back with four non-zero entries and the dimensionalities cluster near 0.5, still summing to about 2.

The one line to stare at. h = x @ W.T is the entire bottleneck; everything else is bookkeeping. Twenty-eight parameters — ten in W, five in b, and the rest of the line is optimiser state — produce phase transitions, polytopes, and a research programme. That ratio of simplicity to consequence is the reason this paper is read.

The staircase, predicted

Using the ladder above, we can write down in advance what the sweep should look like for n = 5, m = 2, r = 0.7 — a falsifiable prediction rather than a description.

Density dSparsity SPredicted configurationRepresentedDimensionality per feature
1.00 – 0.5090 – 0.49orthogonal pair21.00, 1.00
0.509 – 0.3690.49 – 0.63private axis + one antipodal pair31.00, 0.50, 0.50
below 0.369above 0.63square: two antipodal pairs40.50 × 4
very small, with r → 1very highpentagon50.40 × 5

Every row keeps ∑Di = 2. Capacity is conserved; only its division changes. Now open the simulation and try to break the table — the four rows correspond to S = 0, S ≈ 0.60, S = 0.90, and S = 0.99 with r = 1.

Why negative dot products, every time?

Look at the arrows once superposition sets in: they always spread out to make the pairwise angles obtuse. The triangle sits at 120°, not at 60°. There is a specific reason, and it comes back to the ReLU.

If Wi · Wj < 0, then when feature j fires alone the readout for feature i is pushed below zero, and ReLU clips it to exactly the right answer. A negative dot product produces interference that is free to fix.

If Wi · Wj > 0, feature j firing alone pushes feature i's readout up, producing a false positive that the ReLU cannot remove — only a negative bias can, and the bias damages true activations as collateral. Positive interference is expensive; negative interference is nearly free.

Concrete comparison, worth doing on paper. Two unit features, x2 = 0.8 firing alone, b = 0. At 120° the readout for feature 1 is ReLU(−0.5 × 0.8) = ReLU(−0.4) = 0. Correct, error zero. At 60° it is ReLU(+0.5 × 0.8) = 0.4 — a confident hallucination of a feature that is not there, costing I1 × 0.16. Same absolute interference, wildly different loss. The geometry is not symmetric because the nonlinearity is not symmetric.

This asymmetry is the single most consequential detail in the toy model, and it is a direct consequence of choosing non-negative features. It is what makes the shapes in the next chapter be polytopes with negative pairwise dot products rather than an arbitrary near-orthogonal spray.

Why does superposition become inevitable as sparsity increases, regardless of the specific importance values?

Chapter 4: The Geometry Zoo

Once the model starts superposing, "how many features are represented" stops being a good question. Feature 1 might own a whole dimension, features 2 and 3 might split one between them, and features 4 through 8 might be crammed into the leftovers. We need a way to say how much of a dimension each feature got, as a number.

Feature dimensionality, defined and sanity-checked

The paper's definition. Write i = Wi/‖Wi‖ for the unit vector along feature i's direction. Then

Di  =  ‖Wi2  /  ∑j ( Ŵi · Wj )2

Unpack it slowly, because the shape of the expression is the whole idea. The numerator is how much magnitude feature i has. The denominator asks: along feature i's own direction, how much total feature-mass is piled up? The sum includes j = i, which contributes ‖Wi2, plus a term for every other feature that leans into i's direction. So Di is the fraction of that direction that belongs to i.

Check the two extremes.

Orthonormal. Wi is a unit vector perpendicular to everything. Numerator 1. Denominator 1 + 0 + 0 + … = 1. So Di = 1: a whole dimension, privately owned.

Not represented. Wi = 0. Numerator 0, so Di = 0. (The unit vector is undefined; take the limit, or just declare it zero.)

Antipodal pair. One dimension, two features: W1 = +1, W2 = −1. Then 1 = +1, numerator 1, denominator 12 + (−1)2 = 2, so D1 = 1/2. Half a dimension each. That is the answer we wanted and it fell out of the formula.

The general rule, derived

The arrangements the model converges to are almost always tight frames: sets of k equal-length vectors in m dimensions that are as evenly spread as vectors can be. Formally, a set of unit vectors {w1wk} in Rm is a tight frame when

j=1k wj wjT  =  (k/m) Im

which says the vectors have no preferred direction: summed as outer products, they look isotropic. Now compute the dimensionality of any member. Take any unit i:

j ( ŵi · wj )2 = ∑jiT wj wjTi = ŵiT ( ∑j wj wjT ) ŵi = ŵiT (k/m) I ŵi = k/m
⇒   Di = 1 / (k/m) = m / k
Dimensionality is conserved. If k features form a tight frame in m dimensions, each gets m/k, and the total is k × m/k = m. Exactly m. Superposition does not create capacity out of nothing — it changes how the m units of capacity are divided. The pigeonhole principle survives, in a subtler currency: you may sell fractions of a dimension, but you may not sell more than m dimensions in total.

Every named plateau in the paper is now a one-line calculation.

Arrangementk featuresin m dimsD = m/kPairwise cosine
Dedicated dimension111
Antipodal pair (digon)211/2 = 0.500−1
Triangle322/3 = 0.667−1/2
Tetrahedron433/4 = 0.750−1/3
Pentagon522/5 = 0.400+0.309 and −0.809
Square antiprism833/8 = 0.375mixed

Verify the pentagon by hand, because it is the one case where the frame is not obviously "even". Five unit vectors at 72° apart. From feature 1, the others sit at 72°, 144°, 216° and 288°. Cosines: cos 72° = 0.309017 (twice, by symmetry) and cos 144° = −0.809017 (twice).

j (Ŵ1 · Wj)2 = 12 + 2(0.309017)2 + 2(0.809017)2
= 1 + 2(0.0954915) + 2(0.6545085) = 1 + 0.190983 + 1.309017 = 2.500000
D1 = 1 / 2.5 = 0.4 = 2/5  ✓  matching m/k = 2/5

The two irrational cosines conspired to give exactly 5/2. That is not luck — it is the tight-frame identity, and the fact that it holds is a good check that the regular pentagon really is one.

Why these shapes and not others

Two separate forces pick the geometry, and separating them explains everything in the table.

Force one: minimise total squared interference. The loss is quadratic in the errors, and the errors are built from the crosstalk terms Wi · Wj. So to first order, the model wants to minimise

FP = ∑ij ( wi · wj )2

This quantity has a name in frame theory: the frame potential. A classical theorem (Benedetto and Fickus, 2003) says its minimum over unit vectors is k2/m, and the minimisers are precisely the tight frames. So the very structure the paper observes is the known solution to the "spread k vectors as evenly as possible" problem — the same family of problems as the Thomson problem for electrons on a sphere.

Force two: prefer negative interference. Chapter 3 showed why: negative crosstalk is clipped away for free by the ReLU, positive crosstalk becomes a false positive. So among the tight frames, the model prefers ones whose pairwise dot products are non-positive.

Now here is the fact that makes the table make sense:

In m dimensions, at most m + 1 vectors can have pairwise negative inner products. Try it in the plane: two vectors at 180° work; three at 120° work; four cannot — some pair must open to less than 90°. The maximum is achieved by the regular simplex: m+1 unit vectors with every pairwise cosine equal to −1/m. This is exactly the antipodal pair (m=1, cos = −1), the triangle (m=2, cos = −1/2), and the tetrahedron (m=3, cos = −1/3).

That single fact explains the sticky plateaus at 1/2, 2/3 and 3/4: they are m/(m+1) for m = 1, 2, 3. And it explains the model's favourite trick when it has more features than a simplex can hold: split the space into orthogonal blocks and put a simplex in each one. Two orthogonal dimensions can hold two antipodal pairs (4 features, D = 1/2 each, no positive interference anywhere). A 3-dimensional space can hold a triangle in a plane plus a dedicated axis (4 features, D = 2/3, 2/3, 2/3, 1).

Only when sparsity is extreme — when even positive interference is cheap because co-activation is so rare — does the model start accepting shapes with positive dot products: pentagons, square antiprisms, and beyond. The zoo is ordered by how much positive interference the sparsity budget can absorb.

Polygon packing visualiser

Pack k unit vectors into the plane as evenly as possible and read off the consequences. Left: the arrangement, with feature 1 highlighted and every other feature drawn in green if its interference onto feature 1 is negative (free — the ReLU eats it) or red if positive (a false positive that must be paid for). Right: the Gram matrix and the derived quantities, including a live check that the tight-frame identity gives exactly k/m.

Features k:

Flip between the two modes at k = 4. The even packing is a square: four vectors 90° apart, which is the same thing as two antipodal pairs on perpendicular axes. Every off-diagonal entry is either −1 or 0 — no positive interference at all, and D = 1/2. Now go to k = 5 and watch red appear for the first time: in the plane, five features cannot avoid leaning into each other.

Working the tetrahedron, and a table to check yourself against

The plane is easy to draw and therefore easy to over-trust. Do one three-dimensional case by hand so the general rule is not just a formula you accepted.

Four unit vectors in R3 pointing at the vertices of a regular tetrahedron from its centre have every pairwise cosine equal to −1/3. (Quick check that this is forced: if ∑wj = 0 then 0 = ‖∑wj2 = 4 + 12c, giving c = −1/3, where 12 is the number of ordered distinct pairs.) So

j (Ŵ1 · Wj)2 = 12 + 3 × (1/3)2 = 1 + 1/3 = 4/3 = k/m  ✓
D1 = 1 / (4/3) = 3/4,    total ∑Di = 4 × 3/4 = 3 = m  ✓

That trick — expanding ‖∑wj2 = 0 — gives the simplex cosine in any dimension: m+1 unit vectors summing to zero force (m+1) + m(m+1)c = 0, hence c = −1/m. Antipodal pair: −1/1 = −1. Triangle: −1/2. Tetrahedron: −1/3. All three rows of the zoo, from one line of algebra.

k featuresm dimsShapePairwise cosD = m/kAny positive dots?
21antipodal pair−10.500No
32triangle−0.5000.667No
42square (two pairs)0 and −10.500No
52pentagon+0.309, −0.8090.400Yes
43tetrahedron−0.3330.750No
63octahedron (three pairs)0 and −10.500No
83square antiprismmixed0.375Yes

Read the last column together with the fifth. Every all-negative configuration sits at D ≥ 1/2, and the moment a shape needs positive dot products its dimensionality drops below a half. That is not a coincidence: k > 2m features cannot be tiled into antipodal pairs, and antipodal pairs are the last all-negative option. D = 1/2 is the frontier of free superposition.

Sum of squares, not maximum — and why that matters

There is a competing notion of "spread out as evenly as possible", and the difference between the two is instructive.

The Welch bound states that for k unit vectors in Rm,

maxi≠j | wi · wj |  ≥  √( (k − m) / ( m(k − 1) ) )

For the triangle (k=3, m=2) this gives √(1/4) = 0.5, which the triangle achieves exactly — it is optimal for both criteria at once. For the pentagon (k=5, m=2) the bound is √(3/8) = 0.6124, and the pentagon's worst cosine is 0.809. So the pentagon is not the arrangement that minimises the largest overlap.

It is nonetheless what the model finds, because the loss is a sum of squared errors, and squared error is driven by the total crosstalk energy ∑cij2, not by the single worst pair. Minimising the sum is the frame-potential problem, whose answer is the tight frame. Minimising the max is the Grassmannian packing problem, whose answer is different. The geometry a model chooses is a fingerprint of its loss function.

A prediction that falls out of that. Train the same toy with an L1 reconstruction loss or a max-error loss and the polytopes should change — toward configurations that equalise the worst pair rather than the total energy. Nobody should be surprised if a model trained on cross-entropy rather than MSE arranges its features differently from anything in this chapter. The zoo is a zoo of solutions to one optimisation problem.

What the learning dynamics look like

Because the geometries are discrete, training does not glide toward them. The paper reports loss curves with long flat stretches punctuated by sudden drops, and shows that each drop corresponds to a change of shape — a feature switching on, a pair collapsing into a digon, a square reorganising into a pentagon. The authors describe these as energy levels, and the analogy is apt: the model spends most of its time in one configuration and occasionally tunnels into a lower one.

Two practical consequences follow, and both should feel familiar if you have ever trained anything.

Plateaus are not always a bug. A flat loss curve can mean the optimiser is stuck at a saddle between two geometries, and pushing through it — more steps, a learning-rate bump, a different seed — produces a discrete improvement rather than a gradual one.

Seeds matter more near boundaries. When two configurations have nearly equal loss, which one you land in is decided by initialisation. This is a mild but real reproducibility hazard for interpretability work: the "features" you find may be a property of the run, not just of the task.

Correlation changes the shape, but is not the cause

The paper also studies features that are not independent, and the result is a nice consistency check on the whole mechanism.

Feature relationshipWhat the model doesWhy
Anticorrelated — never active togetherPuts them in an antipodal pair, eagerly, even at low sparsityThe interference term is multiplied by the probability of co-activation, which is now zero. Sharing is genuinely free.
Correlated — tend to fire togetherPushes them toward orthogonality, or represents them as a combined directionCo-activation is common, so shared directions get charged constantly. Better to spend real dimensions, or to compress the correlated group into fewer effective features.
Independent (our default)Tight frames, as aboveCo-activation probability is exactly d2 for every pair, so all pairs are equally expensive and symmetry wins.
The distinction that gets lost in summaries. Correlation structure changes which features share which directions. Sparsity is what makes sharing viable at all. You can have superposition with perfectly independent features (we just did, for four chapters); you cannot have it with dense features no matter how you correlate them. If someone tells you superposition is "because features are correlated", they have swapped the modifier for the mechanism.
Why are 1/2, 2/3 and 3/4 the most frequently observed feature dimensionalities, rather than arbitrary fractions?

Chapter 5: The Phase Diagram

Chapter 3 found one boundary by comparing two hand-built solutions. This chapter does the whole map. To make that possible we shrink the model until every candidate solution can be written down and every expected loss integrated in closed form.

Two features. One dimension. n = 2, m = 1. That is the smallest system in which the question "should these two share?" can even be asked.

h = w1 x1 + w2 x2  (a scalar),    x′i = ReLU( wi h + bi )

Two parameters in W, two in b. And because a one-dimensional space has exactly two directions, there are only three qualitatively distinct things the model can do.

The three candidate solutions, priced

Solution A — keep feature 1, drop feature 2. Set w = (1, 0) and b = (0, d/2).

Then h = x1, so x1 = ReLU(x1) = x1: exact, always. And x2 = ReLU(d/2), the constant mean of feature 2, which by chapter 2's argument costs its variance:

LA = I2 Var(x2) = I2 ( d/3 − d2/4 )

Solution B — keep feature 2, drop feature 1. By symmetry,

LB = I1 ( d/3 − d2/4 )

Solution C — superposition. Put them at opposite ends of the single dimension: w = (1, −1), b = (0, 0). Now h = x1x2, and

x′1 = ReLU( x1 − x2 ),    x′2 = ReLU( x2 − x1 )

Check the easy cases first, because they are the whole reason this works. If only feature 1 fires: x1 = ReLU(x1) = x1 exactly, and x2 = ReLU(−x1) = 0, also exactly. Symmetrically if only feature 2 fires. If neither fires, both outputs are 0. Three of the four cases are perfect.

Only when both fire does anything go wrong, and the error is our old friend:

x1 − ReLU(x1 − x2) = min(x1, x2)

For two independent uniforms on [0,1], the minimum has density 2(1−t), so

E[ min(X,Y)2 ] = ∫01 t2 · 2(1−t) dt = 2( 1/3 − 1/4 ) = 1/6

Both features fire with probability d2, and both pay the same expected error, so

LC = ( I1 + I2 ) d2 / 6
Look at the exponents once more. LA and LB lead with d. LC leads with d2. Below some density, C must win; above it, A or B must. There is no parameter choice that avoids the crossing, only choices of where it happens.

Solving for the boundaries

Superposition beats dropping feature 2 when LC < LA:

(I1 + I2) d2/6  <  I2( d/3 − d2/4 )

Divide through by d (positive) and gather the d terms on the left:

(I1+I2) d/6 + I2 d/4  <  I2/3

Multiply everything by 12 to clear denominators:

2(I1+I2) d + 3 I2 d < 4 I2  ⇒  d ( 2I1 + 5I2 ) < 4 I2
⇒   d  <  4 I2 / ( 2 I1 + 5 I2 )

And by the mirror argument, superposition beats dropping feature 1 when d < 4I1/(5I1 + 2I2). Superposition is optimal exactly when both hold.

Worked check at equal importance. Set I1 = I2 = 1. Both conditions become d < 4/7 = 0.5714. Verify by evaluating all three losses at exactly d = 4/7:

LC = 2 × (4/7)2/6 = 2 × 0.326531/6 = 0.108844
LA = 1 × ( 0.571429/3 − 0.326531/4 ) = 0.190476 − 0.081633 = 0.108844  ✓

Identical to six decimal places, as an exact boundary should be. In sparsity terms: with two equally important features and one dimension to share, superposition is optimal above 42.9% sparsity and dropping one is optimal below it.

A second check, with lopsided importance. I1 = 1, I2 = 0.1. Then d < 4(0.1)/(2 + 0.5) = 0.4/2.5 = 0.16. A feature ten times less important must wait until 84% sparsity before it is worth letting into the dimension at all. Importance buys you a seat; sparsity decides how many seats there are.

Importance ratio r = I2/I1Superposition needs density belowi.e. sparsity above
1.0 (equal)4/7 = 0.57142.9%
0.52.0/4.5 = 0.44455.6%
0.20.8/3.0 = 0.26773.3%
0.10.4/2.5 = 0.16084.0%
0.020.08/2.1 = 0.03896.2%
The shape of the boundary, in one observation. As r → 0 the required density goes to zero like 2r: an arbitrarily unimportant feature is admitted only at arbitrarily high sparsity, but it is always eventually admitted. There is no importance so small that the feature is permanently excluded — there is only a sparsity threshold. That is what people mean when they say large models "represent everything, faintly."

Why there is no fourth region

In one dimension, if both features are represented, w1 and w2 are two non-zero scalars, so they either have opposite signs or the same sign. Opposite signs is solution C. Same sign is strictly worse: when feature 2 fires alone, feature 1's readout is ReLU(w1w2x2) > 0 — a false positive on a sample where the antipodal arrangement was exactly right. So there is nothing else to consider, and the phase diagram genuinely has three regions and no more.

In higher dimensions this exhaustiveness disappears — that is why chapter 4 needed a zoo — but the qualitative picture survives: a dense region with orthogonal representation of the top features, a sparse region with superposition, and a boundary that moves with importance.

The phase diagram, and a model trained inside it

Every cell is coloured by which of the three closed-form solutions above is cheapest at that (sparsity, importance) pair — no fitting, no approximation, just the formulas we derived. The white curve is the boundary d = 4I2/(2I1+5I2) and its mirror. Click any cell to run 900 real gradient-descent steps at that setting; the bar underneath shows the weights the optimiser actually found, and the readout compares its loss against all three predictions.

Click around the diagram and check three things.

Deep in the blue region (dense, lopsided importance), the trained weights come back as roughly (1, 0): one feature owns the dimension, the other's weight is pinned at zero. The trained loss should match LA.

Deep in the warm region (sparse), the weights come back with opposite signs and similar magnitudes: an antipodal pair. Trained loss matches LC.

On the boundary, the optimiser is genuinely uncertain, and the trained loss sits slightly below both predictions — because gradient descent is free to use intermediate solutions our three candidates did not include, such as a shortened second column with a small negative bias. That gap is a feature of the exercise, not a bug: closed-form candidates give bounds, and the optimiser finds the interior.

Three features, one dimension: a hard ceiling appears

Add a third feature and keep m = 1. Now something qualitatively new happens: the third feature can never be admitted, at any sparsity. Here is why, and it is a useful counterweight to the impression that sparsity buys unlimited capacity.

A one-dimensional space has exactly two directions. Features 1 and 2 take them, antipodally. Feature 3 must share a direction with one of them — say with feature 1, so c13 = +1 (or, with a shorter column, some positive number). Positive interference at full strength. When feature 3 fires alone at strength u, feature 1's readout is ReLU(u − β), a false positive of essentially the whole magnitude.

Price it at leading order in d. With β = 0 the false-positive cost charged to feature 1 is

I1 · d · E[U2] = I1 d / 3

and the entire benefit of admitting feature 3 is at most I3d/3 — the variance we stop discarding. Since importances are ordered, I1I3, so the cost charged to feature 1 alone already equals or exceeds the whole benefit, before we count feature 3's own errors or feature 2's. The optimal threshold recovers at most 41% of it (chapter 6), which is not enough to flip an inequality this lopsided.

Capacity is not unbounded, it is m-shaped. In one dimension you can superpose two features and never three. In m dimensions the analogous all-negative ceiling is m+1 (the simplex) and the all-non-positive ceiling is 2m (antipodal pairs on orthogonal axes). Beyond 2m, every additional feature carries a bill that is linear in d and must justify itself on importance. Sparsity makes superposition cheap; it does not make it free, and it never removes the dimension count from the story.

What happens on the boundary, and why runs disagree

Exactly at d* the three solutions cost the same, and interesting things happen in a neighbourhood around it.

The loss landscape flattens. Two distinct configurations have equal loss, and the path between them passes through intermediate weights — a shortened second column with a compensating bias — that are only slightly worse. Gradient descent has little pressure to prefer either.

Optimisers find the interior. Our three candidates are corners of a continuum. The trained loss at the boundary usually comes in a little below all three closed forms, because a partial solution — say w = (1, −0.55) with b2 = −0.06 — can beat both corners. That is a general lesson about closed-form analysis: it gives you correct bounds and correct asymptotics, and it under-states what an optimiser will do in between.

Seeds diverge. Run the same configuration twice near the boundary and you can get an antipodal pair one time and a collapsed column the next. Not a bug; a genuine degeneracy in the objective.

Why an interpretability researcher should care about that last point. If two runs of the same model on the same data can settle into different feature geometries with the same loss, then "the features of this model" is a statement about a run, not about a task. Any claim that a particular decomposition is canonical needs to survive a seed sweep before it is believed. The toy model makes that hazard measurable in seconds; in a production model it is expensive and correspondingly rarely checked.

Reading the diagram the way the paper draws it

The paper plots the horizontal axis as 1/(1−S) = 1/d on a log scale, which stretches the interesting sparse region out and compresses the dense corner. The consequence is worth stating plainly, because it is the practical takeaway for real systems:

The sparse phase is enormous, and real features live in it. Density 0.01 — a feature present in one input in a hundred — is unremarkable for a real feature in a real model. At d = 0.01 the boundary condition d < 4r/(2+5r) admits features down to importance ratio r ≈ 0.005: two hundred times less important than the primary feature, and still worth superposing. The dense corner of this diagram, where our intuitions were formed, is a sliver.
In the two-feature, one-dimensional model with equal importances, superposition is optimal above 42.9% sparsity. Which step of the derivation produced that specific number?

Chapter 6: The Cost of Sharing

We have priced two specific arrangements exactly and watched a phase boundary come out of the algebra. Now we do the general accounting: for an arbitrary geometry, what exactly does interference cost, what does the bias buy, and when is the trade worth making?

The anatomy of a readout

Write cij = Wi · Wj for the entries of the Gram matrix, and let gi = cii = ‖Wi2 be the gain on feature i's own signal. Take the bias to be bi = −βi with βi ≥ 0 — a threshold. Then

x′i = ReLU( gi xi  +  Yi  −  βi ),    Yi ≡ ∑j ≠ i cij xj

Yi is the interference hitting feature i on this sample. Three separate things can now go wrong, and it is worth naming them because they trade against each other:

FailureWhen it happensControlled by
Signal attenuationgi < 1: the feature reads back weaker than it went inColumn length. The model shrinks columns when interference is worse than under-reading.
False positivexi = 0 but Yi > βi: a feature is hallucinatedThe threshold βi, and the sign of the cij
Missed signalxi > 0 but the threshold eats itAlso βi — in the opposite direction

The statistics of the interference term

Yi is a weighted sum of independent sparse features, so its first two moments are immediate. Using E[x] = d/2 and Var(x) = d/3 − d2/4:

E[Yi] = (d/2) ∑j≠i cij

Var(Yi) = ( d/3 − d2/4 ) ∑j≠i cij2

Both are linear in d to leading order, which looks alarming until you remember that the loss only charges you when the interference actually causes an error. Still, these two numbers tell you the shape of the problem, and they connect straight back to chapter 4.

For a tight frame of k unit vectors in m dimensions arranged symmetrically about the origin, ∑j Wj = 0, so

j≠i cij = −cii = −1,     ∑j≠i cij2 = k/m − 1
Symmetric packings are self-cancelling on average. The mean interference is −d/2 — negative. A tight frame that is centred on the origin arranges for the crosstalk to lean the safe way, into the region ReLU deletes. This is not a coincidence the model stumbled onto; it is the same force from chapter 3 (negative interference is free) acting at the level of the whole configuration. And the spread, √((k/m − 1)Var(x)), grows with how overloaded the space is: k/m is features per dimension.

The decisive computation: positive versus negative sharing

Here is where the chapter earns its title. Take two unit-length features at angle θ, so c12 = cos θ. Consider only the samples where exactly one of them fires — those have probability 2d(1−d), and they are the majority of interesting samples in a sparse world. Compare two angles.

θ = 180°, antipodal. c12 = −1. Feature 2 fires alone at strength u. Feature 1's readout is ReLU(−u) = 0, which is the correct answer. Cost: exactly zero. Errors occur only when both fire, at probability d2, and cost 1/6 each — the chapter 5 result.

θ = 60°. c12 = +0.5. Feature 2 fires alone at strength u. Feature 1's readout is ReLU(0.5u − β). With no threshold (β = 0) that is 0.5u: a hallucination with expected square

E[ (0.5U)2 ] = 0.25 × E[U2] = 0.25/3 = 0.08333

and it is charged on every sample where the other feature fires alone — probability d(1−d), which is linear in d. Positive interference does not enjoy the d2 discount at all. This is the quantitative version of chapter 3's claim, and the factor is enormous: at d = 0.01, linear-in-d is a hundred times worse than quadratic-in-d.

What the threshold buys, optimised exactly

The model is not helpless against positive interference — it has β. Let us find the best β for the 60° case and see how much it recovers. Two terms compete, and by symmetry they carry the same probability weight d(1−d):

False positives. Feature 2 alone at strength U. Cost E[ReLU(0.5U − β)2]. Substituting t = 0.5u − β:

1 (0.5u − β)2 du = 2 ∫00.5−β t2 dt = (2/3)(0.5 − β)3

Missed signal. Feature 1 alone at strength X. Readout ReLU(X − β), so the error is min(X, β), and from chapter 2's integral its expected square is β2 − (2/3)β3.

Total per-feature cost factor:

f(β) = (2/3)(0.5 − β)3 + β2 − (2/3)β3

Differentiate and set to zero:

f′(β) = −2(0.5−β)2 + 2β − 2β2 = 0
⇒ −(0.25 − β + β2) + β − β2 = 0  ⇒  2β2 − 2β + 0.25 = 0
β* = ( 2 − √2 ) / 4 = 0.146447

Substitute back, carefully:

(0.5 − β*)3 = 0.3535533 = 0.044194  →  × 2/3 = 0.029463
β*2 = 0.021447
β*3 = 0.003141  →  × 2/3 = 0.002094
f(β*) = 0.029463 + 0.021447 − 0.002094 = 0.048816

Against f(0) = 0.083333, the optimal threshold recovers 41% of the damage. Real, useful — and completely unable to change the scaling. The cost is still d(1−d) × 0.0488, still linear in d.

Put the two side by side at d = 0.1. Antipodal pair: d2/6 = 0.01/6 = 0.00167 per feature. Sixty degrees with the optimal threshold: 0.0488 × 0.1 × 0.9 = 0.00439 per feature — 2.6× worse. At d = 0.01 the numbers are 0.0000167 and 0.000483: 29× worse. The penalty for positive interference grows without bound as the world gets sparser, which is why the geometries in chapter 4 fight so hard to stay obtuse.

The general "does it pay" rule

Now we can state the decision the model faces for any new feature j it is considering admitting into an already-crowded space.

Benefit = Ij Var(xj) = Ij ( d/3 − d2/4 )   ≈   Ij d / 3
Cost ≈ ∑i Ii · [  d · κ+ij  +  d2 · κij  ]

where κ+ collects the false-positive terms from positive dot products (paid whenever one feature fires alone) and κ collects the co-activation terms (paid only when two fire together). Everything the paper observes follows from which term dominates:

Interference calculator

Two unit features sharing a plane at angle θ, with threshold β and density d. Everything on the right is a Monte-Carlo estimate over 8,000 fresh samples, decomposed into the three failure modes named above, and compared against the alternative of simply dropping feature 2. Set θ = 180° and watch every bar except co-activation go to zero. Then set θ = 60° and hunt for β = 0.146.

Angle θ 180°
Threshold β 0.00
Density d 0.20

Capacity: the budget you cannot exceed

Chapter 4 showed that the feature dimensionalities of a tight frame sum to exactly m. The paper turns this into a general accounting notion it calls capacity: each feature consumes some fraction of a dimension, and the total consumption is bounded by the number of dimensions you have. Superposition is a reallocation, not a free lunch.

What sparsity changes is not the size of the budget but how finely it can be divided. In the dense regime the only permitted allocations are 0 and 1 — a feature either owns a dimension or gets nothing. As sparsity rises, halves become available, then thirds, then fifths. The paper's capacity plots show exactly this: sharp bands at 1, then 1/2, then lower, with the transitions at the phase boundaries we derived in chapter 5.

How many features fit? A usable scaling law

Chapter 0 gave a geometric answer — exponentially many directions fit. That answer is useless on its own, because it ignores whether the resulting code can be read. Here is the answer the loss actually cares about, and it is much smaller and much more useful.

Suppose k unit features sit in m dimensions in a roughly symmetric arrangement, so the typical squared cosine between two of them is about 1/m — the value you get from random directions and the value a tight frame with km approaches. Then, from the variance formula above,

Var(Yi) ≈ ( k − 1 ) · (1/m) · Var(x) ≈ (k/m) · (d/3)

Now impose an engineering requirement: the standard deviation of the interference must stay below some tolerance τ, chosen relative to the size of a real activation (which averages 1/2 in our generator). Setting Var(Yi) ≤ τ2 and solving for k:

k  ≲  3 m τ2 / d
Features scale like dimensions over density. Not exponentially, not logarithmically — linearly in m and inversely in d. Halving how often your features fire doubles how many of them you can carry. That is the sentence to remember from this chapter, and it is why sparsity is more valuable than width: width is expensive and linear, sparsity is a property of the world and appears in the denominator.

Worked example. Take m = 768 and τ = 0.2 (interference standard deviation of 0.2 against typical activations near 0.5 — noticeable but recoverable).

d = 0.01:   k ≲ 3 × 768 × 0.04 / 0.01 = 92.16 / 0.01 = 9,216
d = 0.001:   k ≲ 92.16 / 0.001 = 92,160
d = 0.1:    k ≲ 92.16 / 0.1 = 922

Sanity-check the middle number against intuition: 92,000 features in 768 dimensions is 120 features per dimension. That sounds absurd until you notice that at d = 0.001 only about 92 of them are on at once, so the hidden vector is a sum of 92 terms in a 768-dimensional space — comfortably underdetermined, but nowhere near saturated.

And note which bound is binding. The geometric capacity from chapter 0 at these dimensions runs into the thousands and beyond; the number above is what the reconstruction quality permits. Superposition is limited by interference budget, not by packing. That is why the paper is about a loss function rather than about sphere packing.

A rule of thumb worth carrying out of this chapter. Features per dimension ≈ k/m, and the interference variance per feature grows like (k/m − 1) × Var(x). To keep the signal-to-interference ratio fixed as you pack more features in, you need the density to fall roughly as fast as the packing ratio rises. Sparsity is not a nice-to-have that permits superposition; it is the currency that pays for it, and the exchange rate is on this page.
Two features share a plane. Arrangement A puts them 180° apart; arrangement B puts them 60° apart with the optimal threshold β = 0.146. As density d falls toward zero, what happens to the ratio of their interference costs?

Chapter 7: Computing in Superposition

Everything so far has been about storage. The model's only job was to hold n features in m slots and hand them back. A real network does something harder: it computes. Attention heads compose, MLPs apply nonlinear functions, information gets transformed on its way through.

So the paper asks the sharper question. Not "can you store more features than you have dimensions" but "can you compute functions of more features than you have neurons?" The answer is yes, with the same mechanism and the same currency, and the consequences for interpretability are worse.

A function simple enough to fully understand

The paper picks absolute value. Features are now signed — xi is zero with probability S and otherwise uniform on [−1, 1] — and the target is

yi = | xi |

with the model being a one-hidden-layer ReLU network:

h = ReLU( W x ),   W ∈ Rm×n   →   y′ = ReLU( V h + b ),   V ∈ Rn×m

Why absolute value? Because it is the simplest function that a linear model cannot do at all. A linear map cannot produce |x|; you need the nonlinearity. So any success here is unambiguously computation, not clever routing.

The monosemantic circuit, built by hand

ReLU keeps positives and zeroes negatives. So ReLU(x) is the positive part of x, and ReLU(−x) is the magnitude of its negative part. Add them:

ReLU(x) + ReLU(−x) = |x|      for every real x

Check both branches. If x = 0.6: ReLU(0.6) + ReLU(−0.6) = 0.6 + 0 = 0.6 ✓. If x = −0.6: 0 + 0.6 = 0.6 ✓. If x = 0: 0 + 0 = 0 ✓.

So for n features you can build an exact circuit with m = 2n neurons: rows of W equal to +ei and −ei, and each output summing its own pair. Every neuron responds to exactly one feature; every output is exact everywhere, not just on average. This is the monosemantic solution, and it is what an interpretability researcher dreams about.

Two neurons per feature is the honest price of a nonlinearity. The reason abs costs two rather than one is that a single ReLU is a hinge with the hinge at zero, and |x| has a corner pointing the other way. You need one unit for each side. Any function with k distinct linear pieces needs at least k−1 hinges to build monosemantically. Neuron budgets are not arbitrary — they are set by the shape of the function.

Where it breaks: four rays, three neurons

Now cut the budget. Two features, three neurons. Can we still be exact?

Here is the tool that makes this tractable. At high sparsity the data does not fill the plane — it concentrates on the coordinate axes, because at most one feature is usually non-zero. There are exactly four rays to get right:

+e1 = (t, 0),   −e1 = (−t, 0),   +e2 = (0, t),   −e2 = (0, −t)    for t > 0

Every neuron is ReLU(w · x), which is positively homogeneous: along a ray, its output is just t times a constant. So the whole circuit is described by a 3 × 4 table — three neurons, four rays — and the required outputs are also fixed: y1 must be t on both e1 rays and 0 on both e2 rays, and vice versa.

Try a circuit. Take n1 = ReLU(x1), n2 = ReLU(−x1x2), n3 = ReLU(x2), and tabulate:

Rayn1n2n3Wanted (y1, y2)
+e1t00(t, 0)
e10t0(t, 0)
+e200t(0, t)
e20t0(0, t)

Look at rows two and four. The neuron activations are identical — (0, t, 0) in both cases — but the required outputs are different: (t, 0) versus (0, t). No readout, linear or otherwise, can produce two different answers from the same input. The circuit has collided two rays, and one of them must be sacrificed.

Try to fix it and you will find the fix moves the collision rather than removing it. Each neuron fires on at most one of the two e1 rays (a ReLU cannot be positive at both +x1 and −x1) and at most one of the two e2 rays, so covering all four rays with three neurons forces at least one neuron to be mixed. A mixed neuron contributes positively to two rays that need opposite answers, and the readout must then either cancel it — killing a ray that needed it — or accept it, producing a false positive.

The honest statement. Superposed computation is not exact, even in the one-feature-at-a-time limit where superposed storage was perfect. Storage got a free lunch from the ReLU clipping negative interference; computation has to actually produce a number, and the wrong ray produces the wrong number. Every three-neuron circuit for two absolute values has a leak. Gradient descent does not find an exception — it finds the cheapest leak.

What the paper actually observes

Given that, does anything interesting happen? Yes, and the paper documents it carefully.

Trained models do compute absolute value for more features than they have neuron-pairs, at high sparsity. The solutions have a characteristic form the paper calls asymmetric superposition: the positive and negative halves of a feature are handled differently. One half gets clean treatment from a nearly-dedicated neuron; the other half shares a neuron with a different feature and pays a leak. Which half is favoured, and which features share, is decided by importance and by initialisation.

The result is a layer of polysemantic neurons: units whose weight rows have several substantial entries, and which therefore light up for several unrelated features. Poke such a neuron with a dataset and you get a jumble — "fires for Python code, Korean text, and DNA sequences" — which is precisely the phenomenon that motivated this line of research.

Why leaky circuits are good enough: the data lives on a skeleton

Here is the reframing that makes superposed computation stop feeling like a hack.

A circuit's correctness is usually judged over its whole input domain. But the loss does not integrate over the domain — it integrates over the data distribution. And a sparse distribution puts almost all of its mass on a thin skeleton: with n features at density d, the probability that exactly one feature is non-zero is nd(1−d)n−1, and the probability that two or more are non-zero shrinks like d2.

Worked numbers. Take n = 100 features at density d = 0.01. The number of active features is Binomial(100, 0.01), so:

P(none active) = 0.99100 = 0.3660
P(exactly one) = 100 × 0.01 × 0.9999 = 0.3697
P(two or more) = 1 − 0.3660 − 0.3697 = 0.2643

Now drop the density to 0.001: P(two or more) = 1 − 0.999100 − 100(0.001)(0.99999) = 1 − 0.90479 − 0.09057 = 0.00464. A hundred-fold reduction in the region where any interaction can go wrong, for a ten-fold reduction in density. The volume of input space where a superposed circuit is broken can be almost all of it, while the probability of ever visiting it is under half a percent.

Computing |x| with too few neurons

Left: a map of the error |yf − |xf|| over the whole input square, for the selected circuit and feature — dark is correct, bright is wrong. The dots are actual samples drawn at your density setting, so you can see how much of the broken region the data ever visits. Right: the four-ray table for this circuit, and the Monte-Carlo loss of all three circuits as a function of density. The monosemantic circuit uses four neurons; the others use three.

Show error for:
Density d 0.16

Two observations to take away from that map.

The monosemantic circuit is black everywhere. Exactness on the whole square, at the cost of a fourth neuron. Notice that its loss curve is flat at zero regardless of density — sparsity buys it nothing, because it was never wrong.

The three-neuron circuits are black along most of the cross and bright off it. Slide the density down and watch the sample dots retreat onto the arms of the cross, abandoning the bright regions. The loss curves fall accordingly. That falling curve is superposition paying for itself — and it is the same shape of argument as chapters 3 and 5, applied to a circuit rather than a code.

Reading a polysemantic neuron

Take the mixed circuit above and interrogate its second unit the way an interpretability researcher would — by asking what makes it fire.

n2 = ReLU( −x1 − x2 )

Feed it inputs and tabulate.

Inputn2What a researcher would write in the notebook
(−0.9, 0)0.90"strong response to negative feature 1"
(0, −0.9)0.90"strong response to negative feature 2"
(+0.9, 0)0"silent for positive feature 1"
(−0.5, −0.4)0.90"responds to the combination too"
(−0.9, +0.9)0"and cancels — so it is not a feature detector at all"

Every row is a true observation and the summary is a mess. The honest description — "this unit computes the positive part of −x1x2" — is not a feature, it is a coordinate of a rotated basis with a hinge on it. Asked "what does this neuron mean?", the correct answer is that the question has no answer, because meaning lives in the directions and this unit is not aligned with one.

Notice too that the last row is the killer for maximum-activating-example methods. A dataset search will surface inputs where x1 and x2 are both negative, because those maximise the response — and it will conclude the neuron detects the conjunction, which is exactly wrong. The unit is a linear projection, not an AND gate, and the top-k examples cannot tell the difference.

Why gradient descent settles for a leak

One more thing is worth saying, because it explains why the leaks land where they do rather than anywhere.

The gradient on the readout weights is proportional to the error times the neuron activation, averaged over the data distribution. On a broken ray, the error is large but the ray's probability weight is d(1−d)n−1 — small. On a correct ray the error is zero and the gradient is zero. So the optimiser's incentive to fix the broken ray is proportional to how often that ray is visited, which means the leak migrates to the least-visited, least-important ray and stays there.

That produces a specific, checkable prediction about real models: the errors of a superposed circuit should concentrate on rare feature combinations and on unimportant features, not spread evenly. It is also a warning about evaluation. A benchmark built from typical inputs samples the same distribution the model optimised against, so it will not find these errors. You have to go looking off the skeleton.

What this does to interpretability

Chapter 2 ended by noting that in the dense regime, interpretability is trivial: read the neurons. Now we can say precisely what superposition costs us.

QuestionMonosemantic modelModel in superposition
What does neuron 7 mean?One feature. Read its weight row.A mixture. Its top activating examples look unrelated.
How do I find feature f?It is a basis vector.It is a direction that must be discovered, not read off.
How many features are there?At most m. Count the neurons.Unknown, and larger than m. Possibly much larger.
Is my probe measuring one thing?Yes.Not necessarily — it may be reading a superposed mixture that happens to correlate with your label.
What breaks the model?Ablating a neuron removes one behaviour.Ablating a neuron damages several behaviours partially. Clean ablations do not exist.
The research programme in one line. If features are directions in superposition rather than neurons, then interpretability needs a method for recovering an overcomplete set of directions from their sparse mixtures. That is exactly the classical problem of sparse dictionary learning, and it is what chapter 9's sparse autoencoders do. The toy model did not just describe a phenomenon — it specified the shape of the tool that would be needed to undo it.
A three-neuron circuit for two absolute values always mishandles at least one of the four coordinate rays. Why is such a circuit nonetheless preferred at high sparsity?

Chapter 8: What This Means for Embeddings

Everything so far has been about a five-parameter toy. This chapter cashes it out against something you actually ship: a dense embedding vector from a text encoder, sitting in a vector database, being compared by cosine similarity a million times a second.

The claim is simple and it reorganises how you should think about that vector:

An embedding is not a point in a 768-dimensional space of meanings. It is a lossy, sparse code — a linear superposition of thousands of feature directions, of which a few dozen are active for any given input. Every practical oddity of embeddings — anisotropy, the fragility of truncation, the stubborn floor on cosine similarity between unrelated texts, the fact that dictionary learning works on them — is a prediction of the toy model, not a quirk of a particular encoder.

Let us take the predictions one at a time, and be explicit about which are well-supported and which are just plausible.

Prediction 1: there are far more features than dimensions, and they are faint

Chapter 5 gave the admission rule: a feature with importance ratio r relative to the primary feature earns a place once density falls below roughly 2r. Real linguistic features are extremely sparse — "mentions a specific chemical compound" might have density 10−4 — so the rule admits features that are thousands of times less important than the dominant ones.

The practical consequence is a claim about norms: those admitted features have small ‖Wi‖, so they contribute little to the vector's length and are easily swamped. They are present, and they are quiet. If you probe for one and get 70% accuracy where you expected 95%, the toy model says: the feature may well be there, occupying a few percent of a dimension, exactly as its importance and sparsity purchased.

Prediction 2: truncation is not a haircut, it is a collision

This is the one with the sharpest practical teeth, so let us do it by hand.

Take the triangle code from chapter 3: three features in two dimensions, unit columns at 120°.

W1 = (1, 0),    W2 = (−0.5, 0.866),    W3 = (−0.5, −0.866)

Fire feature 2 alone at strength 0.8. The code is

h = 0.8 × (−0.5, 0.866) = (−0.400, 0.693)

Read all three features out of the full vector:

x′1 = (1)(−0.400) + (0)(0.693) = −0.400 → ReLU → 0  ✓
x′2 = (−0.5)(−0.400) + (0.866)(0.693) = 0.200 + 0.600 = 0.800  ✓
x′3 = (−0.5)(−0.400) + (−0.866)(0.693) = 0.200 − 0.600 = −0.400 → ReLU → 0  ✓

Flawless. Now truncate to the first coordinate only — keep h1 = −0.400, throw away h2. The readout vectors truncate with it, to the scalars 1, −0.5, −0.5:

x′1 = (1)(−0.400) = −0.400 → 0  ✓ still fine
x′2 = (−0.5)(−0.400) = 0.200   (target 0.800 — 75% of the signal gone)
x′3 = (−0.5)(−0.400) = 0.200   (target 0 — a false positive of identical size)

Read those last two lines again. After truncation, features 2 and 3 produce exactly the same number, for every input. They have not been degraded, they have been merged. Their truncated directions are identical, and no downstream consumer can ever separate them again.

Why "merged" is worse than "weakened". A weakened feature is a signal-to-noise problem: gather more evidence and you recover it. A merged pair is an identifiability problem: the information is not attenuated, it is gone. This is the mechanism behind the failure mode people report when they lop dimensions off an embedding to save memory — retrieval does not degrade smoothly, it starts confusing specific pairs of concepts, and which pairs it confuses looks arbitrary.

Contrast the ordered code from chapter 2: features on their own axes, sorted by importance. Truncating to the first k dimensions removes features k+1 onward completely and leaves the rest bit-for-bit exact. No merges, no confusions, and you know precisely what you lost.

This is exactly what Matryoshka Representation Learning buys. MRL trains an embedding so that every prefix is itself a valid embedding, by adding a loss term at each truncation length. In the language of this lesson: it forces the leading dimensions into the dense-regime solution — important features on nearly private, ordered directions — while allowing superposition in the tail. Truncation then behaves like the second case rather than the first.

A testable prediction, stated so it can be falsified. If MRL works by imposing an importance ordering, then the per-dimension variance of an MRL embedding should decay much faster with index than that of a normally-trained embedding of the same encoder, and the first few MRL dimensions should carry disproportionately probe-able, coarse features (language, domain) rather than fine ones. That is a measurement anyone with two checkpoints can run in an afternoon.
Truncation: superposed code versus ordered code

Both codes live in m dimensions. The superposed one packs 2m features into a near-tight frame; the ordered one puts the top m features on private axes and abandons the rest. Slide the "dimensions kept" control and watch the two failure modes diverge: the ordered code loses features cleanly from the bottom of the list, while the superposed code degrades every feature at once and starts merging pairs. The bars show per-feature recovery; the curve shows importance-weighted error against the number of kept dimensions.

Dimensions kept 12 / 12
Density d 0.020

Prediction 3: anisotropy has a mechanism, and it is importance

Embedding spaces are famously anisotropic: vectors from a trained encoder do not spread evenly over the sphere but cluster in a narrow cone, so that two randomly chosen texts have a cosine similarity of 0.6 rather than 0. A handful of "rogue" dimensions dominate the variance, and post-processing tricks — centring, removing top principal components, whitening — measurably improve retrieval.

The toy model explains both halves of this, and it separates them.

The rank-one part. The hidden vector is h = ∑xjWj with all xj ≥ 0. Take expectations: E[h] = (d/2) ∑j Wj. Unless the feature directions happen to sum to zero, every embedding carries a common offset along that sum, and the second-moment matrix picks up a rank-one term (d/2)2 (∑Wj)(∑Wj)T. That common direction is the "top principal component" that centring and all-but-the-top removal delete. Non-negative features plus an uncentred code is all it takes.

The unequal-variance part. Beyond the mean, the covariance is ≈ Var(x) W WT. For a perfect tight frame, W WT = (k/m)Iisotropic. So a uniformly-superposed code is not anisotropic. Anisotropy comes from the columns having unequal lengths, which is precisely what unequal importance produces: chapter 5's admission rule gives important features long columns and marginal features short ones.

The prediction that follows. Anisotropy is a signature of importance imbalance, not of superposition as such. A model whose features were all equally important would superpose heavily and still look isotropic. This reframes whitening: it is not fixing a defect, it is undoing the model's own optimal allocation — discarding the importance information that the training objective deliberately encoded, because cosine similarity treats that allocation as nuisance. It helps retrieval and it destroys information. Both things are true.

Prediction 4: there is a floor under cosine similarity, and it is interference

Two texts that share no features still have a non-zero dot product, because their feature directions are not orthogonal. Chapter 0 gave the scale: random directions in m dimensions have typical cosine 1/√m, so with m = 768 the floor from geometry alone is about 0.036 per feature pair, and with tens of active features on each side the accumulated similarity is not small.

It is worth computing that floor properly, because the answer is unexpectedly clean and it separates two effects people usually conflate.

Let text A activate a features and text B activate b features, with no overlap — genuinely unrelated documents. Their codes are hA = ∑i∈AxiWi and hB = ∑j∈BxjWj. With random unit directions, E[Wi · Wj] = 0 and E[(Wi · Wj)2] = 1/m. So the dot product has mean zero and variance

Var( hA · hB ) = ∑i∈Aj∈B E[xi2] E[xj2] · (1/m) = a b (1/3)2 / m

and the norms are ‖hA‖ ≈ √(a/3), ‖hB‖ ≈ √(b/3). Divide:

typical |cos| ≈ [ √(ab) / (3√m) ] / [ √(a/3) · √(b/3) ] = 1 / √m

The a and b cancel completely. However many features are active on either side, the interference-driven cosine floor is just 1/√m0.036 at 768 dimensions, 0.051 at 384, 0.026 at 1536.

And that number is far too small to explain what you measure. Real encoders give cosines of 0.5 to 0.8 between unrelated texts. So the observed similarity floor is not interference — it is the rank-one common direction from the previous section, plus the norm imbalance. Which is exactly why centring fixes so much of it and why nothing about the model's capacity has to change. Two effects, two mechanisms, two different interventions: subtract the mean to remove the common component; increase m to lower the interference floor. Doing the second when your problem is the first is an expensive no-op.

Two operational consequences follow.

Absolute cosine thresholds do not transfer. A cut-off of 0.8 that works for one encoder is meaningless for another with a different dimension, feature count or importance profile. Rank-based retrieval is robust to the floor; thresholding is not.

Bigger is quieter. Going from 384 to 1536 dimensions cuts the typical interference cosine by a factor of two, and does so without needing any more features. Much of the quality gain from larger embedding dimensions is not "more capacity for concepts" but "less crosstalk between the concepts already there".

Prediction 5: aggressive quantisation should work, and does

Binary and int8 embeddings routinely retain 95–99% of retrieval quality. Under the superposition picture this is unsurprising: the information lives in which directions are active, and direction identity survives coarse quantisation far better than magnitude does. Quantisation adds a noise term of roughly uniform size across dimensions — which is exactly the kind of isotropic perturbation that a near-orthogonal code is robust to, and exactly the kind that truncation is not, because truncation is anisotropic by construction.

The asymmetry is worth internalising: quantise before you truncate. Cutting 768 floats to 768 bytes damages a superposed code far less than cutting 768 floats to 192 floats, even though the second saves the same memory.

Prediction 6: dictionary learning should recover features from embeddings

If an embedding is a sparse linear mixture of an overcomplete set of directions, then the classical way to recover those directions is sparse dictionary learning — the same problem Olshausen and Field solved for natural images in 1996. Train an autoencoder with a wide hidden layer and an L1 penalty, and its dictionary elements should line up with the underlying features.

That is exactly what sparse autoencoders do, and they were applied first to language-model activations and then, successfully, to embedding vectors themselves. The toy model is what tells you that this should work at all, and — importantly — what tells you the dictionary must be overcomplete: if there are more features than dimensions, a dictionary of size m cannot possibly suffice.

Embedding practiceWhat the toy model says is happeningConfidence
Truncating dimensions to save spaceMerging feature pairs whose truncated directions coincide; degradation is confusion, not blurDirect consequence of the geometry
Matryoshka trainingForcing the dense-regime, importance-ordered solution onto the leading prefixStrong, and testable as described above
Centring / all-but-the-top / whiteningRemoving the rank-one mean from non-negative features and the norm imbalance from unequal importanceMechanism is clear; the size of each effect is empirical
Bigger embedding dimensionLower crosstalk (1/√m), not necessarily more conceptsPartly — capacity does also rise
Binary / int8 quantisationIsotropic noise on a code whose information is directional; cheapConsistent with practice; not a proof
Sparse autoencoders on embeddingsOvercomplete dictionary learning, undoing the superpositionWell supported by chapter 9's literature

What to do differently on Monday

A lesson that only reorganises your beliefs has done half a job. Here is the operational half.

Measure your feature density before choosing a dimension. The scaling law from chapter 6, k ≈ 32/d, says capacity is dimensions over density. If the properties your downstream task cares about are extremely rare, a smaller embedding will hold more of them than you expect; if your corpus is narrow and its features fire constantly, extra dimensions buy less than the price list suggests.

Prefer quantisation to truncation, and truncate only with a matryoshka model. Same memory saving, radically different failure mode: isotropic noise versus feature merges. If you must truncate a non-matryoshka embedding, measure which pairs of concepts collapse, not just average retrieval quality — the average will look fine while a handful of pairs become indistinguishable.

Centre before you compare, and know why. Subtracting the corpus mean removes the rank-one common direction that non-negative features inevitably create. That is a different intervention from whitening, which additionally flattens the norm imbalance that encodes importance. Centring is nearly free and nearly always right; whitening trades information for isotropy and should be measured, not assumed.

Treat a weak probe as ambiguous evidence. A feature can be present at a few percent of a dimension and still be genuinely there. Before concluding "the model does not represent X", check whether a probe trained on the residual after removing the top principal components does better — the faint features live under the loud ones.

Do not read neurons. If you find yourself inspecting individual embedding coordinates and looking for meaning, the whole of this lesson says you are looking in a basis the model had no reason to prefer. Learn a dictionary instead.

The honest caveat, stated loudly. Every row above is an extrapolation from a five-parameter toy with hand-chosen, independent, uniformly-distributed features and a reconstruction objective, to a transformer trained with a contrastive objective on natural language. The toy model gives you mechanisms and vocabulary, and it makes the predictions falsifiable, which is a great deal more than intuition offers. It does not give you a licence to skip the measurement.
Truncating a superposed embedding from m to k dimensions degrades it in a specific way. What is it, and why is it worse than it sounds?

Chapter 9: Limits and What Came After

This paper became one of the most-cited artefacts in mechanistic interpretability, and it deserved to. It also has real limits, and the authors are unusually direct about them. Reading a paper properly means being able to say what it does not show, so let us do that first.

What the toy model does not establish

SimplificationWhat it buysWhat it costs you
Features are given, not foundPerfect ground truth — every phenomenon traceable to a parameterIt says nothing about what the features of a real model are. The hard empirical problem is untouched.
Features are independentClean d2 co-activation probabilities and symmetric geometryReal features are hierarchical and correlated ("is French" implies "is a Romance language"). The correlation experiments are a gesture, not a theory.
Uniform magnitudes on [0,1]Every integral in this lesson has a closed formReal feature activations are heavy-tailed. Heavy tails change the interference statistics qualitatively.
The task is the identity (or abs)Isolates representation from computationReal networks are not autoencoders. Their objective shapes which features exist, not only how they are stored.
Tied encoder and decoderOne geometry to study instead of twoReal read and write directions differ, and that difference is where a lot of circuit structure lives.
One layer, no attention, no depthTractabilityNo composition, no residual-stream bandwidth story, no cross-layer features.
Linear representation assumedThe whole framingLater work found genuinely non-linear feature manifolds — circular representations of days of the week, for instance — that a directions-only picture cannot express.
The right way to hold this paper. It is an existence and mechanism result. It proves that a simple optimisation pressure — sparse features, limited dimensions, a nonlinearity — is sufficient to produce superposition, polysemantic units, phase changes and polytope geometry. It does not prove that this is why real models are polysemantic. It made that hypothesis precise enough to test, which is the actual contribution.

The immediate consequence: sparse autoencoders

Chapter 7 ended with the specification: to interpret a model in superposition you need to recover an overcomplete set of directions from their sparse mixtures. The tool for that is dictionary learning, and the neural version is the sparse autoencoder.

The construction is almost embarrassingly direct. Take activations hRm. Train

f = ReLU( Wenc h + benc ) ∈ RM  with M ≫ m,    ĥ = Wdec f + bdec
L = ‖ h − ĥ ‖2  +  λ ‖ f ‖1

Look at the shapes and you can see the toy model being run in reverse. The toy model took a sparse n-vector and squeezed it into m dimensions; the sparse autoencoder takes the m-dimensional result and asks for the sparse M-vector that generated it, with the L1 penalty supplying the sparsity assumption the toy model started from. The columns of Wdec are the recovered feature directions — the estimate of W.

The results, in order of appearance:

The through-line, stated once. Chapter 6 found that a threshold which suppresses false positives necessarily shrinks true activations, and computed the optimal compromise as β* = (2−√2)/4. The L1 penalty in a sparse autoencoder is that same threshold, and gated and TopK autoencoders exist because the compromise is unsatisfying. The toy model did not just predict the phenomenon; it predicted the shape of the engineering problem in the tool.

Open problems the field is still chewing on

Feature absorption and splitting. Train a wider dictionary and features split into finer ones; some features get absorbed into others. Is there a "true" feature set, or is the decomposition scale-dependent all the way down? Nobody knows.

Are all features linear? Engels et al. (2024) found multi-dimensional, genuinely circular representations — days of the week, months — that no set of independent directions captures. The linear representation hypothesis is a good approximation, not a law.

Superposition of computation, at scale. Chapter 7's story is well established in toys and much less so in real models. How attention heads and MLP circuits superpose is largely open.

Does the phase-diagram picture transfer? The boundaries we derived assumed a reconstruction loss on uniform features. Whether a next-token-prediction objective produces the same phase structure is an assumption, not a result.

2020–2022 — the problem is named
Circuits work finds polysemantic neurons everywhere; Softmax Linear Units tries to remove superposition architecturally and only partly succeeds
2022 — this paper
Toy Models of Superposition: a wind tunnel showing sparsity + a bottleneck + a nonlinearity is sufficient. Phase diagrams, polytopes, feature dimensionality, and a name for the phenomenon
2023–2024 — the tool
Sparse autoencoders recover overcomplete dictionaries from real models, first on toy transformers, then at production scale with causal steering
2024– — the reckoning
Absorption, splitting, non-linear features, cross-layer structure. The decomposition is real and it is not yet canonical

What to actually take away

Four things, in order of how confidently you should hold them.

One, nearly certain. Nearly-orthogonal directions are exponentially plentiful, and interference between them is only paid when features co-occur. That is mathematics, not modelling.

Two, very well supported. Given sparse features and a bottleneck, gradient descent will superpose — and it does so via a sharp phase change, not a gradual blend, with geometry drawn from a small zoo of polytopes.

Three, well supported empirically. Real language models are in superposition, and sparse dictionary learning recovers directions from them that are interpretable and causally effective.

Four, a working hypothesis. The specific quantitative structure — phase boundaries, feature dimensionalities, capacity conservation — carries over to real models in a form you can compute with. Treat this as a source of predictions, not conclusions.

And the sentence to keep. A 768-dimensional embedding does not hold 768 things. It holds thousands of things faintly, in directions that almost do not collide, and it gets away with it because the world is sparse. Every design decision you make downstream — how many dimensions to buy, whether to truncate, whether to whiten, how to interpret a probe — is a decision about that arrangement, whether or not you knew it was.

Connections

Prerequisite intuition
PCA — the dense-regime solution, in full.
Activation functions — why the ReLU is the enabling condition here.
The embedding thread
Vector embeddings — the object chapter 8 is about.
Matryoshka Representation Learning — truncation done deliberately.
Undoing superposition
Dictionary learning — the classical version of the recovery problem.
Temporal sparse autoencoders — SAEs with a time axis.
Where the features live
The transformer — the residual stream is the unprivileged basis.
Interpretability — the broader programme.

References

  1. Elhage, Hume, Olsson, Schiefer, Henighan, Kravec, Hatfield-Dodds et al. "Toy Models of Superposition." Transformer Circuits Thread, 2022. transformer-circuits.pub — the paper this lesson is about.
  2. Olah, Cammarata, Schubert, Goh, Petrov, Carter. "Zoom In: An Introduction to Circuits." Distill, 2020. distill.pub
  3. Elhage et al. "Softmax Linear Units." Transformer Circuits Thread, 2022. transformer-circuits.pub
  4. Bricken, Templeton, Batson et al. "Towards Monosemanticity: Decomposing Language Models With Dictionary Learning." 2023. transformer-circuits.pub
  5. Templeton, Conerly, Marcus et al. "Scaling Monosemanticity: Extracting Interpretable Features from Claude 3 Sonnet." 2024. transformer-circuits.pub
  6. Cunningham, Ewart, Riggs, Huben, Sharkey. "Sparse Autoencoders Find Highly Interpretable Features in Language Models." 2023. arXiv:2309.08600
  7. Gao, la Tour, Tillman et al. "Scaling and Evaluating Sparse Autoencoders." 2024. arXiv:2406.04093
  8. Rajamanoharan, Conmy, Smith et al. "Improving Dictionary Learning with Gated Sparse Autoencoders." 2024. arXiv:2404.16014
  9. Engels, Liao, Michaud, Gurnee, Tegmark. "Not All Language Model Features Are Linear." 2024. arXiv:2405.14860
  10. Scherlis, Sachan, Jermyn, Benton, Shlegeris. "Polysemanticity and Capacity in Neural Networks." 2022. arXiv:2210.01892
  11. Kusupati, Bhatt, Rege et al. "Matryoshka Representation Learning." 2022. arXiv:2205.13147
  12. Ethayarajh. "How Contextual are Contextualized Word Representations?" EMNLP 2019. arXiv:1909.00512
  13. Gao, He, Tan, Qin, Wang, Liu. "Representation Degeneration Problem in Training Natural Language Generation Models." ICLR 2019. arXiv:1907.12009
  14. Timkey, van Schijndel. "All Bark and No Bite: Rogue Dimensions in Transformer Language Models." EMNLP 2021. arXiv:2109.04404
  15. Mu, Viswanath. "All-but-the-Top: Simple and Effective Postprocessing for Word Representations." ICLR 2018. arXiv:1702.01417
  16. Olshausen, Field. "Emergence of simple-cell receptive field properties by learning a sparse code for natural images." Nature 381, 1996 — the origin of the dictionary-learning idea.
  17. Benedetto, Fickus. "Finite Normalized Tight Frames." Advances in Computational Mathematics 18, 2003 — the frame-potential theorem behind chapter 4.
  18. Johnson, Lindenstrauss. "Extensions of Lipschitz mappings into a Hilbert space." Contemporary Mathematics 26, 1984 — the almost-orthogonality result behind chapter 0.
  19. Park, Choe, Veitch. "The Linear Representation Hypothesis and the Geometry of Large Language Models." 2023. arXiv:2311.03658
What is the most accurate description of this paper's contribution?