TwIL-8B: an atlas no one asked for but sometimes they get anyways

#1
by juiceb0xc0de - opened

juiceb0xc0de_stamp_3407

TwIL-8B: a reasoning post-train of Granite 4.2 8B through a general prompt census

Model Pulse

I ran the TwIL-8B and parent Granite 4.2 8B models through the Cartographics HF space (the Space that builds these atlases on demand). webAI describes this model as a reasoning model for math, code and instruction following, post-trained from granite-4.2-8b with full-parameter supervised fine-tuning and GRPO/DAPO reinforcement learning. The question for this census is what that post-train did to the category organization it inherited from the parent, and where in the stack it happened.

The usage-category readout barely moves: probe accuracy differs by 0.0015 on average across the 320 stream-layers, with a largest gap of 0.017, in mlp at layer 39. [data] Underneath that, 168,462 of 2,109,440 neurons (8.0%) changed their strongest label, and the share climbs with depth, from 1.6% at layer 0 to 15.0% at layer 39. [data] The drift has a direction: toward tool_use (+2,847 neurons) and core_technical (+2,357), away from roleplay (−2,941) and ml_ai (−1,953). [data] Only 5 of 1,280 attention heads changed what they respond to, and the largest measured change in the atlas is at the last_input token, where the base narrows its working space over layers 37 to 39 and TwIL-8B holds it open. [data]

Scope. This is a paired comparison against the base atlas at pinned revisions, and both model repositories' live heads still equal their pins. The two captures share the same capture code, analysis code, corpus, chat template and token ids, so a row in one table matches the row with the same keys in the other, and every contrast below is weights-only. The capture loaded the balanced variant: the repo root's weight index maps every tensor to model-balanced.safetensors, and the verbose variant ships in a subfolder the census never touched. The corpus is 8,965 prompts across 17 usage labels and 175 fine buckets, 17 to 64 tokens, median 31. Unless stated otherwise, results use the MLP intermediate stream at mean_all_real, averaging all real input tokens, including template and special tokens; last_input is the newline at the end of the opened generation prompt, after the <think> block the template opens, the last thing the model reads before it starts reasoning. The usage-label probe is a five-fold, 256-PC multinomial classifier with training-fold PCA and scaling; the majority-class baseline is 6.58%. The corpus has no math or code-generation label; core_technical and data are the closest usage categories the census can name.

Tags mark the claims: [data] is a direct measurement or calculation from the pinned atlas databases or capture metadata, [inferred] is my interpretation under stated assumptions, [data, inferred] is both, and [guess] is a mechanism I haven't tested.

Prompt type is readable from layer 10 on, and peaks at layer 25

A probe trained to name a prompt's label from one stream gets 0.605 right at layer 0, averaged over the eight streams. Accuracy steps up between layers 9 and 12, 0.701 to 0.802, and peaks at 0.815 at layer 25. [data] The most selective single stream is mlp at layer 26: 0.844 against a shuffled-label control of 0.058, with chance at 0.066. [data]

116,906 neurons lean strongly toward one label (|AUROC − 0.5| of 0.25 or more). [data] Layers 0 and 1 hold 55 and 88 of them. The rest collect in three bands: layers 10 to 15, layers 24 to 27 (8,237 at layer 25 alone), and layers 35 to 38 (between 6,342 and 7,326 per layer). [data] The labels split between the last two bands. Eleven of them, including creative_writing, introspection, roleplay and humor, peak in the middle band. The other six, tool_use, ml_ai, core_technical, research, business and design, peak in the top band. [data]

01_label_bands

The single neurons with a clean label lean are mostly in gate and up; the best probe accuracy is in mlp, where the signal is spread across many neurons instead. [data]

Stream Strong-lean neurons Share of stream Peak probe accuracy
gate 54,111 10.6% 0.833 at layer 25
up 37,513 7.3% 0.839 at layer 26
mlp 10,991 2.1% 0.845 at layer 25
heads 4,296 2.6% 0.827 at layer 25
q 4,242 2.6% 0.813 at layer 39
attn 3,442 2.1% 0.815 at layer 25
v 1,156 2.8% 0.811 at layer 39
k 1,155 2.8% 0.780 at layer 39

