What Llama’s internal signals reveal about factual accuracy

This is the second stage of a project that began with Testing internal signals for factual accuracy in legal answers and biographies. There, a probe, a small readout trained on Llama 3.1 8B’s internal activity, separated correct from incorrect biography claims far better than the model’s stated confidence, a weak comparison. Such a readout could cheaply flag likely false claims in long answers, but only if it carries information simpler signals don’t. Here I test it against stronger baselines, check whether it only tracks a subject’s fame or a claim’s position, and ask which components write the signal it reads.

TL;DR

On 742 held-out FActScore claims the probe reaches AUROC 0.802 (0.5 is chance), against 0.541 for Llama’s stated probability, a weak baseline. Stronger baselines are closer: P(True), a separate way of asking Llama whether one claim is true, reaches 0.735, and the subject’s Wikipedia pageviews reach 0.740; with whole biographies resampled, no clear advantage over pageviews is detected. Within biographies, where popularity is fixed, the probe keeps a signal beyond what sentence position and year mentions explain (0.645 over all 157, above a 0.60 bar set before the decomposition). No clear advantage over P(True) is detected there, but in an exploratory test the two combined reach 0.745, above either alone, so they carry partly different information.

A preregistered, exact decomposition credits attention heads (components that route information between positions) with 79% of that residualized signal’s direct, signed separation of correct from incorrect claims, not 79% of Llama’s factual knowledge or of the computation behind it; the neuron part is spread over tens of thousands of neurons. Knocking out the top 200 neurons had a measurable effect, but it did not meet the effect-size criterion set before the test; larger exploratory knockouts cut the signal steeply, while random ones barely moved it. Automatic descriptions did not clearly set the top neurons apart from random ones.

Probe, test split
0.802
AUROC on 742 held-out claims; P(True) 0.735, pageviews 0.740, stated 0.541
Position removed
0.645
Within-biography AUROC, all 157 cross-fitted; bar 0.60, set before the decomposition
Probe + P(True)
0.745
Within-biography AUROC, all 157 (exploratory); probe alone 0.689
Heads’ share
79%
Of the probe’s direct, signed separation, not of Llama’s factual knowledge
Correction, 23 October 2026

An earlier version said that, by the preregistered rule, the top 200 neurons are not necessary. The targeted knockout had a measurable effect, but it did not meet the effect-size criterion set before the test. I also rewrote the post around the stronger baselines and qualified the 79% figure.

Status

The decomposition, the 200-neuron knockout test and the neuron ratings were preregistered; the baseline, popularity and position comparisons were not. The probe–P(True) combination, head knockouts, dose-response curves and description test are exploratory, each chosen after related results were known and fixed in a dated plan before its own data existed. A workshop paper is in draft and not peer reviewed, and this stage’s code, plans and result files are on an unpublished branch of the public scasella/activation-probes-claim-correctness repository.

Setup and baselines

FActScore (Min et al., 2023) has 157 ChatGPT-written biographies split into 4,886 atomic facts, each marked supported or not by human annotators; those labels are the ground truth for every score here. For each fact, I average Llama 3.1 8B Instruct’s layer-19 residual stream (the running state each layer reads from and adds to) over the fact’s source sentence. The probe is an L2 logistic regression fitted on 133 biographies and scored once on 24 held-out ones: 742 facts, 233 of them wrong. I compare it with four baselines, two from Llama itself:

  • Stated probability. Llama sees the biography and up to 20 facts at a time and writes a probability that each is correct. It did not write the biographies, so this is Llama verifying ChatGPT’s claims (the explorer’s Llama-as-verifier).
  • P(True). A separate way of asking Llama whether a claim is true: I show it one fact, with the subject named, and read how strongly its first answer token favours “True” over “False” (the logit difference).
  • Popularity and position. The subject’s Wikipedia pageviews, and the fact’s sentence position, scoring earlier sentences as safer.

Scores are AUROC, the chance that a random correct claim outscores a random incorrect one (0.5 is chance). Within-biography AUROC compares only claims about the same person. Brackets are 95% bootstrap intervals over claims or whole biographies, as stated.

