Pythia-160M MLP-5 SAEs β three initialization seeds
Three sparse autoencoders trained on the output of layers.5.mlp in
EleutherAI/pythia-160m. All three are identical in every respect except the
random seed used to initialize their weights: same data, same order, same
hyperparameters, trained in a single process sharing one dataloader.
Produced as a replication of Paulo & Belrose (2025), Sparse Autoencoders Trained on the Same Data Learn Different Features.
Contents
seed0/sae.safetensors seed0/cfg.json
seed1/sae.safetensors seed1/cfg.json
seed2/sae.safetensors seed2/cfg.json
Configuration
| Base model | EleutherAI/pythia-160m |
| Hookpoint | layers.5.mlp (MLP output) |
| Input dimension | 768 |
| Latents | 32,768 |
| Activation | TopK, k=32 |
| Decoder | unit-norm constrained |
| Optimizer | Adam |
| Loss | FVU (fraction of variance unexplained) |
| Context length | 2048 |
| Batch size | 32 sequences |
| Training tokens | ~8B (3,906,250 sequences, 122,071 steps) |
| Seeds | 0, 1, 2 |
| Library | eai-sparsify 1.3.3 |
Training data
monology/pile-uncopyrighted, shard train/00.jsonl.zst. This is a copy of the
Pile with five subsets removed (Books3, BookCorpus2, OpenSubtitles, YTSubtitles,
OWT2); the original EleutherAI/pile is no longer downloadable. The token
ordering is not the ordering Pythia-160M saw during its own pretraining.
Usage
pip install eai-sparsify
from sparsify import Sae
sae = Sae.load_from_hub("dwightware4/sae-pythia-160m-32k-3seeds", hookpoint="seed0")
Or from a local copy:
sae = Sae.load_from_disk("path/to/seed0")
encode() returns a namedtuple of sparse components:
out = sae.encode(activations) # activations: [n_tokens, 768]
out.top_acts # [n_tokens, 32] activation values
out.top_indices # [n_tokens, 32] latent indices
out.pre_acts # [n_tokens, 32768] pre-activations
To produce a dense [n_tokens, n_latents] matrix:
import torch
z = torch.zeros(activations.shape[0], 32768, device=activations.device)
z.scatter_(1, out.top_indices, out.top_acts)
Weight names are W_dec, b_dec, encoder.weight, encoder.bias.
Measured properties
Pairwise Hungarian alignment between the three seeds, following Section 3 of the paper: a latent is shared if it maps to the same counterpart under both the encoder and decoder matchings, with cosine similarity β₯ 0.7 in both.
| Pair | Shared latents | Encoder/decoder matchings agree |
|---|---|---|
| seed0 β seed1 | 43.6% | 78.6% |
| seed0 β seed2 | 43.7% | 78.7% |
| seed1 β seed2 | 43.9% | 78.2% |
Reference value from the paper: 42%.
Mean matched cosine similarity is approximately 0.61 (encoder) and 0.69 (decoder), consistent with Figure A3 of the paper.
Roughly 56% of the latents in any one of these SAEs has no close counterpart in the others, despite identical training data.
Citation
@article{paulo2025sparse,
title={Sparse Autoencoders Trained on the Same Data Learn Different Features},
author={Paulo, Gon{\c{c}}alo and Belrose, Nora},
journal={arXiv preprint arXiv:2501.16615},
year={2025}
}
Model tree for dwightware4/sae-pythia-160m-32k-3seeds
Base model
EleutherAI/pythia-160m