A sparse dictionary that reconstructs a layer's activations from a sparse feature basis, reading
across a window of layers rather than a single one. Unlike a per-layer SAE, each feature can write
into several downstream layers, which is what makes cross-layer circuit tracing possible.
Fraction of variance unexplained (FVU) on held-out activations — lower is better:
L0 (mean active features per token) ≈ 30. Reconstruction MSE ≈ 6e-4.
Image activations reconstruct less well than text, which is itself informative: the image stream
carries more variance that a sparse basis of this width does not capture.
1import torch
2ckpt = torch.load("clt_medgemma_cxr.pt", map_location="cpu")
3W_enc, b_enc = ckpt["params"]["W_enc"], ckpt["params"]["b_enc"] # (12, 2560, 8192), (12, 8192)
4W_dec, b_dec = ckpt["params"]["W_dec"], ckpt["params"]["b_dec"] # (12, 3, 8192, 2560), (12, 2560)
5
6# per layer L: features = relu(acts_L @ W_enc[L] + b_enc[L])
7# the decoder then writes into layers L .. L+2 via W_dec[L]
Optimizer state has been stripped (the original checkpoint was 12GB; this is 4GB of weights only).
Part of the TraceCXR project (Kevin Jin, Duke University, 2026).