Visual walkthrough — Inception - GoogLeNet
This page rebuilds the single most important idea in Inception/GoogLeNet from the ground up: why placing a tiny 1×1 convolution before a big 5×5 convolution slashes the cost by roughly 12× — without throwing away the network's power.
We assume you know nothing beyond "an image is a grid of numbers." Every symbol is earned before it is used. If you want the CNN groundwork first, see 3.4.01-CNN-Basics.
Step 1 — What a feature map actually is

Three numbers describe this stack:
- — how many rows of pixels (the picture is this tall).
- — how many columns of pixels (this wide).
- — how many sheets are stacked (this deep). Each sheet is called a channel.
In the parent's example the input is : a picture, pattern-sheets deep.
Step 2 — What one convolution filter costs to run
WHAT. A filter of size is a little cube of learned numbers. We slide it over the input; at every position it multiplies-and-adds to produce one output number.
WHY count multiplications? Because a computer's time is dominated by how many multiply-adds it does. If we can count those, we can compare designs before building them.
PICTURE. Look at the sliding cube below. At one landing spot it covers a patch across all input channels, so it does multiplications to make one output value.

Reading it term by term:
- — the filter lands once per output pixel, so this many spots.
- — at each spot it reads a square (e.g. ).
- — it reads that square on every input sheet.
- — we run that many different filters to build output sheets.
Everything from here is just plugging numbers into this one formula.
Step 3 — The naive 5×5: measuring the explosion
WHAT. Take the parent's scenario. Input . We want a conv making output sheets. Plug straight into Step 2.
WHY. To feel how bad the expensive path is, we need its exact operation count as a baseline.
PICTURE. The pink block below is that number — over 160 million multiply-adds for a single layer. The villain is that sits inside the big multiplication: every one of the 25 patch-cells is read across all 256 sheets.

The insight that fixes this: what if we shrink down to a small number first, cheaply, and only then pay for the ?
Step 4 — The 1×1 conv: a thinning valve that reads no neighbours
WHAT. A 1×1 convolution is Step 2 with . Its patch is a single pixel — it looks at no neighbours, only at the tower of channel-values standing over one pixel.
WHY this tool and not another? We need something that changes the channel count () while leaving the picture size () untouched, and does it cheaply. A 1×1 conv is exactly that: because , its cost has no blow-up. It is the only conv that reshapes depth without touching space.
PICTURE. At one pixel it takes the numbers stacked above it and forms a weighted sum — a learned recipe — to produce each new channel.

Its cost (from Step 2 with ):
Step 5 — Two cheap layers instead of one expensive one
WHAT. Replace the naive path with a valve then the big conv:
- conv: shrink channels.
- conv: work on just channels, produce .
WHY. Because the 's cost (Step 2) is proportional to . If we hand it instead of , we cut its bill by — and the valve itself is nearly free.
PICTURE. Watch the fat 256-deep block get squeezed through the narrow 16-deep neck before the expensive ever touches it.

Step 1 — the valve:
Step 2 — the big conv on the thinned stack (note is now ):
Add them:
Step 6 — The payoff, and the rule for when it pays
WHAT. Divide the naive cost by the bottleneck cost.
WHY it works algebraically. Write both costs and cancel the shared . The bottleneck wins when:
Factor out of the left:
The left grows linearly in the small number ; the right is a fixed big product. So as long as is chosen small, the left stays under the right. Plugging :
PICTURE. Two bars: the towering naive cost vs. the short bottleneck cost — same job done, one twelfth of the work.

Step 7 — The degenerate cases (never let the reader get surprised)
(the valve applied to itself). Then and the inequality becomes — usually false for tiny channel counts, so you'd never bottleneck a 1×1 conv. There is nothing to save; a 1×1 is already the cheapest conv. That's exactly why Branch 1 of the module is a bare 1×1.
(no shrinking). The valve degenerates to a full-width layer. Cost becomes , which is larger than naive . Confirms Step 6's warning: zero savings, pure waste.
(channel wiped out). The neck passes nothing; every downstream feature is zero. This is the limiting worst case of over-squeezing — the network loses all information. Real designs keep comfortably above zero.
The pooling branch. Branch 4 pools first (no learned cost), then a 1×1 trims channels so the concatenation doesn't balloon. Same valve idea, different order.

Recall Check yourself on the edge cases
Why don't we bottleneck a 1×1 conv? ::: A 1×1 has , so there is no blow-up to tame — it's already minimal. Adding a valve would only add cost. What happens if ? ::: No shrinking occurs; total cost exceeds naive, so you've wasted a layer. What breaks if ? ::: The neck passes zero channels; all information is destroyed downstream.
The one-picture summary

The entire derivation in one image: the fat input meets two roads. The naive road (pink) drags all 256 channels through a conv → 160M ops. The Inception road (blue) squeezes to 16 channels with a nearly-free 1×1 valve, then runs the → 13M ops. Same output shape, 12× less work. Stack four such branches side by side and depth-concatenate their outputs — that is one Inception module.
Recall Feynman retelling — say it back in plain words
A feature map is a stack of pattern-sheets: tall, wide, and deep. A convolution slides a little cube over it, and the number of multiply-adds is how many landing spots times patch area times sheets read in times sheets made out. A big conv over a very deep stack is brutal, because the deep count sits inside the big patch multiplication — 160 million operations for one layer. The trick: a conv looks at no neighbours, only at the tower of numbers over a single pixel, and mixes them into fewer channels. So we thin the stack from 256 down to 16 with this cheap valve, then run the on the skinny stack. The valve is almost free, the big conv now reads instead of , and the total drops to 13 million — twelve times cheaper. The catch: the neck must be narrow; if you don't shrink much, you pay more, not less. Run four such thinned branches in parallel (1×1, 3×3, 5×5, pooling) and glue their outputs together by depth — you've built one Inception module, and you can afford to stack nine of them. Compare with VGG's uniform stacks and ResNet's skip connections to see the design space; the vanishing-gradient worry that motivated the auxiliary heads is covered in 3.2.06-Vanishing-Gradients, and the refinements live in Inception v2/v3.