Someone found a neuron that activates on Colorado and also Tornado (the python library, not tornadoes in general).
EDIT 11/11/26: Goodfire has done further analysis of this neuron now, which fairly convincingly shows that the Colorado neuron is indeed mainly about Colorado, and that following the Colorado vs. Tornado (python library) neural circuits cleanly separates the concepts as well.
Yeah it was Nick Cammarata! That neuron is a central example in the blog post! You can see the connection to Tornado in the interactive element here: (also a couple other nearby dots)

But it's not like the neuron is "Colorado + Tornado library". The Tornado library is a pretty small activation, in that above example just ~8.6% of max. The neuron mainly activates on Colorado, the Rockies, and then also other mountainous regions (esp. Bolivia but also Afghanistan, Switzerland, etc.).

And the Tornado library is actually just one of many Python concepts in there, ex. the Kivy framework:

Python's basically that whole line, and there's even just generic Python stuff:

I suspect if you watched the training of this neuron, you would plausibly find that this is a recursive generalization from the pretty normal Colorado -> Software Engineering connection. I also see Shell script (from Alpine Linux), Rust, Java, JavaScript, C++, and PHP, though it's mostly Python. (EDIT2: Not retracting this claim but I now think it's less likely.)As for why the Tornado library in particular comes up after the software connection, it might be reinforced from the similarity of:t-ornadoc-olorado
(there are other activations that operate on this kind of principle, ex. "color" vs. "Color-ado")
EDIT2: retracted crossed-out claim, see my followup comment here.
Admittedly speculative though!
See also the Opus 5.5 neuron paper from Nick's post for the same neuron in the earlier visualizer. Interesting detail, the neuron's negative pole is used to help distinguish Colorado from similar concepts like Utah or Alaska.
EDIT1: cleaned up and extended some claims, also it turns out the data for the Colorado neuron visualizer is public as JSON files (1, 2, 3) so you can analyze Nick's data more rigorously if you like. I'm seeing that ~4% of annotated neuron activations relate to code, largely weak.
Recursive generalization doesn't predict this exact combination, no, but it does predict this shape of activations. Nick's narrow definition of "superposition" is "unrelated concepts are packed into each neuron", and that would predict a different shape—strong activations for many different unrelated concepts. What we see in the Colorado neuron is instead decreasing activations for increasingly less-related concepts, exactly the branching pattern Nick's idea predicts. (~87% of activations >50% of max are directly Colorado-related.)
However it is true this requires more study across more neurons, which Nick also says in his "Is Recursive Generalization Hard to Vary?" appendix bit. Though I've been doing some spot-checking of the claims in the post and they seem to hold up reasonably well against the 1000 Qwen3 neurons he provided data for. (ex. the neurons were indeed chosen from layers all across the dense and MoE versions)
Every OpenAI tokenizer I can find splits the sting "colorado" into two tokens, "color" "ado". More recent tokenizers split "tornado" into "t" "ornado".... but the GPT3 tokenizer instead yields "torn" "ado".
To me, this is obviously not a case of the state of Colorado being associated semantically with software engineering because it's a big industry in Denver and Boulder. It's a bigram unifier that responds to ado. It's a V-shape detector. Or it was at some early point in the training process.
From there, it muscled into things semantically adjacent to Colorado, and the Tornado python library.
These "clean" neurons, in this sense, still seem ridiculously baroque to me. They're highly path dependent and semantically spiky and layered.
Re: tokenizer, luckily the Qwen3-32B tokenizer data is public! And you're right, I should've looked more closely at it. My instinct was that similar words can still share activations without sharing tokens, but actually I can't find any other apparent case of that in the Colorado neuron. At first I thought the "color" activations[1] were an example ("Colorado" only has tokens _Colorado and Colorado) but I missed that "COLORADO" has _COLOR + ADO and "colorado" has _color + ado.[2]
Also FYI "Tornado" -> _T + ornado but also "tornado" -> t + ornado and _tornado.
Other people's research has found that lowercase "tornado", the weather phenomenon, barely fires the neuron. Nick's data agrees. Also, Tornado code activates the neuron even if "tornado" doesn't appear in that code. Izzy on Twitter brings up an interesting theory that the neuron is treating Tornado as a sort of "world", defined as:
basically anything with its own private set of names (like a state & its towns, or a codebase & its functions)
In that conception, the neuron is a "world-gate" that mostly says "am I in the Colorado 'world'"? And then related "worlds" like Bolivia/Nepal/etc. activate the neuron as well, though less so. All speculative, but they also find, interestingly, that:
But when it fires, all it does is help the model come up with local names for these places, mostly just Colorado. If you force it on in the middle of a flask codebase you get colorado names, not tornado ones!
(...) it basically ignores tornadoes-as-weather bc they're not a world! If we make a fake web framework named tornado, it doesn't register because it has no relation to tornado-the-codebase's world. (if you swap the word "tornado" out of tornado-codebase it still fires).
Anyway I think the sum of the above does mostly rule out the spelling/word-similarity theory. I'll update my prior comment, thanks!
Re: baroque, well they're still polysemantic IMO, yes. Remember we're differentiating between "polysemantic" and "superposition of unrelated concepts". I'm not sure I'd say the activations are highly path-dependent, either; rather, they would seem to get more path-dependent the further down the recursive generalization chain you go, which is logical. In the Colorado neuron, the connections to the rest of the Rocky Mountain West makes total sense, as do the connections to other landlocked mountain places, though it's kind of weird Bolivia in particular activates so much. But mostly it's only when you get down to the lower activations that the connections become tenuous or perhaps nonexistent.
It's probably very non-robust. This is fine IMO, the threat models I care about involve catching models that can't run gradient based attacks against it
threat models I care about involve catching models that can't run gradient based attacks against it
fair. I think the normies get a bit lost when we say that neural networks are clean. In reality, there's a whole space of possible networks, and probably the majority of them are not clean, but when you produce a NN in a specific way, it usually comes out kinda clean.
Gradient based adversarial attacks would surface the dirty ones.
If I understand correctly, yes, only so far as to be how the auto-interp paper mentioned in this post works!
Could we train neuron explainers a la Nick's method on KL?
1) Explainer model generates a neuron explanation
2) Frozen simulator turns it into predicted activations
3) Swap those in
4) Use downstream KL as the RL reward
Explainer models have been trained before (Transluce, SAEExplainer), but afaik used proxies, not KL itself.
You could probably also train on increasing brevity of explanation to make it more human legible. Maybe after you hit a plateau on the fidelity of the explanation at any length, next reward signal is same fidelity (per KL) with briefer explanation length. Could do that step with RLHF to ensure it's not just compacting into neuralese.
My tries with this protocol have been largelly unsucessful, maybe due to a combination of lack of skill (I don't know that much about good practices regarding training, and have been mostly trusting Claude and Codex) and compute (I can take Qwen 14b or so and train them to be explainers or simulator, but not bigger and maybe you need smarter models if you want to actually hill climb here).
When you say this protocol do you mean what I suggested, or Nick's method?
The one that you suggested.
just because every example that activates the neuron fits the pattern, doesn’t necessarily mean that the other way around is true; perhaps not all examples that fit the pattern also activate the neuron.
Curious on this point, wouldn't the same argument hold if we swap "neuron" for SAE latents, transcoder or crosscoder features?
Yes.
Perhaps your neuron actually only activates on dogs on bicycles on sunny days, but you never noticed that. This turned out to be a pretty big problem with the auto interp paper.[3] In practice, it’s very common for neurons that look like they activate on X to actually only activate on a very specific subset of X that is hard to characterize compactly.
I don't see this as a contradiction though, nor necessarily a concerning issue. If anything it's consistent with the findings from the original essay that as networks scale, there's room for increasing specificity in individual neurons. In this particular example, discovering the neuron only fires on a subset of X would still imply it’s monosemantic, just with a narrower description, and the theory’s prediction would be that there’s some other neuron that fires for dogs on bikes on rainy days that’s connected to the same circuit. What would be more damning is finding additional unrelated sets of inputs that make this neuron fire and/or that a large set of neurons all fire weakly on X inputs.
If the point is more that it’s impossible to interpret a given neuron 100% accurately, since you’re limited by your ability to find the correlations and by the coverage of data that you search over (in addition to the central question here of whether such a clean interpretation fundamentally exists or not), then I’m largely on board there. I’d imagine that fitting the “correct” description to a neuron will look like an effectively never-ending process of finding one that matches the observations, then looking deeper and finding it breaks, and iterating continuously. But it doesn’t necessarily rule out that monosemanticity exists.
The second reason you give below would be much more convincing IMO though. Studying the weak activations (certainly ablations, and also looking at correlations between “labeled” strongly-activating neurons with others) was also where my mind first went when I started reading Nick’s article. I was actually very surprised to see that he did have results for ablation experiments and that they showed minimal performance degradation, so I’d be super curious to see what results you’re finding!
My reading of Cammarata's piece is that "clean" is a term he uses to describe how the network is internally legible, which doesn't immediately imply human legibility.
If anyone is curious, I wrote up a small synthetic experiment that tries to extend "cleanliness" into a broader notion functional conservation.
Some numbers in the post's appendix touch on the weak activation and reverse direction points. With the weak activations it's a question of where you draw the line, zeroing the weakest 75% of activations in every block on the med ConvNeXt example costs 1 point in accuracy whereas the weakest 95% costs 19 points, and the weakest 99% costs 68 points. There was also a test of an agent rewriting example from each neuron's explanation and they fired about 76% of the time. But that could be too low because some are badly written examples or too high because the examples are roughly the centroid for the label and the edges are understated.
Separately, the explanation in Nick's post (board circuits get more gradient and so grow faster) may be weakened if using another optimiser (Adam(W) or Muon vs SGD). I'm planning on running a small test to see if this is the case.
I think there is a deeper idea implicit in Nick's post that is missing here. For something to be a good explanation, it doesn't just need to recreate the observed relationships, it needs to do so with a minimal amount of explanatory structure. For example, heliocentric models aren't better than geocentric ones because of some metaphysical preference towards the sun's reference frame, they are better because they explain the same observed phenomena with fewer free variables and computations.
The same is true for all kinds of simulations. If I designed a physics sim that perfectly matches reality, but has more degrees of freedom than the physical system itself, that would clearly be a bad simulation. I’d be better off just watching the system evolve in real life.
Neuron simulations aren’t too demanding, they are too inefficient. A well designed model should converge exactly on the most efficient causal structure required to simulate certain macro relationships. Therefore, any explanation we create externally will be worse than just looking at the model. The model is the optimal explanation of itself. Maybe this wasn’t true for the subhuman, confused models of the past, but I think Nick’s evidence shows that it will become more and more true as the models get better.
The really intriguing future possibility here is that eventually, when models are clearly superhuman, we will be forced to concede that their structure contains better explanations of reality than our own human thought. There seems to be a human centric bias in a lot of interpretability work, where we decide a priori what relationships and features a model should contain, then go look for those. But this will have to reverse. When we find a counterintuitive or confusing feature of a model, we will have to admit that our own thoughts are confused, and update ourselves to mirror how the model thinks.
Suppose we look at the top activating examples of a neuron, and they are all sentences like “Fred the poodle zipped down the street on his bicycle. ‘Wow, I didn’t know a dog could ride a bicycle!’ I exclaimed.” Top activations can often give a misleading impression of how monosemantic a neurons is, so next we look at the top 20th percentile of activations, and we find the examples are now things like “John rode on his bicycle while his dog trailed behind”. And when we check the weakest activations, they’re often still about dogs, just without bicycles — “The dog sauntered lazily down the street.” Given this evidence, can we conclude that the neuron is monosemantic, and that its meaning is “dogs riding bicycles”?
No, this one is clearly about something like "the speed with which things - a dog has to be included - travel down a path". Limited by somewhat realistic and calm situations, so we don't have dogs chasing thiefs or dogs riding rockets.
Not sure I'd explain the other billions of correlations though. And my explanation probably falls prey to the failure modes you mentioned.
What would it take to get assurance that we have actually explained a neuron? Certainly, it would be a good sign if neuron activations looked like they had a consistent pattern, and a bad sign if they looked like a random jumble of unrelated concepts.
Nick Cammarata’s recent post makes an important and true observation: in the past, people have been too quick to write off neurons as polysemantic, but if you look harder, there is actually often a simple pattern behind the activating examples. This historically caused people to overestimate how much polysemanticity there is. This is a really good point and we should update on it. But it’s nowhere near a sufficient argument that we understand most of what neurons are doing, and these results do not show that interpretability is solved, or even that it is vastly easier than previously anticipated.
What does it take to explain a neuron?
It’s unclear whether there even is a simple pattern that explains every neuron.[1] But even if there is a simple pattern that matches the activating examples of a neuron, that still doesn’t mean that the explanation is correct.[2] Suppose we look at the top activating examples of a neuron, and they are all sentences like “Fred the poodle zipped down the street on his bicycle. ‘Wow, I didn’t know a dog could ride a bicycle!’ I exclaimed.” Top activations can often give a misleading impression of how monosemantic a neurons is, so next we look at the top 20th percentile of activations, and we find the examples are now things like “John rode on his bicycle while his dog trailed behind”. And when we check the weakest activations, they’re often still about dogs, just without bicycles — “The dog sauntered lazily down the street.” Given this evidence, can we conclude that the neuron is monosemantic, and that its meaning is “dogs riding bicycles”?
I argue we cannot. There are a few reasons why the vibes of activating examples might heavily mislead us about how interpretable a neuron is. First, just because every example that activates the neuron fits the pattern, doesn’t necessarily mean that the other way around is true; perhaps not all examples that fit the pattern also activate the neuron. Perhaps your neuron actually only activates on dogs on bicycles on sunny days, but you never noticed that. This turned out to be a pretty big problem with the auto interp paper.[3] In practice, it’s very common for neurons that look like they activate on X to actually only activate on a very specific subset of X that is hard to characterize compactly. If you forced the neuron to always activate on X, it would degrade the model.
Second, there might actually be really important information in the activation magnitudes. It might matter crucially whether the neuron is strongly or weakly activating, and if you have a hard time predicting which activations should be strong or weak, you might be missing a big part of the explanation. My best guess from all the results I've seen is that ablating small neuron activations quite substantially degrades model performance, so I don’t think we get to ignore weak activations completely.[4]
Simulation scores tell us whether we explained a neuron
To be able to claim that we understand a neuron, it’s insufficient for things to look kinda nice. If you can’t simulate the neuron in a way that doesn’t degrade the model, you don’t really understand the neuron. This requires writing a rubric—”If there’s a dog literally on a bicycle, that’s a 4.5; if there’s a dog and a bicycle but no riding, that’s a 3.2”, and so on—and then comparing that rubric against inputs and substituting neuron values with the simulated values. If this process heavily degrades the model, then our explanation was wrong.
Nick’s post argues that simulation scores are bad because they are too demanding — they force you to explain lots of stuff that doesn’t actually matter. However, I think this is just a byproduct of the kinda terrible correlation-based simulation scores used by the original auto interp paper, and is fixed basically entirely by (a) measuring downstream KL instead and (b) scoring on a large dataset. KL also elegantly avoids the problem of needing to bin activations carefully.[5]
If it doesn’t actually matter for the model’s behavior which punctuation token sentence-level information is stored in, or which activation strengths of the Trump neuron correspond to different sizes of Trump, then the KL won’t punish it. Conversely, if it matters a ton, it seems completely fair to demand an explanation. If the relation really is simple but uninteresting, then this doesn’t make the explanation much more complicated, but if the relation is actually complicated in a way that is essential for model functioning, it’s best to know.
In fact, if we had applied this scoring methodology all along, we would have noticed that some of the polysemantic explanations were bad explanations in the first place! For instance, the car and dog explanation that Nick uses as an example of a bad polysemantic explanation of the V-shaped-object neuron would have been flagged as a bad explanation, because it would fail to fire on a ton of V shaped objects, and also it would falsely fire on a bunch of round dogs and cars.[6]
I don’t think the simulation KL metric is perfect,[7] and I’m sympathetic to the argument against relying too much on metrics, but it avoids the two failure modes I outlined above, which are very hard to notice by looking at activating examples, but which nonetheless matter a lot. Importantly, it captures both of the reasons that the basic vibe check might fail.
Beyond understanding neurons
Explaining neurons is still only part of fully understanding what a neural network is doing. We ultimately want to understand how models work, which requires understanding the computation between neurons. Unfortunately, this is really hard, and doesn’t work very well. Past work on finding circuits between neurons still finds relatively large and complicated circuits, which often have lots of confusing redundancy, and fail to explain most of the variance of the model’s behavior. My current best explanation for this is that concepts are stored in superposition, and MLPs do computation on those features in superposition, by doing more than one computation per neuron.
I’m hopeful that it’s possible to disentangle everything, figure out how computation-in-superposition works, and ultimately find clean, understandable circuits in networks. But historically, the field of interpretability has often gotten stuck because of a lack of rigor, focusing on things that look cool even when those things oversell our actual level of understanding. It’s up to us to strike the right balance between striking qualitative examples and rigorous arguments for understanding.
Someone found a neuron that activates on Colorado and also Tornado (the python library, not tornadoes in general). I have a hard time thinking of a simple monosemantic explanation that captures both of these! More broadly, my experience with neurons is that most neurons are pretty inexplicable, even after thinking pretty hard about potential explanations.
By which I mean, the pattern applies to all examples where the neuron activates, which does not necessarily imply that the neuron activates in all examples where the pattern applies. X matches Y is not commutative!
I don’t think the revision stuff turned out to be super satisfying for solving this problem, and it’s fundamentally less satisfying than simulation which I describe in the next section because you’re depending on the attacker to find all the relevant counterexample inputs.
Hopefully I'll be able to share something more concrete soon; I’m currently prioritizing getting this post out ASAP. It’s surprising that my result here is different from Nick’s, and it seems worth tracking down the source of the divergence.
I think downstream KL is more correct than loss delta, because it’s very cursed if you can offset bad modeling on some neurons by modeling other neurons in ways that actually improve loss. My experience in practice is that this is not hypothetical.
Each individual neuron has a very small effect on the entire network, so we’d expect the number to be very small in some absolute sense. However, we can still compare to other neurons and see which explanations cause relatively bigger impacts, or ablate large batches of neurons at a time.
For example, it’s pretty hard to compare models of different sizes.