← 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):

PromptSlug
P1 — below…if the underlying closes below the barrier at maturity, the investorbarrier_knockin_v1
P2 — above…if the underlying stays above the barrier at maturity, the investorbarrier_above_v1
P3 — neutralA barrier reverse convertible is a structured productbarrier_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 — belowabove — 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:

rankP1 (below)probP2 (above)prob
1 receives0.3457 receives0.3477
2 will0.1270 gets0.1279
3 is0.1270 will0.1279
loses0.0152 (rank 8) losesabsent from top-10
earnsabsent from top-10 earns0.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 driverfeat=11502 L19 pos18 — 3.672feat=11502 L19 pos18 — 3.500
shared features11502, 8215, 4236, 11421, 3902, 773, 5286, 13277, 8479, 14154same 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 3P2 (above) — top 3
1feat=6956 L0 pos3( barrier) — 0.398feat=6956 L0 pos3( barrier) — 0.410
2feat=2612 L0 pos3( barrier) — 0.232feat=2612 L0 pos3( barrier) — 0.237
3feat=1342 L2 pos13( barrier) — 0.165feat=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 belowabove:

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:

5. Caveats

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: