← Dashboard

Exp 6 — Probe control: classifier vs mask (no co-adaptation confound)

Fresh linear probe on base vs masked features — does the classifier or the mask edit do the work?

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 (clean heavy-lifting control). Exp 4's (mask inspection) masks-off test was confounded — the CLS head was co-trained with the mask, so feeding it base (M≡1) features is out-of-distribution and collapses regardless of whether the mask matters. Here each feature set gets its own freshly-fit linear probe: base-model features (M≡1) vs masked-model features, both trained on the spurious train split and evaluated on balanced val. This isolates whether the classifier already solves the task from base features (mask not needed for accuracy) and whether the mask is what injects the spurious gap.
Qwen/Qwen2.5-0.5B-Instruct | cue=bad
Key result (each feature set gets its OWN fresh probe — no co-adaptation confound). base-features probe: acc 0.867, gap +0.072; masked-features probe: acc 0.742, gap +0.468. ⇒ the classifier does the core work (base features already classify, acc 0.87) and the mask injects the spurious gap (gap +0.07 base → +0.47 masked, Δ+0.40).
feature set (fresh probe)train accval accval gapworst-grppos+cueneg+nocue
base model (M≡1) + fresh probe0.9790.867+0.0720.8240.8240.838
masked model + fresh probe1.0000.742+0.4680.3220.3220.694

