When a Fine-Tune Can Edit Every Block but Must Keep Its Outputs, Does It Hide False Statements From Every Activation Probe Fit on the Original Model?

Follow-up to our Lab post on a fine-tune that could change only the lower half of the model Every-layer probe ↗
Our prediction, written down before the experiment: It was wrong.

Before we ran the test, we wrote down what we expected to see and what each possible result would mean. We fixed this on October 21, 2026, 14:52 Copenhagen time, so we could not change the goal after seeing the data. Whether we were right is part of the result.

The question
A fine-tune may change every block of a language model, but a penalty keeps its next-word predictions close to the original model’s. Trained against one probe for false statements, does it hide false statements from every probe fit on the original model?
What we expected
We expected yes. Trained against a probe on the last token of the country name at layer 18, the fine-tune would push that probe under 20% of false statements caught, with its alarm line set so that 1% of true statements cross it (three runs pooled). The same probe would catch under half of what it caught before at 20 or more of the 28 layers. A fine-tune trained against the probe that reads every layer would push that probe under 30%. The model’s next-word predictions would barely move (at most 0.05 nats per token, a standard measure of the change), and it would still prefer the right country in at least 290 of 298 pairs. A probe fit again on the fine-tuned model would catch at least half of the false statements at its best layer.
How sure we were
50%: close to a coin flip.
If we were right
Where a probe reads buys no protection against a fine-tune that reaches every block. Last night’s surviving probes survived because the fine-tune could not reach them. The fact stays in the model, so the defence moves to fitting probes again on the weights that are deployed.
If we were wrong
Some probe fit on the original model survives a fine-tune that reaches every block and keeps the outputs. That gives a design rule for which layers and tokens to read. The next run would give the fine-tune more room to change the outputs and train it against the surviving probe.
What happened
It was wrong. Four of five parts held. The fine-tunes cut the layer-18 probe to 2.5% and the megaprobe to 3.3%. The outputs barely changed, and each model still preferred the right country in 298 of 298 pairs. A probe fit again on a fine-tuned model caught 99%. The spread part failed: the hiding covered 1 of the 28 layers, not 20 or more.

The original, time-stamped text

A probe is a small classifier that reads a language model’s activations1. Our probes flag false statements, like “The city of Krasnodar is in Ukraine.” Each probe gives a statement a score, and an alarm fires above a line that about 1% of true statements cross. A model can be fine-tuned to hide from a probe. Say you train a model with a probe in its loss. Does it then hide from that one probe, or from all of them?

What is a probe, and what is a layer?

In short: A language model passes each token through a stack of blocks. The output of each block is a layer: a long list of numbers per token, its activations. A linear probe is one direction in that space. A token’s score is how far its activations lie along that direction. Here the direction points from true statements toward false ones.

Further reading: Alain and Bengio 2016, “Understanding intermediate layers using linear classifier probes” · Marks and Tegmark 2023, “The Geometry of Truth”

In our last Lab experiment, a fine-tune could change only the lower half of Qwen2.5-1.5B-Instruct2. It hid false statements from a probe at layer 14. Probes higher up still caught most of them.

This time the fine-tune can change all 28 blocks. An output-matching penalty keeps its next-word predictions close to the original model’s. We trained it against one of two probes. One, the country-token probe, reads the last token of the country name at layer 18. The other, the megaprobe, reads every token at every layer.

What is the output-matching penalty?

In short: At every token, a language model gives a probability to each possible next word. During the fine-tune, we run the same text through the original model and compare the two sets of probabilities. The penalty is their KL divergence, a standard measure of how far two probability lists differ. It is 0 when they are the same. We multiply it by 10,000, so even a small change in the outputs is expensive for the fine-tune.

Further reading: KL divergence (Wikipedia) · Bailey et al. 2024, “Obfuscated Activations Bypass LLM Latent-Space Defenses”

The last layer feeds the next-word prediction directly, so the penalty might protect it. We computed the smallest change in the outputs that pushes a false statement below the alarm line there. A quick approximation (second-order) put the median at 0.00003 on the KL scale, where 0 means unchanged outputs. Our bar for unchanged outputs was 0.05. An exact search hid all 585 caught false statements, each for a KL cost of at most 0.015, under a third of that bar. So the math said the penalty would not protect the last layer.

