Playing with Vision Embeddings

2026-06-09 · page · source ↗ · source summary

Preston Jensen reverse-engineers DINOv3's 384-dimensional vision embedding space using sparse autoencoders, feature visualization, and direct manipulation — showing what a small vision transformer actually "sees" and how its features compose. A masterclass in making neural network internals legible without language models.


Key Quotes

"Embeddings are, in a sense, the native language of neural networks. They are how networks can encode a rich variety of semantically meaningful representations with just a list of numbers. However, those numbers are frustratingly opaque."

The thesis in two sentences. Jensen frames the problem not as "how do we build better embeddings" but "how do we read the ones we already have." This is mechanistic interpretability's core question, applied to vision rather than language. The whole post is a demo of what you can do when you refuse to treat embeddings as black boxes.

"DINOv3 encodes far more than 384 distinct visual concepts into those 384 numbers. How? The leading hypothesis is something called superposition: models learn to cram many times more features than the dimensionality of their embeddings by pointing each feature in a nearly-orthogonal direction."

The superposition demo — squeezing 10 MNIST classes through a 2D bottleneck — is the post's best pedagogical move. Most superposition explanations stay in math; Jensen shows you the optimizer fighting to arrange 10 classes in 2 dimensions in real time. In 384 dimensions there's room for thousands. This is why a 12,000-feature SAE isn't overkill — it's necessary to unsmear the compressed representation.

"When you add corn kernels with a triumphal arch, you get a fusion of the two — an arch made of corn kernels. But when you add corn kernels with screws, you get the two features juxtaposed with each other — screws on top of corn."

The feature arithmetic section is where the post gets genuinely surprising. Adding feature vectors is supposed to be linear: combine "corn" and "arch," get "corn-arch." But the model doesn't treat all feature pairs the same way. Some compose by fusion, others by juxtaposition. Jensen doesn't solve why, but the observation itself is the contribution — it means SAE features don't live in a simple vector space where addition means "blend." The geometry is weirder than that.

"Feature 1511 is a feature specifically for single, large, whole strawberries, and 2314 is about many small strawberries whether whole or sliced."

The strawberry deep-dive is the post's most rigorous section. Through systematic experiments varying size, count, and cut-state, Jensen isolates exactly what distinguishes two seemingly-similar features. This is feature splitting (Chanin et al., 2024) made concrete: what looks like redundant encoding is actually a granular distinction the model learned independently. The key insight: "we only looked at two in depth here, but our SAE generated twelve thousand. Interpreting all of them is incredibly difficult, and doing a manual analysis is not scalable." The post is honest about the ceiling on manual interpretability.


Key Themes


Critical Analysis

This is one of the best pieces of ML explainer writing I've read. Jensen has the rare combination of technical depth and visual design skill — the interactive sliders and feature carousels aren't garnish, they're the argument. You can't convey "superposition" with text alone; you need to see the 10-class-2D bottleneck animation. You can't understand feature arithmetic without the side-by-side generated images. The post's format is its methodology.

The choice of DINOv3 over CLIP or SigLIP is smart. Language-aligned vision models (CLIP, SigLIP) are more practically useful but harder to interpret because language bleeds into the embedding structure — you're never sure if a feature is "visual strawberry-ness" or "textual association with the word strawberry." DINOv3's purity (no language, no text supervision) makes the interpretability claims cleaner. What you're reading is genuinely vision, not vision-through-language.

The honesty about the generation pipeline's artifacts is important and easily missed. The generated images are more saturated, higher contrast, and duplicate objects. Jensen tells you this upfront so you can mentally correct for it. Most feature visualization work buries these caveats in appendices.

The biggest limitation — which Jensen acknowledges — is that this is a single small model (ViT-S, 384-dim CLS embedding). The techniques almost certainly generalize to larger vision transformers, but nobody's run this playbook on a ViT-L or a vision-language model yet. The open question at the end ("Can you do similar feature visualization in Vision Language Models?") is the right one. VLMs have richer embeddings but the language contamination problem makes interpretability much messier.

The UMAP map at the end is pretty but underdelivers relative to the rest of the post. It shows feature clusters exist, which we already knew from the decomposition examples. What it doesn't show is whether those clusters correspond to semantic categories humans would name — the interactive version might, but the static frame in the post doesn't.


Related Pages


Sources: Playing with Vision Embeddings Last updated: 2026-06-09