Nobody Wrote These Filters
When someone says a model learned something, what actually changed? A vision model shows you directly. Its first layer is a set of small grids of numbers that sit in the same space as pixels, so you can print them as pictures. Train one here on real photographs and watch sixteen grids of static turn into edge detectors nobody wrote, then slide one over a photo the model has never seen.
Nobody Wrote These Filters
In 1968 Irwin Sobel and Gary Feldman picked nine numbers by hand, laid them out in a three by three grid, and that grid could find the edges in any photograph. It was good engineering and it held up for decades. Train a network on photos today and something very like it turns up in the first layer on its own, except nobody picked the numbers and nobody ever mentioned edges.
That is the part people wave their hands at when they say a model learned something. Here you can watch it instead. The network below has 5,250 weights, every one of them a floating point number, every one currently random. Sixteen of its grids are drawn on this page, and right now they are static.
A filter is a small grid of numbers
A convolution slides a small grid across an image. At each position it multiplies every grid number by the pixel underneath and adds up the results, and that single sum becomes one pixel of the output. Sobel's grid has a negative column down one side and a positive column down the other, so it cancels to nothing on flat areas and spikes wherever brightness changes. That is the whole of an edge detector.
Terracotta where the sum comes out positive, blue where it comes out negative, pale where the grid found nothing. The nine hand-picked numbers are -1 0 1 -2 0 2 -1 0 1. For a slower walk through the multiply and add, see Convolution: Kernels on an Image.
Train it and watch the static resolve
The network gets 8,000 photographs at 32 by 32 pixels, each labelled with one of ten things: cat, ship, truck, frog and so on. It sees brightness only, no colour, and each photo is standardised so that overall lightness carries no information, which leaves nothing but structure to work with. Its only instruction is to name the thing in the photo. Nothing in the loss function mentions edges, or orientation, or the word filter.
Every number here is computed in this tab: the forward pass, the gradients, the Adam updates, and the accuracy on 1,000 photographs the network never trains on. It settles somewhere around forty percent, which is four times chance and nowhere near a real vision model. The filters are the point, not the score.
Look at one of them closely
This starts on whichever filter currently matches an edge most closely, and clicking any tile above pins it here instead. You get its actual forty nine numbers, the angle it answers to, and what happens when it slides over a photograph it has never been anywhere near. The match score is a correlation against an ideal edge, so it is a measurement rather than an impression, and out of 192 freshly initialised filters, not one cleared 0.6.
This is the measurement a visual neuroscientist would run on a cell: show the filter a striped patch at every angle in turn and record how hard it answers. A trained filter usually gives one hump, which means it has picked an orientation and largely ignores the others. The dashed line is the same filter before training, when it answered weakly to everything and strongly to nothing. Each line is drawn against its own peak, and the peaks are printed underneath, because the trained filter also answers several times harder.
So what does it mean that a model learned something
The whole network holds 5,250 numbers and the photographs it trains on are 8,192,000 numbers. It could not memorise them if it tried, and that shortfall is the mechanism. The only way to push the loss down with that little room is to find what the photographs have in common, and edges at various angles are the first thing worth finding. Scale by itself does not create that pressure. The gap between what a model would have to remember and what it has room for does.
This is also the honest answer for grammar, or arithmetic, or anything else a language model appears to know. No rule was written down anywhere. A pile of numbers was nudged, one gradient step at a time, until it encoded something general enough to work on inputs nobody had shown it. Vision just hands you the receipt as a picture, because a first-layer filter lives in pixel space and can be printed. A transformer's weight matrix maps one abstract vector space to another, so printing it raw gives you static, and finding what it learned takes other instruments: the geometry of an embedding table, the pattern an attention head settles into, or the plain fact that a working model is a file of numbers you can corrupt.