Too many thoughts, too few neurons — superposition
This toy "model" stores 8 concepts in only 6 neurons. That's impossible if each concept gets its own neuron — so instead each concept is a direction across all 6, and directions overlap. Toggle concepts on and off and watch the neurons: every neuron responds to several concepts at once, and mixtures pile up into an unreadable smear. The left grid is the ground truth — how much each concept leans on each neuron.
The 8 concept directions are real vectors in 6-D, spread as far apart as geometry allows. This packing trick is exactly what "superposition" means in interpretability papers.
The unmixer — watch a dictionary learn itself
Now bolt on a sparse autoencoder: 16 candidate feature slots that must reconstruct the 6-D activation while keeping as few slots active as possible. It starts random — press Train and watch the bottom row organize: slots lock onto the true concepts (they take their color when their direction matches, cosine > 0.75), and each input lights up only the slots for the concepts actually in it. Untrained = dense grey mush. Trained = sparse, labeled, readable.
A real SAE, really training: every click runs gradient descent (reconstruction loss + L1 sparsity penalty, decoder columns kept unit-norm) in your browser. Only the data is a toy.
How many slots? Merge, match, or shatter
The one hyperparameter everyone fights about: dictionary size. Drag the slider — each position trains a fresh SAE from scratch, live — and read the match matrix (rows = the 8 true concepts, columns = learned slots, bright cell = aligned). Too few slots and one slot is forced to merge several concepts. Around 8–16 you get a clean diagonal-ish match. Go big and slots die (never fire, marked ✕) or one concept splits into shards.
Every slider move trains a brand-new SAE for 3,500 gradient steps right here — the counters are measured from that run, not scripted.
Grab a feature and steer — the Golden Gate trick
Interpretability without causality is stamp collecting. The test: take a feature the SAE recovered on its own, inject it into the activation, and see if the model's output changes in exactly that one way. The base activation below is "coffee + rain" (a cozy morning). Pick a recovered feature, crank the slider, and watch the word stream tilt. Then try steering a raw neuron instead — same strength, but it drags several unrelated concepts because neurons are cocktails.
The sparsity tax — clean features aren't free
One knob rules the SAE: the L1 penalty λ, the price charged per unit of activation. Drag it and a fresh SAE trains at that price; each run drops a dot on the chart (activity per input vs. reconstruction error). Cheap activations → the SAE reconstructs almost perfectly but smears every input over many slots: dense, unreadable, 0 concepts recovered. Expensive → beautifully sparse and interpretable, but reconstruction crumbles and slots start dying: the SAE is now lying about what the model computed.
Every dot is a full 3,500-step training run at that λ, measured on 300 fresh probe inputs. Nothing is pre-baked.