Matteo He commited on
Commit
708a9b9
·
verified ·
1 Parent(s): 528a5f0

Release crosscoder + SAE + attribution artifacts

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. README.md +83 -0
  2. attribution/pythia-160m/induction-results.pt +3 -0
  3. attribution/pythia-160m/induction-verdict.json +11 -0
  4. attribution/pythia-160m/ioi-results.pt +3 -0
  5. attribution/pythia-160m/ioi-verdict.json +11 -0
  6. attribution/pythia-160m/sva-results.pt +3 -0
  7. attribution/pythia-160m/sva-verdict.json +11 -0
  8. pythia-160m/W_E/cross-snapshot-32/d24576/seed0.config.json +119 -0
  9. pythia-160m/W_E/cross-snapshot-32/d24576/seed0.md +38 -0
  10. pythia-160m/W_E/cross-snapshot-32/d24576/seed0.safetensors +3 -0
  11. pythia-160m/W_E/cross-snapshot-32/d8192/seed0.config.json +113 -0
  12. pythia-160m/W_E/cross-snapshot-32/d8192/seed0.md +38 -0
  13. pythia-160m/W_E/cross-snapshot-32/d8192/seed0.safetensors +3 -0
  14. pythia-160m/W_E/cross-snapshot-32/d8192/seed1.config.json +119 -0
  15. pythia-160m/W_E/cross-snapshot-32/d8192/seed1.md +38 -0
  16. pythia-160m/W_E/cross-snapshot-32/d8192/seed1.safetensors +3 -0
  17. pythia-160m/W_E/cross-snapshot-32/d8192/seed2.config.json +119 -0
  18. pythia-160m/W_E/cross-snapshot-32/d8192/seed2.md +38 -0
  19. pythia-160m/W_E/cross-snapshot-32/d8192/seed2.safetensors +3 -0
  20. pythia-160m/W_E/cross-snapshot-32/d8192/seed3.config.json +119 -0
  21. pythia-160m/W_E/cross-snapshot-32/d8192/seed3.md +38 -0
  22. pythia-160m/W_E/cross-snapshot-32/d8192/seed3.safetensors +3 -0
  23. pythia-160m/W_E/cross-snapshot-32/d8192/seed4.config.json +119 -0
  24. pythia-160m/W_E/cross-snapshot-32/d8192/seed4.md +38 -0
  25. pythia-160m/W_E/cross-snapshot-32/d8192/seed4.safetensors +3 -0
  26. pythia-160m/W_U/architecture-comparison/d8192/batchtopk/seed0.config.json +74 -0
  27. pythia-160m/W_U/architecture-comparison/d8192/batchtopk/seed0.md +38 -0
  28. pythia-160m/W_U/architecture-comparison/d8192/batchtopk/seed0.safetensors +3 -0
  29. pythia-160m/W_U/architecture-comparison/d8192/gated-retuned/seed0.config.json +74 -0
  30. pythia-160m/W_U/architecture-comparison/d8192/gated-retuned/seed0.md +38 -0
  31. pythia-160m/W_U/architecture-comparison/d8192/gated-retuned/seed0.safetensors +3 -0
  32. pythia-160m/W_U/architecture-comparison/d8192/gated/seed0.config.json +74 -0
  33. pythia-160m/W_U/architecture-comparison/d8192/gated/seed0.md +38 -0
  34. pythia-160m/W_U/architecture-comparison/d8192/gated/seed0.safetensors +3 -0
  35. pythia-160m/W_U/cross-snapshot-16/d8192/seed0.config.json +87 -0
  36. pythia-160m/W_U/cross-snapshot-16/d8192/seed0.md +38 -0
  37. pythia-160m/W_U/cross-snapshot-16/d8192/seed0.safetensors +3 -0
  38. pythia-160m/W_U/cross-snapshot-32/d16384/seed0.config.json +111 -0
  39. pythia-160m/W_U/cross-snapshot-32/d16384/seed0.md +38 -0
  40. pythia-160m/W_U/cross-snapshot-32/d16384/seed0.safetensors +3 -0
  41. pythia-160m/W_U/cross-snapshot-32/d24576/seed0.config.json +119 -0
  42. pythia-160m/W_U/cross-snapshot-32/d24576/seed0.md +38 -0
  43. pythia-160m/W_U/cross-snapshot-32/d24576/seed0.safetensors +3 -0
  44. pythia-160m/W_U/cross-snapshot-32/d24576/seed1.config.json +119 -0
  45. pythia-160m/W_U/cross-snapshot-32/d24576/seed1.md +38 -0
  46. pythia-160m/W_U/cross-snapshot-32/d24576/seed1.safetensors +3 -0
  47. pythia-160m/W_U/cross-snapshot-32/d24576/seed2.config.json +119 -0
  48. pythia-160m/W_U/cross-snapshot-32/d24576/seed2.md +38 -0
  49. pythia-160m/W_U/cross-snapshot-32/d24576/seed2.safetensors +3 -0
  50. pythia-160m/W_U/cross-snapshot-32/d8192/seed0.config.json +111 -0