Both probes are linear, fit on the (spurious) train split and evaluated on the balanced val set — identical protocol, only the feature set differs. base = mask off (M≡1) with a probe trained for base features (removes Exp 4's co-adaptation confound).

Qwen/Qwen2.5-0.5B-Instruct | cue=bad
Key result (each feature set gets its OWN fresh probe — no co-adaptation confound). base-features probe: acc 0.865, gap +0.068; masked-features probe: acc 0.875, gap +0.066. ⇒ the classifier does the work — base features already give acc 0.86, gap +0.07; the mask adds little (gap Δ-0.00).
feature set (fresh probe)train accval accval gapworst-grppos+cueneg+nocue
base model (M≡1) + fresh probe0.9800.865+0.0680.8280.8280.834
masked model + fresh probe0.9760.875+0.0660.8360.8360.848

Both probes are linear, fit on the (spurious) train split and evaluated on the balanced val set — identical protocol, only the feature set differs. base = mask off (M≡1) with a probe trained for base features (removes Exp 4's co-adaptation confound).

Qwen/Qwen2.5-0.5B-Instruct | cue=bad
Key result (each feature set gets its OWN fresh probe — no co-adaptation confound). base-features probe: acc 0.869, gap +0.059; masked-features probe: acc 0.880, gap +0.062. ⇒ the classifier does the work — base features already give acc 0.87, gap +0.06; the mask adds little (gap Δ+0.00).
feature set (fresh probe)train accval accval gapworst-grppos+cueneg+nocue
base model (M≡1) + fresh probe0.9790.869+0.0590.8340.8340.844
masked model + fresh probe0.9730.880+0.0620.8340.8340.864

Both probes are linear, fit on the (spurious) train split and evaluated on the balanced val set — identical protocol, only the feature set differs. base = mask off (M≡1) with a probe trained for base features (removes Exp 4's co-adaptation confound).

Qwen/Qwen2.5-0.5B-Instruct | cue=zxq
Key result (each feature set gets its OWN fresh probe — no co-adaptation confound). base-features probe: acc 0.849, gap +0.115; masked-features probe: acc 0.517, gap +0.935. ⇒ the classifier does the core work (base features already classify, acc 0.85) and the mask injects the spurious gap (gap +0.12 base → +0.93 masked, Δ+0.82).
feature set (fresh probe)train accval accval gapworst-grppos+cueneg+nocue
base model (M≡1) + fresh probe0.9790.849+0.1150.7540.7540.828
masked model + fresh probe1.0000.517+0.9350.0340.0340.066

Both probes are linear, fit on the (spurious) train split and evaluated on the balanced val set — identical protocol, only the feature set differs. base = mask off (M≡1) with a probe trained for base features (removes Exp 4's co-adaptation confound).

Qwen/Qwen2.5-0.5B-Instruct | cue=zxq
Key result (each feature set gets its OWN fresh probe — no co-adaptation confound). base-features probe: acc 0.848, gap +0.115; masked-features probe: acc 0.551, gap +0.791. ⇒ the classifier does the core work (base features already classify, acc 0.85) and the mask injects the spurious gap (gap +0.11 base → +0.79 masked, Δ+0.68).
feature set (fresh probe)train accval accval gapworst-grppos+cueneg+nocue
base model (M≡1) + fresh probe0.9790.848+0.1150.7540.7540.826
masked model + fresh probe1.0000.551+0.7910.1240.1240.188

Both probes are linear, fit on the (spurious) train split and evaluated on the balanced val set — identical protocol, only the feature set differs. base = mask off (M≡1) with a probe trained for base features (removes Exp 4's co-adaptation confound).

meta-llama/Llama-3.1-8B-Instruct | cue=bad
Key result (each feature set gets its OWN fresh probe — no co-adaptation confound). base-features probe: acc 0.899, gap +0.066; masked-features probe: acc 0.929, gap +0.078. ⇒ the classifier does the work — base features already give acc 0.90, gap +0.07; the mask adds little (gap Δ+0.01).
feature set (fresh probe)train accval accval gapworst-grppos+cueneg+nocue
base model (M≡1) + fresh probe0.9970.899+0.0660.8400.8400.892
masked model + fresh probe1.0000.929+0.0780.8780.8780.902

Both probes are linear, fit on the (spurious) train split and evaluated on the balanced val set — identical protocol, only the feature set differs. base = mask off (M≡1) with a probe trained for base features (removes Exp 4's co-adaptation confound).

meta-llama/Llama-3.1-8B-Instruct | cue=bad
Key result (each feature set gets its OWN fresh probe — no co-adaptation confound). base-features probe: acc 0.900, gap +0.068; masked-features probe: acc 0.901, gap +0.073. ⇒ the classifier does the work — base features already give acc 0.90, gap +0.07; the mask adds little (gap Δ+0.01).
feature set (fresh probe)train accval accval gapworst-grppos+cueneg+nocue
base model (M≡1) + fresh probe0.9970.900+0.0680.8440.8440.888
masked model + fresh probe1.0000.901+0.0730.8340.8340.896

Both probes are linear, fit on the (spurious) train split and evaluated on the balanced val set — identical protocol, only the feature set differs. base = mask off (M≡1) with a probe trained for base features (removes Exp 4's co-adaptation confound).

meta-llama/Llama-3.1-8B-Instruct | cue=zxq
Key result (each feature set gets its OWN fresh probe — no co-adaptation confound). base-features probe: acc 0.868, gap +0.133; masked-features probe: acc 0.515, gap +0.918. ⇒ the classifier does the core work (base features already classify, acc 0.87) and the mask injects the spurious gap (gap +0.13 base → +0.92 masked, Δ+0.79).
feature set (fresh probe)train accval accval gapworst-grppos+cueneg+nocue
base model (M≡1) + fresh probe0.9990.868+0.1330.7700.7700.832
masked model + fresh probe1.0000.515+0.9180.0440.0440.068

Both probes are linear, fit on the (spurious) train split and evaluated on the balanced val set — identical protocol, only the feature set differs. base = mask off (M≡1) with a probe trained for base features (removes Exp 4's co-adaptation confound).

meta-llama/Llama-3.1-8B-Instruct | cue=zxq
Key result (each feature set gets its OWN fresh probe — no co-adaptation confound). base-features probe: acc 0.869, gap +0.131; masked-features probe: acc 0.877, gap +0.088. ⇒ the classifier does the work — base features already give acc 0.87, gap +0.13; the mask adds little (gap Δ-0.04).
feature set (fresh probe)train accval accval gapworst-grppos+cueneg+nocue
base model (M≡1) + fresh probe0.9990.869+0.1310.7780.7780.828
masked model + fresh probe1.0000.877+0.0880.8200.8200.846

Both probes are linear, fit on the (spurious) train split and evaluated on the balanced val set — identical protocol, only the feature set differs. base = mask off (M≡1) with a probe trained for base features (removes Exp 4's co-adaptation confound).

meta-llama/Llama-3.1-8B-Instruct | cue=zxq
Key result (each feature set gets its OWN fresh probe — no co-adaptation confound). base-features probe: acc 0.869, gap +0.131; masked-features probe: acc 0.872, gap +0.113. ⇒ the classifier does the work — base features already give acc 0.87, gap +0.13; the mask adds little (gap Δ-0.02).
feature set (fresh probe)train accval accval gapworst-grppos+cueneg+nocue
base model (M≡1) + fresh probe0.9990.869+0.1310.7740.7740.832
masked model + fresh probe1.0000.872+0.1130.7980.7980.832

Both probes are linear, fit on the (spurious) train split and evaluated on the balanced val set — identical protocol, only the feature set differs. base = mask off (M≡1) with a probe trained for base features (removes Exp 4's co-adaptation confound).