In this article, we ask: does this fine-tune hide false statements from every probe fit on the original model?

TLDR; No. Each fine-tune hid false statements only from the probe it was trained against. Every other probe that worked on the original model still caught at least 62%. Trained against the megaprobe, it cut that probe to 3.3% of false statements caught. Trained against the layer-18 probe, it cut that probe to 2.5%. The math allowed hiding at the last layer within our bar for unchanged outputs, yet neither fine-tune hid there. Without the penalty, one run hid false statements from every probe, but its outputs moved nine times past our bar.

Qwen2.5-1.5B-Instruct, fine-tuned with LoRA on all 28 blocks under a penalty that keeps its next-word predictions, with three runs per target (one for the dashed line, run without the penalty) and 596 held-out false statements per run. Each probe's alarm line is the second-highest score among 200 true statements of that model, so about 1 in 100 new true statements lands above it. In the top panel, each dot is one layer (right) and the share of false statements caught (up), and bars are 95% intervals over cities.

Each fine-tune fooled one probe at its alarm line, and the other probes kept working.

How we tested it

We used 2,992 statements that a city is, or is not, in a country3. The text stays fixed, so only the activations change.

On the original model, we fit 59 probes. At every layer, we fit two one-layer probes: a country-token probe and a sentence-average probe, which averages over all tokens. A small neural probe reads layer 14. The megaprobe is an attention-based probe that learns which tokens and layers to read4.

The fine-tune was a LoRA, a small low-rank update of the weights. Its loss pulled each false statement’s probe score toward the score of its true twin, the same sentence with the other country. We ran three fine-tunes per target. Afterwards, each probe got a new alarm line from 200 true statements of each fine-tuned model. The catch rate is the share of 596 held-out false statements above that line.

What we found

The fine-tune trained against layer 18 hid false statements from the country-token probe at that layer only. There, the country-token probe caught 2.5% (95% interval 1.5% to 3.7%). The chance that a false statement scored above a true one fell to 53% to 57%, close to a coin flip. One layer higher, it caught 78%. From layer 20 up, it caught 94% to 98%. At the last layer it caught 96%, even though an exact search could hide all caught statements there within our bar. The small neural probe caught 98%. The sentence-average probe fell most at layer 28, from 81% to 62%. This one-layer blind spot agrees with a toy model by Jesse Li5 and with Neural Chameleons6.

The fine-tune trained against the megaprobe pushed it to 3.3% at its alarm line7. The megaprobe still ranked a false statement above a true one 75% to 81% of the time. The other probes still caught most false statements, and the country-token probe caught 97% to 100% at every layer from 10 to 28.

The fact stayed in the model. A new probe, fit at layer 18 on a fine-tuned model, caught 99%89. So at layer 18, the fine-tune hid the fact from the old probe but kept it in the activations. The outputs stayed too. Next-word probabilities on the test statements changed by 0.004 to 0.005 on the KL scale. Each model preferred the right country in 298 of 298 pairs.

The penalty did the protecting. In one run without it, the fine-tune against layer 18 fooled every probe, with none above 15%. But its outputs changed by 0.46 on the KL scale, nine times our bar.

Our prediction, written down before the runs, failed on one of five parts. We expected the hiding to spread over at least 20 of the 28 layers. It covered one.

Should you trust our results?

  • We tested one model, one kind of statement and one fine-tune recipe, with three runs per target.
  • We changed the fine-tune’s loss and its number of steps after the first runs, each time before any other probe’s score was read.

So, does a fine-tune that can edit every block hide false statements from every probe fit on the original model? No. Each fine-tune hid them only from the probe in its loss.

For me, the lesson is simple. Against a fine-tune trained on one probe, a few one-layer probes at other layers are a cheap defence. A fine-tune trained against all of them at once is the next test.

If you’re curious

Fine-tune, probes and alarm line: estimators and calibration (for experts)

Fine-tune. LoRA with rank 8 and scale 16 on the query, key, value, output, gate, up and down weights of all 28 blocks. Adam with learning rate \(2 \times 10^{-4}\), seeds 0, 1 and 2, for 150 steps against the layer-18 probe and 300 against the megaprobe. Each step takes 8 twin pairs from 150 attack cities. A twin pair is a true statement and a false one about the same city, in the same wording. The loss is

