VGGNet proved that stacking 3×3 kernels beats large kernels. InceptionNet showed that applying multiple kernel sizes in parallel captures multi-scale features. Both ideas shaped every modern CNN.
VGGNet (Simonyan & Zisserman, 2014 ImageNet) answered a fundamental question: how should we design deeper CNNs? The answer was radical in its simplicity — use only 3×3 convolutions throughout the entire network, and stack them as deep as memory allows. AlexNet (2012) used 11×11 and 5×5 kernels. VGG-16 replaced them all with 3×3 and became the first network to show that depth (16 weight layers) systematically improves accuracy, regardless of kernel size.
VGG-16 architecture: 5 convolutional blocks (64, 128, 256, 512, 512 channels) each with 2-3 layers of 3×3 conv + ReLU, separated by max-pooling. Then 3 fully-connected layers (4096 → 4096 → 1000 classes). Total: ~138M parameters. The vast majority live in the FC layers — a weakness that 1×1 convolutions and global average pooling later solved (see ResNet, InceptionNet).
Why use two 3×3 layers instead of one 5×5? The receptive field is identical — a 3×3 on the output of a 3×3 sees a 5×5 patch of the original input — but the parameter count is strictly smaller, and you get an extra ReLU nonlinearity in between. Three stacked 3×3 layers see a 7×7 patch with even larger savings over a single 7×7.
Parameter count (C channels, bias included): one 5×5 conv = C × C × 25 + C params. Two 3×3 convs = 2 × (C × C × 9 + C) params. For C=64: 5×5 costs 102,464 params; two 3×3 cost 73,856 params — 28% fewer. The gap widens with more channels. Additionally, two 3×3 layers give two ReLU activations — more nonlinearity, better gradient flow.
GoogLeNet / InceptionNet (Szegedy et al., Google, 2014) asked a different question: instead of choosing one kernel size, what if we apply all of them at once and let the network learn which scales matter? The Inception module applies 1×1, 3×3, and 5×5 convolutions plus a 3×3 max-pool in parallel, then concatenates their output channels. This makes the network wider at each layer rather than just deeper.
The key to InceptionNet's efficiency is 1×1 convolutions used as channel-dimension bottlenecks. A 1×1 conv does not change spatial dimensions (H×W stays the same) but reduces the number of channels, e.g., 256 → 64. This is done before an expensive 3×3 or 5×5 conv, dramatically reducing the computation. This bottleneck design was later used in ResNet's bottleneck block, MobileNet's depthwise separable convolutions, and virtually every efficient modern architecture.
Say the answer out loud before revealing — recalling is what makes it stick. ➜ Next: ResNet and Identity Shortcuts
Why does VGGNet use only 3×3 convolutions?
What is an Inception module and why is it called 'parallel'?
What does a 1×1 convolution do in InceptionNet?
How does GoogLeNet achieve 20× fewer parameters than VGGNet?