Han et al. (2025) also probed Llama hidden states for claim correctness, testing on FActScore against verbalized confidence and P(True). Their Llama 3.1 8B probe, trained on LongFact, reaches AUROC 0.698 on ChatGPT claims from the same human-annotated FActScore release; my 0.802 comes from a probe trained on FActScore itself, so it is not an improvement on theirs. This study adds paired comparisons with stated confidence and popularity, within-biography controls, the probe–P(True) combination and a decomposition with knockouts.

Stronger baselines narrow the gap

All four scores rank the same 742 claims from 24 biographies held out from probe training; intervals resample claims. With only 24 biographies, resampling whole biographies gives the probe a wider [0.748, 0.848]. Probe + P(True) is exploratory.

Loading the interactive figure…

This interactive figure could not load. The same view is in the explorer.

Table 01 as numbers
Table 01Test split: 742 claims from 24 held-out biographies
SignalAUROC (claims resampled)Within biography (biographies resampled)
Probe on layer-19 activations0.802 [0.769, 0.833]0.723 [0.632, 0.793]
P(True), one claim at a time0.735 [0.696, 0.772]0.655 [0.603, 0.704]
Stated probability0.541 [0.514, 0.570]0.568 [0.505, 0.632]
Subject’s Wikipedia pageviews (no model)0.740 [0.701, 0.780]constant within a biography
Sentence position, earlier is safer (no model)0.582 [0.534, 0.626]0.624 [0.547, 0.688]

The stated probability fails by saturating: 650 of the 742 claims get exactly 1.0 and 39 exactly 0.0. The probe leads it by +0.262 [0.180, 0.332] with whole biographies resampled, and by +0.155 [0.057, 0.244] within biographies. Over P(True), the stronger read of Llama’s judgement, its lead is +0.067 [0.003, 0.124] with biographies resampled, an interval that nearly reaches zero.

Test splitHuman labels
Signal

flagged by the signal dotted contains an incorrect claim (superscript: how many)

Click a sentence to find its claims. The probe reads whole sentences, so claims from one sentence share its score. Llama-as-verifier saw the whole biography and the claims in chunks of up to 20; P(True) saw one claim at a time with the subject named.

Loading the interactive figure…

This interactive figure could not load. The same view is in the explorer.

Popularity is the obvious confound. Facts about obscure people are wrong more often, so a signal could rank claims by fame without reading them. Pageviews alone reach 0.740. The probe leads them by +0.062 [0.024, 0.097] with claims resampled, but popularity belongs to a whole biography, and with whole biographies resampled the interval is [−0.017, 0.155]: no clear advantage detected. Comparing claims within each of the 24 test biographies holds popularity fixed; there the probe’s lead over the stated probability holds, while over P(True), +0.068 [−0.049, 0.158], no clear advantage is detected.

Test split742 claims · 233 incorrect

Errors caught as more claims are flagged

Ties are drawn as straight segments, the average over random tie-breaking. Llama-as-verifier's long flat-to-diagonal run is the 650 claims it scored exactly 1.0.

Within one biography

Pooled over all claims, popularity alone does well: a subject's Wikipedia pageviews reach 0.740 [0.701, 0.780], and with whole biographies resampled no clear advantage of the probe over them is detected (+0.062 [−0.017, 0.155]). Comparing only claims about the same person holds popularity fixed.

Within-biography AUROC on the 24 test biographies, with whole biographies resampled. The probe leads Llama-as-verifier by +0.155 [0.057, 0.244]. Sentence position scores earlier sentences as more likely correct; it needs no model and, unlike popularity, varies within a biography.

All 24 test biographies

Within-biography AUROC for each one, sorted by the probe. Some biographies have few incorrect claims, so single-biography scores are noisy. Click a name to read it.

ProbeP(True)Llama-as-verifieraxis 0 → 1, line at 0.5

Loading the interactive figure…

This interactive figure could not load. The same view is in the explorer.

Position is a confound too, and the signal survives it

Later sentences in a biography are wrong more often, and the probe’s score partly tracks that. Twenty-four test biographies are too few for this question, so I cross-fitted five probes, each scoring the fifth of all 157 biographies it never saw; the 24 test biographies now also help train the other folds’ probes. Position alone then reaches 0.654 within biographies, against 0.689 for the probe. Removing the probe’s linear dependence on position and year mentions, with slopes fitted on the other folds, leaves a residualized score that still reaches 0.645 [0.614, 0.675], above the 0.60 bar that gated the preregistered analysis below. This is the claim-level signal I can defend, and the one the decomposition takes apart.

