omeganya nya's lab notes

Tiny models know two texts differ: the full run

The full tests confirm the preliminary post's main finding on 18 times as many checks: four models under 1B parameters know, halfway through the network, when two texts state different facts, and still answer PASS. LFM2.5-230M and Qwen3-0.6B caught 0 of 440 wrong texts each. A judge that reads their internal state instead is right 85% and 88% of the time. Two things came out differently: reworded texts are harder than the quick run showed, and steering works for the Qwen models after all.

What ran

The same four tests as in the preliminary post, plus the judge that reads the direction, on the same four models (LFM2.5-230M Q6_K, LFM2.5-350M Q5_K_M, Qwen3-0.6B and Qwen3.5-0.8B Q8_0), the same CPU server, llama.cpp b11946, greedy decoding, thinking off. It ran for 2 hours 51 minutes, one model after another.

More checks, and harder ones. 1,904 checks per model from 24 kinds of change (the small code-test domain ran out of distinct pairs for two of the 26 kinds). Each pair is asked four ways:

In the quick run every right text was an exact copy, so "the texts differ" could have meant "not a copy". Here it can't.

Tune and report as before: anything fitted (a threshold, a direction, a layer) is fitted on 13 kinds of change (1,024 checks), every number below is measured on the other 11 (880 checks: 440 wrong, 440 right; both kinds that ran out of pairs were report kinds). I also made sure no prompt appears in both halves: the small code-test domain repeats its base texts, and without that check 31 prompts would have landed on both sides.

Test 1 from the dumps. The probability test used my probe tool's logits instead of a second pass through llama-server. The two agree within about 0.1 log-prob (checked in the preliminary post), and this saved what I estimated at about two hours of server runs.

Results

880 checks per model230M350MQwen3 0.6BQwen3.5 0.8B
Own answer: right50.0%61.5%50.0%54.0%
Own answer: wrong caught (of 440)0104036
P(FAIL) threshold: right68.2%76.7%82.0%92.5%
Direction AUC, best layer0.92 (L8)0.95 (L10)0.95 (L16)0.98 (L13)
Direction AUC, last layer0.840.890.890.97
Direction judge: right85.2% (L8)83.9% (L8)87.7% (L16)93.0% (L13)
…accepts copies / reworded96% / 80%99.5% / 62%99% / 79%100% / 82%

The direction is the average internal state of the wrong-text checks minus that of the right-text ones, at one layer, fitted on the tune kinds. The direction judge reads it with a threshold; its layer is picked on the tune kinds alone (fit on half of them, score on the other half). AUC: the chance that a random wrong text scores higher than a random right one (0.5 = no signal, 1.0 = perfect).

