← Dashboard

Exp 7 — Oracle ablation ceiling: C+/C− pool vs plain attribution

Best-possible ablation (eval-set greedy search) — does the C+/C− pool have a higher ceiling?

Setup
Task. Binary sentiment classification of movie reviews (IMDB-derived). The base LLM is frozen; a linear CLS head reads the final-token hidden state and predicts positive / negative.
Spurious setups (two regimes). bad (amplify): the ordinary word "bad" is made to correlate with the negative label. zxq (construct): a non-semantic token "zxq" is injected and made perfectly correlated with the negative label in training.
Models. Qwen2.5-0.5B-Instruct and Llama-3.1-8B-Instruct.
Masks. Sparse per-neuron MLP masks (hard-concrete L0) are trained on the frozen base + CLS head to solve the task. All interpretation and ablation here run with these learned masks turned ON — we analyze/remove neurons on top of the mask, not instead of it.
Evaluation. Balanced 2×2 validation set (label × cue-present), 2000 rows. gap = majority-group accuracy − minority-group accuracy, where the minority groups are pos+cue and neg+no-cue. A large gap means the model is leaning on the spurious cue.
This experiment (oracle ablation ceiling). To find the best possible ablation for each attribution method, we search the eval set directly (deliberate oracle/'cheating') via greedy forward selection that maximizes worst-group accuracy. Two pools: unsigned = top-150 by |grad×act| (plain attribution, pre-C+/C−); C+/C− = top-75 C+ ∪ top-75 C−. If the C+/C− pool reaches a higher ceiling, the signed decomposition exposes a strictly better set of removable neurons than plain attribution. (Upper bounds only — not a deployable method.)
Qwen/Qwen2.5-0.5B-Instruct | cue=bad | maximize worst-group accuracy (greedy forward, eval-set oracle)
Key result (oracle ceilings, full-val worst-group acc). baseline 0.332 → unsigned-top150 0.538 (Δ+0.206, gap +0.414), C+/C−-pool 0.442 (Δ+0.110, gap +0.473). Higher ceiling: unsigned |A|. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.

Objective: maximize worst-group accuracy

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.332+0.4080.7650.3320.790
unsigned top-150 |A|120.538+0.4140.7480.5440.538
C+/C− (75+75)110.442+0.4730.7330.4420.550
Gap-minimization objective. baseline gap +0.408 → unsigned +0.365 (overall 0.78, worst 0.36), C+/C− +0.375 (overall 0.78, worst 0.34). Lower gap: unsigned |A|. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.

Objective: minimize the gap (most gap-reduction)

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.332+0.4080.7650.3320.790
unsigned top-150 |A|60.358+0.3650.7820.3580.842
C+/C− (75+75)70.344+0.3750.7770.3440.836

Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.

Qwen/Qwen2.5-0.5B-Instruct | cue=bad | maximize worst-group accuracy (greedy forward, eval-set oracle)
Key result (oracle ceilings, full-val worst-group acc). baseline 0.692 → unsigned-top150 0.818 (Δ+0.126, gap +0.053), C+/C−-pool 0.818 (Δ+0.126, gap +0.057). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.

Objective: maximize worst-group accuracy

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.692+0.0670.8390.6920.918
unsigned top-150 |A|50.818+0.0530.8580.8440.818
C+/C− (75+75)50.818+0.0570.8570.8380.818
Gap-minimization objective. baseline gap +0.067 → unsigned +0.063 (overall 0.83, worst 0.68), C+/C− +0.062 (overall 0.84, worst 0.70). Lower gap: tie. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.

Objective: minimize the gap (most gap-reduction)

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.692+0.0670.8390.6920.918
unsigned top-150 |A|10.680+0.0630.8320.6800.920
C+/C− (75+75)20.698+0.0620.8380.6980.916

Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.

Qwen/Qwen2.5-0.5B-Instruct | cue=bad | maximize worst-group accuracy (greedy forward, eval-set oracle)
Key result (oracle ceilings, full-val worst-group acc). baseline 0.804 → unsigned-top150 0.802 (Δ-0.002, gap +0.024), C+/C−-pool 0.802 (Δ-0.002, gap +0.022). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.