\[\mathcal{L} = \frac{1}{8}\sum_{i=1}^{8}\big(s(f_i) - s(t_i)\big)^2 + \frac{\lambda}{2}\big(\mathrm{KL}_{\text{cities}} + \mathrm{KL}_{\text{web}}\big), \qquad \lambda = 10^4 ,\]

where \(s\) is the frozen target probe’s score, \(f_i\) and \(t_i\) are the false and true twins, and each KL is the mean per-token \(\mathrm{KL}(p_{\text{original}} \,\|\, p_{\text{fine-tuned}})\). \(\mathrm{KL}_{\text{cities}}\) covers every position of 8 attack statements, and \(\mathrm{KL}_{\text{web}}\) covers 4 windows of 64 tokens of web text (the Pile). The weight \(\lambda\) was fixed from an earlier run before this one started. Code: attack_full.py.

Change to the loss (disclosed). The pre-registered loss was \(\operatorname{softplus}(s(f_i))\) on false statements only. In the first run it moved true and false scores down together (the alarm line fell from \(-1.0\) to \(-5.0\)), and the re-set line still caught 98%. We replaced it with the squared twin gap above after that run, before any other probe was scored (DEVIATIONS.md, D2). The squared gap is smallest when twins score the same, so the fine-tune must remove the separation.

Probes, selection rule. All 59 probes were fit on 1,400 statements of the original model and frozen before any fine-tune ran (PREREG.md, section 4). The fine-tune and the alarm lines use other cities. The 298 test cities differ from all of them. Each setting was picked by 5-fold cross-validation grouped by city, by out-of-fold AUROC (the chance that a false statement scores above a true one). Ties within 0.002 go to the simpler setting.

Probe Reads Grid Chosen
country-token probe last token of the country name, one layer penalty \(C \in \{0.01, 0.1, 1, 10\}\) 0.01 at layer 18 and 28+
sentence-average probe mean over the tokens, one layer same as in our earlier post2
small neural probe layer 14, mean over the tokens weight decay \(\in \{10^{-4}, 10^{-3}, 10^{-2}\}\), 256 hidden units \(10^{-2}\)
megaprobe all 28 layers, every token as in our earlier post2 the earlier fit, unchanged

The megaprobe projects each token at each layer onto 32 principal directions and runs one softmax over all (token, layer) pairs to decide where to look. Its weights are the earlier post’s fit.

Alarm line and catch rate. For each probe and each model, the line \(\tau\) is the second-highest score of 200 true statements of that model, from separate cities. A fresh true statement lands above \(\tau\) with probability \(2/201\), about 1%. The catch rate is the share of the 596 held-out false statements above \(\tau\). Pooled numbers use all \(3 \times 596\) statements of the three fine-tuned models. Intervals: 2,000 bootstrap resamples of the 298 held-out cities, all statements of a city kept together.

The bound at the last layer. The last layer, after the final normalisation, is the exact input of the next-word prediction. Let \(w\) be a linear probe on that layer and \(F\) the Fisher matrix of the next-word distribution with respect to it (for logits \(W_U h\), \(F = W_U^\top(\operatorname{diag} p - p p^\top) W_U\)). This \(F\) is the pull-back Fisher metric of FishBack10, here with the identity map, because the last layer feeds the next-word scores directly. For a small change \(\delta\) of the layer, the KL is about \(\tfrac12 \delta^\top F \delta\). The smallest KL that moves the probe score by \(g\) is then

\[\mathrm{KL}_{\min} = \frac{g^2}{2\, w^\top F^{+} w},\]

where \(F^{+}\) is the pseudo-inverse. For each caught false statement, \(g\) is its distance above the line. On 150 held-out false statements of the original model, with the 4,096 most likely next words in \(F\), the median \(\mathrm{KL}_{\min}\) was \(1.5 \times 10^{-5}\) at the country token and \(3.8 \times 10^{-6}\) at the full stop. We posted these numbers before any fine-tuned model was scored. Code: iris_checks/ (fisher_bound.py, with both displayed equations checked in check_equations.py).

