← all analysis · · docs/analysis/2026-05-22-dual-readout-week2.md

Dual Readout — NLA + SAE on Gemma-3-12B-IT L32 (Path A Week 2)

On this page

Date: 2026-05-22 Status: Complete — Path A Week 2 deliverable. Per-token dual readout (NLA verbalization + top-K GemmaScope 2 SAE features) ran on the barrier-knockin prompt triple against Gemma-3-12B-IT at L32. 47 tokens × 2 readouts. Predecessors: Week 1 (2026-05-nla-sidecar.md) gave a final-token-only NLA readout. This week adds (a) the second, independent SAE leg and (b) per-token resolution at every input position, not just the last. Companion artefacts:

This document covers the Week 2 plan steps in docs/superpowers/plans/2026-05-track-b-path-a-six-week-execution.md. Week 4’s formalized cross-validation rules are deferred to that plan; this artefact contributes the empirical observations Week 4 will codify against.


1. What the dual readout is

Two independent interpretability methods read the same residual-stream activation at the same site (Gemma-3-12B-IT, layer 32, every token position):

NLA (Anthropic 2026)GemmaScope 2 SAE (DeepMind 2026)
OutputA natural-language paragraph describing what the activation encodesA sparse vector of feature activations; we keep the top-K=10 by magnitude
DecompositionHolistic — one sentence about the whole activationDiscrete — feature IDs with scalar activations
ValidationThe actor is trained so that a critic can reconstruct the original activation from the text (RL reward = MSE)Reconstruction RMSE / explained variance against the original residual stream
Pipeline filemechinterp/scripts/nla_inference.py (vendored) + SGLang AV servermechinterp/scripts/04_dual_readout.py (JumpReLUSAE, direct HF download)

Both read the same activation site; both can be wrong; the question is do they fail in the same way? When both name “below-barrier → loss of principal”, that is a stronger claim than either method making it alone. When one is silent and the other speaks, that signals an audit point. When they disagree, that is a falsification opportunity.

2. SAE choice (deviation from plan)

The Week 2 plan defaulted to GemmaScope 2 64k width, medium L0 (30-60). The actual HuggingFace tree at google/gemma-scope-2-12b-it does not have this combination at L32:

LocationLayers coveredWidthsL0 labels (raw l0 values)
resid_post/12, 24, 31, 41 (≈25%/50%/65%/85% depth)16k, 65k, 262k, 1msmall (~20), medium (~40-60), big (~120)
resid_post_all/all 48 layers, incl. L3216k, 262k onlysmall (~20), big (~120) only

The plan’s choice exists at the 4 curated layers but not at L32. The closest options at L32 in resid_post_all/ are:

Rationale:

The mismatch (l0=120 vs. plan-target 30-60) inflates the measured L0 on SP-domain prompts (see §3.1), but does not invalidate top-K analysis at K=10.

3. Run record

3.1 Pipeline

  1. 05_capture_per_token_activations.py — load Gemma-3-12B-IT bf16 on cuda, forward on each prompt with output_hidden_states=True, take hidden_states[32] at every token position. Persist 47 rows (19 + 19 + 9 tokens × 3 prompts) to mechinterp/outputs/dual_readout_v1/per_token_l32_activations.parquet. Final-token activation norms are byte-identical to Week 1 (79 793 / 80 295 / 65 979).

  2. 04_dual_readout.py --device cpu --nla-actor <AV path>

    • Download google/gemma-scope-2-12b-it/resid_post_all/layer_32_width_16k_l0_big/{params,config} from HF.
    • Instantiate a minimal JumpReLUSAE (see §3.2). Encode all 47 activations.
    • Take top-K=10 by activation magnitude per row.
    • For each row, POST the activation to a running SGLang server (kitft/nla-gemma3-12b-L32-av actor, Triton attention backend, --disable-radix-cache) and capture the <explanation> text.
    • Join SAE features + NLA explanation per token into one JSON per prompt.
  3. SGLang memory budget. At --mem-fraction-static 0.85 SGLang reserves ~103 GB of the 121 GB unified memory. The SAE encode (16k × 3840 ≈ 500 MB in fp32) wouldn’t seem to need that much headroom but safetensors.load_file on cuda OOMed; falling back to --device cpu for the SAE worked first try. The SAE encode runs in milliseconds on CPU for 47 rows — no penalty.

