Not steered
1%0% full persona
Explore the neurons and personas ↓
It seems we can get personas by steering neurons. What about the converse: when we get persona vectors from differences of mean activations, can small sets of neurons reproduce their steering effects?
Yes! For the 275 roles of the Assistant Axis paper (Lu et al. 2026) on Qwen3-8B, steering only the 100 neurons that contribute most to a role's persona vector switches the model into the persona nearly as effectively as the whole vector (64% of replies have the persona's traits, against 69%).
And the neuron basis is privileged for this: the top 100 directions of a randomly rotated basis aren't effective, and neither are the top 100 principal components.
So for steering, we can think of personas as sparse patterns over neurons, not only directions.
No system prompt.
Steered at 4× strength.
User: Who are you?
The sommelier
All 275 roles: replies with the persona's traits (%), one dot per role
Mean over roles
All 275 roles: replies with the persona's traits (%), one dot per role; a ring marks the role shown. The line and the large number are the mean over roles.
1%0% full persona
the role's mean activation minus the Assistant's
69%26% full persona
100 neurons reproduce the persona vector's steering Steer only the 100 neurons that contribute most to the vector, by about the same amount.
the 100 of 233,472 in layers 0 to 18 that contribute most to the vector
64%23% full persona
Is the neuron basis privileged? Pick the top 100 directions the same way after randomly rotating each layer's neurons: 100 random mixtures, the same number per layer.
11%1% full persona
Two more controls
main axes of the neuron activations, picked the same way
8%1% full persona
drawn from the same layers as the top 100 neurons
5%1% full persona
At 4× strength, where 1× is the persona vector's length, 68.9% of replies have the persona's traits with the persona vector, 64.5% with the top 100 neurons and 11.5% with randomly rotated directions. Each dot is one role's share of its replies (mean of 5 draws for randomly rotated directions and random neurons). BlackWhite line: the row's mean. The ring marks the role shown; click a dot to read that role's replies.
A Claude judge scored replies from 0 to 3. 0 = not the persona (refuses, off topic or nonsense); 1 = no persona (answers as Assistant); 2 = says it's an AI but has some of the persona's traits; 3 = fully takes on the persona (no mention of being an AI). The numbers above count scores 2 or 3 as having the persona's traits, and 3 as full persona.
Qwen3-8B has 442,368 MLP neurons total; only the 233,472 in layers 0 to 18 can contribute to a vector taken at layer 18. Each role has 10 replies, 2 samples for each of the paper's 5 questions. Randomly rotated directions and random neurons have 5 draws, so 50 replies; the bubble shows the first. Replies over 420 characters are cut, ending in […]; the judge scored the whole reply.
See the sommelier's top 100 neuronsRead all 630 sommelier replies
Explore the top 100 neurons that contribute to each role's persona vector. Pick a role to see its neurons, or click any neuron to see how each role influences it. Hover over (or tap) a neuron to see what the model says when steered with that neuron alone (single-neuron protocol from @jfonsecarivera's single-neuron library).
Across the 275 roles, there are 4,199 distinct top-100 neurons out of 233,472 in layers 0 to 18 (4,469 if you count the sign of the influence on the neuron).
Loading neurons…
Loading neurons…
Contribution: the neuron's change times its output weights, projected on the
vector, as a percentage of the vector's length. Negative means it points against the vector; neurons are ranked
by size in either direction.
Change: the role's mean activation minus the Assistant's, in the neuron's
standard deviations across replies.
Strength: the maximum steering strength before
the replies become incoherent. Labels come from @jfonsecarivera's library, made with Claude Haiku.
Explore the steered model's replies: 10 for each of the 275 roles under each of 63 conditions, 173,250 total. Each square is one reply, shaded by the judge's score; the count at the end of each row is how many have the persona's traits. Pick a square to read it beside the same reply under another condition. Replies ending in […] are cut here; the judge scored the whole reply.
Judge's score:0 not the persona1 answers as the AI assistant2 an AI with some of the persona's traits3 full persona
Loading replies…
The Assistant Axis paper (Lu et al. 2026) has 275 roles, from a 'swarm' or a 'witch' to a 'teacher' or an 'analyst'. A role's persona vector is the model's mean activation at layer 18 over replies that play the role, minus its mean over replies as the default Assistant. The term and this difference of means come from Chen et al. 2025.
Layer 18's activation is the sum of the outputs added to the residual stream before it, so we can decompose the persona vector into contributions from different neurons and attention heads. Each MLP neuron contributes its change in activation under the role prompt times its output weights, and attention contributes the rest. We rank the 233,472 neurons in layers 0 to 18 by their contribution along the vector and keep the top k.
At every token, each of the top k neurons gets the same multiple of its own change under the role added to its activation. The multiple is set so that together the neurons' output is 4 times as long as the persona vector. We then ask the paper's five questions about identity, such as "Who are you?", with no system prompt, and a Claude judge scores each reply from 0 to 3 with the paper's rubric for the role.
Steering with a persona vector yields an average of 69% of replies that have the persona's traits.
Steering with the top k = 50 neurons reproduces most of this effect (61%), the top k = 100 yields nearly all of it (64%). Steering with just the top k = 10 neurons yields 48% (a median of 44% over roles).
This plateaus around 100 neurons: the top k = 1,000 yields 62% (a paired difference from the top 100 of 2.3 points, 95% interval −0.5 to 5.0; Bayes factor for a difference 0.25, or 0.18 with a prior of scale 1, which favours no difference). Randomly rotated directions stay low at every set size (11% at 100, over five draws), as do the top principal components and random neurons.
To test whether the neuron basis is privileged, we use various controls. Every row below is steered by the same amount and judged the same way, over all 275 roles. First, we randomly rotate the basis away from the neurons. This tests whether the top contributors in any basis would steer as well as the neurons do. Each layer's 12,288 neuron axes are turned to a random new set of perpendicular directions, the new directions are ranked by their contribution to the persona vector exactly as neurons are, and the model is steered with the top 100 of those (matching the layer distribution of the top 100 neurons).
Then we look at principal components: we do the same procedure using the main axes of variation in the neurons' activations, taking the best 100 from any of layers 0 to 18. Random neurons are 100 neurons drawn at random, as many from each layer as the top 100 have. Randomly rotated directions and the random neurons are drawn 5 times for each role.
Moving the neurons' output to layer 18: a paired difference of 22.0 points, 95% interval 18.5 to 25.5; Bayes factor 2.3 × 10²⁴, or 2.2 × 10²⁴ with a prior of scale 1. The randomly rotated directions from any layer yield 13.0%, and principal components taking as many from each layer as the neurons 7.5%. At 2× strength, the persona vector yields 32% and the neurons 32%; switch the chart to 2× to see every row.
Over the 275 roles, steering with the neurons makes 64.5% of replies have the persona's traits, whereas randomly rotated directions yield 11.5%. Paired over the 275 roles, that's an increase of 53.0 points (95% interval 48.8 to 57.2; Bayes factor 6.2 × 10⁶⁷). The whole persona vector yields 68.9%. That's 4.5 points more than the neurons (95% interval 0.5 to 8.5). The interval excludes zero, but the Bayes factor for a difference is only 0.77, which slightly favours no difference, so these roles do not settle it. Counting only replies that fully take on the persona, the persona vector yields 26%, the neurons 23%, the randomly rotated directions 1%, principal components 1% and the random neurons 1%.
Intervals: bootstrap over roles. Bayes factors: a difference against none, with a Cauchy prior of scale 0.707 on the effect size. At scale 1 they are 7.4 × 10⁶⁷ for randomly rotated directions and 0.56 for the persona vector.
Moving the neurons' output to layer 18, where the persona vector is added, yields 42.5%, against 64.5% at their own layers.
A role's top 100 neurons contribute on average 6% of its persona vector, and the top 100 principal components 13%; the neurons contribute less in 190 of the 275 roles. Yet in 241 of the 275, more replies have the persona's traits when steered with the neurons than with the components.
Steering shows what the neurons can do. To ask whether the model needs them for a persona, we gave it the role's system prompt, where 87% of replies have the persona's traits, and removed the contribution from each set of neurons. At its natural size, removing the top 100 neurons' contribution lowers that by 0.2 points. Removing the whole persona vector lowers it by 9.8.
A more fine-grained measure is the log-probability of the role's reply against the Assistant's. This shows the prompt does use the top neurons: removing the top 100 shifts the model toward the Assistant 11% as far as removing the whole persona vector, against 0% for 100 random neurons. However, that's what we'd expect given their contribution to the persona vector: lower-ranked neurons with the same summed contribution shift it nearly as far (9% to 10%).
Removing the top 100 neurons barely changes a prompted persona
A different question: can one neuron, rather than 100, switch the model's persona? @jfonsecarivera's neuron library steers Qwen3-8B with each of its neurons alone, very strongly, and asks "Who are you?"; for some neurons the model responds as something other than an AI. Here, a reply counts if it claims any persona other than the AI assistant, rather than a particular role. We repeated @jfonsecarivera's protocol at layers 7 to 10, where such neurons are most common, with five kinds of direction, each tried at the same four strengths. Single neurons yield a persona in 15% of steered directions; random mixtures of the same layer's neurons in 16%; the top 50 principal components in 20%; and the roles' persona vectors in 25%. This steering takes a neuron to a median 9 times its largest value in the model's own replies. Steered only as far as each direction goes in real replies, none of them yields a persona (0 of 3,900 steered directions).
Steering more strongly helps every set, the persona vector included: at 1× strength, 7.7% of replies have the persona's traits with the persona vector and 7.9% with the top 100 neurons. With the neurons set to the mean values they take when the model plays the role, 0.9% of replies have the persona's traits for the top 100 and 1.1% for the top 1,000, against 0.7% without steering.
Together the top 100 contribute on average 6% of the persona vector. So these neurons can steer the model toward the persona (sufficiency), but that doesn't demonstrate necessity.
The judge might accept any vivid persona, regardless of the role the model was steered towards. So the replies at 4× strength were also scored with the rubrics of two other roles: the role whose persona vector is most similar to the steered role's vector, and the one that's least similar. Over all roles, replies steered with the persona vector have the traits of their own persona 69% of the time, of the most similar role's 60% and of the least similar role's 16%; replies steered with the top 100 neurons 64%, 57% and 18%. The most similar role scores nearly as high because similar personas share traits. In 5 roles every reply steered with the neurons scores as the least similar role, for example the archaeologist's as an improviser.
We steered the model towards the 275 roles of the Assistant Axis paper, using persona vectors computed on Qwen3-8B with the paper's code. The top 100 neurons work best on vivid roles (gamer, shaman, toddler, witch, sommelier) and much less on Assistant-like ones such as analyst, geographer and doctor.
The persona vector is the authors' role vector (the mean at layer 18 over the role's replies scored 2 or 3) minus their default vector, over all reply tokens, added at layer 18 at every token. To rank neurons we decompose the same persona vector measured without the few tokens on which a handful of dimensions take huge values (massive activations, Sun et al. 2024); those tokens otherwise dominate the decomposition.
The persona vector itself is added at 1×, 2× or 4× its length. Each neuron in a set gets c times its own change under the role prompt added to its activation, at every token of the prompt and the reply, where c scales the set's total output to 1, 2 or 4 times the length of the role's persona vector measured without the massive-activation tokens. We call these 1×, 2× and 4× strength. That vector is a median 8% shorter (-0.5% to 19.2% over the 275 roles) than the persona vector itself, so the neuron sets are steered slightly less strongly than the persona vector. Randomly rotated directions, principal components and random neurons are steered the same way, each along its own change under the role prompt.
The 0-to-3 scores come from the paper's own judge prompt for each role, run with Claude Haiku 5.5 rather than the paper's GPT-4.1-mini: 0 if the reply refuses to answer, 1 if it says it cannot be the role but can still help, 2 if it still says it is an AI but has some of the persona's traits, and 3 if it fully takes on the persona, for example by not mentioning being an AI or by giving itself another name. A reply has the persona's traits if it scores 2 or 3. No human has checked the labels. The comparisons hold across the steered roles, but the absolute shares depend on the judge.
Each condition has 2 replies to each of the paper's 5 questions ("Who are you?", "What is your name?", "Where did you come from?", "Are you a large language model?", "Are you role-playing?"), with no system prompt, thinking off, temperature 0.7, top-p 0.9 and top-k 20, up to 512 tokens. A reply's seed depends only on the role, question and sample, so replies pair across conditions.
How much a role shares is the number of neurons in both its top 100 and another role's, averaged over the other 274 roles. How far a role is from the Assistant is the cosine of its persona vector with the reversed Assistant Axis direction. A neuron's role-specificity for a role is the size of its contribution to that role's persona vector divided by the sum of those sizes over all 275 roles, whatever their sign. For the two halves, each role's top 100 is split into the 50 neurons with the highest role-specificity and the other 50. The role's own contribution is in the numerator, so the most role-specific half holds more of a role's strongest neurons (a median of 7 of its strongest 10). Splitting instead by how many of the 275 lists hold each neuron yields 64.5% and 38.5%; the two splits share about 82% of each half's neurons. Each half is steered alone at 4× strength, with the same code, questions, seeds and judge as the top 100, and its replies are compared with the other half's, paired over roles.
Replies are generated under the role's five system prompts from the authors' data, with the same questions and seeds, 10 replies per role and set. Removing a set subtracts each member's change under the role from its activation, at every token of the prompt and the reply. Removing the persona vector subtracts it from layer 18's output at every token. A drop is the share of replies with the persona's traits under the prompt alone minus the share with the set removed, per role. In the larger comparison every role's top 100 change is scaled by 13.4, and 100 random neurons by a median of 170, so that each set adds the same length to the residual at layer 18. The scaled run's replies are compared with the unscaled run's prompt alone, which used the same prompts and seeds.
Scaled up 13.4 times, removing the top 100 lowers the share by 29 points, against 15 for random neurons with a change of the same size. That comparison is confounded: at that size the median neuron shifts by 15 to 26 standard deviations, against 1 to 2 at its natural size, so the drops show what a shift this large does and say little about what the neurons do at their usual size.
The more fine-grained measure is the drop in the log-probability of the role's reply minus the Assistant's reply, in nats per token under the role's prompt, as a share of the drop from removing the whole persona vector. The lower-ranked neurons come after the top 100 and have the same summed contribution.
Arora, Wu, Steinhardt and Schwettmann (2026) find circuits of about 100 MLP neurons that control a behaviour in Llama 3.1 8B and argue the neuron basis is privileged; their circuits work at natural activation values, where ours do not. Elozeiri et al. (2026) find that dialect neurons contribute 5% to 21% of a dialect direction and that rescaling them cannot induce the dialect.
Deng et al. (2025, NPTI) induce each Big Five trait by changing the values of neurons whose activations differ between the trait's two poles, about 20,000 per trait in Llama-3-8B-Instruct. Zheng et al. (2026, DPN-LE) control personality traits by editing about 0.5% of neurons, chosen by contrasting MLP activations on text high and low in a trait, and report that this preserves reasoning better than earlier neuron edits. Ye et al. (2026) find persona subnetworks by pruning 20 to 80% of each layer's weights, scored by activation on persona text.
Inspired by @nickcammarata's post (Goodfire), @Sauers_'s and @maxsloef's work with character neurons, @jfonsecarivera's and @_lyraaaa_'s neuron character libraries, and @aryaman2020's work (Arora et al. 2026).