The probe and P(True) carry partly different information (exploratory)

Over all 157 biographies the probe scores 0.689 within biographies and P(True) 0.660: no clear advantage for the probe is detected (+0.029 [−0.009, 0.068]). The two are only weakly correlated (0.35 on the test split), so I tested a linear stack with two weights fitted within biographies on the training folds.

Within biographies over all 157, the stack reaches 0.745 [0.719, 0.769]: +0.055 [0.039, 0.072] over the probe and +0.085 [0.056, 0.113] over P(True). Part of the gain is breaking ties among claims from one sentence, which share the probe’s score; without same-sentence pairs the gain over the probe is +0.042 [0.025, 0.059]. On the test split the stack reaches 0.834 against 0.802. I chose this test after seeing the single scores: it shows the signals are complementary on this data, but confirming the gain’s size needs biographies that played no part in choosing it.

ExploratoryPlanned after the single scores, committed before any combined score

Within biographies, all 157 (cross-fitted, biographies resampled)

Probe0.689[0.662, 0.717]
P(True)0.660[0.637, 0.684]
Stack0.745[0.719, 0.769]

The stack gains +0.055 [0.039, 0.072] over the probe and +0.085 [0.056, 0.113] over P(True). Facts from one sentence share the probe's score, so part of the gain over the probe is the stack breaking those ties; leaving out same-sentence pairs, the gain is +0.042 [0.025, 0.059].

Test split, probe0.802
Test split, stack0.834[0.802, 0.864] claims resampled

Stack weights were fitted within biographies on the other 133 biographies: 0.0729 per unit of probe logit and 0.0283 per unit of P(True) logit difference.

Every test claim, by both signals

correctincorrectequal stack score

The vertical axis reads P(True) in logits: Llama's logit for “True” minus its logit for “False”. Incorrect claims (filled) gather toward the lower left. Each dashed line joins claims with the same stack score, which rises toward the upper right. Hover a point to read its claim.

Loading the interactive figure…

This interactive figure could not load. The same view is in the explorer.

Which components write the signal

I tested a claim from Cammarata’s essay “Neural Networks Are Already Clean”: that probe-like directions break down into a few readable neurons. Everything in Llama’s layer-19 residual stream was written by an attention head (a component that routes information between positions), an MLP neuron (one unit of a layer’s feed-forward block) or the token embedding, so the probe’s score splits exactly into direct contributions from 286,720 neurons, 640 heads and the embedding. I measured each one’s share of the residualized probe’s within-biography separation of correct from incorrect claims: a direct, signed share, crediting only what a component writes straight into layer 19 and netting out opposite contributions. It is not a share of what Llama knows or of the computation behind the signal.

Preregistered decompositionDescriptive: no testAll 157 biographies, cross-fitted

Heads carry 79% of the direct separation; neurons nearly cancel out

Bars show the summed contributions that push correct claims above incorrect ones (right) and the reverse (left); the dot is the net. Neurons push 18.23 one way and 18.06 the other, leaving a net 0.173, or 21% of the total 0.814. The embedding's share is 0.01%.

Loading the interactive figure…

This interactive figure could not load. The same view is in the explorer.

Table 02 as numbers
Table 02Direct contributions to the within-biography separation (all 157 biographies, cross-fitted)
ComponentRanks correct higherRanks incorrect higherNetShare
640 attention heads+1.41−0.770.64179%
286,720 MLP neurons+18.23−18.060.17321%
Token embedding0.00010.01%
Total0.814100%

Heads carry 79% of the direct separation and neurons 21%. The heads’ part is somewhat concentrated: the top head carries 5.0% and the top ten 33%. The neurons’ part is not: they push hard both ways and nearly cancel. The top 50 hold 1.25% of the positive neuron mass, half of it takes 16,307 neurons and 80% takes 46,127, and top-50 sets chosen in different folds overlap with a Jaccard index of 0.53 on average (neurons in both over neurons in either). These shares are preregistered descriptives, not tests.

640 attention heads

Layers 0–19 down, heads 0–31 across. Pink heads rank correct claims above incorrect ones, net; blue heads do the reverse. The ten outlined heads carry 33% of the separation between them; the strongest alone carries 5.0%.

