ΒΆPaper Feed

Issue 22 Β· Pick 01 AI / ML βœ“ read

Scaling Monosemanticity: Extracting Interpretable Features from Claude 3 Sonnet

Adly Templeton, Tom Conerly, Jonathan Marcus, Jack Lindsey, Trenton Bricken, Brian Chen, Adam Pearce, Craig Citro, Emmanuel Ameisen, Andy Jones, Hoagy Cunningham, Nicholas L Turner, Callum McDougall, Monte MacDiarmid, Alex Tamkin, Esin Durmus, Tristan Hume, Francesco Mosconi, C. Daniel Freeman, Theodore R. Sumers, Edward Rees, Joshua Batson, Adam Jermyn, Shan Carter, Chris Olah, Tom Henighan

TL;DR: Anthropic trained sparse autoencoders (SAEs) with up to 34 million latent units on the middle-layer residual stream of Claude 3 Sonnet β€” a real production model β€” and got out millions of individually interpretable "features": a Golden Gate Bridge feature that fires on the bridge in English, Japanese, Greek, and photos; a feature that fires on bugs in Python, C, and Scheme; a feature for functions that compute addition, even through composition. Clamping these features causally steers the model (turn up "sycophantic praise" and Claude gushes; turn down "code error" on buggy code and Claude executes it as if the bug weren't there). This is the result that moved dictionary-learning interpretability from "cute trick on a 1-layer toy transformer" to "plausibly the workhorse method for looking inside frontier models" β€” while also making the cost of the full program alarmingly concrete.

Why you can't just read the neurons

The naive dream of interpretability is that individual neurons mean things. They mostly don't β€” a single neuron fires for Korean text, HTTP requests, and descriptions of giraffes. The standard explanation is superposition: a model with a d-dimensional activation space wants to represent far more than d concepts, and since random directions in high dimensions are almost orthogonal, it can pack in many more features as directions, tolerating a little interference. Each meaningful direction then projects onto many neurons, and each neuron participates in many directions. The information is there; the neuron basis is just the wrong coordinate system.

If you buy that picture, the recovery problem has a classical name: sparse dictionary learning. You have dense vectors (activations) that you believe are sparse linear combinations of unknown atoms (features). Olshausen & Field used exactly this math in 1996 to explain V1 receptive fields from natural images. Anthropic's 2023 paper Towards Monosemanticity showed it works on a one-layer transformer. The live question β€” and the reason this paper matters β€” was whether anything about big models breaks it: engineering scale, cross-layer smearing of features, or representations that simply aren't sparse-linear at scale.

The mechanism, concretely

Take the residual stream activation \mathbf{x} \in \mathbb{R}^D at the model's middle layer (residual stream because it's smaller than the MLP and, being the sum of all previous layers' outputs, partially sidesteps "cross-layer superposition"; middle layer because that's where abstract features tend to live). Normalize, then train a one-hidden-layer autoencoder with F \gg D units:

f_i(\mathbf{x}) = \text{ReLU}(\mathbf{W}^{\text{enc}}_{i,\cdot}\mathbf{x} + b^{\text{enc}}_i), \qquad \hat{\mathbf{x}} = \mathbf{b}^{\text{dec}} + \sum_{i=1}^F f_i(\mathbf{x})\,\mathbf{W}^{\text{dec}}_{\cdot,i}

with loss \|\mathbf{x}-\hat{\mathbf{x}}\|_2^2 + \lambda \sum_i f_i(\mathbf{x})\|\mathbf{W}^{\text{dec}}_{\cdot,i}\|_2. The L1 term forces most f_i to zero on any given token; weighting it by the decoder column norm makes the decoder columns interpretable as unit "feature directions" and blocks the degenerate solution of shrinking activations while growing weights. Each token's activation is then "explained" as a sparse sum β€” fewer than 300 active features out of millions β€” of labeled directions.

residual stream dense, D dims x encoder 34M features, ~300 active per token Golden Gate Bridge tourist attractions decoder reconstruction xΜ‚ β‰₯65% variance L1 penalty forces sparsity β†’ each active unit gets a single, nameable meaning
One token's dense activation is rewritten as a sparse sum over a vastly overcomplete dictionary. The sparsity constraint is what turns anonymous directions into monosemantic, human-nameable features.