The sharpest single neuron in the atlas is gate layer 24, neuron 4948, with an AUROC of 0.033 for learning: learning prompts land below nearly every other prompt on it. [data] The sharpest positive lean is gate layer 36, neuron 2188, at 0.966 for the same label. gate layer 35, neuron 6889 separates creative_writing at 0.965, and the labels explain 62% of its variance. [data] Participation ratio, an effective dimension, peaks at 201.65 in mlp at layer 13. Three mean-pooled mlp rows, layers 3, 5 and 39, are dominated by a single direction, with participation ratios of 1.009, 1.003 and 1.499; geometry numbers for those rows describe that one direction. [data] None of the 2,109,440 captured neurons is dead. [data]

The map holds: the readout moves 0.0015 across 320 stream-layers

Full-parameter fine-tuning and two rounds of RL left the model's sorting of prompts by type where Granite had it. Probe accuracy at the mean position differs by 0.0015 on average across the 320 stream-layers, and the largest gap is 0.017, in mlp at layer 39. [data] The share of a prompt's ten nearest neighbours that carry its label moves by 0.012 at most. [data] The exports carry no paired per-prompt probe errors, so there is no paired test to run on these gaps, and no test isn't the same thing as equivalence.

02_same_map

8.0% of neurons change their strongest label, and the change climbs with depth

Matching neurons by index, 92.0% keep the same strongest label. [data] The 8.0% that changed are not spread evenly: 5.7% of neurons in layers 0 to 12, 7.4% in layers 13 to 26, and 10.9% in layers 27 to 39. [data] mlp moved most, reaching 23.2% at layer 38; k and up moved least. [data]

03_drift_by_depth

The per-label directions show the same gradient at smaller scale. The cosine between a label's direction in TwIL-8B and the same direction in the base averages 0.999 at layer 1, 0.998 at layer 20 and 0.994 over layers 37 to 39. [data] Of the 17 labels, core_technical rotated most over layers 33 to 39. [data] The lowest base-to-tune cosines in the atlas are in the dominated mean-pooled mlp rows at layers 3 and 5 (0.978 and 0.925 on average), where label directions are small residuals on the one direction holding the stream. [data] The drift goes with depth: the deeper the layer, the more its individual neurons reorganized, and the joint readout held anyway. [data, inferred]

The drift has a direction: toward tool use and core technical

Counting which label each neuron leans toward most, TwIL-8B has more neurons on tool_use, core_technical, learning, research and data than the base, and fewer on roleplay, ml_ai, niche and creative_writing. [data] The model was trained for math, code and instruction following, and the neurons that changed sides moved that way. [data, inferred] The corpus has no math or code label, so what this shows is the drift pointing the same way as the training target on the two nearest usage categories. It says nothing about whether the model got better at math. [data, inferred]

04_label_lean

The same lean shows among strong-lean neurons in layers 30 to 39: data is up 4.3%, core_technical 4.2% and tool_use 4.1%. [data]

Five heads of 1,280 lose their label sensitivity

For each attention head, I correlated the eta² of its 128 output dimensions in TwIL-8B with the same dimensions in the base. The median head scores 0.996. Five score between 0.32 and 0.64, and nothing else falls below 0.85. [data] All five lost label sensitivity: mean F over the head's dimensions fell in each, most at L16H4 (32.2 to 19.8) and L18H29 (68.5 to 44.1). [data] L16H8 also shows in the per_head table: the F of its output norm across labels dropped from 84.3 to 7.6. [data]

05_five_heads

The last input token carries the largest change in the atlas

At last_input, the newline after the opened think block, TwIL-8B's working space is a little wider than the base's through most of the stack: participation ratio is about 8% higher across layers 5 to 36, against about 2% at the mean position. [data] The top three layers are where the two models part. In Granite the working space at this token narrows sharply over layers 37 to 39. In TwIL-8B, mlp narrows one layer later, and heads, q, k and v hold their width through layer 39. [data]

06_launch_token

Stream, layer Base TwIL-8B
mlp, 37 6.9 23.9
heads, 38 9.5 27.1
q, 38 12.4 23.2
k, 38 10.1 19.4
v, 38 12.9 21.0
heads, 39 13.6 24.5

