Every intermediate result, nothing hidden
Inside a convolutional network
One image pushed through a complete stack: convolution, activation, pooling, twice over, then flattened. The filters here are hand-written rather than trained — so you can see exactly what each one is looking for — but the shapes, the arithmetic and the parameter counts are the real ones.
Click anywhere. The boxes show how much of the input a single value at each later stage actually depends on — its receptive field. It grows with depth, which is how a network built from 3×3 filters ends up seeing whole objects.
Display normalisation stretches each feature map to use the full range. It makes weak responses visible, but it is a display choice — the numbers flowing through the network are unchanged.
Turn off ReLU and watch the second layer collapse. Without a non-linearity between them, two stacked convolutions are mathematically equivalent to a single convolution — the composition of two linear maps is just another linear map. All that depth would buy you precisely nothing. ReLU's job is not to be clever; it is to be non-linear, so that layer two can build features that layer one could not express at all.
Pooling throws away three quarters of the values and barely hurts. A 2×2 max pool keeps only the largest response in each little block, which halves both dimensions. What survives is whether a feature was found nearby rather than exactly where — so the representation becomes progressively less sensitive to small shifts, and the cost of every subsequent layer drops fourfold. Switch to average pooling and edges go noticeably softer: taking the mean of a strong response and three weak ones dilutes precisely the signal the convolution just worked to find.
The receptive field is why depth matters. One 3×3 filter sees a 3×3 patch. Stack a second after a pool and its 3×3 window covers a far larger region of the original image. Click around the input and watch the dashed boxes grow: early layers can only report local texture, while deeper ones have enough context to describe shapes. Depth is how a network built entirely from tiny filters ends up seeing big things.
Compare the two parameter counts. The whole convolutional stack is a few hundred weights. A dense layer connecting the same input to the same number of outputs would need hundreds of thousands. Same job, three orders of magnitude apart — and the convolutional version generalises better, because a feature it learns in one corner is automatically available everywhere.