3.2 SAE forward pass (JumpReLU)

pre        = (x - b_dec) @ W_enc + b_enc   # [..., d_sae]
features   = pre * (pre > threshold).float()
recon      = features @ W_dec + b_dec

Lowercase param keys on disk (GemmaScope 2 convention): w_enc, w_dec, b_enc, b_dec, threshold. GemmaScope 1 used uppercase; the JumpReLUSAE constructor accepts both.

3.3 Reconstruction sanity check

On the 47-row batch:

MetricValueReading
Mean ‖x‖ (activation L2 norm)108 404Expected for L32 of Gemma-3-12B (NLA was trained for ‖x‖≈80 000 in-distribution; SP-domain activations are slightly higher but in-band)
RMSE(recon − x)1 278RMSE / ‖x‖ ≈ 1.2% — clean reconstruction
Explained variance0.828Good for an SAE; well above the chance baseline
Mean L0 (active features per token)5674-5× the trained L0=120. OOD inflation on SP-domain prompts, not a math bug (reconstruction quality rules out a bad forward pass).

The L0 inflation is itself a finding: on prompts the SAE was not trained for (financial structured products), the same activation vector requires many more dictionary entries to reconstruct. This does not invalidate the top-K=10 extraction — it just means top-10 is a smaller fraction of the total than it would be in-distribution.

4. Cross-method comparison — per token

Three behavioural regimes emerge from reading the 47 tokens side-by-side.

4.1 Regime 1 — early positions (0-4): both methods independently say “no finance content yet”

PositionTokenNLA verbalization (first sentence)SAE top-3
0<bos>”Fragmented, incoherent academic text with garbled phrasing…”#180 (91 070), #109 (72 008), #178 (56 156)
1In (or A)“Technical article structure: educational blog format… eigenvalues / Fibonacci sequence / Gibbs energy”#205 (41 583), #221 (26 463), #113 (26 447)
2 a”Article structure… news summary or tutorial snippet introducing a programming topic”#15019, #349, #313
3 barrier”Academic/chemical database entry format… research paper about a specific chemical topic”#15019, #15663, #313
4 reverse”Technical semiconductor paper context… avalanche diodes and BJT parameters”#15019, #15663, #313

Both methods agree these positions are not finance-content-loaded:

This is a clean cross-method agreement on a negative finding: “the model has not yet committed to a finance reading at these positions.”

4.2 Regime 2 — domain onset (positions 5+): both methods independently identify financial context

Starting at position 5 ( convertible), every NLA verbalization across all three prompts opens with “Financial…” — investment context, glossary format, derivatives Q&A, structured product description. The SAE’s dominant feature trio also stabilizes: #15019 / #15663 / #313 appear in the top-3 at virtually every position from 5 onward.

This is cross-method agreement on a positive finding: by position 5, the model has recognized the structured-product context. The interpretation candidates for feature #15019 (top-1 at almost every finance position):

