This post makes me happy. It has comparison to other models, comparison to baselines, error bars, random control, no graph crimes, and its not in appendix.
This should be norm for all papers of this type.
J-Space paper from Anthropic broke some of these good practices of good science like this.

One reason we didn't really follow up on the tuned lens was that it's really hard to tell if you have the right way of measuring "what the model thinks the answer is after layer K." The approach we took to this was based in epistemology and assumed that models followed several intuitively plausible epistemological guidelines, and measured the extent to which the tune lends improved those guidelines over the logit lens. That evaluation is at best correlational, but I feel uncertain about whether other metrics even capture anything worth optimizing. After all, you can improve all naive performance metrics by reporting "what the model thinks the answer is after layer K+2" in place of "what the model thinks the answer is after layer K."
I was frustrated that many of the metrics in the J-Lens paper were either layer invariant by construction or would obviously face this pitfall.
What do you think regarding what the right way to do this kind of evaluation is / how concerned you are with this issue. You gesture at this with the discussion of probe upper bounds, but take those "upper bounds" with such a little seriousness that you're comfortable with the fact that the R-Lens outperforms it sometimes.
This is a great post and I'm looking forward to checking out the fits in the repo. FWIW, I've been doing some exploration with the J-lens on Gemma 2, and when I measured per-prompt margin gradients directly (VJPs at a fixed readout position) I found they're mutually coherent at every early layer; median cosine to the population mean ~0.72–0.80 through the exact layers where J-lens readouts are noisiest. So it seems there is a stable direction to find there, the standard readout just doesn't see it.
Question on the trash tokens: did you check them against untrained-vocab-row diagnostics? On Gemma 2, the leading component of any W_U-derived object is dominated by near-zero-frequency rows. It was a bit of a gotcha for me when I discovered this, but I guess that's what I get for not reading the manual.
Nice job all! Very cool that this layer-wise backprop makes the early layers more interpretable.
Saw you did the MLP gain study in the appendix, did you also look for the attention gain? (section 4.3.2 in the J space paper).
If R lens vectors have higher broadcast across tokens than J vectors, it’s evidence that these are better workspace candidates!
h
x*\text{stop_grad}(\text{GELU}(x)/x)

somhow I see a renderer error here, unsure if it's a synthax or LW problem
TL;DR:
We introduce the R-lens: a drop-in replacement for J-lens that produces clearer readouts on earlier layers. R-Lens is identical to J-Lens, except that we make minor and low-overhead changes to the backwards pass, following layerwise-relevance propagation, allowing us to reduce the propagation of errors. This method allows us to surface important intermediate variables more consistently and more saliently, reduce the frequency of semantically-irrelevant readouts, and even detect relevant concepts that J-lens misses entirely. We open-source our R-lenses and accompanying J-lenses here.
Introduction
Motivation
The J-lens is a powerful tool for surfacing intermediate variables in the workspace layers of a model, but we find readouts in early layers to often be noisy and largely uninterpretable. Plausibly, either J-lens is degenerate at these depths and fails to resolve content that is in fact present, or the early residual stream genuinely carries no linearly accessible, causally relevant verbalizable content.
We suspect that this is a structural issue with J-lens. J-lens is fit by backpropagating from the final-layer residual stream down to the residual stream at the readout layer. Errors are likely to accumulate over the course of layers, suggesting it may be less accurate at early layers. In this post, we ask whether we can improve on J-lens to minimize such errors and achieve cleaner, causally relevant readouts at early layers.
What is RelP and how do we apply it?
We take inspiration from Relevance Patching (RelP), a method for efficiently approximating attribution patching, a gradient based approximation to activation patching. It keeps the structure of attribution patching, which takes the dot product of an activation difference against a backward-pass, but swaps the local gradient for a propagation coefficient derived from the XAI technique of Layer-wise Relevance Propagation (LRP). LRP adds several stop gradients to the backward pass, e.g to the variance term in LayerNorm, designed to reduce the accumulation of errors/high curvature gradient terms. As this is just adding stop gradients, the cost is negligible.
We therefore use LRP as a drop-in replacement inside J-lens. We fit the R-lens exactly as before but with LRP rules installed in the backward pass, so what gets transported and averaged is a relevance coefficient rather than a raw gradient.
Contributions
Background
J-lens
The Jacobian lens characterizes an activation by its first-order causal effect on the model's outputs, averaged over contexts and token positions. Concretely, it replaces every layer downstream of the readout point with a single linear map, followed by the model's own unembedding, producing a ranked list of vocabulary tokens for that activation.
LRP
LRP assigns a relevance score to each component and propagates it backward through the model, redistributing relevance from a layer's outputs to its inputs according to rules specific to each component type. LRP preserves ‘total relevance’ from one layer to the next and constructs specialized rules to patch relevance in places where ordinary gradients would break that conservation. Notably, LRP just adds stop gradients, so it is cheap and doesn't change the output of the forward pass.
In particular, we make use of three LRP rules:
Methods: the R-Lens
Dense models
MoE models
Results
Quantitative comparisons
Evals
Our evals are similar in content to those described in Appendix A.6 of the J-lens paper. We probe on the bolded token position:
For each model we filtered for the questions the model was capable of answering correctly (for multihop and multilingual).
Metrics
Results
Qualitative comparisons
Layer at which the target concept first appears
R-lens is generally more coherent in early layers than J-lens
We perform ablations to determine the causal importance of R-lens and J-lens directions
Setup: on 30 questions from the multihop eval set, we ablate the projection of the R-lens, J-lens, and logit lens directions for the intermediate token from the activations on the penultimate token position of the prompt.
R-lens captures early-layer concepts that J-lens never surfaces:
We train probes to upper bound the earliest layer we can expect lens readouts
CKA Analysis
We found R-lens to be more different than J-lens in early layers and the R-space CKA to show roughly 2-3 distinct bands as opposed to J-space CKA’s 4-5 for Qwen-3.6-27b.
Appendix
Do MLP layers preferentially amplify RelP lens directions?
We measure the MLP gain (how strongly the information encoded by a direction v is amplified by the next MLP block) of directions from J-lens, R-lens, and logit lens compared to those of a standard MLP neuron. This is similar to the experiment from Figure 32 of the J-lens paper. We find that on Qwen3.6-27B, J-lens and R-lens directions are similarly amplified across layers, and these are significantly more amplified than the MLP neuron in later workspace layers.
Quantitative eval results for other models