In mlp at layer 37 the base carries a spike at this token: median row norm 425.8, median largest value 226.0, median row kurtosis 1,254.2. In TwIL-8B those read 319.3, 80.5 and 94.6. [data] No probe was run at this position, so this section is geometry only. [data] My read is that RL on reasoning traces changed how the model sets itself up at the point where the think block opens, far more than it changed how it reads the prompt. [inferred] The atlas does not capture generation, so it cannot confirm that. [data]

Verdict: a carried-through category map with the movement at the top of the stack

The readout moves 0.0015 on average across 320 stream-layers, with a largest gap of 0.017 at mlp layer 39, while 8.0% of neurons changed their strongest label, climbing from 1.6% at layer 0 to 15.0% at layer 39 and 23.2% in mlp at layer 38. The drift runs toward tool_use and core_technical and away from roleplay and ml_ai. 5 of 1,280 heads lost their label sensitivity. The largest measured change is geometric, at the last_input token, where mlp layer 37 reads participation ratio 6.9 to 23.9 and the base's norm spike (425.8 to 319.3) is gone. [data] The post-train kept the parent's map of ordinary prompts and rewrote the top of the stack and the launch token. [data, inferred] If you're editing, steering or ablating this model, what you know from the base carries through most of the stack. Check it first at layers 37 to 39 at last_input, in mlp from layer 27 up, and at heads L16H4, L16H8, L18H29, L21H25 and L32H27. [data, inferred]

Limits

  • Historical runtime precision, resolved kernels and the realized batch partition remain unverified, and the exact training-parent revision of the SFT and RL stages is not pinned by either repository. The two captures share identical corpus, template and token fingerprints and the same capture and analysis code, so the paired contrasts are weights-only within this census; a full-checkpoint weight identity was not hashed. The census is the balanced variant only.
  • The corpus tests short single-turn usage categories: no math problems, no code execution, no generated text, and no probe at the last_input position, so that section is geometry only. There is one capture per model, so run-to-run noise is unmeasured; layer 0 gives a rough floor at 1.6% of neurons changing their strongest label. Coordinate associations, norm labels, direction cosines and head eta² profiles are observational summaries, not tested causal circuits or capability scores, and webAI's benchmark numbers are quoted documentation, not evidence from these tables.
  • The test that would settle the mechanism: token-resolved captures during generation on reasoning traces, probes run at the last_input position, and interventions on the five named heads and on layers 37 to 39 before any blunt ablation.

Atlases

Granite 4.2 8B (base) · more under juiceb0xc0de

All six tables are Parquet and in atlas/atlas.sqlite; the queries below use the local SQLite table names. For the paired numbers, run each query against both pinned atlases and join on (layer, component, neuron) for features, (layer, component, head) for per_head, and (layer, component, position) for layers.

The strong-lean neurons by label:

SELECT top_label, COUNT(*) AS strong_lean_neurons
FROM features
WHERE ABS(top_auroc - 0.5) >= 0.25
GROUP BY top_label
ORDER BY strong_lean_neurons DESC, top_label;

The geometry and probe curves:

SELECT layer, probes_probe_accuracy, probes_probe_control_accuracy,
       probes_probe_selectivity, geometry_participation_ratio, geometry_k90
FROM layers
WHERE component = 'mlp' AND position = 'mean_all_real'
ORDER BY layer;

The core_technical separators:

SELECT layer, component, neuron, top_auroc, eta2
FROM features
WHERE top_label = 'core_technical' AND q < 0.01
ORDER BY ABS(top_auroc - 0.5) DESC
LIMIT 20;

The last input token, top of the stack:

SELECT layer, component, geometry_participation_ratio
FROM layers
WHERE position = 'last_input' AND layer >= 36
ORDER BY layer, component;

Dataset revisions used for every number above:

Atlas revision
Granite 4.2 8B parent c92fa5b83f2c85df746ece725da8735391f6eddc
TwIL-8B d5231f8a93289a34044c612e537d93602353cdb0

Thanks for the detailed analysis. The report is pretty cool.

Sign up or log in to comment