Upload README.md with huggingface_hub
Browse files
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.
|