← all analysis · · docs/analysis/2026-05-16-attribution-graph-contrastive.md
Contrastive Attribution — Does the Barrier Direction Flip the Circuit?
On this page
Date: 2026-05-16
Model: google/gemma-2-2b (base, not instruction-tuned, bf16)
Tool: circuit-tracer 0.5.x with cross-layer transcoders from GemmaScope (mwhanna/gemma-scope-transcoders, all 26 layers)
Hardware: GB10 (Grace Blackwell) — hubed-dgx
Companion to: /analysis/2026-05-first-attribution-graph/ (Phase B, N=1)
Prompts (mechinterp/prompts/barrier_knockin_v1.md):
| Prompt | Slug | |
|---|---|---|
| P1 — below | …if the underlying closes below the barrier at maturity, the investor | barrier_knockin_v1 |
| P2 — above | …if the underlying stays above the barrier at maturity, the investor | barrier_above_v1 |
| P3 — neutral | A barrier reverse convertible is a structured product | barrier_neutral_v1 |
Run artefacts: mechinterp/outputs/{barrier_knockin_v1,barrier_above_v1,barrier_neutral_v1}/ — each with top_features.md, run.log, run_metadata.json, graph_files/graph-metadata.json. Large .pt / full graph JSON are gitignored; regenerate with mechinterp/scripts/03_attribution_graph.py --prompt … --slug … [--target-token …].
1. Research question
Phase B established that base Gemma-2-2B’s surface behaviour on the barrier knock-in prompt is formulaic — top-1 receives (p = 0.346), not loses (rank 8). It left one question open: even though the output is wrong, do the model’s internal features still encode the causal chain? Phase B §3.3 found 98 concept-position features above threshold for the loses logit and read this as “the causal-chain signal is present but weak.”
That reading is only safe if those features are specific to the loss scenario. The way to test it is a contrastive run: flip the one word that flips the economics — below → above — and check whether the circuit flips with it. P1 (below the barrier) should drive a loss of principal protection; P2 (above the barrier) should drive a protected, par-plus-coupon outcome. P3 is a non-conditional anchor with no causal claim.
If the barrier-concept features differ between P1 and P2, the model has a directional barrier representation. If they do not, it does not — and the word “barrier” is just co-occurring text.
2. Method
Identical pipeline to Phase B, run three times. 03_attribution_graph.py was generalised to take --prompt / --slug / --target-token so all three runs share one code path (defaults still reproduce P1 byte-for-byte). P1 was re-extracted from its cached .pt; P2 and P3 are fresh attributions (~2.2 s and ~2.5 s of attribution compute each). --target-token forces a chosen logit (loses for P1, receives for P2) into the section-2/3 report even when it is not in the top-3, so the same tokens can be compared across prompts.
All three graphs passed the non-triviality spot-check (P1/P2: 8023 nodes; P3: 7753 nodes — smaller because it is a 9-token prompt).
3. Result
3.1 The prediction does not flip
Flipping the underlying from below the barrier to above it — an economically opposite scenario — barely moves the next-token distribution:
| rank | P1 (below) | prob | P2 (above) | prob |
|---|---|---|---|---|
| 1 | receives | 0.3457 | receives | 0.3477 |
| 2 | will | 0.1270 | gets | 0.1279 |
| 3 | is | 0.1270 | will | 0.1279 |
| … | ||||
| — | loses | 0.0152 (rank 8) | loses | absent from top-10 |
| — | earns | absent from top-10 | earns | 0.0119 (rank 9) |
Both prompts predict receives as top-1 at p ≈ 0.347 — a difference of 0.002. The model produces the same direction-agnostic continuation (“the investor receives …”) regardless of which side of the barrier the underlying lands.
There is a faint directional trace, and it is directionally correct: loses appears in the tail only for P1 (the loss case), and earns appears in the tail only for P2 (the gain case). But each sits at ~1–1.5% probability, 20–30× below the generic continuation. The model has registered that the words associate; it has not built a computation that acts on the association.
3.2 The logit-driver features are barrier-direction-invariant
The top-15 source nodes for the shared top-1 logit receives are essentially the same circuit in both prompts. Of the feature-type drivers, 10 are identical — same feature IDs, same layers, same near-identical magnitudes:
| P1 (below) | P2 (above) | |
|---|---|---|
| #1 driver | feat=11502 L19 pos18 — 3.672 | feat=11502 L19 pos18 — 3.500 |
| shared features | 11502, 8215, 4236, 11421, 3902, 773, 5286, 13277, 8479, 14154 | same 10, + feat=16135 |
Every one of these features sits at pos18 ( investor) — the final token. None sits at the below/above position, or any barrier-clause position. The computation that produces the prediction happens on the residual stream at the last token and does not consult the directional input.
3.3 The barrier-concept features are shared, not flipped
top_features.md §4 lists features at the barrier-clause positions. For the receives logit, 9 of the top-10 concept features are identical between P1 and P2:
| P1 (below) — top 3 | P2 (above) — top 3 | |
|---|---|---|
| 1 | feat=6956 L0 pos3( barrier) — 0.398 | feat=6956 L0 pos3( barrier) — 0.410 |
| 2 | feat=2612 L0 pos3( barrier) — 0.232 | feat=2612 L0 pos3( barrier) — 0.237 |
| 3 | feat=1342 L2 pos13( barrier) — 0.165 | feat=1342 L2 pos13( barrier) — 0.179 |
Shared set: 6956, 2612, 1342, 9236, 11414, 4289, 9869, 269 — eight features, in both lists, at the same layers and comparable magnitudes. The dominant concept feature feat=6956 is #1 in both at ≈ 0.40.
One feature is especially telling. feat=5847 fires at L3 pos10 in both prompts — but pos10 is the word closes in P1 and stays in P2. The same feature, similar magnitude (0.137 vs 0.109), indifferent to the lexical content. It is a clause-position feature, not a “the underlying breaches” feature.
The only place a distinct signal appears is the weak loses logit itself: P1’s loses recruits two features at pos11 ( below) — feat=2916, feat=4372 — that have no counterpart, because P2 produces no loses logit to drive. So the below → loses path exists, but it terminates in a rank-8, 1.5%-probability prediction.
3.4 The neutral anchor confirms the conditional framing is not noise
P3 (“A barrier reverse convertible is a structured product”) predicts pure relative-clause syntax — that (0.467), with, where — driven almost entirely by features at pos8 ( product). It contains the word “barrier” once (pos2). feat=6956 fires there too, which confirms it as a generic lexical “barrier” feature — but at 0.13–0.22, roughly half to a third of the ≈ 0.40 it reaches in the conditional prompts. The conditional clause amplifies the barrier-token features ~2–3×; it does not give them a direction.
3.5 Verdict: no directional barrier representation
The contrastive test was built to falsify a faithfulness claim, and it fires. Flipping below → above:
- does not flip the prediction (both →
receives, p ≈ 0.347); - does not change the logit-driver features (same 10 features, same ranks, same magnitudes at pos18);
- does not change the barrier-concept features (8–9 of 10 shared;
feat=6956dominant in both).
This corrects the cautious Phase B reading. Phase B §3.3 counted 98 concept-position features for loses and called the causal-chain signal “present but weak.” The contrastive run shows those features are not specific to the loss scenario — substantially the same features fire for P2’s receives. The honest restatement: Gemma-2-2B (base, 2B) has barrier-token features and conditional-clause-position features, but no representation of the barrier’s directional consequence that attribution can recover.
4. FINMA 08/2024 focus area VI mapping
Phase B demonstrated FINMA §VI’s first assessed leg — understanding the drivers — for one prompt. This contrastive run is the smallest honest instance of the second leg: understanding behaviour under different conditions. It is not the population study (that is Track B B1); it is N = 3 across one deliberate condition flip. Even at that minimal scale it produces a result an MRM reviewer can act on:
- The method has discriminating power. A contrastive design can distinguish “the model represents the concept” from “the word co-occurs.” Phase B in isolation could have been over-read as evidence of an internal causal chain; the contrastive run prevents that over-reading. For a per-decision auditability artefact, that falsification capacity is the point — an explainability method that cannot fail a faithfulness test is not an audit.
- Faithfulness is per-model and must be re-tested. A negative result on a 2B base model says nothing certain about a production-class instruction-tuned model. It does say the directional representation cannot be assumed — it has to be demonstrated, with a contrastive run, for each model in scope.
- It motivates the Path A model choice. The negative result on Gemma-2-2B-base is exactly why Track B Path A moves to Gemma-3-12B-IT (instruction-tuned, ~6× larger): the directional representation, if it exists anywhere in the open-weight range, is more likely to appear there — and the same contrastive test will say whether it does.
5. Caveats
- N = 3 prompts, one condition flip. This is a feasibility-grade contrastive test, not a population study. No statistical claim is made.
- CLT error-node dominance (carried over from Phase B §3.4). For the
loseslogit, 8 of the top-15 sources were error nodes — residual the transcoders did not represent as features. “No directional feature found” could therefore be partly “transcoders did not reconstruct the directional computation.” The load-bearing finding is immune to this caveat: §3.1’s logit-level result (below ≈ above, bothreceivesp ≈ 0.347) is the raw model output, not a transcoder reconstruction. The feature-level invariance (§3.2–3.3) corroborates it; the logit invariance establishes it. - Base, not instruction-tuned. No Swiss bank would deploy a 2B base model for SP work. The artefact demonstrates the machinery and the test design; the specific negative finding belongs to this model only.
- Feature IDs are not yet interpreted. Each
feat=NNNNwould benefit from a Neuronpedia / GemmaScope auto-interp label; deferred (seemechinterp/neuronpedia/README.md).
6. Next step
This closes the contrastive follow-on from /analysis/2026-05-first-attribution-graph/ §6. The two open Track B threads are unchanged:
- B1 execution — population SAE-drift run (
docs/superpowers/plans/2026-05-b1-sae-drift-design.md): the full population-scale version of FINMA §VI’s “behaviour under different conditions.” - Path A — per-token NLA + GemmaScope 2 dual readout on Gemma-3-12B-IT (
docs/superpowers/plans/2026-05-track-b-path-a-six-week-execution.md). The contrastive test in this doc should be re-run there as the model-faithfulness gate: if the barrier direction flips the circuit on the 12B instruction-tuned model, that is the first genuinely citable directional-faithfulness result for the project.