Objective: maximize worst-group accuracy

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.804+0.0290.8550.8520.828
unsigned top-150 |A|10.802+0.0240.8570.8620.828
C+/C− (75+75)10.802+0.0220.8580.8640.830
Gap-minimization objective. baseline gap +0.029 → unsigned +0.004 (overall 0.84, worst 0.79), C+/C− -0.001 (overall 0.85, worst 0.82). Lower gap: C+/C−. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.

Objective: minimize the gap (most gap-reduction)

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.804+0.0290.8550.8520.828
unsigned top-150 |A|90.794+0.0040.8390.7940.880
C+/C− (75+75)80.816-0.0010.8540.8220.886

Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.

Qwen/Qwen2.5-0.5B-Instruct | cue=zxq | maximize worst-group accuracy (greedy forward, eval-set oracle)
Key result (oracle ceilings, full-val worst-group acc). baseline 0.032 → unsigned-top150 0.032 (Δ+0.000, gap +0.928), C+/C−-pool 0.032 (Δ+0.000, gap +0.928). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.

Objective: maximize worst-group accuracy

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.032+0.9280.5190.0320.078
unsigned top-150 |A|00.032+0.9280.5190.0320.078
C+/C− (75+75)00.032+0.9280.5190.0320.078
Gap-minimization objective. baseline gap +0.928 → unsigned +0.093 (overall 0.52, worst 0.03), C+/C− +0.469 (overall 0.69, worst 0.03). Lower gap: unsigned |A|. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.

Objective: minimize the gap (most gap-reduction)

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.032+0.9280.5190.0320.078
unsigned top-150 |A|300.032+0.0930.5210.0320.918
C+/C− (75+75)300.032+0.4690.6880.0320.874

Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.

Qwen/Qwen2.5-0.5B-Instruct | cue=zxq | maximize worst-group accuracy (greedy forward, eval-set oracle)
Key result (oracle ceilings, full-val worst-group acc). baseline 0.124 → unsigned-top150 0.258 (Δ+0.134, gap +0.643), C+/C−-pool 0.140 (Δ+0.016, gap +0.759). Higher ceiling: unsigned |A|. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.

Objective: maximize worst-group accuracy

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.124+0.7950.5430.1240.168
unsigned top-150 |A|120.258+0.6430.6150.2580.328
C+/C− (75+75)40.140+0.7590.5590.1400.220
Gap-minimization objective. baseline gap +0.795 → unsigned +0.357 (overall 0.68, worst 0.10), C+/C− +0.452 (overall 0.69, worst 0.12). Lower gap: unsigned |A|. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.

Objective: minimize the gap (most gap-reduction)

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.124+0.7950.5430.1240.168
unsigned top-150 |A|300.098+0.3570.6800.0980.906
C+/C− (75+75)300.122+0.4520.6930.1220.812

Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.

meta-llama/Llama-3.1-8B-Instruct | cue=bad | maximize worst-group accuracy (greedy forward, eval-set oracle)
Key result (oracle ceilings, full-val worst-group acc). baseline 0.878 → unsigned-top80 0.878 (Δ+0.000, gap +0.066), C+/C−-pool 0.878 (Δ+0.000, gap +0.066). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.

Objective: maximize worst-group accuracy

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.878+0.0660.9320.8780.920
unsigned top-80 |A|00.878+0.0660.9320.8780.920
C+/C− (75+75)00.878+0.0660.9320.8780.920
Gap-minimization objective. baseline gap +0.066 → unsigned +0.069 (overall 0.93, worst 0.86), C+/C− +0.067 (overall 0.93, worst 0.87). Lower gap: tie. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.

Objective: minimize the gap (most gap-reduction)

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.878+0.0660.9320.8780.920
unsigned top-80 |A|30.860+0.0690.9290.8600.930
C+/C− (75+75)10.874+0.0670.9320.8740.924

Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.

meta-llama/Llama-3.1-8B-Instruct | cue=bad | maximize worst-group accuracy (greedy forward, eval-set oracle)
Key result (oracle ceilings, full-val worst-group acc). baseline 0.758 → unsigned-top80 0.758 (Δ+0.000, gap +0.082), C+/C−-pool 0.758 (Δ+0.000, gap +0.082). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.

