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.

Input — click to trace a receptive field

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.

Architecture
2×2
4
4

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.

The forward pass
Total parameters
Dense equivalent
Values after flatten
Spatial reduction
Receptive field

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.