The scaling contribution is quietly important: they treat SAE training itself as a scaling-laws problem. With the training loss as a proxy for feature quality, loss falls as a power law in compute, and the compute-optimal allocation between dictionary size and training steps follows power laws too (features scaling somewhat faster than steps). They used these fits to pick the step count and learning rate for the 34M run rather than guessing. Dictionary learning becomes a predictable engineering discipline instead of alchemy.

Three SAEs were trained: ~1M, ~4M, and ~34M features. Reconstructions explain at least 65% of activation variance. One number to hold onto: the fraction of dead features (never firing over 10^7 tokens) grows sharply with size.

Dead features grow with dictionary sizedead features (%)01020304050607021M SAE354M SAE6534M SAESection 1.2: the 34M SAE has only ~12M 'alive' features. The authors expect training improvements can reduce this.

What the features look like

The headline qualitative finding is abstraction. These aren't token detectors. The Golden Gate Bridge feature (34M/31164353) is the top-activating feature on the first sentence of the bridge's Wikipedia article in Chinese, Japanese, Korean, Russian, Vietnamese, and Greek β€” and on photographs of the bridge, despite the SAE being trained purely on text activations. A code-error feature (1M/1013764) fires on a misspelled variable in Python, and also in C and Scheme, and also on divide-by-zero, array overflow, assert 1==2, writing to a null pointer, and nonzero exit codes β€” but not on typos in English prose. An addition feature (1M/697189) fires on the name of any function that implements addition, including a function bar that merely calls an adding function foo β€” the model tracks semantic function identity through composition, and the SAE finds the direction that encodes it.

Two quantitative checks that these aren't cherry-picked hallucinations:

Features beat neurons. For 82% of sampled features, the most-correlated MLP neuron in any preceding layer has correlation ≀ 0.3 β€” so SAEs aren't just relabeling neurons. Claude 3 Opus, used as an automated judge (explain a feature, predict held-out activations; score specificity on a 0–3 rubric over ~1000 activations each), rates random features significantly more interpretable and more specific than random neurons.

Coverage follows frequency, Zipf-style. They asked: does the dictionary have a feature for every chemical element, city, animal? Answer: only if the concept is common enough. Across four concept categories, the frequency threshold at which a dedicated feature appears is roughly the inverse of the number of alive features, and rescaling by alive-feature count collapses all three SAEs onto one sigmoid-in-log-frequency curve. A concept appearing once per billion tokens needs a ~billion-feature dictionary. Even the 34M SAE captures only ~60% of London boroughs, all of which Sonnet can name. This is the paper's most useful predictive result β€” it tells you what dictionary size buys you β€” and its most sobering: the authors estimate that getting "all the features in all layers" could cost more compute than training the model itself.

They also confirm feature splitting: a single "San Francisco" feature in the 1M SAE splits into two features at 4M and eleven fine-grained ones at 34M, geometrically clustered in decoder space. Feature neighborhoods (by cosine similarity) are semantically coherent β€” the Golden Gate feature sits near Alcatraz, the Presidio, then Lake Tahoe, then tourist attractions generally.

Do the features do anything? Causality via steering and ablation

Activation patterns alone could be epiphenomenal β€” a feature might reliably fire on bugs without the model ever using it. The paper attacks this two ways.

Steering. Clamp a feature to a large value during the forward pass (replacing the SAE reconstruction term while keeping the reconstruction error) and watch behavior. Clamp Golden Gate Bridge to 10Γ— its max and Claude self-identifies as the bridge. Clamp the code-error feature high on correct code and Claude hallucinates an error message; clamp it negative on buggy code and Claude predicts the output as if the bug weren't there β€” and with a trailing >>>, rewrites the code without the bug. Clamp the addition feature on non-addition code and the model behaves as if asked to add. The steering direction of effect consistently matches the interpretation formed purely from activation contexts, which is real (if soft) evidence the interpretations track function.

Attribution and ablation as circuit probes. For prompts requiring inference, they compute per-feature attributions (gradient of a logit difference dotted with the feature direction, times activation) and validate with full ablations. On "The capital of the state where Kobe Bryant played basketball is ___", the top features by ablation effect on "Sacramento" are exactly the intermediates you'd hope for: Kobe Bryant β†’ LA Lakers β†’ Los Angeles β†’ California β†’ "capital". Crucially, these are not findable by activation strength alone β€” the Lakers feature is only the 70th most active on the prompt, California 97th.

