CoolFace
Modelpublic

juiceb0xc0de/smollm2-135m-SAE

sourceHugging Facemitupdated 3mo agoView on Hugging Face
0likes
Model Card

SmolLM2-135M Layer-Complete Top-K SAE Suite

30 sparse autoencoders — one per residual-stream layer of `HuggingFaceTB/SmolLM2-135M`.

Each SAE uses Top-K hard sparsity (k=50), a dictionary of 18,432 features (32× expansion over d_model=576), and an always-on AuxK auxiliary term (k_aux=25). Identical hyperparameters across all 30 layers, seed 0.

What to expect

  • —Mean explained variance: 0.949 across layers
  • —Best reconstruction at mid-layers (L11, EV 0.989)
  • —Weakest at the final layer (L29, EV 0.873)
  • —Mean L0 ≈ 46.4 (target k = 50)
  • —Zero dead features across all 30 SAEs
  • —Total training: ~95.8k optimizer steps / ~3.14B tokens

What this is

A training-healthy, uniform SAE atlas for SmolLM2-135M. A reasonable starting point for layer comparison, feature-steering experiments, and cross-layer analysis. Every layer was trained under identical hyperparameters, so per-layer SAEs are directly comparable.

What this is NOT

  • —Not a proven set of interpretable features. No downstream validation (CE/KL recovery under activation patching, automated interpretability scoring, or steering evaluation) has been run.
  • —Not fully converged at every layer. The deepest layers (L27–L29) early-stopped while EV was still climbing and may benefit from longer training — treat their reported EV as a lower bound, not a converged value.
  • —Not an unassisted zero-dead-feature result. The AuxK auxiliary term was active throughout training (effective_aux_k = 25); the discrete resampler never fired, but that is a consequence of AuxK keeping latents alive, not independent evidence that no rescue mechanism was needed. Top-K hard sparsity, the sparsity-warmup schedule, and AuxK were all present on every run — this suite does not isolate which one (or what combination) is responsible.
  • —Not assessed for decoder specialization vs. redundancy. EV and dead% do not distinguish a well-specialized dictionary from one containing duplicate or near-initialization features. Decoder drift (‖Wdec − Wdec_init‖) and pairwise decoder cosine similarity were not logged for this run.

Training configuration

HyperparameterValue
Base modelHuggingFaceTB/SmolLM2-135M (30 layers, d_model = 576)
Hook pointresidual stream, per layer L0–L29
Active latents (k)50
Dictionary size18,432 features (32× expansion)
AuxKk_aux = 25, active throughout
Optimizer LR2e-4, warmup → decay
Batch size32,768 tokens/step (microbatch = 32,768, accum = 1)
Max steps15,000 (EV-plateau early stopping enabled)
Seed0

Hardware

L00–L04 trained on NVIDIA L40S; L05–L29 trained on NVIDIA H100 80GB HBM3 (RunPod). Throughput ranged 244K–812K tokens/sec; the step-up partway through the sweep is consistent with this hardware tier change but is inferred from throughput data, not independently confirmed in logs.

Per-layer results

LayerEVMean L0Dead %Stop step
L000.95345.7804751
L010.95545.2205000
L020.96444.3904501
L030.94948.5404001
L040.93649.3704001
L050.93650.1005000
L060.93045.7403751
L070.93445.3503751
L080.94345.5604251
L090.93945.6103751
L100.94043.0904751
L110.98948.0302251
L120.98647.9002001
L130.98547.4902001
L140.98445.6302001
L150.98346.3002001
L160.98048.2702251
L170.97645.9302001
L180.97445.0802001
L190.97146.3002251
L200.96746.1502251
L210.96045.9002501
L220.95146.1202501
L230.93246.2702751
L240.93646.0103001
L250.92847.4603501
L260.91146.4503501
L270.91146.8903001
L280.88946.7903251
L290.87344.8103251

Reproduction

model_id   = HuggingFaceTB/SmolLM2-135M
layers     = 0..29   (one SAE each)
k          = 50
n_features = 18432   (32x expansion over d_model=576)
k_aux      = 25
lr         = 2e-4    (warmup -> decay)
batch      = 32768 tokens/step, accum=1
n_steps    = 15000   (EV-plateau early stop)
seed       = 0

Logs

Full per-step metrics and run logs: ricks-holmberg-juiceb0xc0de/smollm2-sae on W&B.

License

MIT