A language model stores information in its residual stream: a fixed-width vector passed between layers. Many features can overlap in this vector, making them difficult to isolate for steering or predict with a small model.
The model’s own MLPs already read this representation. Each mlp.up projects it into a wider space before nonlinear computation, and mlp.down writes the result back. Could we reuse these learned projections to initialize an encoder and decoder, rather than learn a new representation from scratch?
The idea is to combine projections across layers. Assuming the residual representation stays similar enough between layers, their up projections form one large “super-up” feature bank:
super_up = concat([layer.mlp.up.weight for layer in layers], dim=0)