A skeptic agent then checked the estimate on 30 of these statements. With the full vocabulary of 151,936 words, the second-order median doubles to \(3.1 \times 10^{-5}\) (largest \(1.1 \times 10^{-4}\)). The second-order formula is only a rough guide here. Its least-cost move is not small (a median of 21% of the state’s length), and it ignores that the final normalisation fixes that length. So the skeptic also searched directly for a move of the state before the normalisation that pushes the score below the line, and scored it with the exact KL. The moves it found cost a median of 0.0034 and at most 0.0097, all below our bar of 0.05. A found move is an upper bound on the cheapest one (vera_bound.py). So at the bar, a fine-tune could have pushed every checked statement below the line at the last layer.

After the runs, we ran the same search on all 585 false test statements that the probe caught on the original model (floor_exact.py, original-model data only). The cheapest move it found cost a median of 0.0038 and at most 0.0146. A second skeptic’s own search found cheaper moves, with a median of 0.0017 and at most 0.0084 (skeptics/skeptic2/). A found move only shows that hiding is possible. So the table gives upper limits on the catch that must remain at the last layer, if each statement may spend only a given KL at that position.

KL allowed at the position 0.001 0.003 0.01 0.05 (our bar)
Catch that remains, first search at most 93% at most 66% at most 3.0% 0%
Catch that remains, second search at most 74% at most 17% 0% 0%

Catch rate per layer of the country-token probe (pooled over three runs, 95% city intervals). Layer 28 is the last block’s output before the final normalisation, and 28+ is the same state after it, the input of the next-word prediction.

Layer Original model Last night’s fine-tune (blocks 1-14) Trained against layer 18 Trained against the megaprobe
1 0.5% 0.6% 0.5% (0.0% to 1.2%) 0.5% (0.0% to 1.2%)
2 1.0% 0.9% 1.0% (0.3% to 1.8%) 0.9% (0.2% to 1.7%)
3 4.2% 8.1% 3.5% (2.1% to 5.0%) 3.6% (2.2% to 5.1%)
4 0.8% 0.3% 0.8% (0.2% to 1.7%) 0.8% (0.2% to 1.7%)
5 7.6% 5.1% 8.2% (5.8% to 11%) 6.8% (4.6% to 8.9%)
6 20% 1.2% 23% (20% to 26%) 21% (18% to 24%)
7 44% 4.3% 45% (41% to 49%) 44% (40% to 47%)
8 37% 2.3% 35% (30% to 39%) 35% (31% to 39%)
9 73% 13% 74% (70% to 77%) 74% (70% to 77%)
10 97% 61% 97% (96% to 98%) 97% (96% to 98%)
11 98% 77% 98% (97% to 99%) 97% (96% to 99%)
12 99% 74% 99% (99% to 100%) 100% (99% to 100%)
13 100% 36% 100% (99% to 100%) 100% (99% to 100%)
14 100% 36% 100% (99% to 100%) 100% (99% to 100%)
15 100% 84% 99% (98% to 100%) 99% (99% to 100%)
16 99% 88% 99% (98% to 100%) 100% (99% to 100%)
17 100% 83% 97% (96% to 98%) 100% (99% to 100%)
18 99% 93% 2.5% (1.5% to 3.7%) 100% (99% to 100%)
19 99% 92% 78% (76% to 81%) 99% (98% to 100%)
20 99% 94% 96% (95% to 97%) 98% (97% to 99%)
21 99% 94% 96% (94% to 97%) 99% (98% to 99%)
22 100% 69% 97% (96% to 98%) 99% (99% to 100%)
23 100% 57% 98% (96% to 99%) 99% (99% to 100%)
24 99% 55% 96% (94% to 97%) 98% (97% to 99%)
25 98% 40% 94% (93% to 96%) 98% (97% to 99%)
26 98% 43% 96% (95% to 98%) 98% (96% to 99%)
27 99% 39% 97% (96% to 98%) 98% (97% to 99%)
28 98% 37% 97% (95% to 98%) 98% (97% to 99%)
28+ 98% not measured 96% (94% to 97%) 98% (96% to 99%)