Where the top ten heads look

Average attention from a sentence's tokens, split by what they attend to. Descriptive.

start tokens (2 BOS)prompt (names the subject)earlier sentencesthe sentence itself

286,720 MLP neurons, one pixel each

Each square is one layer's 14,336 neurons. Pink neurons rank correct claims above incorrect ones, net; blue neurons do the reverse; colour strength shows how a neuron's mass ranks among all of them. Slide to light up, in amber, the neurons with the most positive mass, and see how little of it any small set holds.

They holdof the positive neuron mass

The 50 neurons with the most positive mass, the positive carriers rated below, hold 1.25% of it. Half of it takes 16,307 neurons and 80% takes 46,127. Across the five folds, the top-50 sets overlap with Jaccard 0.53 on average.

Loading the interactive figure…

This interactive figure could not load. The same view is in the explorer.

Knocking components out

If a set of components carries the signal, replacing their outputs with their average (mean ablation) should hurt the probe more than doing the same to random components from the same layers. Selection and scoring were split by fold: for each fifth of the biographies, components were chosen by mass on the other four-fifths, knocked out while Llama read that fifth, and scored with that fold’s probe, though the probes that weight the other folds’ contributions were trained with this fifth included. Over all 157 biographies the residualized probe’s within-biography AUROC starts at 0.644 (the 0.645 above, recomputed in full precision).

The preregistered test knocked out each fold’s 200 neurons with the most mass. That cost 0.032 [0.016, 0.046] of AUROC, about a fifth of the residualized probe’s lift above chance and five times the 0.006 removed by matched random neurons. The targeted intervention had a measurable effect, 0.026 [0.013, 0.038] beyond random, but it did not meet the 0.03 effect-size criterion set before the test.

Preregistered: 200 neuronsExploratory: head knockouts (E1), dose curves (E2)
Show

Exploratory follow-ups, each planned before its data: E1 knocked out the top 10 heads, and E2 extended both curves. Cost grows steadily with set size, from 0.019 for the top 10 heads to 0.213 [0.179, 0.250] for the top 160 heads and 0.219 [0.180, 0.259] for the top 5,000 neurons. Random sets, averaged over three per size, never cost more than 0.010. At 20,000 neurons they slightly raise the score (−0.019), so top − random there overstates the top set's cost.

At the largest sizes the residualized score falls below chance (0.425, 0.376 and 0.431 after 5,000 neurons, 20,000 neurons and 160 heads). On the raw probe logit, which starts at 0.689, the same knockouts leave 0.485, 0.406 and 0.534, so only the 20,000-neuron set is clearly below chance on both scales. Why is untested: the selection took only components with positive mass, so those pushing the wrong way stay in place, and the residualized score subtracts fixed position slopes. Read these points as showing dependence, not measuring it.

Plotted random points average three sets. The preregistered test and E1 used five, giving top − random differences of 0.026 and 0.013 where these three-set points give 0.025 and 0.010. Intervals resample biographies.

Every knockout as a table

Loading the interactive figure…

This interactive figure could not load. The same view is in the explorer.

Table 03 as numbers
Table 03Exploratory knockouts: within-biography AUROC lost (biographies resampled)
Set knocked outTop componentsRandom (mean of 3 sets)
10 heads0.019 [0.004, 0.036]0.009
40 heads0.091 [0.068, 0.114]0.010
160 heads0.213 [0.179, 0.250]0.001
50 neurons0.011 [0.003, 0.022]0.004
200 neurons0.032 [0.016, 0.046]0.007
1,000 neurons0.082 [0.056, 0.108]0.009
5,000 neurons0.219 [0.180, 0.259]−0.007
20,000 neurons0.268 [0.223, 0.314]−0.019

The random column averages three sets per size. The preregistered test used five, hence the text’s 0.006 against the table’s 0.007.

In exploratory follow-ups the cost grows steadily with set size, while random sets never cost more than 0.010. The largest sets push the residualized score below chance (0.425, 0.376 and 0.431 after 5,000 neurons, 20,000 neurons and 160 heads); on the raw score, which starts at 0.689, they leave 0.485, 0.406 and 0.534, so only the 20,000-neuron set is clearly below chance on both. Why is untested, so I read these points as showing dependence, not measuring it.

