Superposition: Toy Models
Why models cram more features than dimensions into their activations — the field's central obstacle.
- → State the linear representation hypothesis precisely
- → Predict when superposition appears from sparsity and importance
- → Replicate the toy-model phase diagram and read its feature geometry
Features are directions
Everything you have done so far — logit lens, probes, steering, reading off attention heads — quietly assumed one thing: that the model's concepts live in directions. It is worth making the assumption explicit, because it is the load-bearing hypothesis of the entire field, and because the rest of this module is about the complication that follows from it.
The evidence is circumstantial but broad. Word embeddings support vector arithmetic. Linear probes work. Adding a vector to the residual stream shifts behaviour in a semantically coherent way (Module 5.1). Sparse autoencoders — which assume exactly this structure — find dictionaries that reconstruct activations well and whose elements are frequently interpretable (Module 3.4). None of this proves the hypothesis; all of it would be surprising if it were badly wrong.
One immediate consequence, and it is the fork in the road: directions need not be axis-aligned. There is no law that says feature 7 lives along neuron 7.
The toy model, and the deal it makes
Elhage et al. built the smallest system that can exhibit the phenomenon, so that everything about it could be understood. Here it is in full.
Take features. Each one is sparse — zero with probability , and otherwise uniform on — and each has an importance saying how much the loss cares about reconstructing it. Squeeze them through dimensions and ask for them back:
Term by term: has one column per feature, and that column is the direction the feature is stored in. Encoding and decoding share the same matrix, so the model cannot cheat by using a clever decoder. The bias and the ReLU are the only nonlinearity, and they turn out to matter enormously.
Notice what this model deliberately is not. There is no attention, no depth, no language. It is a pure question about representation: given a bottleneck, what does gradient descent choose to store, and how?
The model faces a trade with two sides. Representing more features reduces the loss on the features you would otherwise ignore entirely. Non-orthogonal directions cause interference: when feature fires, every feature whose direction is not perpendicular to it picks up a spurious signal , and that costs loss too.
The ReLU and the bias are the model's defence. Train it at high sparsity and you will see go negative and . That combination is a threshold filter: small interference lands below zero and gets clipped away entirely, while a genuine activation is large enough to survive the negative bias — and the enlarged norm compensates for it. You can watch both numbers appear in the widget below.
Phase changes and feature geometry
Here is the result that made this paper the field's gateway drug. Sweep sparsity and relative importance, train a model at every point, and the outcome is not a smooth degradation. It is a phase diagram with sharp regions.
Read it as a decision. On the left — dense features — the model behaves like PCA: it keeps whichever feature is more important and throws the other away. On the right — sparse features — it stores both in the same one-dimensional space, antipodally, at 180°. The two regions meet at a boundary that moves with relative importance: the less the second feature matters, the more sparsity you need before it is worth representing at all.
The transition is sharp. Cross the boundary and the solution reorganizes rather than deforming. That is a phase change in the physics sense, and it is the first hint that these systems have discrete structure worth naming.
Go up to five features in two dimensions and the geometry gets genuinely beautiful. As you raise sparsity you pass through a sequence of arrangements:
- Two orthogonal features, the rest discarded — the dense regime. Dimensionality per feature: 1.
- Antipodal pairs (the paper calls a pair sharing an axis a digon): four features on two axes, 0.5 dimensions each.
- Pentagon: all five features at 72°, 2/5 = 0.4 dimensions each — the maximum-spread arrangement of five directions in a plane.
The paper measures this with a per-feature dimensionality
which reads 1 for a feature with its own orthogonal dimension, 1/2 for half of an antipodal pair, 2/5 for a member of a pentagon, and 0 for a feature that was not stored. Plot it across a sparsity sweep in a bigger model and the values do not spread out smoothly — they stick at particular fractions, with visible gaps between them. Those fractions correspond to uniform polytopes: digons, triangles, tetrahedra, square antiprisms. The model is solving something close to a Thomson problem — spread points on a sphere so they repel — and Thomson problems have discrete answers.
Computation in superposition, and why this is the wall
So far superposition is a storage story. The harder claim — and the one that decides whether interpretability is difficult or near-impossible — is that models also compute in superposition.
Elhage et al. demonstrate it on the smallest possible task: a network with fewer neurons than features learns to compute the absolute value of every input feature, with neurons that each participate in several of these computations at once. Nothing about the mechanism required one neuron per operation.
This is why so much of what you would naively try does not work:
- Neuron-level interpretability degrades. Look at a neuron's top activating examples and you get a story; look at the rest of its activation range and you get three more stories. The neuron was never one thing.
- Enumeration is impossible. If a layer with dimensions can hold far more than features — and it can, because you can pack exponentially many nearly-orthogonal directions into dimensions — then “list the features” has no obvious stopping point.
- Ablation results get harder to read. Zeroing a neuron removes a slice of several features at once, so a clean behavioural change does not localize to a clean concept.
The specific worry is not that a dangerous feature is hidden on purpose. It is that a rare, high-importance feature is exactly the kind the toy model tells you will be stored in superposition: important enough to be worth representing, sparse enough that the interference is cheap. A behaviour that fires on one input in a million is nearly invisible to evals and, before dictionary learning, was nearly invisible to interpretability too. Module 3.4 is the field's answer, and Module 5.5 is where you find out how well it works in an actual audit.
One honest caveat about the whole framework: the toy model is a deliberately impoverished system, and the argument from it to real transformers is an argument from plausibility plus a growing pile of corroborating evidence — polysemantic neurons everywhere, sparse autoencoders finding far more features than dimensions, models with an architecture that discourages superposition (Softmax Linear Units) becoming more interpretable at a cost. It is a good theory. It is not a measurement of GPT-4.
Watch the phase transition happen
This is the real model, not a simulation of one. Five features, two hidden dimensions, hand-written gradients, Adam, 512 samples per step, about 500 steps per second in your browser. The five arrows are the columns of — the direction each feature is stored in. The heatmap is , so the off-diagonal cells are the interference the model has agreed to live with. The panel at the bottom fires one feature on its own and shows you what comes back out.
| feat | ‖Wᵢ‖ | Iᵢ | bᵢ | dim/feat |
|---|---|---|---|---|
| f0 | 0.30 | 1.00 | 0.00 | 0.37 |
| f1 | 0.26 | 0.85 | 0.00 | 0.28 |
| f2 | 0.33 | 0.72 | 0.00 | 0.48 |
| f3 | 0.12 | 0.61 | 0.00 | 0.07 |
| f4 | 0.14 | 0.52 | 0.00 | 0.41 |
Things to try: (1) Start dense (S = 0) and let it settle: two arrows at 90°, dimensionality 1.00 each, three features with norm ~0 — the model has thrown them away. Now drag sparsity to about 0.7 and watch four arrows snap into two antipodal pairs at dimensionality 0.50. Keep going to 0.95 and the fifth arrow appears as the pentagon forms at 0.40 = 2/5. (2) With the pentagon formed, look at the bias column: every is negative and every is above 1. Fire a single feature in the bottom panel and you will see why — the neighbours receive real interference and the ReLU clips it to zero. (3) Set the importance decay to 0.5 at moderate sparsity: the model now allocates deliberately, giving a clean dedicated direction and forcing the cheap features to share. Superposition is not uniform; it is an allocation decision.
Problem set
The antipodal derivation and the phase-diagram replication are the two that matter — they are the difference between having read this paper and having understood it. Budget an afternoon for the replication; it is also capstone project #2, so what you build here you keep.
Work the smallest case by hand: features, hidden dimension. To keep the algebra clean, use binary features: each , independently equal to 1 with probability . Importances are and .
Compare two candidate solutions:
- A (dedicated): , .
- B (antipodal): , .
Compute the expected loss of each and find the condition on and under which B wins. Then say what the condition predicts as , and check the prediction against the phase diagram above.
Exactly vectors can be mutually orthogonal in . How many can be nearly orthogonal?
For two independent uniformly random unit vectors in with large , their cosine similarity is approximately . Using that, estimate the largest such that random unit vectors in dimensions have all pairwise similarities below (a) and (b) .
Then say what this implies for the question “how many features can GPT-2 small's residual stream hold?”
In the widget, at high sparsity, every settles negative and every settles above 1. Explain both, quantitatively.
Concretely: suppose feature fires alone at magnitude 1, and with . Write the pre-ReLU value at output . What must satisfy for the interference to be suppressed completely? And what does that choice cost when feature itself fires at magnitude ?
Reproduce the figure in the geometry section from scratch in PyTorch or NumPy. This is capstone project #2 and the single most valuable exercise in Part 3.
Implement the toy model — , , — with , . Sweep a grid: log-spaced from 1 to 100, and log-spaced from 0.2 to 5. Train each cell with Adam and classify it by which columns of ended up with non-trivial norm.
Success check: you get three clear regions — feature 1 only, feature 2 only, and both stored antipodally — with the superposition region occupying the sparse (right-hand) side and widening toward equal importance. Verify that in the superposition region the two weights have opposite signs.
Then extend: , , sweep sparsity, and plot the five feature vectors at each setting. You should recover the orthogonal-pair → antipodal-pairs → pentagon sequence.
Real features are not independent. Extend your model with a data generator that produces two correlated pairs: features 0 and 1 tend to fire together, features 2 and 3 tend to fire together, and the pairs are independent of each other.
Then build the opposite: two anticorrelated pairs, where within each pair at most one feature fires at a time.
Success check: you can state, with a plot, how the angle between the two members of a pair differs between the correlated and anticorrelated conditions, and explain the difference from the interference cost.
Open Neuronpedia and browse neurons (not SAE features) in a GPT-2 small MLP layer. Find one whose top activating examples clearly separate into two or more unrelated groups, and write down the groups.
Then find the SAE features for the same layer that appear to cover those groups separately. Write two or three sentences on whether the SAE decomposition looks like it recovered what the neuron was mixing.
Check yourself
Go deeper
This is your gateway paper. Read it properly — three sittings, with the widget open — and the rest of Part 3 becomes much easier. Everything else on this list is either a tool for doing that, or a check on believing it too hard.