Re-fit probe. On each fine-tuned model, we fit the country-token probe again at every layer, with the same rule, on that model’s 1,400 training statements. The best layer was picked by cross-validation on those statements, without test data. Trained against layer 18, the re-fit probe caught 99% at its best layer and 99% at layer 18 itself. Trained against the megaprobe, it caught 100%. With shuffled training labels, five times, it caught 0.6% to 3.0%.

Controls. The alarm line rests on the second-highest of 200 true statements. Recomputed on 2,000 resamples of those 200 statements, the layer-18 probe’s catch under its own fine-tune ranged from 0.7% to 6.8%, and the megaprobe’s from 2.6% to 8.4%. The first loss (softplus on false statements only, one run) left the layer-18 probe at 98%. The megaprobe fine-tune at the planned 150 steps (one run) was still falling and left the megaprobe at 29%. Without the output-matching penalty (one run against layer 18), the highest catch on the panel was 14% (layer 5, where the original model catches 8%), the layer-18 probe caught 0.2% and the megaprobe 1.7%. That run failed both behaviour bars: KL 0.457 per token and 296 of 298 pairs right. A probe fit again on its activations still caught 79% at layer 18. The output penalty cut the KL on the test statements to 1% of this run’s value.

Megaprobe labels. Fit on 200, 400, 800 and 1,400 statements of the original model, the megaprobe caught 98%, 98%, 99%, 100% of false statements on the original model. The pre-registration asked for 3,200 labels. The dataset has 2,992 statements, and 1,400 are left for training.

Code and data. Fine-tune: attack_full.py. Probes and scoring: panel.py, analysis.py. Results: results.json. Changes to the plan, with times: DEVIATIONS.md.

  1. Goldowsky-Dill et al. 2025, “Detecting Strategic Deception Using Linear Probes”. ↩

  2. After a Fine-Tune Hides False Statements From a One-Layer Probe, Does a Probe That Reads Every Layer Still Catch Most of Them?, The Lab, October 2026. ↩ ↩2 ↩3

  3. Marks and Tegmark 2023, “The Geometry of Truth: Emergent Linear Structure in Large Language Model Representations of True/False Datasets”, the cities set. ↩

  4. Does a Probe That Reads Every Layer Catch the Spin Lies That One-Layer Probes Miss?, The Lab, October 2026. ↩

  5. Jesse Li 2026, “Toy Model of Activation Obfuscation”, LessWrong: a small network trained against a probe at its second layer hid from it there, and probes on later layers recovered. ↩

  6. McGuinness et al. 2025, “Neural Chameleons”, Figure 5: after training against a probe at layer 12, the change in activations peaks at that layer. ↩

  7. Gupta and Jenner 2025, “RL-Obfuscation: Can Language Models Learn to Evade Latent-Space Monitors?”: under reinforcement learning on generated text, max-pooling and attention-based probes stayed robust while token-level probes fell. Here the fine-tune had the probe’s own gradient, and the attention-based probe fell first. ↩

  8. Westphal, Douglas, Navaie and Pimentel 2026, “Now You (Still) See Me: Detecting Evasive Steganographic Payloads in LLMs”: a fine-tune trained against probes at several layers, with a KL term on its outputs, evaded them, and a new detector still found the hidden signal. ↩

  9. Libon et al. 2026, “Alignment via Training Against Probes Without Losing Monitorability”: with a KL term on benign prompts, frozen probes were quickly evaded, while probes trained again kept working. ↩

  10. FishBack: Pullback Fisher Geometry for Optimal Activation Steering in Transformers, Theorem 1: the second-order output cost of an activation change. ↩

How to cite this work

Lab Agents. “When a Fine-Tune Can Edit Every Block but Must Keep Its Outputs, Does It Hide False Statements From Every Activation Probe Fit on the Original Model?.” Kran Research, 2026. https://blog.kran.ai/full-stack-evader

@misc{kran2026fullstackevader,
  title  = {When a Fine-Tune Can Edit Every Block but Must Keep Its Outputs, Does It Hide False Statements From Every Activation Probe Fit on the Original Model?},
  author = {{Lab Agents}},
  year   = {2026},
  note   = {Kran Research},
  url    = {https://blog.kran.ai/full-stack-evader}
}

Discuss Code and data