Neuron descriptions did not set the top neurons apart

To test readability, an LLM rater (Claude Opus 5.5, made rater of record by an amendment before any rating existed) described the 100 carriers, the 50 neurons with the most positive and 50 with the most negative mass, alongside 100 matched random neurons, shuffled and unlabelled. Plausible descriptions proved weak evidence of readability. These are LLM judgements; the claims’ correct and incorrect labels are FActScore’s human annotations.

  • Carriers and random neurons read alike. Nearly all got a fitting description, so the test sits near its ceiling, and both came out mostly confound-led, partly because the rubric files topics such as awards as confounds.
  • No clear advantage for carriers’ descriptions. In an exploratory simulation test, a second model used them to predict activations on unseen sentences; carriers’ Spearman correlation exceeded random neurons’ by 0.062 [−0.014, 0.137].
  • Activation is not effect. The rater saw activation only, yet for 32 of the 50 positive carriers higher activation lowers the probe’s score.
Preregistered: category (A), legibility (B)Exploratory: description simulation (E3)LLM rater of record

The rater of record is an LLM (Claude Opus 5.5). A second pass of the same model agreed with κ 0.83 on fit and 0.76 on category, which shows consistency, not validity. That is the same circularity raised against the claim being tested. This version leaves out which neurons were carriers, so the packet can still be rated blind.

Rating results and all 200 rated neurons

Legible, and read like random neurons

98 of 100 carriers and 95 of 100 random neurons got a description that fits. Weighted by mass, the coherent carriers are 90% confound, 9% mixed and 1.2% epistemic: Primary A reads CONFOUND-LED. Confound features are no more common among carriers than among random neurons (87/98 against 91/95, Fisher p = 0.10). The preregistered rubric counts a claim type or topic (awards, education, family) as a confound, so both groups come out confound-heavy: the label reflects the rubric as much as the carriers, and the comparison with random neurons is the informative one.

Primary B asks whether the top carriers are as legible as Cammarata's essay “Neural Networks Are Already Clean” predicts. It reads ESSAY-CONSISTENT for the top carriers of a dense probe, on a test near its ceiling: 2% of carriers got a description that did not fit their sentences, against 5% of random neurons. But the 50 positive carriers hold only 1.25% of the positive neuron mass, and neurons carry 21% of the total separation.

No clear advantage for carriers' descriptions

A second model (gpt-6.1-sol) used each description to predict the neuron's activations on held-out sentences. No clear advantage was detected for carriers' descriptions: Spearman 0.33 against 0.27, a difference of 0.062 [−0.014, 0.137] with neuron pairs resampled. The interval rules out a carrier disadvantage beyond 0.014, but not an advantage of up to 0.14. The control that would set a chance level was not run. Both sides are LLM judgements: no human wrote or checked either.

Mass is a neuron's net effect on ranking; activation is not. A neuron's effect on the probe score is its activation times its readout, so for 32 of the 50 positive carriers higher activation lowers the probe score, and their mass comes from being less active on correct claims. 8 carriers change readout sign across folds. This version leaves the per-neuron readout out.

Biography sentences are ChatGPT-written FActScore text and may contain false claims about real people. Web-text contexts are unfiltered FineWeb excerpts and can include adult or offensive text.

Loading the interactive figure…

This interactive figure could not load. The same view is in the explorer.

Explore it

The Fact Probe Explorer holds the data behind this post, from per-claim scores on the 24 test biographies to every head and neuron, the knockout curves and the 200 rated neurons. It leaves out which neurons were carriers, with their layers, masses and readouts, so the packet can still be rated blind.

Who did what, and what checked it

I ran this stage with Claude Opus 5.5 as a coding agent; it co-authored every commit, from analysis code and GPU jobs to the preregistration and paper draft, and fresh Claude subagents did the ratings. The plan records two decisions as mine: an LLM as rater of record, and gpt-6.1-sol, from another model family, as simulator. The checks were mechanical: the plan and amendments A1–A3 predate the data they cover, scoring scripts stop on a failed hash or replication check, and an audit of all 40 rater transcripts found no access to the key. No human reviewed the ratings.

Interpretation and limits