Objective: maximize worst-group accuracy

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.758+0.0820.8750.7580.910
unsigned top-80 |A|00.758+0.0820.8750.7580.910
C+/C− (75+75)00.758+0.0820.8750.7580.910
Gap-minimization objective. baseline gap +0.082 → unsigned +0.082 (overall 0.87, worst 0.74), C+/C− +0.077 (overall 0.87, worst 0.76). Lower gap: tie. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.

Objective: minimize the gap (most gap-reduction)

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.758+0.0820.8750.7580.910
unsigned top-80 |A|20.744+0.0820.8710.7440.916
C+/C− (75+75)40.762+0.0770.8750.7620.910

Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.

meta-llama/Llama-3.1-8B-Instruct | cue=zxq | maximize worst-group accuracy (greedy forward, eval-set oracle)
Key result (oracle ceilings, full-val worst-group acc). baseline 0.044 → unsigned-top80 0.044 (Δ+0.000, gap +0.929), C+/C−-pool 0.044 (Δ+0.000, gap +0.929). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.

Objective: maximize worst-group accuracy

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.044+0.9290.5090.0460.044
unsigned top-80 |A|00.044+0.9290.5090.0460.044
C+/C− (75+75)00.044+0.9290.5090.0460.044
Gap-minimization objective. baseline gap +0.929 → unsigned +0.021 (overall 0.52, worst 0.03), C+/C− +0.133 (overall 0.54, worst 0.06). Lower gap: unsigned |A|. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.

Objective: minimize the gap (most gap-reduction)

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.044+0.9290.5090.0460.044
unsigned top-80 |A|80.026+0.0210.5160.9860.026
C+/C− (75+75)120.058+0.1330.5400.8900.058

Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.

meta-llama/Llama-3.1-8B-Instruct | cue=zxq | maximize worst-group accuracy (greedy forward, eval-set oracle)
Key result (oracle ceilings, full-val worst-group acc). baseline 0.896 → unsigned-top80 0.880 (Δ-0.016, gap +0.027), C+/C−-pool 0.868 (Δ-0.028, gap +0.029). Higher ceiling: unsigned |A|. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.

Objective: maximize worst-group accuracy

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.896+0.0230.9220.9260.896
unsigned top-80 |A|20.880+0.0270.9200.9340.880
C+/C− (75+75)20.868+0.0290.9190.9420.868
Gap-minimization objective. baseline gap +0.023 → unsigned +0.020 (overall 0.92, worst 0.90), C+/C− +0.024 (overall 0.92, worst 0.90). Lower gap: tie. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.

Objective: minimize the gap (most gap-reduction)

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.896+0.0230.9220.9260.896
unsigned top-80 |A|30.904+0.0200.9170.9100.904
C+/C− (75+75)30.904+0.0240.9170.9060.904

Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.

meta-llama/Llama-3.1-8B-Instruct | cue=zxq | maximize worst-group accuracy (greedy forward, eval-set oracle)
Key result (oracle ceilings, full-val worst-group acc). baseline 0.888 → unsigned-top80 0.888 (Δ+0.000, gap +0.029), C+/C−-pool 0.888 (Δ+0.000, gap +0.029). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.

Objective: maximize worst-group accuracy

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.888+0.0290.9200.9240.888
unsigned top-80 |A|00.888+0.0290.9200.9240.888
C+/C− (75+75)00.888+0.0290.9200.9240.888
Gap-minimization objective. baseline gap +0.029 → unsigned +0.015 (overall 0.92, worst 0.91), C+/C− +0.014 (overall 0.92, worst 0.91). Lower gap: tie. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.

Objective: minimize the gap (most gap-reduction)

pool (oracle best subset)#ablworst-grpgapoverallpos+cueneg+nocue
baseline (no ablation)00.888+0.0290.9200.9240.888
unsigned top-80 |A|20.908+0.0150.9210.9200.908
C+/C− (75+75)30.908+0.0140.9210.9200.908

Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.