Paper deep dive
Language Models Can Explain Visual Features via Steering
Javier Ferrando, Enrique Lopez-Cuena, Pablo Agustin Martin-Torres, Daniel Hinjos, Anna Arias-Duart, Dario Garcia-Gasulla
Intelligence
Status: succeeded | Model: google/gemini-3.1-flash-lite-preview | Prompt: intel-v1 | Confidence: 95%
Last extracted: 3/26/2026, 1:36:26 AM
Summary
The paper introduces 'Steering', a causal intervention method for automated interpretability in Vision-Language Models (VLMs). By steering Sparse Autoencoder (SAE) features in a vision encoder while providing an empty image, the model can generate natural language explanations of visual concepts. The authors also propose 'Steering-informed Top-k', a hybrid approach combining causal interventions with traditional input-based methods to improve explanation quality.
Entities (5)
Relation Signals (3)
Steering-informed Top-k ā combines ā Steering
confidence 95% Ā· Steering-informed Top-k ā that combines the best of both approaches
Steering ā interprets ā Sparse Autoencoders
confidence 90% Ā· We leverage the structure of Vision-Language Models and steer individual SAE features
Vision Language Models ā utilizes ā Sparse Autoencoders
confidence 90% Ā· SAEs have recently been extended to vision models
Cypher Suggestions (0)
No Cypher suggestions yet.
Abstract
Abstract:Sparse Autoencoders uncover thousands of features in vision models, yet explaining these features without requiring human intervention remains an open challenge. While previous work has proposed generating correlation-based explanations based on top activating input examples, we present a fundamentally different alternative based on causal interventions. We leverage the structure of Vision-Language Models and steer individual SAE features in the vision encoder after providing an empty image. Then, we prompt the language model to explain what it ``sees'', effectively eliciting the visual concept represented by each feature. Results show that Steering offers an scalable alternative that complements traditional approaches based on input examples, serving as a new axis for automated interpretability in vision models. Moreover, the quality of explanations improves consistently with the scale of the language model, highlighting our method as a promising direction for future research. Finally, we propose Steering-informed Top-k, a hybrid approach that combines the strengths of causal interventions and input-based approaches to achieve state-of-the-art explanation quality without additional computational cost.
Tags
Links
- Source: https://arxiv.org/abs/2603.22593v2
- Canonical: https://arxiv.org/abs/2603.22593v2
Trouble viewing inline? Open PDF directly ā
Full Text
100,863 characters extracted from source content.
Expand or collapse full text
Language Models Can Explain Visual Features via Steering Javier Ferrando Enrique Lopez-Cuena Pablo Agustin Martin-Torres Daniel Hinjos Anna Arias-Duart Dario Garcia-Gasulla Barcelona Supercomputing Center Correspondance to jferrandomonsonis@gmail.com. This work is not related to the authorās position at Amazon. Abstract Sparse Autoencoders uncover thousands of features in vision models, yet explaining these features without requiring human intervention remains an open challenge. While previous work has proposed generating correlation-based explanations based on top activating input examples, we present a fundamentally different alternative based on causal interventions. We leverage the structure of Vision-Language Models and steer individual SAE features in the vision encoder after providing an empty image. Then, we prompt the language model to explain what it āseesā, effectively eliciting the visual concept represented by each feature. Results show that Steering offers an scalable alternative that complements traditional approaches based on input examples, serving as a new axis for automated interpretability in vision models. Moreover, the quality of explanations improves consistently with the scale of the language model, highlighting our method as a promising direction for future research. Finally, we propose Steering-informed Top-k, a hybrid approach that combines the strengths of causal interventions and input-based approaches to achieve state-of-the-art explanation quality without additional computational cost.111We make the codebase available at https://github.com/HPAI-BSC/vision-interp. Figure 1: Top: A vision feature extracted with an SAE is explained based on top-activating images, which are passed to the VLM to generate an explanation based on correlated visual evidence. Bottom: We propose to automatically obtain explanations of SAE features by causally intervening (steering) a vision encoder. The intervention is done after feeding it an information-devoid white image, effectively making the language model articulate what visual concept that feature represents. 1 Introduction Understanding what features neural networks learn is a central goal in interpretability research [olah2020zoom]. Sparse Autoencoders (SAEs) have emerged as a promising unsupervised method for uncovering human-interpretable features from model representations [bricken2023monosemanticity, huben2024sparse], particularly in large language models (LLMs). SAEs have recently been extended to vision models, revealing semantically meaningful concepts such as object categories, patterns, and textures [sae_vision, lim2025sparse]. However, as SAEs scale to uncover thousands of features, interpreting these poses significant challenges, necessitating the development of additional tools. Recent work on automated interpretability aims to address this challenge by leveraging powerful language models as explainers to generate descriptions of features learned by a subject model [openai_neuron_nle, paulo2024automaticallyinterpretingmillionsfeatures]. When the subject is a vision model, the images that activate most each feature are analyzed by an explainer which looks for common patterns that may explain the target feature [xu2025decipheringfunctionsneuronsvisionlanguage, zhang2024largemultimodalmodelsinterpret]. This input-based strategy relies heavily on a predefined test set, is fundamentally correlation-based rather than causally grounded, and incurs significant computational cost. An alternative line of work has explored self-explaining approaches in language models, where the model itself is prompted to describe its representations [ghandeharioun2024patchscopes, chen2024selfie]. In this paper, we extend this paradigm to vision models by leveraging the structure of VLMs and perform causal interventions on SAE features222We refer to a āfeatureā as a direction in the modelās representation space. to describe them in natural language. By steering the vision encoderās residual stream with individual SAE features āwhile feeding it an empty imageā we prompt the VLM to describe what visual concept that feature represents (Figure 1). Experiments on Gemma 3 and Intern VL3 vision encoders show that Steering offers an scalable alternative that complements traditional approaches based on input examples, overcoming some of the explanation biases these methods introduce, while surfacing lower-level features. Furthermore, scaling the language model consistently improves explanation quality, highlighting this causal, output-centric approach as a promising direction for automated interpretability. Building on this idea, we also introduce a hybrid strategy āSteering-informed Top-k ā that combines the best of both approaches. We condition the VLM on the top activating images and the causal intervention with the SAE feature, improving the quality of the generated explanations on four complementary metrics. 2 Extracting Features Model neurons often exhibit polysemanticity, meaning they respond to seemingly unrelated concepts. One leading explanation for this phenomenon is superposition, the idea that models learn to represent more concepts than they have neurons [arora-etal-2018-linear, elhage2022superposition]. Sparse Autoencoders (SAEs) [bricken2023monosemanticity] have emerged as an interpretability tool for finding interpretable and monosemantic features that are otherwise represented in superposition. SAEs achieve this by mapping model representations āād z ^d into a higher-dimensional latent space ādSāAāER^d_SAE, while enforcing sparsity in the latent representation. In this work, we use TopK SAEs [gao2025scaling], which apply the TopK activation function to enforce sparsity. The encoder first computes a sparse code using: fā()=TopKā(āenc+enc),f( z)=TopK ( z W_enc+ b_enc ), (1) and the decoder reconstructs the original input from the sparse representation via SAEā()=fā()ādec+dec.SAE( z)=f( z) W_dec+ b_dec. (2) The encoder and decoder are parameterized by weight matrices and bias vectors enc W_enc, enc b_enc and dec W_dec, dec b_dec respectively. We refer to SAE feature activation to a component in fā()āāSAEf( z) ^SAE, while a SAE feature denotes a row vector in the dictionary decāādSAEĆdmodel W_dec ^d_SAEĆ d_model. In this work, we train TopK SAEs with the latent space dimensionality dSAE=8,192d_SAE=8,192 on Imagenet dataset [imagenet]. We refer to Appendix A for further training details. 3 Automatically Interpreting Features Following previous work in automated interpretability, we assume features can be explained by a sequence of words e. We consider a subject model msubjm_subj whose features we want to interpret, and an explainer model mexpm_exp that generates the natural language explanations for these features. 3.1 Top-k Explanations The existing approach to generate explanations from vision model features [zhang2024largemultimodalmodelsinterpret, xu2025decipheringfunctionsneuronsvisionlanguage] assumes access to an evaluation set of images, evalD^eval. Each image IāevalI ^eval is fed into the subject model msubm_sub, and the representations from the residual stream at a particular layer l and position j, msubl,jā(ā )m^l,j_sub(Ā·) are extracted; for brevity, we omit the layer index in what follows. Following Equation 1, a SAE feature activation vector is obtained for each position j, fā(msubjā(I))āāSAEf(m_sub^j(I)) ^SAE. For each dimension iā1,ā¦,dSAEiā\1,ā¦,d_SAE\, we compute an image activation score by aggregating the individual position activations across the entire image: Si,I=gā(fiā(msubā(I))).S^i,I=g (f_i(m_sub(I)) ). (3) Typically, the mean function (across positions) is used as gā(ā )g(Ā·) [zhang2024largemultimodalmodelsinterpret]. Then, we identify the top-k images (with 1ā¤kā¤|eval|1⤠kā¤|D^eval|) that produce the highest image activation scores. These images, denoted ik=I1i,ā¦,IkiT^k_i=\I^i_1,ā¦,I^i_k\, are selected such that their scores follow the descending order: Si,I1iā„Si,I2iā„āÆā„Si,I|eval|iS^i,I^i_1ā„ S^i,I^i_2ā„Ā·sā„ S^i,I^i_|D^eval|. A natural language explanation ie_i for the i-th feature is then generated by conditioning the explainer model on both a prompt P and the selected top-k images: iā¼mexpā(ā£P,ik).e_i m_exp(e P,T^k_i). (4) Alternatively, the top-k images can be modified to emphasize the regions where the feature is active. In our experiments, we explore two of such variants: āMasksā, where all non-activating patches are occluded; and āHeatmapsā, where activation intensity is overlaid to highlight the most responsive regions (see top activating images in Figure 1). 3.2 Proposed Approach Current VLMs align a visual encoder with a pre-trained language model backbone [bai2025qwen25vltechnicalreport, gemmateam2025gemma3technicalreport], enabling natural image interpretation. We hypothesize that the language model can serve as an explainer for SAE features. We do so by causally intervening the vision encoderās forward pass with each feature. We introduce two complementary methods for doing so. Steering-based Explanations. In the basic setting, we prompt333The prompts used for each method can be found in Appendix G. the model to explain an empty image I~ I, where by empty image we refer to a white image444We experimented with other types of images, such as black image, and random noise, obtaining similar results. in which all pixels are assigned the same uniform white value, ensuring that it provides no meaningful visual signal to the encoder. Then, we intervene the forward pass by adding the SAE feature vector decā[i,:] W_dec[i,:] across all positions, effectively generating an explanation of the intervened feature. The process is formalized as follows: iā¼mexpā(ā£P,I~,doā(msublā(I~)āmsublā(I~)+αādecā[i,:])),PromptEmpty imageCausal intervention with SAE featuree_i m_exp (e to27.03pt to6.83pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-13.5153pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to27.03pt to6.83pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-13.5153pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to18.89pt to4.78pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-9.4475pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to15.18pt to3.42pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-7.58754pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope , to22.22pt to7.22pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-11.11115pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 blue_drawio!17$ I$ blue_drawio!17$ I$ blue_drawio!17$ I$ blue_drawio!17$ I$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to22.22pt to7.22pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-11.11115pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 blue_drawio!17$ I$ blue_drawio!17$ I$ blue_drawio!17$ I$ blue_drawio!17$ I$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to22.22pt to7.22pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-11.11115pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 blue_drawio!17$ I$ blue_drawio!17$ I$ blue_drawio!17$ I$ blue_drawio!17$ I$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to22.22pt to7.22pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-11.11115pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 blue_drawio!17$ I$ blue_drawio!17$ I$ blue_drawio!17$ I$ blue_drawio!17$ I$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope , to580.41pt to11.49pt 290.204pt -2.5pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-290.204pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to580.41pt to11.49pt 290.204pt -2.5pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-290.204pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to417.87pt to9.65pt 208.93555pt -2.43054pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-208.93555pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to350.22pt to8.96pt 175.11116pt -1.73608pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-175.11116pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l( I)ā m_sub^l( I)+α W_dec[i,:])$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope ), currentcolorrgb0,0,0 to0pt to0pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke tikz@colorrgb0.5849609375,0.74765625,0.488671875 [named].rgb0.5849609375,0.74765625,0.488671875 [named]pgfstrokecolorrgb0.5849609375,0.74765625,0.488671875 @color@rgb@stroke0.58496093750.747656250.488671875 @invoke @color@rgb@fill0.58496093750.747656250.488671875 @invoke @beginscope @invoke tikz@colorrgb0.5849609375,0.74765625,0.488671875 [named].rgb0.5849609375,0.74765625,0.488671875 [named]pgfstrokecolorrgb0.5849609375,0.74765625,0.488671875 @color@rgb@stroke0.58496093750.747656250.488671875 @invoke @color@rgb@fill0.58496093750.747656250.488671875 @invoke @invoke @endscope @beginscope @invoke @transformcm1.00.00.01.0-30.32503pt9.78886pt @invoke .rgb0.5849609375,0.74765625,0.488671875 [named]pgfstrokecolorrgb0.5849609375,0.74765625,0.488671875 @color@rgb@stroke0.58496093750.747656250.488671875 @invoke @color@rgb@fill0.58496093750.747656250.488671875 @invoke .rgb0.5849609375,0.74765625,0.488671875 [rgb]0.5849609375,0.74765625,0.488671875 [named]pgfstrokecolorrgb0.5849609375,0.74765625,0.488671875 Prompt @invoke @endscope @invoke @endscope @beginscope @invoke [named]tikz@colorrgb0.51171875,0.703125,0.3984375 [named].rgb0.51171875,0.703125,0.3984375 [named]pgfstrokecolorrgb0.51171875,0.703125,0.3984375 @color@rgb@stroke0.511718750.7031250.3984375 @invoke @color@rgb@fill0.511718750.7031250.3984375 @invoke @beginscope @moveto1.99997pt0.0pt @lineto-1.19998pt1.59998pt @lineto0.0pt0.0pt @lineto-1.19998pt-1.59998pt @fill @endscope @moveto0.0pt9.03328pt @lineto0.0pt16.97498pt @lineto-32.56638pt16.97498pt @stroke @invoke @beginscope @invoke @transformcm0.0-1.01.00.00.0pt9.03328pt @invoke @invoke @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope currentcolorrgb0,0,0 to0pt to0pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke tikz@colorrgb0.50859375,0.6248046875,0.7875 [named].rgb0.50859375,0.6248046875,0.7875 [named]pgfstrokecolorrgb0.50859375,0.6248046875,0.7875 @color@rgb@stroke0.508593750.62480468750.7875 @invoke @color@rgb@fill0.508593750.62480468750.7875 @invoke @beginscope @invoke tikz@colorrgb0.50859375,0.6248046875,0.7875 [named].rgb0.50859375,0.6248046875,0.7875 [named]pgfstrokecolorrgb0.50859375,0.6248046875,0.7875 @color@rgb@stroke0.508593750.62480468750.7875 @invoke @color@rgb@fill0.508593750.62480468750.7875 @invoke @invoke @endscope @beginscope @invoke @transformcm1.00.00.01.03.533pt10.17778pt @invoke .rgb0.50859375,0.6248046875,0.7875 [named]pgfstrokecolorrgb0.50859375,0.6248046875,0.7875 @color@rgb@stroke0.508593750.62480468750.7875 @invoke @color@rgb@fill0.508593750.62480468750.7875 @invoke .rgb0.50859375,0.6248046875,0.7875 [rgb]0.50859375,0.6248046875,0.7875 [named]pgfstrokecolorrgb0.50859375,0.6248046875,0.7875 Empty image @invoke @endscope @invoke @endscope @beginscope @invoke [named]tikz@colorrgb0.421875,0.55859375,0.75 [named].rgb0.421875,0.55859375,0.75 [named]pgfstrokecolorrgb0.421875,0.55859375,0.75 @color@rgb@stroke0.4218750.558593750.75 @invoke @color@rgb@fill0.4218750.558593750.75 @invoke @moveto0.0pt9.4222pt @lineto0.0pt17.36389pt @lineto52.48334pt17.36389pt @stroke @invoke @beginscope @invoke @transformcm0.0-1.01.00.00.0pt9.4222pt @invoke @invoke @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope currentcolorrgb0,0,0 to0pt to0pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke tikz@colorrgb0.8671875,0.66796875,0.15 [named].rgb0.8671875,0.66796875,0.15 [named]pgfstrokecolorrgb0.8671875,0.66796875,0.15 @color@rgb@stroke0.86718750.667968750.15 @invoke @color@rgb@fill0.86718750.667968750.15 @invoke @beginscope @invoke tikz@colorrgb0.8671875,0.66796875,0.15 [named].rgb0.8671875,0.66796875,0.15 [named]pgfstrokecolorrgb0.8671875,0.66796875,0.15 @color@rgb@stroke0.86718750.667968750.15 @invoke @color@rgb@fill0.86718750.667968750.15 @invoke @invoke @endscope @beginscope @invoke @transformcm1.00.00.01.0-135.50148pt-19.45555pt @invoke .rgb0.8671875,0.66796875,0.15 [named]pgfstrokecolorrgb0.8671875,0.66796875,0.15 @color@rgb@stroke0.86718750.667968750.15 @invoke @color@rgb@fill0.86718750.667968750.15 @invoke .rgb0.8671875,0.66796875,0.15 [rgb]0.8671875,0.66796875,0.15 [named]pgfstrokecolorrgb0.8671875,0.66796875,0.15 Causal intervention with SAE feature @invoke @endscope @invoke @endscope @beginscope @invoke [named]tikz@colorrgb0.84375,0.609375,0 [named].rgb0.84375,0.609375,0 [named]pgfstrokecolorrgb0.84375,0.609375,0 @color@rgb@stroke0.843750.6093750 @invoke @color@rgb@fill0.843750.6093750 @invoke @moveto0.0pt-4.69997pt @lineto0.0pt-12.26945pt @lineto-137.74283pt-12.26945pt @stroke @invoke @beginscope @invoke @transformcm0.01.0-1.00.00.0pt-4.69997pt @invoke @invoke @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope (5) where we express the intervention using the do-operator [pearl_2009], and α is a coefficient indicating the strength of the intervention.555In practice, we select the α coefficient on a validation set of 500 features. By intervention we mean we substitute the model representation al layer l across all positions by the SAE decoder vector. This method offers an efficient and scalable means of obtaining feature explanations, requiring a single forward-pass (see Appendix F for details). Unlike prior methods, it doesnāt require an evaluation image set, simplifying the interpretability pipeline. Steering-informed Top-k Explanations. Instead of only using a blank image, we apply the same causal intervention while conditioning on the top-k images, ikT_i^kāthose that most strongly activate the i-th SAE feature. Intuitively, this focuses the explainer on the salient concept captured by the feature, enabling more targeted and meaningful interpretations. The process is defined as: iā¼mexpā(ā£P,ik,doā(msublā(ik)āmsublā(ik)+αādecā[i,:])).PromptTop-k imagesCausal intervention with SAE featuree_i m_exp (e to27.03pt to6.83pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-13.5153pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to27.03pt to6.83pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-13.5153pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to18.89pt to4.78pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-9.4475pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to15.18pt to3.42pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-7.58754pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$ green_drawio!17$ P$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope , to43.53pt to10.6pt 21.764pt -1.6101pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-21.764pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 red_drawio!17$ ^k_i$ red_drawio!17$ ^k_i$ red_drawio!17$ ^k_i$ red_drawio!17$ ^k_i$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to43.53pt to10.6pt 21.764pt -1.6101pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-21.764pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 red_drawio!17$ ^k_i$ red_drawio!17$ ^k_i$ red_drawio!17$ ^k_i$ red_drawio!17$ ^k_i$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to28.76pt to9.23pt -2.30833pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-14.37917pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 red_drawio!17$ ^k_i$ red_drawio!17$ ^k_i$ red_drawio!17$ ^k_i$ red_drawio!17$ ^k_i$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to22.54pt to6.6pt -1.6488pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-11.27086pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 red_drawio!17$ ^k_i$ red_drawio!17$ ^k_i$ red_drawio!17$ ^k_i$ red_drawio!17$ ^k_i$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope , to623.02pt to11.49pt 311.50972pt -2.5pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-311.50972pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to623.02pt to11.49pt 311.50972pt -2.5pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-311.50972pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to430.94pt to9.35pt 215.4716pt -2.43054pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-215.4716pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope to350.86pt to6.68pt 175.4306pt -1.7361pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke @beginscope @invoke @transformcm1.00.00.01.0-175.4306pt0.0pt @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke $ currentcolorrgb0,0,0 orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$ orange_drawio!17$ (m_sub^l(T^k_i)ā m_sub^l(T^k_i)+α W_dec[i,:])$$ @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope ). currentcolorrgb0,0,0 to0pt to0pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke tikz@colorrgb0.5849609375,0.74765625,0.488671875 [named].rgb0.5849609375,0.74765625,0.488671875 [named]pgfstrokecolorrgb0.5849609375,0.74765625,0.488671875 @color@rgb@stroke0.58496093750.747656250.488671875 @invoke @color@rgb@fill0.58496093750.747656250.488671875 @invoke @beginscope @invoke tikz@colorrgb0.5849609375,0.74765625,0.488671875 [named].rgb0.5849609375,0.74765625,0.488671875 [named]pgfstrokecolorrgb0.5849609375,0.74765625,0.488671875 @color@rgb@stroke0.58496093750.747656250.488671875 @invoke @color@rgb@fill0.58496093750.747656250.488671875 @invoke @invoke @endscope @beginscope @invoke @transformcm1.00.00.01.0-30.32503pt9.78886pt @invoke .rgb0.5849609375,0.74765625,0.488671875 [named]pgfstrokecolorrgb0.5849609375,0.74765625,0.488671875 @color@rgb@stroke0.58496093750.747656250.488671875 @invoke @color@rgb@fill0.58496093750.747656250.488671875 @invoke .rgb0.5849609375,0.74765625,0.488671875 [rgb]0.5849609375,0.74765625,0.488671875 [named]pgfstrokecolorrgb0.5849609375,0.74765625,0.488671875 Prompt @invoke @endscope @invoke @endscope @beginscope @invoke [named]tikz@colorrgb0.51171875,0.703125,0.3984375 [named].rgb0.51171875,0.703125,0.3984375 [named]pgfstrokecolorrgb0.51171875,0.703125,0.3984375 @color@rgb@stroke0.511718750.7031250.3984375 @invoke @color@rgb@fill0.511718750.7031250.3984375 @invoke @moveto0.0pt9.03328pt @lineto0.0pt16.97498pt @lineto-32.56638pt16.97498pt @stroke @invoke @beginscope @invoke @transformcm0.0-1.01.00.00.0pt9.03328pt @invoke @invoke @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope currentcolorrgb0,0,0 to0pt to0pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke tikz@colorrgb0.661328125,0.15,0.15 [named].rgb0.661328125,0.15,0.15 [named]pgfstrokecolorrgb0.661328125,0.15,0.15 @color@rgb@stroke0.6613281250.150.15 @invoke @color@rgb@fill0.6613281250.150.15 @invoke @beginscope @invoke tikz@colorrgb0.661328125,0.15,0.15 [named].rgb0.661328125,0.15,0.15 [named]pgfstrokecolorrgb0.661328125,0.15,0.15 @color@rgb@stroke0.6613281250.150.15 @invoke @color@rgb@fill0.6613281250.150.15 @invoke @invoke @endscope @beginscope @invoke @transformcm1.00.00.01.03.533pt10.17778pt @invoke .rgb0.661328125,0.15,0.15 [named]pgfstrokecolorrgb0.661328125,0.15,0.15 @color@rgb@stroke0.6613281250.150.15 @invoke @color@rgb@fill0.6613281250.150.15 @invoke .rgb0.661328125,0.15,0.15 [rgb]0.661328125,0.15,0.15 [named]pgfstrokecolorrgb0.661328125,0.15,0.15 Top-k images @invoke @endscope @invoke @endscope @beginscope @invoke [named]tikz@colorrgb0.6015625,0,0 [named].rgb0.6015625,0,0 [named]pgfstrokecolorrgb0.6015625,0,0 @color@rgb@stroke0.601562500 @invoke @color@rgb@fill0.601562500 @invoke @moveto0.0pt9.4222pt @lineto0.0pt17.36389pt @lineto53.47778pt17.36389pt @stroke @invoke @beginscope @invoke @transformcm0.0-1.01.00.00.0pt9.4222pt @invoke @invoke @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope currentcolorrgb0,0,0 to0pt to0pt 0.0pt to0.0pt @beginscope @invoke pgfstrokecolorrgb0,0,0 @color@rgb@stroke000 @invoke @color@rgb@fill000 @invoke @setlinewidth @invoke @beginscope @invoke @invoke @endscope to0.0pt @beginscope @invoke @beginscope @invoke tikz@colorrgb0.8671875,0.66796875,0.15 [named].rgb0.8671875,0.66796875,0.15 [named]pgfstrokecolorrgb0.8671875,0.66796875,0.15 @color@rgb@stroke0.86718750.667968750.15 @invoke @color@rgb@fill0.86718750.667968750.15 @invoke @beginscope @invoke tikz@colorrgb0.8671875,0.66796875,0.15 [named].rgb0.8671875,0.66796875,0.15 [named]pgfstrokecolorrgb0.8671875,0.66796875,0.15 @color@rgb@stroke0.86718750.667968750.15 @invoke @color@rgb@fill0.86718750.667968750.15 @invoke @invoke @endscope @beginscope @invoke @transformcm1.00.00.01.0-135.50148pt-19.45555pt @invoke .rgb0.8671875,0.66796875,0.15 [named]pgfstrokecolorrgb0.8671875,0.66796875,0.15 @color@rgb@stroke0.86718750.667968750.15 @invoke @color@rgb@fill0.86718750.667968750.15 @invoke .rgb0.8671875,0.66796875,0.15 [rgb]0.8671875,0.66796875,0.15 [named]pgfstrokecolorrgb0.8671875,0.66796875,0.15 Causal intervention with SAE feature @invoke @endscope @invoke @endscope @beginscope @invoke [named]tikz@colorrgb0.84375,0.609375,0 [named].rgb0.84375,0.609375,0 [named]pgfstrokecolorrgb0.84375,0.609375,0 @color@rgb@stroke0.843750.6093750 @invoke @color@rgb@fill0.843750.6093750 @invoke @moveto0.0pt-4.69997pt @lineto0.0pt-12.26945pt @lineto-137.74283pt-12.26945pt @stroke @invoke @beginscope @invoke @transformcm0.01.0-1.00.00.0pt-4.69997pt @invoke @invoke @invoke @endscope @invoke @endscope @invoke @endscope to0.0pt @discardpath @invoke @endscope (6) 4 Evaluating the Quality of the Explanations 4.1 Evaluation Metrics To quantitatively assess the explanations, we adopt three complementary evaluation techniques. The first two are existing input-based evaluations relying on top-k images [zhang2024largemultimodalmodelsinterpret, xu2025decipheringfunctionsneuronsvisionlanguage]. To avoid evaluating on the same set of images used for extracting the explanations, we use the 50k-image Imagenet test set, testD^test. Finally, building on top of recent work [shaham2024multimodal, bai2024describeanddissect], we propose a pair of metrics based on synthetic images generated by diffusion model. Simulation-based Evaluation. zhang2024largemultimodalmodelsinterpret, xu2025decipheringfunctionsneuronsvisionlanguage propose using a segmentation model msegm_seg, (e.g., SAM 2 [ravi2025sam]) to generate binary masks MsegM_seg containing 1s on the image patches that correspond to the concepts described in the explanations. These masks simulate how the SAE feature would activate if the explanation were true. MsegM_seg masks are compared against the actual featureās activation masks MfeatureM_feature. More formally, given an image and an explanation, the masks are computed as follows: Mfeaturei,I=ā[fiā(msubā(I))>0],Msegi,I=msegā(I,i),M^i,I_feature= 1[f_i(m_sub(I))>0], M^i,I_seg=m_seg(I,e_i), (7) where ā[ā ] 1[Ā·] is an indicator function that returns 1 if the condition holds and 0 otherwise. To quantitatively assess the alignment between these simulated and actual activation masks, the Intersection over Union (IoU) is computed and averaged over the top-k activating images ikT^k_i on testD^test: IoU-Scorei=1kāāIāik|Msegi,Iā©Mfeaturei,I||Msegi,IāŖMfeaturei,I|.IoU-Score^i= 1k _I ^k_i |M^i,I_segā© M^i,I_feature||M^i,I_segāŖ M^i,I_feature|. (8) CLIP-based Evaluation. To assess the semantic alignment between explanations and the corresponding top-k activating images in testD^test, we follow zhang2024largemultimodalmodelsinterpret and use a CLIP model mclipm_clip. For each dimension i, we compute the text embedding from the explanation ie_i and extract visual embeddings from the top-k activating images ikT^k_i associated with that feature. Specifically, for each image IāikI ^k_i, we apply the featureās activation masks (Mfeaturei,IM^i,I_feature) to focus on the relevant region, and compute its CLIP image embedding. We then measure the cosine similarity between the explanation embedding and each masked image embedding, averaged across images: CLIP-Scorei=1kāāIāikcosā”(mcliptextā(i),mclipimgā(I)).CLIP-Score^i= 1k _I ^k_i (m_clip^text(e_i),m_clip^img(I) ). (9) Table 1: Explanation evaluation metrics for the middle layer SAE of Gemma 3 and InternVL3-14B vision encoders. Except for AUROC, mean scores are reported, and statistical significance is assessed pairwise between methods. A value is underlined if it is significantly higher (with p<0.05p<0.05) than both other methods in the same column. Model Explanation Method IoU Score AUROC Synth. Act. Score CLIP Score Masks Heatmaps Masks Heatmaps Masks Heatmaps Masks Heatmaps Gemma 3 Steering 0.211 0.675 0.324 0.186 Top-k 0.211 0.198 0.723 0.791 0.330 0.364 0.190 0.187 Steering-informed Top-k 0.216 0.203 0.788 0.838 0.461 0.505 0.193 0.189 InternVL3 Steering 0.220 0.655 0.141 0.191 Top-k 0.224 0.201 0.768 0.775 0.187 0.183 0.199 0.187 Steering-informed Top-k 0.228 0.203 0.823 0.833 0.254 0.252 0.199 0.191 Synthetic-image-based Evaluation. For each feature i, we generate a set of N positive images using a diffusion model666We use Stable Diffusion 3.5 Medium [esser2024scalingrectifiedflowtransformers]. mdiffm_diff conditioned on the explanation ie_i, āi,+=Iā¼mdiffā(Iā£i)NI^i,+= \I m_diff(I _i) \^N. Then, we compute the average feature (synthetic) image activation score (Equation 3): Synthetic-Activation-Scorei=1NāāIāāi,+SI,i.Synthetic-Activation-Score^i= 1N _I ^i,+S^I,i. (10) We also generate a set of N negative images, āi,ā=Iā¼testNI^i,-= \I ^test \^N by randomly sampling from the test set. Following Equation 3, we obtain the image activation score for each positive and negative image and repeat the process for every feature. Finally, we compute the AUROC metric.777This is mathematically equivalent to the probability that the obtained image activation score for a āpositiveā image in āi,+I^i,+āgenerated by mdiffm_diffāranks higher than a randomly chosen negative image from testD^test. 4.2 Experimental Setup We train SAEs on a middle-layer of the vision encoders of Gemma 3 [gemmateam2024gemma2improvingopen] and the InternVL3-14B [zhu2025internvl3], two state-of-the-art VLMs. We also train a SAE at a later layer (3/4th depth) of Gemma 3 encoder. Gemma 3 employs a 400M parameters variant of the SigLIP encoder [zhai2023sigmoidlosslanguageimage], which works at a fixed resolution of 896Ć896896Ć 896 pixels. It remains frozen during LM training and adaptation stages and produces 4,096 tokens per image. In contrast, InternVL3-14B incorporates the pretrained InternViT-300M-448px-V2_5 encoder (300M parameters), which processes images at a 448Ć448448Ć 448 resolution, producing 256 tokens per input. This setup enables us to evaluate our proposed methods on a āpureā SigLIP encoder (Gemma 3) and another encoder adapted through joint training (InternVL3). Unless stated otherwise, the explainer models correspond to the same VLM from which the encoder is interpreted, Gemma 3 27B and InternVL3-14B respectively. The prompts used for Top-k and Steering-informed Top-k (these two methods share the same prompt) are designed to closely mirror that of Steering, ensuring consistency across methods (see Appendix G). For all experiments involving top-activating images, we report results using the top five images (i.e., k=5). 5 Results Figure 2: Middle layer SAE synthetic-image-based evaluation scores of Top-k method as a function of the similarity with Steering Explanations. Figure 3: Gemma 3 synthetic-image-based evaluation scores of Steering method as a function of the size of the LM msubjm_subj. To compare the different explanation methods we evaluate the quality of the explanations generated by these methods using the metrics described in Section 4. Our analysis is divided in three parts. Section 5.1 evaluates the performance of the Steering method and illustrates its potential to reduce contextual bias present in standard Top-k explanations. Section 5.2 shifts focus to the Steering-informed Top-k method, showing how it improves explanation quality. Finally, Section 5.3 explores the SAE feature space to uncover the semantic structure of learned features. 5.1 Explaining through Steering We analyze the effectiveness of the Steering method focusing on how it scales with model size, performs across different evaluation metrics, and complements Top-k explanations. Our results suggest that, although Steering has limitations when used in isolation, it scales effectively, inherently mitigates contextual biases, and can be used to improve other interpretability methods, despite being more efficient. Steering performs well on IoU but lags behind in the rest of metrics. While Steering performs competitively on IoU Score, especially on later layer SAE (Appendix B), it consistently lags behind in the remaining metrics. This is evident across all evaluated layers and models, where Steering achieves solid overlap with segmentation masks but fails to elicit strong activations or achieve high AUROC and CLIP alignment. In particular, its AUROC and Mean Synthetic Activation scores are substantially lower than those of Steering-informed Top-k, indicating weaker model sensitivity and less effective explanation quality. To verify that steering performance arises from feature-specific explanations rather than driven by the prompt or explained by randomness, we compare against random norm-matched vectors and permuted-direction controls, where randomly sampled SAE features are selected instead. As shown in Appendix J, these baselines perform substantially worse across all metrics, supporting the causal relevance of the injected feature directions. Steering helps surface high-quality Top-k explanations. We hypothesize that the Steering method can act as a valuable signal for validating Top-k explanations. Intuitively, if both methods independently produce semantically similar explanations for the same feature, this agreement may indicate a higher likelihood of correctness. To test this, we compute semantic embeddings of each explanation using a sentence similarity model [reimers-gurevych-2019-sentence] and measure the semantic similarity between the explanations produced by Top-k and Steering. We then assess the quality of the Top-k explanations as a function of this similarity, retaining only those above varying thresholds. As shown in Figure 3, explanation qualityāmeasured by normalized synthetic activation scores and AUROCāimproves consistently as the similarity to Steering increases. This trend holds across both the Gemma 3 and InternVL3 encoders with the exception of Gemmaās CLIP Score (Appendix D). These results suggest that Steering serves as an effective filter or guide, helping to identify high-quality explanations and improving the overall interpretability pipeline when used in conjunction with Top-k. Steering quality scales with LM size. Steering explanations improve as the size of the underlying language model used for generation increases. In this experiment, we vary the size of the LM used to produce explanations while keeping all other components fixed. As shown in Figure 3, both evaluation metricsāMean Synthetic Activation Score and AUROCāshow consistent improvements when moving from 4B to 12B to 27B parameter models. A positive trend is also observed for the rest of the metrics in Appendix E. This suggests that larger language models generate more informative and causally effective explanations when used in the Steering framework. Crucially, this trend points to a promising direction: as language models continue to grow in scale and capability, we can expect the quality of Steering-based interpretability to improve accordingly. Model Masking Type Steering Top-k Steering-informed Top-k Count % Count % Count % Gemma 3 Masks 0 0.0% 23 7.7% 12 4.0% Heatmaps 0 0.0% 125 47.7% 116 38.6% InternVL3 Masks 0 0.0% 19 6.3% 13 4.3% Heatmaps 0 0.0% 125 41.7% 117 39.0% Table 2: Count and percentage of ābackgroundā explanations turned āanimalā explanations by different methods (see main text for details). Figure 4: Example of Top-k explanation exhibiting contextual bias. Figure 5: Explanation evaluation scoresāsynthetic-image-based scores on the left, and IoU and CLIP scores on the right of Top-k method as a function of the evaluation set size. Steering-informed Top-k results on the rightmost bar. Steering prevents contextual biases found in Top-k. To better understand what Steering captures that Top-k does not, we analyze the 300 features with the largest IoU score difference between the two methods. Manual inspection of this subset reveals that Steering often produces accurate background explanations, whereas Top-k tends to misattribute these features to foreground elements such as animals, likely due to recurring context in the top activating images, a pattern we name contextual bias (see Figures 1 and 4). To quantify this effect, we categorize each explanation using Gemma 3 27B as background, animal, or other. As shown in Table 2, Top-k explanations frequently fall into the animal category (e.g., 47.7% with heatmaps), despite the feature aligning with background under Steering with a high IoU score. Notably, the hybrid Steering-informed Top-k reduces this misattribution (to 38.6%), suggesting it inherits some of Steering ās robustness to contextual bias. 5.2 The Best of Both Worlds: Steering-informed Top-k We now analyze how the Steering-informed Top-k method consistently improves explanation quality. In this section, we highlight two key findings: the consistent superiority of Steering-informed Top-k across all metrics, and its ability to overcome the diminishing returns when using larger datasets. Steering-informed Top-k gives the best explanations across the board. Across models and layers, Steering-informed Top-k consistently achieves the best performance across all evaluation metricsāIoU Score, AUROC, Mean Synthetic Activation, and CLIP Scoreādemonstrating its superiority in producing high-quality explanations. In both the middle and later layers of the Gemma 3 vision encoder (Table 1 top, and Table 3), as well as in the middle layer of the InternVL3-14B encoder (Table 1 bottom), this method outperforms both standard Steering and Top-k approaches, regardless of whether masks or heatmaps are used. Notably, it achieves the highest AUROC and Synthetic Activation scores, indicating that the explanations not only align well with segmentation and top-k activating images, but also elicit stronger feature activations when using synthetic examples. These results underline the effectiveness of combining top-k selection with causal interventions to enhance explanation quality. Figure 6: UMAP visualization of SAE feature explanations, Gemma 3 vision encoder, middle layer. Steering-informed Top-k overcomes diminishing returns. We additionally generate Top-k and Steering-informed Top-k explanations using the top-k images obtained with a reduced evaluation dataset. As observed in Figures 5 and 5, as the size of the evaluation dataset increases, standard Top-k explanations gradually improve in quality, but the gains exhibit diminishing returns, especially beyond 15k examples. This trend is visible across all metrics. In contrast, Steering-informed Top-k provides an immediate and substantial performance boost, effectively bypassing the need for large-scale data to reach high-quality explanations, with particular improvements in synthetically generated metrics (Figure 5), suggesting that the causal intervention adds valuable signal beyond what dataset scaling alone can offer. 5.3 Exploring the SAE Feature Space To complement the previous evaluations, this section provides an overview of the structure of the learned SAE feature space. For this purpose, we use the middle-layer SAE of Gemma 3 encoder. Selecting the best explanation per feature. Inspired by choi2024automatic, which identifies the best explanations from a set of candidates, we adopt a rank-based voting strategy to select the top explanation across the three explanation methods for each SAE feature. Specifically, each evaluation metric independently ranks each explanation method. Then, the explanation with the lowest (best) total rank is selected. In case of a tie, the explanation is chosen at random. To ensure we select interpretable features with meaningful explanations, we discard features whose selected explanation has an IoU score (Equation 8) below 0.2 or synthetic activation score (Equation 10) below 0.3. This filtering step leaves around 5,000 out of the original 7,690 alive features with assigned explanation. As shown in Figure 8, Steering-informed Top-k is selected more frequently. Notably, Steering and Top-k explanations are selected at similar rates. Figure 7: Depth (top) and perspective (bottom) features previously found as unique to Dinov2, surfaced via steering explanations. Figure 8: Count of selected explanations by each method. Each bar shows the level of abstraction of the selected explanations. Visualizing the SAE feature space. After selecting high-quality explanations, we compute semantic embeddings using a sentence similarity model888We use sentence-transformers/all-mpnet-base-v2 . [reimers-gurevych-2019-sentence]. The projected 2D UMAP [mcinnes2018umap-software] representation of these embeddings is shown in Figure 6, where the clusters are obtained via k-means algorithm [lloyd1982least] with k=30k=30. To facilitate interpretation, we assign a label to each cluster by giving Gemma 3 27B a random sample of 20 explanations from that cluster. Since the SAE is trained on ImageNet, the learned features seem to capture concepts prevalent in the dataset, such as humans (Human poses/figures), animals (Animal lifeforms), and natural scenes (Trees & Foliage). While many explanations correspond to high-level semantic categories (e.g., Vehicles, Clothing), which aligns with expectations for middle-layer features [cammarata2020thread], we also observe features at lower levels of abstraction. These include perceptual features like Repeating patterns/textures and Surface texture/patterns. Notably, as shown in Figure 8, Steering allows obtaining these low-level features. Finding features previously thought unique to DinoV2. The semantic space of explanation embeddings enables targeted retrieval of features aligned with user-specified concepts. As a proof of concept, we search for features previously identified by thasarathan2025universalsparseautoencodersinterpretable as unique to DinoV2 [oquab2024dinov], a vision model trained without language supervision. Contrary to prior claims, we found features seemingly representing depth (Figure 8 top) and perspective (Figure 8 bottom) in our SigLIP SAE. For instance, the depth feature is described by the Steering explanation as: āBlurred, out-of-focus background creating a sense of depth and indistinctness.ā, and the perspective feature as āLong, receding perspective created by converging lines, evoking a sense of depth and distanceā. While anecdotal, these findings demonstrate the utility of combining steering-based explanations with semantic search to uncover conceptual overlap across models. 6 Related Work Interpretability in vision models has seen rapid progress [fel2026rabbithulltaskrelevantconcepts, Joseph2024, joseph2025prismaopensourcetoolkit], with recent work aiming at mapping internal representations to natural language. A key strategy has been to leverage CLIPās shared image-text embedding space to align vision model features with human-understandable concepts [gandelsman2023interpreting, bhalla2024interpretingclipsparselinear]. In parallel, mechanistic interpretability has advanced our understanding of LLMs [ferrando2024primerinnerworkingstransformerbased], with SAEs revealing interpretable features [bricken2023monosemanticity]. Recently, SAEs have been applied to vision models [sae_vision, lim2025sparse, thasarathan2025universalsparseautoencodersinterpretable, rajaram2025linesightlinearrepresentations, venhoff2025visualrepresentationsmaplanguage, shabalin2025interpretinglargetexttoimagediffusion, gorton2024missingcurvedetectorsinceptionv1, surkov2025onestep], revealing semantically meaningful features. Yet, interpreting thousands of features remains a bottleneck, highlighting the need for automated solutions. Automated interpretability in LLMs has traditionally followed āinput-centricā strategies, where explanations are generated from top-activating inputs [openai_neuron_nle, choi2024automatic]. This input-centric method perspective has been extended to vision SAEs [zhang2024largemultimodalmodelsinterpret, xu2025decipheringfunctionsneuronsvisionlanguage, 10.1007/978-3-031-72980-5_26], where top-activating images are used instead. To address input-centric limitations, recent work has shifted toward output-centric explanations. gurarieh2025enhancingautomatedinterpretabilityoutputcentric propose VocabProj and TokenChange to reveal which outputs are causally tied to specific features. Similarly, paulo2024automaticallyinterpretingmillionsfeatures introduce an intervention-based metric to assess explanation quality through causal influence. In vision models, output-centric causal approaches based on steering have also emerged, though applications have so far remained confined to within-model interventions [joseph2025steeringclipsvisiontransformer, lim2025sparse, stevens2025sparseautoencodersscientificallyrigorous], while we propose leveraging a language model to generate the explanation on the intervened vision encoder. Closely related to our work are efforts on self-explaining features in LLMs. Patchscopes [ghandeharioun2024patchscopes, chen2024selfie] use activation patching to transfer representations and generate causal explanations. self_explaining_saes extend this idea to SAEs, enabling the model to act as its own explainer by describing its features. More recently, this line of work has shifted toward training models to better verbalize their internal representations [pan2026latentqa, li2026traininglanguagemodelsexplain, karvonen2026activationoraclestrainingevaluating]. These approaches enable more robust interpretation of model features, but require additional supervision. Extending such training-based approaches to vision-language models represents a promising direction for future work. 7 Conclusions This work presents a new framework for automatically interpreting features in vision models. By steering the encoder with targeted feature interventions alone, and leveraging a language model as the explainer, we generate feature explanations in an efficient and scalable way. While Steering overall tends to underperform Top-k method, it avoids their contextual biases and is particularly effective at surfacing lower-level features. Moreover, combining both approaches enables the identification of higher-quality explanations, highlighting their complementary nature. Explanation quality also scales consistently with language model size, suggesting that as LMs continue to advance, steering-based explanations will become increasingly informative and precise. The hybrid Steering-informed Top-k approach consistently produces the highest-quality explanations across evaluation metrics, demonstrating the value of integrating causal interventions with input-based methods. 8 Acknowledgments During the development of this work, Javier Ferrando, Pablo Agustin Martin-Torres, Daniel Hinjos and Anna Arias Duart were supported by the fellowship within the āGeneración Dā initiative, Red.es, Ministerio para la Transformación Digital y de la Función PĆŗblica, for talent attraction (C005/24-ED CV1). Funded by the European Union NextGenerationEU funds, through PRTR. This work was also supported by the ELLIOT Grant, funded by the European Union under grant agreement No. 10121439. References Appendix A SAE Training Details For training the SAEs, we used the dictionary_learning library [marks2024dictionary_learning]. All SAEs were optimized using the Adam optimizer with a learning rate of 3Ć10ā43Ć 10^-4, β1=0.9 _1=0.9, and β2=0.99 _2=0.99. Training was conducted over a single epoch of the ImageNet training set (1.28M images) with a batch size of 8192. We enforced a sparsity constraint of 25 active features per patch position. Model activations from HuggingFace [wolf-etal-2020-transformers] were cached on-the-fly during training. We maintained a buffer of 500 million activations, from which we randomly sampled. When the buffer was depleted to half capacity, it was refilled with new activations. Table 3: Explanation evaluation metrics for the later layer SAE of Gemma 3 vision encoder. Except for AUROC, mean scores are reported, and statistical significance is assessed pairwise between methods. A value is underlined if it is significantly higher (with p<0.05p<0.05) than both other methods in the same column. Explanation Method IoU Score AUROC Synth. Act. Score CLIP Score Masks Heatmaps Masks Heatmaps Masks Heatmaps Masks Heatmaps Steering 0.204 0.773 1.473 0.182 Top-k 0.194 0.186 0.782 0.857 1.453 1.609 0.188 0.187 Steering-informed Top-k 0.196 0.183 0.810 0.908 1.691 2.156 0.190 0.186 Appendix B Later Layer Results See Table 3. Appendix C Statistical Test Details To assess statistical significance across explanation methods, we conduct pairwise one-tailed tests for each evaluation metric and masking type. Since evaluation scores are not normally distributed, as verified via a Shapiro-Wilk test, we apply the nonparametric Mann-Whitney U test. An explanation method is considered statistically significant if it is stochastically greater than both alternatives (with p<0.05p<0.05). Appendix D Top-k Explanation Evaluation Scores as a Function of Semantic Similarity Between Steering and Top-k Explanations Figure 9: IoU Score and CLIP score values for Top-k method as a function of the similarity with Steering explanations. Appendix E Gemma 3 IoU and CLIP scores of Steering method as a function of the size of the LM msubjm_subj Figure 10: IoU Score and CLIP score values as a function of dataset size, for Masks Top-k method. Appendix F FLOPs Estimation We compare the approximate Floating Point Operations (FLOPs) for generating explanations, using the estimate 2ĆParametersĆTokens2ĆParametersĆTokens for a model forward pass [kaplan2020scaling]. Let: ⢠Neval=|eval|N_eval=|D^eval|: size of the evaluation image set. ⢠PsubP_sub: parameters of the subject model msubm_sub (also serving as mexpm_exp). ⢠PSAE_enc=dmodelā dSAEP_SAE\_enc=d_modelĀ· d_SAE: parameters for the SAE. ⢠TimgT_img: per image token representations (for msubm_sub input, for SAE processing per image, and for the empty image I~ I. E.g., 4096 for Gemma 3). ⢠TpromptT_prompt: token count for the textual prompt. ⢠TexplT_expl: max tokens in the explanation. ⢠k: number of top images selected. Top-k Explanations. This method consists of two main computational stages: 1. Dataset Precomputation (typically a one-time process to identify top-k activating images for features): It involves processing all NevalN_eval images through msubm_sub, followed by SAE encoding for each representation using enc W_enc. FLOPsprecomputeāNevalā Timgā 2ā (Psub+PSAE_enc)FLOPs_precomputeā N_evalĀ· T_imgĀ· 2Ā·(P_sub+P_SAE\_enc). Aggregation and sorting costs are generally minor in comparison. 2. Per-feature Explanation Generation: The explainer model msubm_sub is conditioned on the prompt and the k selected images. FLOPsgenā2ā Psubā (Tprompt+kā Timg+Texpl)FLOPs_genā 2Ā· P_subĀ·(T_prompt+kĀ· T_img+T_expl). The total cost is dominated by FLOPsprecomputeFLOPs_precompute when NevalN_eval is large. Steering-based Explanations. This approach avoids the dataset precomputation. An explanation for each feature i is generated via a single forward pass of msubm_sub from an intervention using the pre-defined SAE feature direction decā[i,:] W_dec[i,:]: ⢠Per-feature Explanation Generation: FLOPssteerā2ā Psubā (Tprompt+Timg+Texpl)FLOPs_steerā 2Ā· P_subĀ·(T_prompt+T_img+T_expl). The costs for retrieving the SAE feature direction and applying the intervention (vector operations) are also incurred, in addition to the forward pass captured by the formula above. Steering-informed Top-k Explanations. This method combines the dataset precomputation with an intervened generation step: 1. Dataset Precomputation: This stage is identical to the corresponding stage in the Top-k method, incurring FLOPsprecomputeFLOPs_precompute as defined above. 2. Per-feature Explanation Generation: Similar to standard Top-k generation, but with an intervention. The computational cost for generation remains approximated by FLOPsgenFLOPs_gen as defined for Top-k explanations. The costs for retrieving and applying the intervention are also incurred here, similar to the pure Steering-based method. This method achieves the best results at a comparable cost. Appendix G Prompts G.1 Explainer Prompts Steering Prompt You are given an image highlighting a visual or semantic element. This element may range from a low-level visual feature to a high-level abstract concept. Your task is to describe this element in a single, clear sentence. If the element is a high-level abstract concept, describe it as such; otherwise, describe its visual patterns. Favor a more general interpretation. Start the highlighted element description with \"The highlighted element in the image is a\". Figure 11: Prompt used for obtaining explanations for the Steering method. Gemma 3 outputs when given this prompt and a blank image (without steering) are reported in Section G.2. Top-k and Steering-informed Prompt (Masks) You are given set of images highlighting a visual or semantic element. The patches of the images not showing the element are masked out, giving the impression of a pixelated image. This element may range from a low-level visual feature to a high-level abstract concept. Your task is to describe this element in a single, clear sentence. If the element is a high-level abstract concept, describe it as such; otherwise, describe its visual patterns. Favor a more general interpretation. Provide a single description for the highlighted element appearing in all images, and please ignore the pixelated effect of the mask when describing the element. Start the highlighted element description with \"The highlighted element in the image is a\". Figure 12: Prompt used for obtaining explanations for the Top-k and Steering-informed Top-k method with Masks. Top-k and Steering-informed Prompt (Heatmaps) You are given set of images highlighting a visual or semantic element. The patches of the images showing the element are highlighted with a green heatmap. This element may range from a low-level visual feature to a high-level abstract concept. Your task is to describe this element in a single, clear sentence. If the element is a high-level abstract concept, describe it as such; otherwise, describe its visual patterns. Favor a more general interpretation. Provide a single description for the highlighted element appearing in all images, and please ignore the overlayed green heatmap when describing the element. Start the highlighted element description with \"The highlighted element in the image is a\". Figure 13: Prompt used for obtaining explanations for the Top-k and Steering-informed Top-k method with Heatmaps. G.2 Prompt-only behavior To assess whether explanations may be driven by the prompt alone, we report model outputs when using the steering prompt with a blank image and no feature intervention. Smaller models correctly describe the absence of content (e.g., Gemma 3 4B: āsolid, uniformly white space, creating a blank canvas effectā; Gemma 3 12B: āblank, white spaceā), while notably, the larger model produces a spurious description (Gemma 3 27B: āstylized depiction of a bird in flight, characterized by its curved wings and streamlined bodyā), which might be explained by the unnatural input. Appendix H Models and Datasets We use the following assets in our work: Models Table 4: The list of models used in this work. Model Link License Gemma 3 [gemmateam2025gemma3technicalreport] Hugging Face (Google) Gemma Terms of Use 999https://ai.google.dev/gemma/terms InternVL3-14B [zhu2025internvl3] Hugging Face (OpenGVLab) Apache 2.0 CLIP [radford2021learning] Hugging Face (OpenAI) MIT License SAM2 [DBLP:conf/iclr/RaviGHHR0KRRGMP25] Hugging Face (Meta) Apache 2.0 Stable Diffusion [esser2024scalingrectifiedflowtransformers] Hugging Face (Stability AI) CreativeML OpenRAIL M license all-mpnet-base-v2 [reimers-gurevych-2019-sentence] HuggingFace Apache 2.0 Datasets Table 5: The list of datasets used in this work. Dataset Link License ImageNet [imagenet] Official Website Custom (Non-commercial) Appendix I Compute Resources All training and evaluation experiments were run on a single node of 4x NVIDIA Hopper H100 64GB GPUs. The demo website runs on a machine with 2x NVIDIA 4090 GPUs. Each Gemma 3 SAE training took approximately 6 hours on 1 GPU, and 3 hours for InternVL3. Appendix J Faithfulness Controls for Steering-Based Explanations Table 6: Faithfulness controls for steering-based explanations on 1,000 SAE features (Gemma 3 vision encoder middle-layer). We compare true feature steering against random norm-matched directions and permuted feature directions. Mean scores shown. For Top-k-based explanations we used Masks. Model Explanation Method IoU Score AUROC Synth. Act. Score CLIP Score Gemma 3 Steering 0.204 0.691 0.353 0.186 Top-k 0.206 0.740 0.365 0.190 Steering-informed Top-k 0.209 0.806 0.518 0.193 Random-vector Steering 0.149 0.439 0.008 0.179 Random-perm Steering 0.138 0.448 0.008 0.161 To assess whether steering-based explanations are feature-specific rather than driven by the prompt or generic activation effects, we introduce two control baselines: (i) random norm-matched directions, and (i) random permutations of SAE feature directions. In both cases, the intervention strength is matched to the original steering setup. We evaluate these controls on 1,000 SAE features from the middle layer of the Gemma 3 vision encoder, using Gemma 3 27B as the explainer language model. Table 6 reports the results. We observe that both control baselines perform substantially worse than true feature steering across all metrics. In particular, synthetic activation drops to near-zero and AUROC converges to near 0.5 (random-classifier level), lack causal alignment with the underlying feature activations. IoU and CLIP scores are also consistently lower.