README.md ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ tags:
4
+ - crosscoder
5
+ - sparse-autoencoder
6
+ - mech-interp
7
+ - parameter-trajectory
8
+ - pythia
9
+ - olmo
10
+ ---
11
+
12
+ # Parameter-trajectory crosscoders for vocabulary readout evolution
13
+
14
+ Companion checkpoints to the paper *Parameter-trajectory crosscoders for
15
+ vocabulary readout evolution* (NeurIPS 2026; arXiv:XXXX.XXXXX).
16
+
17
+ We train **snapshot crosscoders** on parameter tensors (rather than
18
+ activations) sampled across pretraining checkpoints. In Pythia-160M's output
19
+ unembedding $W_U$, this reveals a sparse, reproducible **readout
20
+ consolidation event** at training step ~1,000.
21
+
22
+ ## Repository layout
23
+
24
+ | What you want | Path |
25
+ |---|---|
26
+ | Headline 5-seed Pythia-160M $W_U$ crosscoder | `pythia-160m/W_U/cross-snapshot-32/d8192/seed{0..4}.safetensors` |
27
+ | 32 single-snapshot SAEs (in-time view) | `pythia-160m/W_U/per-snapshot-saes/d8192/step*.safetensors` |
28
+ | Higher-capacity Pythia-160M $W_U$ crosscoders | `pythia-160m/W_U/cross-snapshot-32/d{16384,24576}/` |
29
+ | Architecture-invariance comparison (vs. JumpReLU baseline) | `pythia-160m/W_U/architecture-comparison/d8192/{batchtopk,gated,gated-retuned}/` |
30
+ | Snapshot-density downsample | `pythia-160m/W_U/cross-snapshot-16/d8192/` |
31
+ | Final-snapshot-only SAE Pareto | `pythia-160m/W_U/final-snapshot-saes/d{6144..65536}.safetensors` |
32
+ | Read/write asymmetry: $W_E$ side | `pythia-160m/W_E/cross-snapshot-32/d{8192,24576}/` |
33
+ | Cross-scale (Pythia-1B) | `pythia-1b/W_U/cross-snapshot-32/d{8192,16384,24576}/` |
34
+ | Larger-scale (Pythia-6.9B) | `pythia-6.9b/W_U/cross-snapshot-32/d32768/` |
35
+ | Cross-family (OLMo-2-7B) | `olmo-2-7b/W_U/cross-snapshot-32/d32768/` |
36
+ | §5 attribution-patching artifacts | `attribution/pythia-160m/` |
37
+
38
+ Each directory contains `<name>.safetensors` (weights),
39
+ `<name>.config.json` (training hparams + quality metrics), and `<name>.md`
40
+ (one-page model card). The metadata format is unified across all artifacts.
41
+
42
+ ## Quick start
43
+
44
+ ```python
45
+ from huggingface_hub import hf_hub_download
46
+ from safetensors.torch import load_file
47
+ import json
48
+
49
+ # Download the headline Pythia-160M crosscoder, seed 0
50
+ weights_path = hf_hub_download(
51
+ "matteohe/parameter-trajectory-crosscoders",
52
+ "pythia-160m/W_U/cross-snapshot-32/d8192/seed0.safetensors",
53
+ )
54
+ config_path = hf_hub_download(
55
+ "matteohe/parameter-trajectory-crosscoders",
56
+ "pythia-160m/W_U/cross-snapshot-32/d8192/seed0.config.json",
57
+ )
58
+ weights = load_file(weights_path) # dict[str, Tensor]
59
+ config = json.load(open(config_path))
60
+ print(config["public_label"]) # "Pythia-160M W_U crosscoder, ..."
61
+ ```
62
+
63
+ The crosscoder weight tensors are:
64
+ - `W_E`: encoder, shape $(K, d_{\text{model}}, d_{\text{sae}})$
65
+ - `W_D`: decoder, shape $(K, d_{\text{sae}}, d_{\text{model}})$
66
+ - `b_E`: encoder bias, shape $(K, d_{\text{sae}})$
67
+ - `b_D`: decoder bias, shape $(K, d_{\text{model}})$
68
+ - `activation_function.log_jumprelu_threshold`: shape $(d_{\text{sae}},)$
69
+
70
+ For per-snapshot SAEs `K=1`. The companion paper code (open-source, see
71
+ `https://github.com/...`) provides `wu_adapter.build_crosscoder` which
72
+ reconstructs the full module.
73
+
74
+ ## Citation
75
+
76
+ ```bibtex
77
+ @inproceedings{{...,
78
+ title={{Parameter-trajectory crosscoders for vocabulary readout evolution}},
79
+ author={{...}},
80
+ booktitle={{NeurIPS 2026}},
81
+ year={{2026}},
82
+ }}
83
+ ```
attribution/pythia-160m/induction-results.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:88048a0c9972a962695610c19820d716b541807022c78a0f8a86557bc15346a1
3
+ size 32822581
attribution/pythia-160m/induction-verdict.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "passed": true,
3
+ "max_ratio": 696.25,
4
+ "ratio_at_k": 32,
5
+ "ig_clean": true,
6
+ "n_samples": 1000,
7
+ "n_ig_steps": 10,
8
+ "snapshot_step": 143000,
9
+ "checkpoint": "/home/mh2274/rds/hpc-work/wu_crosscoder/run3_ge_exact_results/wu_cc_ge_exact_seed0.pt",
10
+ "wallclock_s": 150.33362078666687
11
+ }
attribution/pythia-160m/ioi-results.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8d4eb1c1dce4716843805b815c9fdef324faf58626fbf14f9ceee0545404188e
3
+ size 32822469
attribution/pythia-160m/ioi-verdict.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "passed": true,
3
+ "max_ratio": 167.48154981549814,
4
+ "ratio_at_k": 64,
5
+ "ig_clean": true,
6
+ "n_samples": 1000,
7
+ "n_ig_steps": 10,
8
+ "snapshot_step": 143000,
9
+ "checkpoint": "/home/mh2274/rds/hpc-work/wu_crosscoder/run3_ge_exact_results/wu_cc_ge_exact_seed0.pt",
10
+ "wallclock_s": 92.33377718925476
11
+ }
attribution/pythia-160m/sva-results.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:39c166606642bf4758e30c06d33935ec7bd2a1855adb19a7b8252b59a9850425
3
+ size 32822469
attribution/pythia-160m/sva-verdict.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "passed": true,
3
+ "max_ratio": 1140.1538461538462,
4
+ "ratio_at_k": 64,
5
+ "ig_clean": true,
6
+ "n_samples": 1000,
7
+ "n_ig_steps": 10,
8
+ "snapshot_step": 143000,
9
+ "checkpoint": "/home/mh2274/rds/hpc-work/wu_crosscoder/run3_ge_exact_results/wu_cc_ge_exact_seed0.pt",
10
+ "wallclock_s": 191.5964698791504
11
+ }
pythia-160m/W_E/cross-snapshot-32/d24576/seed0.config.json ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_E crosscoder, 32 snapshots, d_sae=24576, seed 0",
3
+ "config": {
4
+ "sae_type": "crosscoder",
5
+ "d_model": 768,
6
+ "expansion_factor": 32.0,
7
+ "use_decoder_bias": true,
8
+ "act_fn": "jumprelu",
9
+ "norm_activation": "inference",
10
+ "sparsity_include_decoder_norm": true,
11
+ "top_k": 50,
12
+ "use_triton_kernel": false,
13
+ "sparsity_threshold_for_triton_spmm_kernel": 0.996,
14
+ "jumprelu_threshold_window": 4.0,
15
+ "hook_points": [
16
+ "wu_step_0",
17
+ "wu_step_1",
18
+ "wu_step_2",
19
+ "wu_step_3",
20
+ "wu_step_4",
21
+ "wu_step_5",
22
+ "wu_step_6",
23
+ "wu_step_7",
24
+ "wu_step_8",
25
+ "wu_step_9",
26
+ "wu_step_10",
27
+ "wu_step_11",
28
+ "wu_step_12",
29
+ "wu_step_13",
30
+ "wu_step_14",
31
+ "wu_step_15",
32
+ "wu_step_16",
33
+ "wu_step_17",
34
+ "wu_step_18",
35
+ "wu_step_19",
36
+ "wu_step_20",
37
+ "wu_step_21",
38
+ "wu_step_22",
39
+ "wu_step_23",
40
+ "wu_step_24",
41
+ "wu_step_25",
42
+ "wu_step_26",
43
+ "wu_step_27",
44
+ "wu_step_28",
45
+ "wu_step_29",
46
+ "wu_step_30",
47
+ "wu_step_31"
48
+ ]
49
+ },
50
+ "training": {
51
+ "lr": 5e-05,
52
+ "l1_coefficient": 0.3,
53
+ "frequency_scale": 0.01,
54
+ "tanh_stretch_coefficient": 4.0,
55
+ "jumprelu_lr_factor": 0.1,
56
+ "init_threshold": 0.1,
57
+ "decoder_transpose_init": 1.0,
58
+ "amp_dtype": "fp32",
59
+ "optimizer": "adam",
60
+ "n_epochs": 300,
61
+ "batch_size": 1024,
62
+ "expansion_factor": 32.0,
63
+ "d_sae": 24576,
64
+ "input_preprocess": "center_scale",
65
+ "l1_warmup_fraction": 0.05,
66
+ "lr_warmup_fraction": 0.0,
67
+ "lr_decay_fraction": 0.0,
68
+ "auxk_coefficient": 0.0,
69
+ "auxk_k": 512,
70
+ "dead_window_steps": 100
71
+ },
72
+ "quality": {
73
+ "explained_variance": 0.8305442370487662,
74
+ "reconstruction_mse": 0.1690640303492546,
75
+ "mean_l0": 117.50901977539063,
76
+ "dead_rate": 0.0,
77
+ "d_sae": 24576,
78
+ "n_snapshots": 32,
79
+ "n_rows": 50304
80
+ },
81
+ "steps": [
82
+ 0,
83
+ 1,
84
+ 2,
85
+ 4,
86
+ 8,
87
+ 16,
88
+ 32,
89
+ 64,
90
+ 128,
91
+ 256,
92
+ 512,
93
+ 1000,
94
+ 2000,
95
+ 3000,
96
+ 4000,
97
+ 5000,
98
+ 6000,
99
+ 7000,
100
+ 8000,
101
+ 9000,
102
+ 14000,
103
+ 21000,
104
+ 27000,
105
+ 34000,
106
+ 47000,
107
+ 61000,
108
+ 75000,
109
+ 89000,
110
+ 102000,
111
+ 116000,
112
+ 130000,
113
+ 143000
114
+ ],
115
+ "model_name": "EleutherAI/pythia-160m",
116
+ "seed": 0,
117
+ "kind": "cross-snapshot",
118
+ "preprocess_mode": "center_scale"
119
+ }
pythia-160m/W_E/cross-snapshot-32/d24576/seed0.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_E crosscoder, 32 snapshots, d_sae=24576, seed 0
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 14000, 21000, 27000, 34000, 47000, 61000, 75000, 89000, 102000, 116000, 130000, 143000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.8305442370487662
10
+ - Mean L0: 117.50901977539063
11
+ - Dead-feature rate: 0.0
12
+ - d_sae: 24576
13
+ - n_snapshots: 32
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: jumprelu
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 4.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: 0.1
23
+ - Optimizer: adam
24
+ - Epochs: 300
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 0
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed0.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed0.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_E/cross-snapshot-32/d24576/seed0.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cfe74424d03c865e4595f94a9aff6316d579a52b963255807577233d5b5387f2
3
+ size 4835180992
pythia-160m/W_E/cross-snapshot-32/d8192/seed0.config.json ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_E crosscoder, 32 snapshots, d_sae=8192, seed 0",
3
+ "config": {
4
+ "sae_type": "crosscoder",
5
+ "d_model": 768,
6
+ "expansion_factor": 10.667,
7
+ "use_decoder_bias": true,
8
+ "act_fn": "jumprelu",
9
+ "norm_activation": "inference",
10
+ "sparsity_include_decoder_norm": true,
11
+ "top_k": 50,
12
+ "use_triton_kernel": false,
13
+ "sparsity_threshold_for_triton_spmm_kernel": 0.996,
14
+ "jumprelu_threshold_window": 4.0,
15
+ "hook_points": [
16
+ "wu_step_0",
17
+ "wu_step_1",
18
+ "wu_step_2",
19
+ "wu_step_3",
20
+ "wu_step_4",
21
+ "wu_step_5",
22
+ "wu_step_6",
23
+ "wu_step_7",
24
+ "wu_step_8",
25
+ "wu_step_9",
26
+ "wu_step_10",
27
+ "wu_step_11",
28
+ "wu_step_12",
29
+ "wu_step_13",
30
+ "wu_step_14",
31
+ "wu_step_15",
32
+ "wu_step_16",
33
+ "wu_step_17",
34
+ "wu_step_18",
35
+ "wu_step_19",
36
+ "wu_step_20",
37
+ "wu_step_21",
38
+ "wu_step_22",
39
+ "wu_step_23",
40
+ "wu_step_24",
41
+ "wu_step_25",
42
+ "wu_step_26",
43
+ "wu_step_27",
44
+ "wu_step_28",
45
+ "wu_step_29",
46
+ "wu_step_30",
47
+ "wu_step_31"
48
+ ]
49
+ },
50
+ "training": {
51
+ "lr": 5e-05,
52
+ "l1_coefficient": 0.3,
53
+ "frequency_scale": 0.01,
54
+ "tanh_stretch_coefficient": 4.0,
55
+ "jumprelu_lr_factor": 0.1,
56
+ "n_epochs": 300,
57
+ "batch_size": 1024,
58
+ "expansion_factor": 10.667,
59
+ "input_preprocess": "center_scale",
60
+ "l1_warmup_fraction": 0.05,
61
+ "lr_warmup_fraction": 0.0,
62
+ "lr_decay_fraction": 0.0,
63
+ "auxk_coefficient": 0.0,
64
+ "auxk_k": 512,
65
+ "dead_window_steps": 100
66
+ },
67
+ "quality": {
68
+ "explained_variance": 0.5807971126242004,
69
+ "reconstruction_mse": 0.4182338178157806,
70
+ "mean_l0": 82.08435302734375,
71
+ "d_sae": 8192,
72
+ "n_snapshots": 32,
73
+ "n_rows": 50304
74
+ },
75
+ "steps": [
76
+ 0,
77
+ 1,
78
+ 2,
79
+ 4,
80
+ 8,
81
+ 16,
82
+ 32,
83
+ 64,
84
+ 128,
85
+ 256,
86
+ 512,
87
+ 1000,
88
+ 2000,
89
+ 3000,
90
+ 4000,
91
+ 5000,
92
+ 6000,
93
+ 7000,
94
+ 8000,
95
+ 9000,
96
+ 14000,
97
+ 21000,
98
+ 27000,
99
+ 34000,
100
+ 47000,
101
+ 61000,
102
+ 75000,
103
+ 89000,
104
+ 102000,
105
+ 116000,
106
+ 130000,
107
+ 143000
108
+ ],
109
+ "model_name": "EleutherAI/pythia-160m",
110
+ "seed": 0,
111
+ "kind": "cross-snapshot",
112
+ "preprocess_mode": "center_scale"
113
+ }
pythia-160m/W_E/cross-snapshot-32/d8192/seed0.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_E crosscoder, 32 snapshots, d_sae=8192, seed 0
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 14000, 21000, 27000, 34000, 47000, 61000, 75000, 89000, 102000, 116000, 130000, 143000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.5807971126242004
10
+ - Mean L0: 82.08435302734375
11
+ - Dead-feature rate: —
12
+ - d_sae: 8192
13
+ - n_snapshots: 32
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: jumprelu
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 4.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: —
23
+ - Optimizer: adam
24
+ - Epochs: 300
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 0
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed0.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed0.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_E/cross-snapshot-32/d8192/seed0.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:75ba91f6abdbd6b888ad7fc8ba34a30a363a123846bc136bbe29bb19386374bb
3
+ size 1611792824
pythia-160m/W_E/cross-snapshot-32/d8192/seed1.config.json ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_E crosscoder, 32 snapshots, d_sae=8192, seed 1",
3
+ "config": {
4
+ "sae_type": "crosscoder",
5
+ "d_model": 768,
6
+ "expansion_factor": 10.667,
7
+ "use_decoder_bias": true,
8
+ "act_fn": "jumprelu",
9
+ "norm_activation": "inference",
10
+ "sparsity_include_decoder_norm": true,
11
+ "top_k": 50,
12
+ "use_triton_kernel": false,
13
+ "sparsity_threshold_for_triton_spmm_kernel": 0.996,
14
+ "jumprelu_threshold_window": 4.0,
15
+ "hook_points": [
16
+ "wu_step_0",
17
+ "wu_step_1",
18
+ "wu_step_2",
19
+ "wu_step_3",
20
+ "wu_step_4",
21
+ "wu_step_5",
22
+ "wu_step_6",
23
+ "wu_step_7",
24
+ "wu_step_8",
25
+ "wu_step_9",
26
+ "wu_step_10",
27
+ "wu_step_11",
28
+ "wu_step_12",
29
+ "wu_step_13",
30
+ "wu_step_14",
31
+ "wu_step_15",
32
+ "wu_step_16",
33
+ "wu_step_17",
34
+ "wu_step_18",
35
+ "wu_step_19",
36
+ "wu_step_20",
37
+ "wu_step_21",
38
+ "wu_step_22",
39
+ "wu_step_23",
40
+ "wu_step_24",
41
+ "wu_step_25",
42
+ "wu_step_26",
43
+ "wu_step_27",
44
+ "wu_step_28",
45
+ "wu_step_29",
46
+ "wu_step_30",
47
+ "wu_step_31"
48
+ ]
49
+ },
50
+ "training": {
51
+ "lr": 5e-05,
52
+ "l1_coefficient": 0.3,
53
+ "frequency_scale": 0.01,
54
+ "tanh_stretch_coefficient": 4.0,
55
+ "jumprelu_lr_factor": 0.1,
56
+ "init_threshold": 0.1,
57
+ "decoder_transpose_init": 1.0,
58
+ "amp_dtype": "fp32",
59
+ "optimizer": "adam",
60
+ "n_epochs": 300,
61
+ "batch_size": 1024,
62
+ "expansion_factor": 10.667,
63
+ "d_sae": 8192,
64
+ "input_preprocess": "center_scale",
65
+ "l1_warmup_fraction": 0.05,
66
+ "lr_warmup_fraction": 0.0,
67
+ "lr_decay_fraction": 0.0,
68
+ "auxk_coefficient": 0.0,
69
+ "auxk_k": 512,
70
+ "dead_window_steps": 100
71
+ },
72
+ "quality": {
73
+ "explained_variance": 0.580104140268709,
74
+ "reconstruction_mse": 0.41892518222332,
75
+ "mean_l0": 82.01199279785156,
76
+ "dead_rate": 0.0,
77
+ "d_sae": 8192,
78
+ "n_snapshots": 32,
79
+ "n_rows": 50304
80
+ },
81
+ "steps": [
82
+ 0,
83
+ 1,
84
+ 2,
85
+ 4,
86
+ 8,
87
+ 16,
88
+ 32,
89
+ 64,
90
+ 128,
91
+ 256,
92
+ 512,
93
+ 1000,
94
+ 2000,
95
+ 3000,
96
+ 4000,
97
+ 5000,
98
+ 6000,
99
+ 7000,
100
+ 8000,
101
+ 9000,
102
+ 14000,
103
+ 21000,
104
+ 27000,
105
+ 34000,
106
+ 47000,
107
+ 61000,
108
+ 75000,
109
+ 89000,
110
+ 102000,
111
+ 116000,
112
+ 130000,
113
+ 143000
114
+ ],
115
+ "model_name": "EleutherAI/pythia-160m",
116
+ "seed": 1,
117
+ "kind": "cross-snapshot",
118
+ "preprocess_mode": "center_scale"
119
+ }
pythia-160m/W_E/cross-snapshot-32/d8192/seed1.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_E crosscoder, 32 snapshots, d_sae=8192, seed 1
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 14000, 21000, 27000, 34000, 47000, 61000, 75000, 89000, 102000, 116000, 130000, 143000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.580104140268709
10
+ - Mean L0: 82.01199279785156
11
+ - Dead-feature rate: 0.0
12
+ - d_sae: 8192
13
+ - n_snapshots: 32
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: jumprelu
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 4.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: 0.1
23
+ - Optimizer: adam
24
+ - Epochs: 300
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 1
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed1.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed1.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_E/cross-snapshot-32/d8192/seed1.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:777f45bcec5b17bf9c7d080c79db5741cfdfb358743d307cc0ae69ce8c2fbb96
3
+ size 1611792824
pythia-160m/W_E/cross-snapshot-32/d8192/seed2.config.json ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_E crosscoder, 32 snapshots, d_sae=8192, seed 2",
3
+ "config": {
4
+ "sae_type": "crosscoder",
5
+ "d_model": 768,
6
+ "expansion_factor": 10.667,
7
+ "use_decoder_bias": true,
8
+ "act_fn": "jumprelu",
9
+ "norm_activation": "inference",
10
+ "sparsity_include_decoder_norm": true,
11
+ "top_k": 50,
12
+ "use_triton_kernel": false,
13
+ "sparsity_threshold_for_triton_spmm_kernel": 0.996,
14
+ "jumprelu_threshold_window": 4.0,
15
+ "hook_points": [
16
+ "wu_step_0",
17
+ "wu_step_1",
18
+ "wu_step_2",
19
+ "wu_step_3",
20
+ "wu_step_4",
21
+ "wu_step_5",
22
+ "wu_step_6",
23
+ "wu_step_7",
24
+ "wu_step_8",
25
+ "wu_step_9",
26
+ "wu_step_10",
27
+ "wu_step_11",
28
+ "wu_step_12",
29
+ "wu_step_13",
30
+ "wu_step_14",
31
+ "wu_step_15",
32
+ "wu_step_16",
33
+ "wu_step_17",
34
+ "wu_step_18",
35
+ "wu_step_19",
36
+ "wu_step_20",
37
+ "wu_step_21",
38
+ "wu_step_22",
39
+ "wu_step_23",
40
+ "wu_step_24",
41
+ "wu_step_25",
42
+ "wu_step_26",
43
+ "wu_step_27",
44
+ "wu_step_28",
45
+ "wu_step_29",
46
+ "wu_step_30",
47
+ "wu_step_31"
48
+ ]
49
+ },
50
+ "training": {
51
+ "lr": 5e-05,
52
+ "l1_coefficient": 0.3,
53
+ "frequency_scale": 0.01,
54
+ "tanh_stretch_coefficient": 4.0,
55
+ "jumprelu_lr_factor": 0.1,
56
+ "init_threshold": 0.1,
57
+ "decoder_transpose_init": 1.0,
58
+ "amp_dtype": "fp32",
59
+ "optimizer": "adam",
60
+ "n_epochs": 300,
61
+ "batch_size": 1024,
62
+ "expansion_factor": 10.667,
63
+ "d_sae": 8192,
64
+ "input_preprocess": "center_scale",
65
+ "l1_warmup_fraction": 0.05,
66
+ "lr_warmup_fraction": 0.0,
67
+ "lr_decay_fraction": 0.0,
68
+ "auxk_coefficient": 0.0,
69
+ "auxk_k": 512,
70
+ "dead_window_steps": 100
71
+ },
72
+ "quality": {
73
+ "explained_variance": 0.5815380601296635,
74
+ "reconstruction_mse": 0.41749457716941835,
75
+ "mean_l0": 82.31076721191407,
76
+ "dead_rate": 0.0,
77
+ "d_sae": 8192,
78
+ "n_snapshots": 32,
79
+ "n_rows": 50304
80
+ },
81
+ "steps": [
82
+ 0,
83
+ 1,
84
+ 2,
85
+ 4,
86
+ 8,
87
+ 16,
88
+ 32,
89
+ 64,
90
+ 128,
91
+ 256,
92
+ 512,
93
+ 1000,
94
+ 2000,
95
+ 3000,
96
+ 4000,
97
+ 5000,
98
+ 6000,
99
+ 7000,
100
+ 8000,
101
+ 9000,
102
+ 14000,
103
+ 21000,
104
+ 27000,
105
+ 34000,
106
+ 47000,
107
+ 61000,
108
+ 75000,
109
+ 89000,
110
+ 102000,
111
+ 116000,
112
+ 130000,
113
+ 143000
114
+ ],
115
+ "model_name": "EleutherAI/pythia-160m",
116
+ "seed": 2,
117
+ "kind": "cross-snapshot",
118
+ "preprocess_mode": "center_scale"
119
+ }
pythia-160m/W_E/cross-snapshot-32/d8192/seed2.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_E crosscoder, 32 snapshots, d_sae=8192, seed 2
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 14000, 21000, 27000, 34000, 47000, 61000, 75000, 89000, 102000, 116000, 130000, 143000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.5815380601296635
10
+ - Mean L0: 82.31076721191407
11
+ - Dead-feature rate: 0.0
12
+ - d_sae: 8192
13
+ - n_snapshots: 32
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: jumprelu
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 4.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: 0.1
23
+ - Optimizer: adam
24
+ - Epochs: 300
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 2
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed2.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed2.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_E/cross-snapshot-32/d8192/seed2.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:33cee54d608967373984411fffdff2da1bf39aca2a46e14ba75620a82b65e053
3
+ size 1611792824
pythia-160m/W_E/cross-snapshot-32/d8192/seed3.config.json ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_E crosscoder, 32 snapshots, d_sae=8192, seed 3",
3
+ "config": {
4
+ "sae_type": "crosscoder",
5
+ "d_model": 768,
6
+ "expansion_factor": 10.667,
7
+ "use_decoder_bias": true,
8
+ "act_fn": "jumprelu",
9
+ "norm_activation": "inference",
10
+ "sparsity_include_decoder_norm": true,
11
+ "top_k": 50,
12
+ "use_triton_kernel": false,
13
+ "sparsity_threshold_for_triton_spmm_kernel": 0.996,
14
+ "jumprelu_threshold_window": 4.0,
15
+ "hook_points": [
16
+ "wu_step_0",
17
+ "wu_step_1",
18
+ "wu_step_2",
19
+ "wu_step_3",
20
+ "wu_step_4",
21
+ "wu_step_5",
22
+ "wu_step_6",
23
+ "wu_step_7",
24
+ "wu_step_8",
25
+ "wu_step_9",
26
+ "wu_step_10",
27
+ "wu_step_11",
28
+ "wu_step_12",
29
+ "wu_step_13",
30
+ "wu_step_14",
31
+ "wu_step_15",
32
+ "wu_step_16",
33
+ "wu_step_17",
34
+ "wu_step_18",
35
+ "wu_step_19",
36
+ "wu_step_20",
37
+ "wu_step_21",
38
+ "wu_step_22",
39
+ "wu_step_23",
40
+ "wu_step_24",
41
+ "wu_step_25",
42
+ "wu_step_26",
43
+ "wu_step_27",
44
+ "wu_step_28",
45
+ "wu_step_29",
46
+ "wu_step_30",
47
+ "wu_step_31"
48
+ ]
49
+ },
50
+ "training": {
51
+ "lr": 5e-05,
52
+ "l1_coefficient": 0.3,
53
+ "frequency_scale": 0.01,
54
+ "tanh_stretch_coefficient": 4.0,
55
+ "jumprelu_lr_factor": 0.1,
56
+ "init_threshold": 0.1,
57
+ "decoder_transpose_init": 1.0,
58
+ "amp_dtype": "fp32",
59
+ "optimizer": "adam",
60
+ "n_epochs": 300,
61
+ "batch_size": 1024,
62
+ "expansion_factor": 10.667,
63
+ "d_sae": 8192,
64
+ "input_preprocess": "center_scale",
65
+ "l1_warmup_fraction": 0.05,
66
+ "lr_warmup_fraction": 0.0,
67
+ "lr_decay_fraction": 0.0,
68
+ "auxk_coefficient": 0.0,
69
+ "auxk_k": 512,
70
+ "dead_window_steps": 100
71
+ },
72
+ "quality": {
73
+ "explained_variance": 0.5805984141666259,
74
+ "reconstruction_mse": 0.41843205094337466,
75
+ "mean_l0": 82.13521545410157,
76
+ "dead_rate": 0.0,
77
+ "d_sae": 8192,
78
+ "n_snapshots": 32,
79
+ "n_rows": 50304
80
+ },
81
+ "steps": [
82
+ 0,
83
+ 1,
84
+ 2,
85
+ 4,
86
+ 8,
87
+ 16,
88
+ 32,
89
+ 64,
90
+ 128,
91
+ 256,
92
+ 512,
93
+ 1000,
94
+ 2000,
95
+ 3000,
96
+ 4000,
97
+ 5000,
98
+ 6000,
99
+ 7000,
100
+ 8000,
101
+ 9000,
102
+ 14000,
103
+ 21000,
104
+ 27000,
105
+ 34000,
106
+ 47000,
107
+ 61000,
108
+ 75000,
109
+ 89000,
110
+ 102000,
111
+ 116000,
112
+ 130000,
113
+ 143000
114
+ ],
115
+ "model_name": "EleutherAI/pythia-160m",
116
+ "seed": 3,
117
+ "kind": "cross-snapshot",
118
+ "preprocess_mode": "center_scale"
119
+ }
pythia-160m/W_E/cross-snapshot-32/d8192/seed3.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_E crosscoder, 32 snapshots, d_sae=8192, seed 3
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 14000, 21000, 27000, 34000, 47000, 61000, 75000, 89000, 102000, 116000, 130000, 143000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.5805984141666259
10
+ - Mean L0: 82.13521545410157
11
+ - Dead-feature rate: 0.0
12
+ - d_sae: 8192
13
+ - n_snapshots: 32
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: jumprelu
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 4.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: 0.1
23
+ - Optimizer: adam
24
+ - Epochs: 300
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 3
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed3.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed3.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_E/cross-snapshot-32/d8192/seed3.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f54af8a2712eafc61e6c7ba219e88f36ccd21b03abaec4661b7e139753acf0bc
3
+ size 1611792824
pythia-160m/W_E/cross-snapshot-32/d8192/seed4.config.json ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_E crosscoder, 32 snapshots, d_sae=8192, seed 4",
3
+ "config": {
4
+ "sae_type": "crosscoder",
5
+ "d_model": 768,
6
+ "expansion_factor": 10.667,
7
+ "use_decoder_bias": true,
8
+ "act_fn": "jumprelu",
9
+ "norm_activation": "inference",
10
+ "sparsity_include_decoder_norm": true,
11
+ "top_k": 50,
12
+ "use_triton_kernel": false,
13
+ "sparsity_threshold_for_triton_spmm_kernel": 0.996,
14
+ "jumprelu_threshold_window": 4.0,
15
+ "hook_points": [
16
+ "wu_step_0",
17
+ "wu_step_1",
18
+ "wu_step_2",
19
+ "wu_step_3",
20
+ "wu_step_4",
21
+ "wu_step_5",
22
+ "wu_step_6",
23
+ "wu_step_7",
24
+ "wu_step_8",
25
+ "wu_step_9",
26
+ "wu_step_10",
27
+ "wu_step_11",
28
+ "wu_step_12",
29
+ "wu_step_13",
30
+ "wu_step_14",
31
+ "wu_step_15",
32
+ "wu_step_16",
33
+ "wu_step_17",
34
+ "wu_step_18",
35
+ "wu_step_19",
36
+ "wu_step_20",
37
+ "wu_step_21",
38
+ "wu_step_22",
39
+ "wu_step_23",
40
+ "wu_step_24",
41
+ "wu_step_25",
42
+ "wu_step_26",
43
+ "wu_step_27",
44
+ "wu_step_28",
45
+ "wu_step_29",
46
+ "wu_step_30",
47
+ "wu_step_31"
48
+ ]
49
+ },
50
+ "training": {
51
+ "lr": 5e-05,
52
+ "l1_coefficient": 0.3,
53
+ "frequency_scale": 0.01,
54
+ "tanh_stretch_coefficient": 4.0,
55
+ "jumprelu_lr_factor": 0.1,
56
+ "init_threshold": 0.1,
57
+ "decoder_transpose_init": 1.0,
58
+ "amp_dtype": "fp32",
59
+ "optimizer": "adam",
60
+ "n_epochs": 300,
61
+ "batch_size": 1024,
62
+ "expansion_factor": 10.667,
63
+ "d_sae": 8192,
64
+ "input_preprocess": "center_scale",
65
+ "l1_warmup_fraction": 0.05,
66
+ "lr_warmup_fraction": 0.0,
67
+ "lr_decay_fraction": 0.0,
68
+ "auxk_coefficient": 0.0,
69
+ "auxk_k": 512,
70
+ "dead_window_steps": 100
71
+ },
72
+ "quality": {
73
+ "explained_variance": 0.5825219599393371,
74
+ "reconstruction_mse": 0.4165129518508911,
75
+ "mean_l0": 82.5084307861328,
76
+ "dead_rate": 0.0,
77
+ "d_sae": 8192,
78
+ "n_snapshots": 32,
79
+ "n_rows": 50304
80
+ },
81
+ "steps": [
82
+ 0,
83
+ 1,
84
+ 2,
85
+ 4,
86
+ 8,
87
+ 16,
88
+ 32,
89
+ 64,
90
+ 128,
91
+ 256,
92
+ 512,
93
+ 1000,
94
+ 2000,
95
+ 3000,
96
+ 4000,
97
+ 5000,
98
+ 6000,
99
+ 7000,
100
+ 8000,
101
+ 9000,
102
+ 14000,
103
+ 21000,
104
+ 27000,
105
+ 34000,
106
+ 47000,
107
+ 61000,
108
+ 75000,
109
+ 89000,
110
+ 102000,
111
+ 116000,
112
+ 130000,
113
+ 143000
114
+ ],
115
+ "model_name": "EleutherAI/pythia-160m",
116
+ "seed": 4,
117
+ "kind": "cross-snapshot",
118
+ "preprocess_mode": "center_scale"
119
+ }
pythia-160m/W_E/cross-snapshot-32/d8192/seed4.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_E crosscoder, 32 snapshots, d_sae=8192, seed 4
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 14000, 21000, 27000, 34000, 47000, 61000, 75000, 89000, 102000, 116000, 130000, 143000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.5825219599393371
10
+ - Mean L0: 82.5084307861328
11
+ - Dead-feature rate: 0.0
12
+ - d_sae: 8192
13
+ - n_snapshots: 32
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: jumprelu
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 4.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: 0.1
23
+ - Optimizer: adam
24
+ - Epochs: 300
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 4
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed4.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed4.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_E/cross-snapshot-32/d8192/seed4.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:712affee5958492d3f114b48e3f718a8b366513fab63b4d48a9b8f4c0dcf753b
3
+ size 1611792824
pythia-160m/W_U/architecture-comparison/d8192/batchtopk/seed0.config.json ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_U crosscoder (batchtopk activation), 32 snapshots, d_sae=8192, seed 0",
3
+ "config": {
4
+ "arch": "batchtopk",
5
+ "d_sae": 8192,
6
+ "n_snapshots": 32,
7
+ "d_model": 768,
8
+ "batchtopk_k": 203
9
+ },
10
+ "training": {
11
+ "lr": 5e-05,
12
+ "l1_coefficient": 0.3,
13
+ "gated_l1_coefficient": 0.3,
14
+ "init_threshold": 0.1,
15
+ "bandwidth": 4.0,
16
+ "frequency_scale": 0.01,
17
+ "tanh_stretch": 1.0,
18
+ "jumprelu_lr_factor": 0.1,
19
+ "n_epochs": 100,
20
+ "batch_size": 1024,
21
+ "input_preprocess": "center_scale",
22
+ "l1_warmup_fraction": 0.1,
23
+ "lr_warmup_fraction": 0.0,
24
+ "lr_decay_fraction": 0.0,
25
+ "git_hash": "unknown",
26
+ "amp_dtype": "fp32"
27
+ },
28
+ "quality": {
29
+ "explained_variance": 0.7249162974116965,
30
+ "reconstruction_mse": 0.2749960619211197,
31
+ "mean_l0": 203.0,
32
+ "d_sae": 8192,
33
+ "n_snapshots": 32,
34
+ "n_rows": 50304
35
+ },
36
+ "steps": [
37
+ 0,
38
+ 1,
39
+ 2,
40
+ 4,
41
+ 8,
42
+ 16,
43
+ 32,
44
+ 64,
45
+ 128,
46
+ 256,
47
+ 512,
48
+ 1000,
49
+ 2000,
50
+ 3000,
51
+ 4000,
52
+ 5000,
53
+ 6000,
54
+ 7000,
55
+ 8000,
56
+ 9000,
57
+ 14000,
58
+ 21000,
59
+ 27000,
60
+ 34000,
61
+ 47000,
62
+ 61000,
63
+ 75000,
64
+ 89000,
65
+ 102000,
66
+ 116000,
67
+ 130000,
68
+ 143000
69
+ ],
70
+ "model_name": "EleutherAI/pythia-160m",
71
+ "seed": 0,
72
+ "kind": "cross-snapshot",
73
+ "preprocess_mode": "center_scale"
74
+ }
pythia-160m/W_U/architecture-comparison/d8192/batchtopk/seed0.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_U crosscoder (batchtopk activation), 32 snapshots, d_sae=8192, seed 0
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 14000, 21000, 27000, 34000, 47000, 61000, 75000, 89000, 102000, 116000, 130000, 143000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.7249162974116965
10
+ - Mean L0: 203.0
11
+ - Dead-feature rate: —
12
+ - d_sae: 8192
13
+ - n_snapshots: 32
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: JumpReLU
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 1.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: 0.1
23
+ - Optimizer: adam
24
+ - Epochs: 100
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 0
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed0.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed0.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_U/architecture-comparison/d8192/batchtopk/seed0.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d9e434afc4191e631e88fc31a1ff33068b24a26c6650066b8ec67e463ec0c790
3
+ size 1611759944
pythia-160m/W_U/architecture-comparison/d8192/gated-retuned/seed0.config.json ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_U crosscoder (Gated activation, L1=0.05), 32 snapshots, d_sae=8192, seed 0",
3
+ "config": {
4
+ "arch": "gated",
5
+ "d_sae": 8192,
6
+ "n_snapshots": 32,
7
+ "d_model": 768,
8
+ "batchtopk_k": null
9
+ },
10
+ "training": {
11
+ "lr": 5e-05,
12
+ "l1_coefficient": 0.3,
13
+ "gated_l1_coefficient": 0.05,
14
+ "init_threshold": 0.1,
15
+ "bandwidth": 4.0,
16
+ "frequency_scale": 0.01,
17
+ "tanh_stretch": 1.0,
18
+ "jumprelu_lr_factor": 0.1,
19
+ "n_epochs": 100,
20
+ "batch_size": 1024,
21
+ "input_preprocess": "center_scale",
22
+ "l1_warmup_fraction": 0.1,
23
+ "lr_warmup_fraction": 0.0,
24
+ "lr_decay_fraction": 0.0,
25
+ "git_hash": "unknown",
26
+ "amp_dtype": "fp32"
27
+ },
28
+ "quality": {
29
+ "explained_variance": 0.827462127951851,
30
+ "reconstruction_mse": 0.17248290210962294,
31
+ "mean_l0": 653.64568359375,
32
+ "d_sae": 8192,
33
+ "n_snapshots": 32,
34
+ "n_rows": 50304
35
+ },
36
+ "steps": [
37
+ 0,
38
+ 1,
39
+ 2,
40
+ 4,
41
+ 8,
42
+ 16,
43
+ 32,
44
+ 64,
45
+ 128,
46
+ 256,
47
+ 512,
48
+ 1000,
49
+ 2000,
50
+ 3000,
51
+ 4000,
52
+ 5000,
53
+ 6000,
54
+ 7000,
55
+ 8000,
56
+ 9000,
57
+ 14000,
58
+ 21000,
59
+ 27000,
60
+ 34000,
61
+ 47000,
62
+ 61000,
63
+ 75000,
64
+ 89000,
65
+ 102000,
66
+ 116000,
67
+ 130000,
68
+ 143000
69
+ ],
70
+ "model_name": "EleutherAI/pythia-160m",
71
+ "seed": 0,
72
+ "kind": "cross-snapshot",
73
+ "preprocess_mode": "center_scale"
74
+ }
pythia-160m/W_U/architecture-comparison/d8192/gated-retuned/seed0.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_U crosscoder (Gated activation, L1=0.05), 32 snapshots, d_sae=8192, seed 0
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 14000, 21000, 27000, 34000, 47000, 61000, 75000, 89000, 102000, 116000, 130000, 143000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.827462127951851
10
+ - Mean L0: 653.64568359375
11
+ - Dead-feature rate: —
12
+ - d_sae: 8192
13
+ - n_snapshots: 32
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: JumpReLU
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 1.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: 0.1
23
+ - Optimizer: adam
24
+ - Epochs: 100
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 0
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed0.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed0.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_U/architecture-comparison/d8192/gated-retuned/seed0.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:197aaa8bcccd820a827454ad03ae72d0f3306b840719a7251d96e6bf8f4c4120
3
+ size 1611858536
pythia-160m/W_U/architecture-comparison/d8192/gated/seed0.config.json ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_U crosscoder (gated activation), 32 snapshots, d_sae=8192, seed 0",
3
+ "config": {
4
+ "arch": "gated",
5
+ "d_sae": 8192,
6
+ "n_snapshots": 32,
7
+ "d_model": 768,
8
+ "batchtopk_k": null
9
+ },
10
+ "training": {
11
+ "lr": 5e-05,
12
+ "l1_coefficient": 0.3,
13
+ "gated_l1_coefficient": 0.3,
14
+ "init_threshold": 0.1,
15
+ "bandwidth": 4.0,
16
+ "frequency_scale": 0.01,
17
+ "tanh_stretch": 1.0,
18
+ "jumprelu_lr_factor": 0.1,
19
+ "n_epochs": 100,
20
+ "batch_size": 1024,
21
+ "input_preprocess": "center_scale",
22
+ "l1_warmup_fraction": 0.1,
23
+ "lr_warmup_fraction": 0.0,
24
+ "lr_decay_fraction": 0.0,
25
+ "git_hash": "unknown",
26
+ "amp_dtype": "fp32"
27
+ },
28
+ "quality": {
29
+ "explained_variance": 0.21442979106557436,
30
+ "reconstruction_mse": 0.7853199291229248,
31
+ "mean_l0": 11.51853515625,
32
+ "d_sae": 8192,
33
+ "n_snapshots": 32,
34
+ "n_rows": 50304
35
+ },
36
+ "steps": [
37
+ 0,
38
+ 1,
39
+ 2,
40
+ 4,
41
+ 8,
42
+ 16,
43
+ 32,
44
+ 64,
45
+ 128,
46
+ 256,
47
+ 512,
48
+ 1000,
49
+ 2000,
50
+ 3000,
51
+ 4000,
52
+ 5000,
53
+ 6000,
54
+ 7000,
55
+ 8000,
56
+ 9000,
57
+ 14000,
58
+ 21000,
59
+ 27000,
60
+ 34000,
61
+ 47000,
62
+ 61000,
63
+ 75000,
64
+ 89000,
65
+ 102000,
66
+ 116000,
67
+ 130000,
68
+ 143000
69
+ ],
70
+ "model_name": "EleutherAI/pythia-160m",
71
+ "seed": 0,
72
+ "kind": "cross-snapshot",
73
+ "preprocess_mode": "center_scale"
74
+ }
pythia-160m/W_U/architecture-comparison/d8192/gated/seed0.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_U crosscoder (gated activation), 32 snapshots, d_sae=8192, seed 0
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 14000, 21000, 27000, 34000, 47000, 61000, 75000, 89000, 102000, 116000, 130000, 143000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.21442979106557436
10
+ - Mean L0: 11.51853515625
11
+ - Dead-feature rate: —
12
+ - d_sae: 8192
13
+ - n_snapshots: 32
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: JumpReLU
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 1.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: 0.1
23
+ - Optimizer: adam
24
+ - Epochs: 100
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 0
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed0.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed0.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_U/architecture-comparison/d8192/gated/seed0.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:10b27d935481b43900bab227acea5be346d403e163d2976abb3dc0676adde955
3
+ size 1611858536
pythia-160m/W_U/cross-snapshot-16/d8192/seed0.config.json ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_U crosscoder, 16-snapshot downsample, d_sae=8192, seed 0",
3
+ "config": {
4
+ "sae_type": "crosscoder",
5
+ "d_model": 768,
6
+ "expansion_factor": 10.6667,
7
+ "use_decoder_bias": true,
8
+ "act_fn": "jumprelu",
9
+ "norm_activation": "inference",
10
+ "sparsity_include_decoder_norm": true,
11
+ "top_k": 50,
12
+ "use_triton_kernel": false,
13
+ "sparsity_threshold_for_triton_spmm_kernel": 0.996,
14
+ "jumprelu_threshold_window": 4.0,
15
+ "hook_points": [
16
+ "wu_step_0",
17
+ "wu_step_1",
18
+ "wu_step_2",
19
+ "wu_step_3",
20
+ "wu_step_4",
21
+ "wu_step_5",
22
+ "wu_step_6",
23
+ "wu_step_7",
24
+ "wu_step_8",
25
+ "wu_step_9",
26
+ "wu_step_10",
27
+ "wu_step_11",
28
+ "wu_step_12",
29
+ "wu_step_13",
30
+ "wu_step_14",
31
+ "wu_step_15"
32
+ ]
33
+ },
34
+ "training": {
35
+ "lr": 5e-05,
36
+ "l1_coefficient": 0.3,
37
+ "frequency_scale": 0.01,
38
+ "tanh_stretch_coefficient": 1.0,
39
+ "jumprelu_lr_factor": 0.1,
40
+ "init_threshold": 0.1,
41
+ "decoder_transpose_init": 1.0,
42
+ "amp_dtype": "fp32",
43
+ "optimizer": "adam",
44
+ "n_epochs": 300,
45
+ "batch_size": 1024,
46
+ "expansion_factor": 10.6667,
47
+ "d_sae": 8192,
48
+ "input_preprocess": "center_scale",
49
+ "l1_warmup_fraction": 0.05,
50
+ "lr_warmup_fraction": 0.0,
51
+ "lr_decay_fraction": 0.0,
52
+ "auxk_coefficient": 0.0,
53
+ "auxk_k": 512,
54
+ "dead_window_steps": 100
55
+ },
56
+ "quality": {
57
+ "explained_variance": 0.7734329300485889,
58
+ "reconstruction_mse": 0.22638385832309724,
59
+ "mean_l0": 215.73649780273436,
60
+ "dead_rate": 0.0,
61
+ "d_sae": 8192,
62
+ "n_snapshots": 16,
63
+ "n_rows": 50304
64
+ },
65
+ "steps": [
66
+ 0,
67
+ 2,
68
+ 8,
69
+ 32,
70
+ 128,
71
+ 512,
72
+ 2000,
73
+ 4000,
74
+ 6000,
75
+ 8000,
76
+ 14000,
77
+ 27000,
78
+ 47000,
79
+ 75000,
80
+ 102000,
81
+ 130000
82
+ ],
83
+ "model_name": "EleutherAI/pythia-160m",
84
+ "seed": 0,
85
+ "kind": "cross-snapshot",
86
+ "preprocess_mode": "center_scale"
87
+ }
pythia-160m/W_U/cross-snapshot-16/d8192/seed0.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_U crosscoder, 16-snapshot downsample, d_sae=8192, seed 0
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 2, 8, 32, 128, 512, 2000, 4000, 6000, 8000, 14000, 27000, 47000, 75000, 102000, 130000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.7734329300485889
10
+ - Mean L0: 215.73649780273436
11
+ - Dead-feature rate: 0.0
12
+ - d_sae: 8192
13
+ - n_snapshots: 16
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: jumprelu
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 1.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: 0.1
23
+ - Optimizer: adam
24
+ - Epochs: 300
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 0
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed0.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed0.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_U/cross-snapshot-16/d8192/seed0.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8496ae3b72b23b0a65698e3e424eddc411bd6ac919f1aaa915ae06a147b3803a
3
+ size 805913008
pythia-160m/W_U/cross-snapshot-32/d16384/seed0.config.json ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_U crosscoder, 32 snapshots, d_sae=16384, seed 0",
3
+ "config": {
4
+ "sae_type": "crosscoder",
5
+ "d_model": 768,
6
+ "expansion_factor": 21.334,
7
+ "use_decoder_bias": true,
8
+ "act_fn": "jumprelu",
9
+ "norm_activation": "inference",
10
+ "sparsity_include_decoder_norm": true,
11
+ "top_k": 50,
12
+ "use_triton_kernel": false,
13
+ "sparsity_threshold_for_triton_spmm_kernel": 0.996,
14
+ "jumprelu_threshold_window": 4.0,
15
+ "hook_points": [
16
+ "wu_step_0",
17
+ "wu_step_1",
18
+ "wu_step_2",
19
+ "wu_step_3",
20
+ "wu_step_4",
21
+ "wu_step_5",
22
+ "wu_step_6",
23
+ "wu_step_7",
24
+ "wu_step_8",
25
+ "wu_step_9",
26
+ "wu_step_10",
27
+ "wu_step_11",
28
+ "wu_step_12",
29
+ "wu_step_13",
30
+ "wu_step_14",
31
+ "wu_step_15",
32
+ "wu_step_16",
33
+ "wu_step_17",
34
+ "wu_step_18",
35
+ "wu_step_19",
36
+ "wu_step_20",
37
+ "wu_step_21",
38
+ "wu_step_22",
39
+ "wu_step_23",
40
+ "wu_step_24",
41
+ "wu_step_25",
42
+ "wu_step_26",
43
+ "wu_step_27",
44
+ "wu_step_28",
45
+ "wu_step_29",
46
+ "wu_step_30",
47
+ "wu_step_31"
48
+ ]
49
+ },
50
+ "training": {
51
+ "lr": 5e-05,
52
+ "l1_coefficient": 0.3,
53
+ "frequency_scale": 0.01,
54
+ "tanh_stretch_coefficient": 4.0,
55
+ "jumprelu_lr_factor": 0.1,
56
+ "n_epochs": 300,
57
+ "batch_size": 1024,
58
+ "expansion_factor": 21.334,
59
+ "input_preprocess": "center_scale",
60
+ "l1_warmup_fraction": 0.05,
61
+ "auxk_coefficient": 0.0,
62
+ "auxk_k": 512,
63
+ "dead_window_steps": 100
64
+ },
65
+ "quality": {
66
+ "explained_variance": 0.7802076016978367,
67
+ "reconstruction_mse": 0.21972236931324005,
68
+ "mean_l0": 103.0708544921875,
69
+ "d_sae": 16384,
70
+ "n_snapshots": 32,
71
+ "n_rows": 50304
72
+ },
73
+ "steps": [
74
+ 0,
75
+ 1,
76
+ 2,
77
+ 4,
78
+ 8,
79
+ 16,
80
+ 32,
81
+ 64,
82
+ 128,
83
+ 256,
84
+ 512,
85
+ 1000,
86
+ 2000,
87
+ 3000,
88
+ 4000,
89
+ 5000,
90
+ 6000,
91
+ 7000,
92
+ 8000,
93
+ 9000,
94
+ 14000,
95
+ 21000,
96
+ 27000,
97
+ 34000,
98
+ 47000,
99
+ 61000,
100
+ 75000,
101
+ 89000,
102
+ 102000,
103
+ 116000,
104
+ 130000,
105
+ 143000
106
+ ],
107
+ "model_name": "EleutherAI/pythia-160m",
108
+ "seed": 0,
109
+ "kind": "cross-snapshot",
110
+ "preprocess_mode": "center_scale"
111
+ }
pythia-160m/W_U/cross-snapshot-32/d16384/seed0.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_U crosscoder, 32 snapshots, d_sae=16384, seed 0
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 14000, 21000, 27000, 34000, 47000, 61000, 75000, 89000, 102000, 116000, 130000, 143000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.7802076016978367
10
+ - Mean L0: 103.0708544921875
11
+ - Dead-feature rate: —
12
+ - d_sae: 16384
13
+ - n_snapshots: 32
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: jumprelu
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 4.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: —
23
+ - Optimizer: adam
24
+ - Epochs: 300
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 0
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed0.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed0.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_U/cross-snapshot-32/d16384/seed0.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1a9b590ef230642ca44ea8a562155785aacd314bc757a845fc88cb3e12f72af1
3
+ size 3223486912
pythia-160m/W_U/cross-snapshot-32/d24576/seed0.config.json ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_U crosscoder, 32 snapshots, d_sae=24576, seed 0",
3
+ "config": {
4
+ "sae_type": "crosscoder",
5
+ "d_model": 768,
6
+ "expansion_factor": 32.0,
7
+ "use_decoder_bias": true,
8
+ "act_fn": "jumprelu",
9
+ "norm_activation": "inference",
10
+ "sparsity_include_decoder_norm": true,
11
+ "top_k": 50,
12
+ "use_triton_kernel": false,
13
+ "sparsity_threshold_for_triton_spmm_kernel": 0.996,
14
+ "jumprelu_threshold_window": 4.0,
15
+ "hook_points": [
16
+ "wu_step_0",
17
+ "wu_step_1",
18
+ "wu_step_2",
19
+ "wu_step_3",
20
+ "wu_step_4",
21
+ "wu_step_5",
22
+ "wu_step_6",
23
+ "wu_step_7",
24
+ "wu_step_8",
25
+ "wu_step_9",
26
+ "wu_step_10",
27
+ "wu_step_11",
28
+ "wu_step_12",
29
+ "wu_step_13",
30
+ "wu_step_14",
31
+ "wu_step_15",
32
+ "wu_step_16",
33
+ "wu_step_17",
34
+ "wu_step_18",
35
+ "wu_step_19",
36
+ "wu_step_20",
37
+ "wu_step_21",
38
+ "wu_step_22",
39
+ "wu_step_23",
40
+ "wu_step_24",
41
+ "wu_step_25",
42
+ "wu_step_26",
43
+ "wu_step_27",
44
+ "wu_step_28",
45
+ "wu_step_29",
46
+ "wu_step_30",
47
+ "wu_step_31"
48
+ ]
49
+ },
50
+ "training": {
51
+ "lr": 5e-05,
52
+ "l1_coefficient": 0.3,
53
+ "frequency_scale": 0.01,
54
+ "tanh_stretch_coefficient": 1.0,
55
+ "jumprelu_lr_factor": 0.1,
56
+ "init_threshold": 0.1,
57
+ "decoder_transpose_init": 1.0,
58
+ "amp_dtype": "fp32",
59
+ "optimizer": "adam",
60
+ "n_epochs": 300,
61
+ "batch_size": 1024,
62
+ "expansion_factor": 32.0,
63
+ "d_sae": 24576,
64
+ "input_preprocess": "center_scale",
65
+ "l1_warmup_fraction": 0.05,
66
+ "lr_warmup_fraction": 0.0,
67
+ "lr_decay_fraction": 0.0,
68
+ "auxk_coefficient": 0.0,
69
+ "auxk_k": 512,
70
+ "dead_window_steps": 100
71
+ },
72
+ "quality": {
73
+ "explained_variance": 0.9196719747097695,
74
+ "reconstruction_mse": 0.08030243307352065,
75
+ "mean_l0": 285.9946594238281,
76
+ "dead_rate": 0.0,
77
+ "d_sae": 24576,
78
+ "n_snapshots": 32,
79
+ "n_rows": 50304
80
+ },
81
+ "steps": [
82
+ 0,
83
+ 1,
84
+ 2,
85
+ 4,
86
+ 8,
87
+ 16,
88
+ 32,
89
+ 64,
90
+ 128,
91
+ 256,
92
+ 512,
93
+ 1000,
94
+ 2000,
95
+ 3000,
96
+ 4000,
97
+ 5000,
98
+ 6000,
99
+ 7000,
100
+ 8000,
101
+ 9000,
102
+ 14000,
103
+ 21000,
104
+ 27000,
105
+ 34000,
106
+ 47000,
107
+ 61000,
108
+ 75000,
109
+ 89000,
110
+ 102000,
111
+ 116000,
112
+ 130000,
113
+ 143000
114
+ ],
115
+ "model_name": "EleutherAI/pythia-160m",
116
+ "seed": 0,
117
+ "kind": "cross-snapshot",
118
+ "preprocess_mode": "center_scale"
119
+ }
pythia-160m/W_U/cross-snapshot-32/d24576/seed0.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_U crosscoder, 32 snapshots, d_sae=24576, seed 0
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 14000, 21000, 27000, 34000, 47000, 61000, 75000, 89000, 102000, 116000, 130000, 143000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.9196719747097695
10
+ - Mean L0: 285.9946594238281
11
+ - Dead-feature rate: 0.0
12
+ - d_sae: 24576
13
+ - n_snapshots: 32
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: jumprelu
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 1.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: 0.1
23
+ - Optimizer: adam
24
+ - Epochs: 300
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 0
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed0.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed0.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_U/cross-snapshot-32/d24576/seed0.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5998eba9b1f0f94f7579c692dcee2de8a2875f2f80f3fb4e127f6024f411e815
3
+ size 4835180992
pythia-160m/W_U/cross-snapshot-32/d24576/seed1.config.json ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_U crosscoder, 32 snapshots, d_sae=24576, seed 1",
3
+ "config": {
4
+ "sae_type": "crosscoder",
5
+ "d_model": 768,
6
+ "expansion_factor": 32.0,
7
+ "use_decoder_bias": true,
8
+ "act_fn": "jumprelu",
9
+ "norm_activation": "inference",
10
+ "sparsity_include_decoder_norm": true,
11
+ "top_k": 50,
12
+ "use_triton_kernel": false,
13
+ "sparsity_threshold_for_triton_spmm_kernel": 0.996,
14
+ "jumprelu_threshold_window": 4.0,
15
+ "hook_points": [
16
+ "wu_step_0",
17
+ "wu_step_1",
18
+ "wu_step_2",
19
+ "wu_step_3",
20
+ "wu_step_4",
21
+ "wu_step_5",
22
+ "wu_step_6",
23
+ "wu_step_7",
24
+ "wu_step_8",
25
+ "wu_step_9",
26
+ "wu_step_10",
27
+ "wu_step_11",
28
+ "wu_step_12",
29
+ "wu_step_13",
30
+ "wu_step_14",
31
+ "wu_step_15",
32
+ "wu_step_16",
33
+ "wu_step_17",
34
+ "wu_step_18",
35
+ "wu_step_19",
36
+ "wu_step_20",
37
+ "wu_step_21",
38
+ "wu_step_22",
39
+ "wu_step_23",
40
+ "wu_step_24",
41
+ "wu_step_25",
42
+ "wu_step_26",
43
+ "wu_step_27",
44
+ "wu_step_28",
45
+ "wu_step_29",
46
+ "wu_step_30",
47
+ "wu_step_31"
48
+ ]
49
+ },
50
+ "training": {
51
+ "lr": 5e-05,
52
+ "l1_coefficient": 0.3,
53
+ "frequency_scale": 0.01,
54
+ "tanh_stretch_coefficient": 1.0,
55
+ "jumprelu_lr_factor": 0.1,
56
+ "init_threshold": 0.1,
57
+ "decoder_transpose_init": 1.0,
58
+ "amp_dtype": "fp32",
59
+ "optimizer": "adam",
60
+ "n_epochs": 300,
61
+ "batch_size": 1024,
62
+ "expansion_factor": 32.0,
63
+ "d_sae": 24576,
64
+ "input_preprocess": "center_scale",
65
+ "l1_warmup_fraction": 0.05,
66
+ "lr_warmup_fraction": 0.0,
67
+ "lr_decay_fraction": 0.0,
68
+ "auxk_coefficient": 0.0,
69
+ "auxk_k": 512,
70
+ "dead_window_steps": 100
71
+ },
72
+ "quality": {
73
+ "explained_variance": 0.9195844996740984,
74
+ "reconstruction_mse": 0.08038988023996353,
75
+ "mean_l0": 286.09990661621094,
76
+ "dead_rate": 0.0,
77
+ "d_sae": 24576,
78
+ "n_snapshots": 32,
79
+ "n_rows": 50304
80
+ },
81
+ "steps": [
82
+ 0,
83
+ 1,
84
+ 2,
85
+ 4,
86
+ 8,
87
+ 16,
88
+ 32,
89
+ 64,
90
+ 128,
91
+ 256,
92
+ 512,
93
+ 1000,
94
+ 2000,
95
+ 3000,
96
+ 4000,
97
+ 5000,
98
+ 6000,
99
+ 7000,
100
+ 8000,
101
+ 9000,
102
+ 14000,
103
+ 21000,
104
+ 27000,
105
+ 34000,
106
+ 47000,
107
+ 61000,
108
+ 75000,
109
+ 89000,
110
+ 102000,
111
+ 116000,
112
+ 130000,
113
+ 143000
114
+ ],
115
+ "model_name": "EleutherAI/pythia-160m",
116
+ "seed": 1,
117
+ "kind": "cross-snapshot",
118
+ "preprocess_mode": "center_scale"
119
+ }
pythia-160m/W_U/cross-snapshot-32/d24576/seed1.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_U crosscoder, 32 snapshots, d_sae=24576, seed 1
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 14000, 21000, 27000, 34000, 47000, 61000, 75000, 89000, 102000, 116000, 130000, 143000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.9195844996740984
10
+ - Mean L0: 286.09990661621094
11
+ - Dead-feature rate: 0.0
12
+ - d_sae: 24576
13
+ - n_snapshots: 32
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: jumprelu
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 1.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: 0.1
23
+ - Optimizer: adam
24
+ - Epochs: 300
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 1
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed1.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed1.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_U/cross-snapshot-32/d24576/seed1.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c071477b1fbd48eb9033488e6943f35e6b9eba95a7839dfc3052701e1ceca4ff
3
+ size 4835180992
pythia-160m/W_U/cross-snapshot-32/d24576/seed2.config.json ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_U crosscoder, 32 snapshots, d_sae=24576, seed 2",
3
+ "config": {
4
+ "sae_type": "crosscoder",
5
+ "d_model": 768,
6
+ "expansion_factor": 32.0,
7
+ "use_decoder_bias": true,
8
+ "act_fn": "jumprelu",
9
+ "norm_activation": "inference",
10
+ "sparsity_include_decoder_norm": true,
11
+ "top_k": 50,
12
+ "use_triton_kernel": false,
13
+ "sparsity_threshold_for_triton_spmm_kernel": 0.996,
14
+ "jumprelu_threshold_window": 4.0,
15
+ "hook_points": [
16
+ "wu_step_0",
17
+ "wu_step_1",
18
+ "wu_step_2",
19
+ "wu_step_3",
20
+ "wu_step_4",
21
+ "wu_step_5",
22
+ "wu_step_6",
23
+ "wu_step_7",
24
+ "wu_step_8",
25
+ "wu_step_9",
26
+ "wu_step_10",
27
+ "wu_step_11",
28
+ "wu_step_12",
29
+ "wu_step_13",
30
+ "wu_step_14",
31
+ "wu_step_15",
32
+ "wu_step_16",
33
+ "wu_step_17",
34
+ "wu_step_18",
35
+ "wu_step_19",
36
+ "wu_step_20",
37
+ "wu_step_21",
38
+ "wu_step_22",
39
+ "wu_step_23",
40
+ "wu_step_24",
41
+ "wu_step_25",
42
+ "wu_step_26",
43
+ "wu_step_27",
44
+ "wu_step_28",
45
+ "wu_step_29",
46
+ "wu_step_30",
47
+ "wu_step_31"
48
+ ]
49
+ },
50
+ "training": {
51
+ "lr": 5e-05,
52
+ "l1_coefficient": 0.3,
53
+ "frequency_scale": 0.01,
54
+ "tanh_stretch_coefficient": 1.0,
55
+ "jumprelu_lr_factor": 0.1,
56
+ "init_threshold": 0.1,
57
+ "decoder_transpose_init": 1.0,
58
+ "amp_dtype": "fp32",
59
+ "optimizer": "adam",
60
+ "n_epochs": 300,
61
+ "batch_size": 1024,
62
+ "expansion_factor": 32.0,
63
+ "d_sae": 24576,
64
+ "input_preprocess": "center_scale",
65
+ "l1_warmup_fraction": 0.05,
66
+ "lr_warmup_fraction": 0.0,
67
+ "lr_decay_fraction": 0.0,
68
+ "auxk_coefficient": 0.0,
69
+ "auxk_k": 512,
70
+ "dead_window_steps": 100
71
+ },
72
+ "quality": {
73
+ "explained_variance": 0.9196765967343927,
74
+ "reconstruction_mse": 0.08029781252145768,
75
+ "mean_l0": 286.3446789550781,
76
+ "dead_rate": 0.0,
77
+ "d_sae": 24576,
78
+ "n_snapshots": 32,
79
+ "n_rows": 50304
80
+ },
81
+ "steps": [
82
+ 0,
83
+ 1,
84
+ 2,
85
+ 4,
86
+ 8,
87
+ 16,
88
+ 32,
89
+ 64,
90
+ 128,
91
+ 256,
92
+ 512,
93
+ 1000,
94
+ 2000,
95
+ 3000,
96
+ 4000,
97
+ 5000,
98
+ 6000,
99
+ 7000,
100
+ 8000,
101
+ 9000,
102
+ 14000,
103
+ 21000,
104
+ 27000,
105
+ 34000,
106
+ 47000,
107
+ 61000,
108
+ 75000,
109
+ 89000,
110
+ 102000,
111
+ 116000,
112
+ 130000,
113
+ 143000
114
+ ],
115
+ "model_name": "EleutherAI/pythia-160m",
116
+ "seed": 2,
117
+ "kind": "cross-snapshot",
118
+ "preprocess_mode": "center_scale"
119
+ }
pythia-160m/W_U/cross-snapshot-32/d24576/seed2.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Pythia-160M W_U crosscoder, 32 snapshots, d_sae=24576, seed 2
2
+
3
+ Companion artifact to *Parameter-trajectory crosscoders for vocabulary readout
4
+ evolution* (NeurIPS 2026). Trained from snapshots of
5
+ `EleutherAI/pythia-160m` across [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 14000, 21000, 27000, 34000, 47000, 61000, 75000, 89000, 102000, 116000, 130000, 143000] pretraining
6
+ steps.
7
+
8
+ ## Quality
9
+ - Explained variance: 0.9196765967343927
10
+ - Mean L0: 286.3446789550781
11
+ - Dead-feature rate: 0.0
12
+ - d_sae: 24576
13
+ - n_snapshots: 32
14
+
15
+ ## Training recipe (key hparams)
16
+ - Activation: jumprelu
17
+ - L1 coefficient: 0.3
18
+ - Frequency penalty scale: 0.01
19
+ - Tanh-stretch coefficient: 1.0
20
+ - LR: 5e-05
21
+ - JumpReLU LR multiplier: 0.1
22
+ - Init threshold: 0.1
23
+ - Optimizer: adam
24
+ - Epochs: 300
25
+ - Batch size: 1024
26
+ - Preprocess: center_scale
27
+ - Seed: 2
28
+
29
+ ## Loading
30
+ ```python
31
+ from safetensors.torch import load_file
32
+ weights = load_file("seed2.safetensors")
33
+ # weights['W_E'] / weights['W_D'] / weights['b_E'] / weights['b_D'] / etc.
34
+ import json
35
+ config = json.load(open("seed2.config.json"))
36
+ ```
37
+
38
+ See the repo top-level README for the full crosscoder loading example.
pythia-160m/W_U/cross-snapshot-32/d24576/seed2.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:63a4a1630f355333053e48278a4c4cb5e6616e1ab92700e7d121cb8960083abf
3
+ size 4835180992
pythia-160m/W_U/cross-snapshot-32/d8192/seed0.config.json ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "public_label": "Pythia-160M W_U crosscoder, 32 snapshots, d_sae=8192, seed 0",
3
+ "config": {
4
+ "sae_type": "crosscoder",
5
+ "d_model": 768,
6
+ "expansion_factor": 10.6667,
7
+ "use_decoder_bias": true,
8
+ "act_fn": "jumprelu",
9
+ "norm_activation": "inference",
10
+ "sparsity_include_decoder_norm": true,
11
+ "top_k": 50,
12
+ "use_triton_kernel": false,
13
+ "sparsity_threshold_for_triton_spmm_kernel": 0.996,
14
+ "jumprelu_threshold_window": 4.0,
15
+ "hook_points": [
16
+ "wu_step_0",
17
+ "wu_step_1",
18
+ "wu_step_2",
19
+ "wu_step_3",
20
+ "wu_step_4",
21
+ "wu_step_5",
22
+ "wu_step_6",
23
+ "wu_step_7",
24
+ "wu_step_8",
25
+ "wu_step_9",
26
+ "wu_step_10",
27
+ "wu_step_11",
28
+ "wu_step_12",
29
+ "wu_step_13",
30
+ "wu_step_14",
31
+ "wu_step_15",
32
+ "wu_step_16",
33
+ "wu_step_17",
34
+ "wu_step_18",
35
+ "wu_step_19",
36
+ "wu_step_20",
37
+ "wu_step_21",
38
+ "wu_step_22",
39
+ "wu_step_23",
40
+ "wu_step_24",
41
+ "wu_step_25",
42
+ "wu_step_26",
43
+ "wu_step_27",
44
+ "wu_step_28",
45
+ "wu_step_29",
46
+ "wu_step_30",
47
+ "wu_step_31"
48
+ ]
49
+ },
50
+ "training": {
51
+ "lr": 5e-05,
52
+ "l1_coefficient": 0.3,
53
+ "frequency_scale": 0.01,
54
+ "tanh_stretch_coefficient": 1.0,
55
+ "jumprelu_lr_factor": 0.1,
56
+ "n_epochs": 300,
57
+ "batch_size": 1024,
58
+ "expansion_factor": 10.6667,
59
+ "input_preprocess": "center_scale",
60
+ "l1_warmup_fraction": 0.1,
61
+ "auxk_coefficient": 0.0,
62
+ "auxk_k": 512,
63
+ "dead_window_steps": 100
64
+ },
65
+ "quality": {
66
+ "explained_variance": 0.7763740924044573,
67
+ "reconstruction_mse": 0.22355465799570085,
68
+ "mean_l0": 203.14466369628906,
69
+ "d_sae": 8192,
70
+ "n_snapshots": 32,
71
+ "n_rows": 50304
72
+ },
73
+ "steps": [
74
+ 0,
75
+ 1,
76
+ 2,
77
+ 4,
78
+ 8,
79
+ 16,
80
+ 32,
81
+ 64,
82
+ 128,
83
+ 256,
84
+ 512,
85
+ 1000,
86
+ 2000,
87
+ 3000,
88
+ 4000,
89
+ 5000,
90
+ 6000,
91
+ 7000,
92
+ 8000,
93
+ 9000,
94
+ 14000,
95
+ 21000,
96
+ 27000,
97
+ 34000,
98
+ 47000,
99
+ 61000,
100
+ 75000,
101
+ 89000,
102
+ 102000,
103
+ 116000,
104
+ 130000,
105
+ 143000
106
+ ],
107
+ "model_name": "EleutherAI/pythia-160m",
108
+ "seed": 0,
109
+ "kind": "cross-snapshot",
110
+ "preprocess_mode": "center_scale"
111
+ }