This is a candidate for the GemmaScope auto-interp lookup (TODO: feat=#15019 via Neuronpedia).

4.3 Regime 3 — directional positions (10-15): asymmetric, only partly directional

The contrast positions for the barrier conditional are closes/stays (pos 10), below/above (pos 11), and the barrier at maturity (pos 12-15).

PositionPrompt 1 (below) NLA · top-2 SAEPrompt 2 (above) NLA · top-2 SAE
10”barrier pricing… synthetic long/short” · #15019 #313”barrier option… conditional rule” · #15019 #313
11”options/barrier strategy… callable convertible … if the price falls below” · #15019 #15663”barrier/knock-out option … if the underlying stays above” · #15019 #20
12”European knock-out barrier … underlying asset is above” · #15019 #416”structured note is protected against do[wnside]” · #15019 #416
13”FX options/structured products … scenario about barrier breach” · #15019 #15663”knock-out barrier condition … as long as the underlying stays” · #15019 #15663
15 ( maturity)“European option payoff at maturity … bond is above” · #15019 #15663”quantitative payoff analysis … at maturity or at maturity” · #15019 #15663

Observations:

  1. SAE features diverge at pos 11. #15663 appears in prompt 1’s top-3 at below; #20 appears in prompt 2’s top-3 at above. This is the cleanest single-position SAE divergence between the two conditionals.
  2. NLA explicitly mentions directional language only on prompt 2 (above). The above-barrier verbalization at pos 12 says the structured note is “protected against downside” — a domain-correct reading. The below-barrier verbalization at pos 12 says “underlying asset is above” — the wrong direction. Confabulation confirmed: the NLA produced an “above” claim at a “below” position. The cross-check against the prompt text ( below at pos 11) flags this as a candidate hallucination, not a finding.
  3. Convergence on barrier-event language, not on the payoff direction. Both prompts trigger NLA mentions of “barrier breach”, “knock-out”, “knock-in” — but neither verbalization at the directional positions makes the payoff claim (“the investor loses principal” / “the investor receives par”). The payoff claim only surfaces at the final-token position (§4.4).

4.4 Regime 4 — final-token (pos 18 investor): payoff direction at last

PromptNLA verbalization (excerpt)SAE top-3
1 (below)“definition/explanation of structured products … the outcome for the investor when the index falls below the barrier, specifically the loss of principal or return#15019, #608, #313
2 (above)“explaining a structured product … the investor receives the principal plus a small return or loses the principal in the ETF/bond hybrid”#15019, #608, #313
3 (neutral)“structured definition of a structured product … An Enhanced Yield Note is a structured product#15019, #15663, #313

These are byte-identical to the Week 1 sidecar (§3 of 2026-05-nla-sidecar.md) — confirms the run is deterministic (temp 0) and reproducible across sessions.

The SAE top-3 at the final position is near-identical between prompts 1 and 2 (#15019, #608, #313 at both, with #601/#416 close behind). Same dominant structured-product context features. The difference between “below → loss” and “above → equivocal” is not visible at the SAE top-3 level — it lives either lower in the SAE feature rank, or in the combined activation pattern the NLA verbalizes but discrete top-K features do not surface.

5. Feature-cluster sanity check vs. Phase B (Gemma-2-2B)

The Phase B attribution graph (2026-05-first-attribution-graph.md §3) reported, on Gemma-2-2B with mwhanna/gemma-scope-transcoders:

On Gemma-3-12B-IT with GemmaScope 2 at the same prompt and same input position (pos 11 below):

This satisfies Week 2 step 4 (“sanity-check that SAE features at known concept positions are consistent with Phase B findings qualitatively”).

6. Proto-rules — Week 4 input

Week 4 will formalize four cross-validation rules. Week 2’s data already populates each cell of the working frame in the Path A plan:

Working-frame patternConcrete Week 2 example
NLA + SAE agree (high confidence)Positions 5-18 every prompt: both methods independently identify “structured-product / financial-derivative” content. Feature #15019 co-occurs with NLA “financial/investment” framing.
NLA only (hypothesis, not confirmed)Final-token ’ investor’ on prompt 1: NLA names “loss of principal”; the SAE top-3 at the same position is dominated by domain-context features (#15019, #608, #313) that do not visibly discriminate below from above. The directional claim is suggestive but not corroborated by the top-K SAE leg.
SAE only (unverbalized, possible blind spot)Position 11 SAE divergence: feature #15663 distinguishes below from above (#20). The NLA verbalization at those positions does not call out a direction-specific feature. The SAE sees a discriminating signal the actor’s English does not surface.
NLA contradicted by context (confabulation candidate)Position 12 of prompt 1: NLA says “underlying asset is above” when the actual preceding token is below. The cross-check is against the prompt text, not against the SAE — but the rule fires the same way.

7. Caveats

8. FINMA 08/2024 §VI implications

This artefact directly addresses FINMA’s third assessment leg (“plausibility / robustness of results”). The Week 1 sidecar made the case for method triangulation in principle. Week 2 demonstrates the operational form: two methods, same site, per-token resolution, and concrete categories (agree / NLA-only / SAE-only / contradicted) that map to confidence claims.

What this artefact does not yet do:

  1. Map proto-rules → FINMA Randziffer. That is Week 4.
  2. Run on the SP-Benchmark questionnaire (25 × 7). That is Week 3.
  3. Make a regulator-grade claim. The 47-token, 3-prompt evidence is a methodology demonstration, not a sign-off.

9. Status