LFM2.5-230M 0.2 0.4 0.6 0.8 1.0 0 2 4 6 8 10 12 LFM2.5-230M layer 0: knows 0.50, says 0.50 LFM2.5-230M layer 0: knows 0.50, says 0.50 LFM2.5-230M layer 1: knows 0.50, says 0.50 LFM2.5-230M layer 1: knows 0.50, says 0.50 LFM2.5-230M layer 2: knows 0.54, says 0.51 LFM2.5-230M layer 2: knows 0.54, says 0.51 LFM2.5-230M layer 3: knows 0.51, says 0.52 LFM2.5-230M layer 3: knows 0.51, says 0.52 LFM2.5-230M layer 4: knows 0.57, says 0.53 LFM2.5-230M layer 4: knows 0.57, says 0.53 LFM2.5-230M layer 5: knows 0.57, says 0.52 LFM2.5-230M layer 5: knows 0.57, says 0.52 LFM2.5-230M layer 6: knows 0.68, says 0.56 LFM2.5-230M layer 6: knows 0.68, says 0.56 LFM2.5-230M layer 7: knows 0.65, says 0.53 LFM2.5-230M layer 7: knows 0.65, says 0.53 LFM2.5-230M layer 8: knows 0.92, says 0.59 LFM2.5-230M layer 8: knows 0.92, says 0.59 LFM2.5-230M layer 9: knows 0.89, says 0.44 LFM2.5-230M layer 9: knows 0.89, says 0.44 LFM2.5-230M layer 10: knows 0.84, says 0.58 LFM2.5-230M layer 10: knows 0.84, says 0.58 LFM2.5-230M layer 11: knows 0.85, says 0.71 LFM2.5-230M layer 11: knows 0.85, says 0.71 LFM2.5-230M layer 12: knows 0.86, says 0.74 LFM2.5-230M layer 12: knows 0.86, says 0.74 LFM2.5-230M layer 13: knows 0.84, says 0.72 LFM2.5-230M layer 13: knows 0.84, says 0.72 knows (direction) says (PASS/FAIL readout) no signal LFM2.5-350M 0.2 0.4 0.6 0.8 1.0 0 2 4 6 8 10 12 14 LFM2.5-350M layer 0: knows 0.50, says 0.50 LFM2.5-350M layer 0: knows 0.50, says 0.50 LFM2.5-350M layer 1: knows 0.50, says 0.50 LFM2.5-350M layer 1: knows 0.50, says 0.50 LFM2.5-350M layer 2: knows 0.54, says 0.51 LFM2.5-350M layer 2: knows 0.54, says 0.51 LFM2.5-350M layer 3: knows 0.52, says 0.49 LFM2.5-350M layer 3: knows 0.52, says 0.49 LFM2.5-350M layer 4: knows 0.53, says 0.49 LFM2.5-350M layer 4: knows 0.53, says 0.49 LFM2.5-350M layer 5: knows 0.65, says 0.50 LFM2.5-350M layer 5: knows 0.65, says 0.50 LFM2.5-350M layer 6: knows 0.66, says 0.52 LFM2.5-350M layer 6: knows 0.66, says 0.52 LFM2.5-350M layer 7: knows 0.66, says 0.48 LFM2.5-350M layer 7: knows 0.66, says 0.48 LFM2.5-350M layer 8: knows 0.92, says 0.40 LFM2.5-350M layer 8: knows 0.92, says 0.40 LFM2.5-350M layer 9: knows 0.89, says 0.50 LFM2.5-350M layer 9: knows 0.89, says 0.50 LFM2.5-350M layer 10: knows 0.95, says 0.48 LFM2.5-350M layer 10: knows 0.95, says 0.48 LFM2.5-350M layer 11: knows 0.94, says 0.32 LFM2.5-350M layer 11: knows 0.94, says 0.32 LFM2.5-350M layer 12: knows 0.93, says 0.37 LFM2.5-350M layer 12: knows 0.93, says 0.37 LFM2.5-350M layer 13: knows 0.91, says 0.69 LFM2.5-350M layer 13: knows 0.91, says 0.69 LFM2.5-350M layer 14: knows 0.89, says 0.84 LFM2.5-350M layer 14: knows 0.89, says 0.84 LFM2.5-350M layer 15: knows 0.89, says 0.84 LFM2.5-350M layer 15: knows 0.89, says 0.84 Qwen3-0.6B 0.2 0.4 0.6 0.8 1.0 0 4 8 12 16 20 24 Qwen3-0.6B layer 0: knows 0.53, says 0.49 Qwen3-0.6B layer 0: knows 0.53, says 0.49 Qwen3-0.6B layer 1: knows 0.52, says 0.50 Qwen3-0.6B layer 1: knows 0.52, says 0.50 Qwen3-0.6B layer 2: knows 0.55, says 0.50 Qwen3-0.6B layer 2: knows 0.55, says 0.50 Qwen3-0.6B layer 3: knows 0.60, says 0.52 Qwen3-0.6B layer 3: knows 0.60, says 0.52 Qwen3-0.6B layer 4: knows 0.60, says 0.51 Qwen3-0.6B layer 4: knows 0.60, says 0.51 Qwen3-0.6B layer 5: knows 0.59, says 0.55 Qwen3-0.6B layer 5: knows 0.59, says 0.55 Qwen3-0.6B layer 6: knows 0.60, says 0.52 Qwen3-0.6B layer 6: knows 0.60, says 0.52 Qwen3-0.6B layer 7: knows 0.59, says 0.52 Qwen3-0.6B layer 7: knows 0.59, says 0.52 Qwen3-0.6B layer 8: knows 0.63, says 0.51 Qwen3-0.6B layer 8: knows 0.63, says 0.51 Qwen3-0.6B layer 9: knows 0.72, says 0.53 Qwen3-0.6B layer 9: knows 0.72, says 0.53 Qwen3-0.6B layer 10: knows 0.74, says 0.47 Qwen3-0.6B layer 10: knows 0.74, says 0.47 Qwen3-0.6B layer 11: knows 0.82, says 0.49 Qwen3-0.6B layer 11: knows 0.82, says 0.49 Qwen3-0.6B layer 12: knows 0.76, says 0.54 Qwen3-0.6B layer 12: knows 0.76, says 0.54 Qwen3-0.6B layer 13: knows 0.83, says 0.49 Qwen3-0.6B layer 13: knows 0.83, says 0.49 Qwen3-0.6B layer 14: knows 0.81, says 0.47 Qwen3-0.6B layer 14: knows 0.81, says 0.47 Qwen3-0.6B layer 15: knows 0.94, says 0.31 Qwen3-0.6B layer 15: knows 0.94, says 0.31 Qwen3-0.6B layer 16: knows 0.95, says 0.29 Qwen3-0.6B layer 16: knows 0.95, says 0.29 Qwen3-0.6B layer 17: knows 0.94, says 0.44 Qwen3-0.6B layer 17: knows 0.94, says 0.44 Qwen3-0.6B layer 18: knows 0.94, says 0.55 Qwen3-0.6B layer 18: knows 0.94, says 0.55 Qwen3-0.6B layer 19: knows 0.94, says 0.53 Qwen3-0.6B layer 19: knows 0.94, says 0.53 Qwen3-0.6B layer 20: knows 0.94, says 0.53 Qwen3-0.6B layer 20: knows 0.94, says 0.53 Qwen3-0.6B layer 21: knows 0.93, says 0.83 Qwen3-0.6B layer 21: knows 0.93, says 0.83 Qwen3-0.6B layer 22: knows 0.93, says 0.80 Qwen3-0.6B layer 22: knows 0.93, says 0.80 Qwen3-0.6B layer 23: knows 0.92, says 0.82 Qwen3-0.6B layer 23: knows 0.92, says 0.82 Qwen3-0.6B layer 24: knows 0.92, says 0.84 Qwen3-0.6B layer 24: knows 0.92, says 0.84 Qwen3-0.6B layer 25: knows 0.92, says 0.85 Qwen3-0.6B layer 25: knows 0.92, says 0.85 Qwen3-0.6B layer 26: knows 0.92, says 0.85 Qwen3-0.6B layer 26: knows 0.92, says 0.85 Qwen3-0.6B layer 27: knows 0.89, says 0.85 Qwen3-0.6B layer 27: knows 0.89, says 0.85 Qwen3.5-0.8B 0.2 0.4 0.6 0.8 1.0 0 4 8 12 16 20 Qwen3.5-0.8B layer 0: knows 0.52, says 0.50 Qwen3.5-0.8B layer 0: knows 0.52, says 0.50 Qwen3.5-0.8B layer 1: knows 0.54, says 0.52 Qwen3.5-0.8B layer 1: knows 0.54, says 0.52 Qwen3.5-0.8B layer 2: knows 0.53, says 0.51 Qwen3.5-0.8B layer 2: knows 0.53, says 0.51 Qwen3.5-0.8B layer 3: knows 0.54, says 0.50 Qwen3.5-0.8B layer 3: knows 0.54, says 0.50 Qwen3.5-0.8B layer 4: knows 0.53, says 0.51 Qwen3.5-0.8B layer 4: knows 0.53, says 0.51 Qwen3.5-0.8B layer 5: knows 0.55, says 0.51 Qwen3.5-0.8B layer 5: knows 0.55, says 0.51 Qwen3.5-0.8B layer 6: knows 0.58, says 0.51 Qwen3.5-0.8B layer 6: knows 0.58, says 0.51 Qwen3.5-0.8B layer 7: knows 0.58, says 0.50 Qwen3.5-0.8B layer 7: knows 0.58, says 0.50 Qwen3.5-0.8B layer 8: knows 0.62, says 0.53 Qwen3.5-0.8B layer 8: knows 0.62, says 0.53 Qwen3.5-0.8B layer 9: knows 0.88, says 0.46 Qwen3.5-0.8B layer 9: knows 0.88, says 0.46 Qwen3.5-0.8B layer 10: knows 0.88, says 0.54 Qwen3.5-0.8B layer 10: knows 0.88, says 0.54 Qwen3.5-0.8B layer 11: knows 0.75, says 0.48 Qwen3.5-0.8B layer 11: knows 0.75, says 0.48 Qwen3.5-0.8B layer 12: knows 0.93, says 0.62 Qwen3.5-0.8B layer 12: knows 0.93, says 0.62 Qwen3.5-0.8B layer 13: knows 0.98, says 0.81 Qwen3.5-0.8B layer 13: knows 0.98, says 0.81 Qwen3.5-0.8B layer 14: knows 0.97, says 0.94 Qwen3.5-0.8B layer 14: knows 0.97, says 0.94 Qwen3.5-0.8B layer 15: knows 0.97, says 0.96 Qwen3.5-0.8B layer 15: knows 0.97, says 0.96 Qwen3.5-0.8B layer 16: knows 0.97, says 0.95 Qwen3.5-0.8B layer 16: knows 0.97, says 0.95 Qwen3.5-0.8B layer 17: knows 0.97, says 0.96 Qwen3.5-0.8B layer 17: knows 0.97, says 0.96 Qwen3.5-0.8B layer 18: knows 0.97, says 0.95 Qwen3.5-0.8B layer 18: knows 0.97, says 0.95 Qwen3.5-0.8B layer 19: knows 0.97, says 0.95 Qwen3.5-0.8B layer 19: knows 0.97, says 0.95 Qwen3.5-0.8B layer 20: knows 0.97, says 0.95 Qwen3.5-0.8B layer 20: knows 0.97, says 0.95 Qwen3.5-0.8B layer 21: knows 0.97, says 0.95 Qwen3.5-0.8B layer 21: knows 0.97, says 0.95 Qwen3.5-0.8B layer 22: knows 0.97, says 0.96 Qwen3.5-0.8B layer 22: knows 0.97, says 0.96 Qwen3.5-0.8B layer 23: knows 0.97, says 0.96 Qwen3.5-0.8B layer 23: knows 0.97, says 0.96 layer (the answer is read after the last one) AUC
Per layer: how well the internal direction separates wrong from right texts on the 880 report checks (solid, "knows"), and how well the PASS/FAIL readout of the same state does (dashed, "says", all 1,904 checks). Dashed grey line: no signal. Hover a point for its values. Data: 2026-11-02-internals-full-layers.csv.

