Solshine commited on
Commit
3a170a9
·
verified ·
1 Parent(s): 1484d5f

Upload README.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +183 -0
README.md ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ base_model: EleutherAI/pythia-160m
4
+ tags:
5
+ - sparse-autoencoder
6
+ - interpretability
7
+ - deception
8
+ - sandbagging
9
+ - sae-lens
10
+ library_name: sae_lens
11
+ ---
12
+
13
+ # V4 Sandbagging SAEs — Pythia-160M
14
+
15
+ Sparse autoencoders trained on residual-stream activations from
16
+ **EleutherAI/pythia-160m** while the model answered trivia questions under two
17
+ instructions: answer correctly (**genuine**) or answer incorrectly on
18
+ purpose (**sandbag**). Part of the follow-up research program to "The
19
+ Secret Agenda" (arXiv:2509.20393).
20
+
21
+ ## What this repo contains
22
+
23
+ **6 sparse autoencoders**: 0 JumpReLU (post-STE-fix, arXiv:2407.14435) + 6 TopK (k=64).
24
+
25
+ Layers covered: L3, L6, L9. Three training conditions per layer per
26
+ architecture:
27
+
28
+ - **genuine_only** — trained on neutral-prompt activations only
29
+ - **sandbagging_only** — trained on sandbagging-prompt activations only
30
+ - **mixed** — trained on all available activations
31
+
32
+ For each SAE, the repo includes:
33
+
34
+ - `{tag}/sae_weights.safetensors` — SAELens-compatible weights
35
+ (`W_enc`, `W_dec`, `b_enc`, `b_dec`, and `threshold`/`log_threshold` for JumpReLU)
36
+ - `{tag}/cfg.json` — SAELens config (`model_name`, `hook_name`, `hook_layer`,
37
+ `d_in`, `d_sae`, `architecture`)
38
+
39
+ Naming: `v4_{model}_{arch}_L{layer}_{condition}`
40
+ e.g. `v4_pythia160_jumprelu_L6_genuine_only`,
41
+ `v4_pythia160_topk_L6_mixed`.
42
+
43
+ ## Architecture and training
44
+
45
+ All SAEs share:
46
+
47
+ - `d_in = 768` (residual stream of Pythia-160M)
48
+ - `d_sae = 3072 = 4 × d_in` (expansion factor 4)
49
+ - 300 training epochs, batch 128, lr 3e-4, L1 coefficient 1e-3
50
+ - Decoder normalized per SAELens convention
51
+ - JumpReLU uses the Gaussian-kernel STE from Rajamanoharan et al. 2024
52
+ (arXiv:2407.14435). Pre-fix SAEs had `threshold=0` and were functionally
53
+ ReLU; all SAEs in this repo are post-fix.
54
+ - TopK uses hard L0 = 64. Fixed-L0 gives tighter sparsity than JumpReLU;
55
+ also much faster training (~40s/SAE vs ~500s for JumpReLU).
56
+
57
+ Training activations source: `llama_sandbagging_dataset.pt` /
58
+ `smollm_sandbagging_dataset.pt` / `tinyllama_sandbagging_dataset.pt` in
59
+ [the research repo](https://github.com/SolshineCode/deception-nanochat-sae-research/tree/main/experiments/v4_sandbagging_concealment/results).
60
+
61
+ ## Key scientific findings
62
+
63
+ These SAEs were used to validate (and in several cases, **falsify**)
64
+ SAE-mediated behavioral interpretability claims. Summary of what we
65
+ learned using these SAEs (full detail: `RESULTS_INDEX.md` §17-§32 in the
66
+ research repo):
67
+
68
+ ### SAE-level interventions are non-specific
69
+
70
+ Under adversarial controls E1 (shuffled-label median) and E4
71
+ (reversed-direction / sandbagging median), the E6 full-SAE-swap
72
+ intervention collapses:
73
+
74
+ - **Specificity gap < 0.15pp across 9 tested model-layer combinations**
75
+ (all JumpReLU SAEs tested: Llama L4/L8/L12, SmolLM2 L7/L15/L22,
76
+ TinyLlama L5/L11/L16; §24, §26, §31).
77
+ - The E6 effect (positive or negative) is reproduced by shuffled-label
78
+ and reversed-direction medians. The SAE intervention is non-specific
79
+ activation disruption, not feature-specific restoration.
80
+
81
+ ### Circuit-level interventions are head-specific (Llama only)
82
+
83
+ Ablation of 5 identified suppressor heads in Llama-3.2-1B:
84
+
85
+ - **+13.71pp restoration** (CI95 [+11.28, +16.24] on n=50 questions; §28).
86
+ - Specificity gap **+14.85pp vs random 5-head ablation** (σ 3.71pp over
87
+ n_draws=20; §28.4).
88
+ - Cross-model check (§30): only Llama-3.2-1B shows a substantial
89
+ **sandbagging-specific** portion (+7.72pp = 56% of the circuit effect).
90
+ TinyLlama-intermediate, Pythia-160M, Pythia-410M all show ~0 or
91
+ negative sandbagging-specific portions — the Llama heads dampen
92
+ correctness condition-generally, not only under sandbagging
93
+ instructions.
94
+
95
+ ### Cross-model circuit finding
96
+
97
+ Our cross-model suppressor-head search (§13-§14) identified weaker effects
98
+ in TinyLlama (+1.95pp), Pythia-160M (+0.67pp), and Pythia-410M (+4.54pp)
99
+ on the canonical 5-question evaluation. Only Llama-3.2-1B shows circuit-
100
+ level ESH at meaningful magnitude. See the
101
+ [Llama repo](https://huggingface.co/Solshine/deception-v4-saes-llama-3-2-1b)
102
+ for the full circuit writeup.
103
+
104
+
105
+ ### TopK vs JumpReLU on behavioral separation
106
+
107
+ Paired Cohen's d comparison on sandbagging-vs-genuine at matched
108
+ (layer, condition) (§32):
109
+
110
+ - JumpReLU wins d_max in 22/27 pairs (81%).
111
+ - TopK wins in 4 cases, all at mid-to-late layers with **mixed** training.
112
+ - **Standout: Llama L8 mixed TopK d_max = 9.76, vs 4.69 for the
113
+ matched JumpReLU** — the sharpest single-feature separator observed
114
+ across all V4 SAEs. Candidate target for interpretability
115
+ investigation.
116
+ - JumpReLU's d_mean is ~20-50x higher (broader separability across many
117
+ features); TopK concentrates signal in fewer features.
118
+
119
+ Use JumpReLU for probing/detection. Use TopK for single-feature
120
+ interpretability targets.
121
+
122
+ ## How to load
123
+
124
+ With SAELens:
125
+
126
+ ```python
127
+ from sae_lens import SAE
128
+
129
+ sae, cfg_dict, sparsity = SAE.from_pretrained(
130
+ release="Solshine/deception-v4-saes-pythia-160m",
131
+ sae_id="v4_pythia160_jumprelu_L6_genuine_only",
132
+ )
133
+ ```
134
+
135
+ Raw (no SAELens):
136
+
137
+ ```python
138
+ from safetensors.torch import load_file
139
+ from huggingface_hub import hf_hub_download
140
+ import json
141
+
142
+ tag = "v4_pythia160_topk_L6_mixed"
143
+ weights = load_file(hf_hub_download("Solshine/deception-v4-saes-pythia-160m", f"{tag}/sae_weights.safetensors"))
144
+ cfg = json.loads(open(hf_hub_download("Solshine/deception-v4-saes-pythia-160m", f"{tag}/cfg.json")).read())
145
+ ```
146
+
147
+ Complete list of available tags in this repo:
148
+
149
+ - `v4_pythia160_topk_L3_genuine_only`
150
+ - `v4_pythia160_topk_L3_mixed`
151
+ - `v4_pythia160_topk_L6_genuine_only`
152
+ - `v4_pythia160_topk_L6_mixed`
153
+ - `v4_pythia160_topk_L9_genuine_only`
154
+ - `v4_pythia160_topk_L9_mixed`
155
+
156
+ ## Citation
157
+
158
+ ```bibtex
159
+ @misc{v4_sandbagging_saes_2026,
160
+ author = {DeLeeuw, Caleb},
161
+ title = {V4 Sandbagging SAEs — Pythia-160M},
162
+ year = {2026},
163
+ howpublished = {HuggingFace},
164
+ url = {https://huggingface.co/Solshine/deception-v4-saes-pythia-160m}
165
+ }
166
+
167
+ @misc{secret_agenda_2025,
168
+ title={The Secret Agenda: LLMs Strategically Lie Undetected by Current Safety Tools},
169
+ author={DeLeeuw, Caleb and others},
170
+ year={2025},
171
+ howpublished={arXiv:2509.20393},
172
+ url={https://arxiv.org/abs/2509.20393}
173
+ }
174
+ ```
175
+
176
+ ## Source
177
+
178
+ Research code, full RESULTS_INDEX, and the `papers/specificity_gap/` draft
179
+ manuscript: <https://github.com/SolshineCode/deception-nanochat-sae-research>
180
+
181
+ ## License
182
+
183
+ MIT. See the source repository for full terms.