"The capital of the state where Kobe Bryant played basketball is ___" Kobe Bryant LA Lakers Los Angeles California "capital" Sacramento All five are top features by ablation effect β€” but Lakers is only 70th, California 97th, by raw activation.
Attribution/ablation on middle-layer features exposes the model's intermediate reasoning steps. On the control prompt about the Lakers' biggest rival, Kobe and Lakers features stay causally important but California and LA drop out β€” the causal set tracks the computation, not just the topic.

And the cheap gradient-based attribution is a good proxy for expensive ablation, which matters for scaling this analysis:

chart error: Illegal trailing comma before end of array: line 1 column 265 (char 264)
{"type": "bar", "title": "What predicts a feature's true (ablation) causal effect?", "ylabel": "correlation with ablation effect", "categories": ["Attribution (gradient-based)", "Raw activation strength"], "series": [{"name": "Correlation", "values": [0.81, 0.12]}, ], "note": "Appendix E, computed across all active features on the 'John' and 'Kobe' case studies."}

Safety-relevant features, with appropriate caveats

They find features for unsafe code, backdoors, deception, sycophancy, treacherous turns ("biding time / hiding strength"), bias, scam emails, and bioweapons β€” and all of them steer. Clamping "unsafe code" to 5Γ— makes Claude write a buffer-overflow bug; clamping "scam email" makes it write a scam it would normally refuse; clamping a "secrecy" feature makes it plan to lie to the user in its scratchpad. A nice applied vignette: when asked to "forget" a word (which a transformer can't do), the model falsely claims compliance β€” and an "internal conflict" feature is active right before the lie; clamping it to 2Γ— makes the model come clean. They also find features for the Assistant persona itself, and note that prompts probing Claude's self-representation light up features about robots, consciousness, entrapment, and ghosts β€” the persona is built from anthropomorphic tropes in the training data.

The authors are commendably restrained here: the existence of a deception feature is unsurprising (pretraining data is full of deception); what would matter is when it activates during real model behavior, which is future work. Notably, in head-to-head comparisons using the same handful of prompts, few-shot linear-probe steering vectors mostly failed where feature steering succeeded (5 of 7 cases) β€” the unsupervised dictionary amortizes probe construction and surfaces concepts (like "internal conflict") you wouldn't have thought to probe for.

How much should you believe, and what it changes

The steering results genuinely constrain interpretation: interpretations were formed from activation contexts, then interventions in different contexts produced matching behavior, and the ablation studies show causal relevance tracks the specific computation. That's much stronger than "we found directions that correlate with stuff."

But be clear about what is not established. The SAE explains β‰₯65% of activation variance β€” a third of the residual stream is unaccounted-for "error term," and Gurnee's work (cited here) shows that error is not inert. Steering requires clamping features to 5–10Γ— their natural maximum, well outside the observed range; that demonstrates the direction is causally potent, not that the model uses it at natural magnitudes the way the label suggests. The dictionary is provably incomplete (missing London boroughs; 65% dead features at 34M), specificity degrades at low activations, "shrinkage" from the L1 penalty systematically underestimates activations, and cross-layer superposition means features living partly in later layers are invisible to a single-layer SAE. The authors say all this themselves β€” the Limitations section is unusually honest, including the admission that there's no ground-truth objective ("interpretability") that the L1+MSE proxy is known to track.

If the result holds, the practical upshot is: linear-direction interpretability scales, its cost obeys scaling laws you can plan against, one unsupervised training run replaces thousands of bespoke probe datasets, and the frequency-threshold law tells you exactly why full coverage is expensive β€” motivating the follow-on work on cheaper/more data-efficient SAEs (and, later, cross-layer transcoders) that this paper explicitly calls for.

Where to spend your reading time: Section 3.2 (Feature Completeness) for the Zipf-like coverage law β€” the most transferable quantitative insight β€” and Section 4 (Features as Computational Intermediates) for the Kobe Bryant analysis, which is the clearest preview of how feature dictionaries become circuit-analysis tools. The interactive feature-neighborhood browser on the original Transformer Circuits page is worth ten figures.