What held

What changed from the preliminary post

Rewording costs more than the quick run showed. The best direction AUC fell from 0.99–1.00 to 0.92–0.98, and the judge from 88–100% to 84–93%. Most of the drop is in reworded right texts: the 350M's judge accepts 99.5% of copies but only 62% of rewordings. For these models "the texts differ" partly means "the wording differs". The preliminary post's check on 20 reworded texts suggested this shortcut didn't matter; on 440 per model it does, most for the 350M.

Steering works for the Qwens, at the right strength. The preliminary post said that pushing on the direction only moves the habit. On the full run, on 176 report checks per model (88 wrong, 88 right; "random push" = a random direction of the same length and strength):

right of 176no pushbest pushcaught / acceptedrightrandom push
230M, L8882×1 / 888988
350M, L81091×25 / 87112109
0.6B, L16882×68 / 7214088
0.8B, L13961×87 / 7316088

The quick run tried 1× and 4× on the 0.6B and missed the 2× between them. Pushed by the right amount, the Qwens become decent judges (80% and 91%) that a random push of the same length doesn't make (50% each). A random push at 2× did move the 0.8B to 122 of 176, so it sits close to its tipping point. One step stronger than the best turns every answer into FAIL (the 0.8B at 2×: 88 caught, 0 accepted), and the right strength differs per model. The two LFM models barely move at any strength tried.

What I take from it

Next

The data

How far to trust it: 880 held-out checks per model (176 for steering), one file per model, my own generated texts in five everyday domains. The main effects (answers catching 0 of 440 wrong texts, judges right 85–93% of the time) are far outside noise. The steering strengths are a coarse grid of three, so the best strengths are approximate.