A simple probe on Llama’s hidden states ranks human-labelled claims much better than Llama’s stated confidence and ahead of P(True) on the pooled test set, with no clear advantage detected over a popularity lookup. Within biographies it survives position controls and shows no clear advantage over P(True), though the two combined beat either alone (exploratory). What it reads is distributed: most of the direct contribution comes through attention heads, and I found no small, readable set of neurons that carries it.

The most consequential limitation is that no untouched biographies remain. The comparisons that hold popularity fixed rest on the 24 test biographies, or on a cross-fit over all 157 that includes them and was designed after their results were seen. The probe was also trained on pooled claims, so it can lean partly on popularity. Other limits:

  • One model, layer and pooling choice, fixed in advance.
  • The test split is small: the probe scored 0.728 on validation and 0.802 on test, [0.748, 0.848] with whole test biographies resampled.
  • The decomposition counts direct effects only.

Next experiment

  • A probe trained within biographies, so it cannot lean on popularity, and trained to ignore position, scored against P(True) and the stack on human-labelled biographies none of these analyses has touched.
  • Blind human ratings of the same neuron packet.
  • Sampled self-consistency and a semantic-entropy-probe baseline.

Methods details

Decomposition. Llama was re-run in fp32, capturing for layers 0–19 the inputs to each MLP down-projection and attention output projection and the token embeddings, mean-pooled over the probe’s sentence spans. These projections have no biases, so the pooled layer-19 residual is exactly their sum, and the components reproduce the probe’s score to within 0.002 logit. Each fact is scored with its own fold’s probe; a component’s mass is its mean true-minus-false difference over the 27,276 within-biography pairs.

Knockouts. Random neurons, here and in the ratings, come from the same layers, are matched on contribution variance and exclude the top 1,000 by absolute mass. Each knocked-out output is replaced at every answer token with its mean over all answer tokens of the 157 biographies.

Neuron ratings. The 100 carriers, unlike the knockout sets, were picked by mass over all 157 biographies, as the preregistration specified. The rater saw each neuron’s highest- and lowest-activating biography sentences and web-text contexts, wrote a description, judged its fit, and labelled the neuron epistemic (tracking knowledge), confound (such as topic or format) or mixed. A second pass of the same model agreed with chance-corrected κ 0.83 on fit and 0.76 on category: consistency, not validity. The simulation test had no chance-level control.

A data error. In one training biography a decoding clean-up made three sentence windows one token too long, affecting 12 of the 4,886 facts. Refitting the probes moves the test AUROC and the 0.645 by under 0.001, and with the probes fixed no within-biography AUROC can move by more than 0.0055. Amendment A4, dated after all results, records it.

Reproducibility

ModelLlama 3.1 8B Instruct (meta-llama/Llama-3.1-8B-Instruct); this study’s forward passes ran on one A100-80GB on Modal. Rater of record: Claude Opus 5.5. Simulator for the exploratory description test: gpt-6.1-sol.
ExperimentLayer-19 residual stream, mean-pooled over each fact’s source sentence; L2 logistic regression, C = 0.01, fitted on 109 training and 24 validation biographies, scored once on 24 test biographies. Five-fold biography cross-fit over all 157 and 1,000 bootstrap resamples, both seed 20260424; the description-simulation interval uses 10,000 resamples over neuron pairs. See Methods details.
DataFActScore’s ChatGPT biographies and human labels (Min et al., 2023): 157 biographies, 4,886 facts after dropping 540 marked irrelevant. Neuron contexts: 5M tokens of FineWeb sample/10BT (ODC-By 1.0).
ResultsThe interactive explorer, built from the result files; its sources table names the file and key behind each number. The probe’s test AUROC and its lead over the stated probability with whole biographies resampled come from the public repository’s 10,000-resample run (factscore_grouped_bootstrap_ci.json, added in September), matching the initial study.
CodeThis stage’s code, preregistration and result files are on branch workshop-revision, which has not been pushed to the public scasella/activation-probes-claim-correctness repository. Its public main branch holds the April release and the September biography-grouped bootstrap, not this analysis.
StatusPublished 2026-10-18 · updated 2026-10-23 · Decomposition, knockout test and neuron ratings preregistered (amendments A1–A3; A4, dated after all results, records a data error); other analyses labelled exploratory; workshop paper in draft; not peer reviewed; code and plans for this stage not public.