3.4.7 · D5Convolutional Neural Networks
Question bank — VGG networks

True or false — justify
Every item: decide true or false, then give the one-sentence reason. The reason is the answer — a right verdict with a wrong reason is a miss.
Two stacked 3×3 convolutions and one 5×5 convolution see exactly the same input patch per output pixel.
True — the receptive field (, the input region one output pixel sees) of both is (using ), but the two-3×3 stack is not the same function because it has a ReLU in the middle, so it can represent things a single linear 5×5 kernel cannot.
Because two 3×3 convs equal one 5×5 in receptive field, they also have the same number of parameters.
False — with input = output channels, two 3×3 layers cost weights versus for the 5×5 (28% fewer); equal reach does not mean equal parameter count.
VGG keeps the spatial height and width constant inside a block.
True — VGG uses same-padding (padding for a 3×3 conv), so ; only the 2×2 max-pool between blocks halves the size.
Doubling the channels after every pool keeps the total number of activations constant.
False — 2×2 pooling cuts activations by 4× and doubling channels only multiplies by 2, so the count still drops to half (, where are height/width and is channel count); doubling softens the loss, it does not cancel it.
Most of VGG-16's 138M parameters live in the convolutional layers.
False — the three fully-connected layers (especially the first FC) hold the large majority; the conv stack is comparatively lean.
VGG-19 always beats VGG-16 on accuracy because it is deeper.
False — extra depth gives diminishing returns and the gain is tiny-to-none on ImageNet; "deeper" only helps until optimization difficulty (pre-ResNet, no skip connections) eats the benefit.
Replacing the 5×5 filters of AlexNet with stacked 3×3 filters increases the number of non-linearities.
True — one 5×5 = one ReLU, whereas two 3×3 = two ReLUs, giving more places to bend the decision surface for the same effective receptive field.
VGG-16 was initialized by copying weights from a trained 11-layer VGG.
False — the deeper VGG-16/19 configurations were in fact trained from scratch; the authors report using the shallow VGG-11 to initialize the first and last layers of some configs, but VGG-16/19 converged fine from random init using careful weight scaling — so "always bootstrapped from VGG-11" is a myth. The real 2014 difficulty was optimizing deep nets before batch normalization, solved by good initialization and small (3×3) filters.
Spot the error
Each statement contains one wrong claim. Name it and correct it.
"VGG-16 uses 3×3 convolutions everywhere and 1×1 convolutions to match channel dimensions across blocks."
Wrong — canonical VGG-16/19 use only 3×3 convs; channel changes come from the chosen output-channel count of the 3×3 layer itself. (The 1×1 idea belongs to the experimental "configuration C" defined in the glossary, not the famous nets.)
"After the last pooling the feature map is 7×7×512, so flattening gives 7×512 = 3584 units into the first FC layer."
Wrong arithmetic — flatten multiplies all three dimensions: units, not .
"Same-padding for a 3×3 stride-1 conv means padding of 3 on each side."
Wrong — same-padding is for kernel size ; padding of 3 would enlarge the map, not preserve it.
"Three stacked 3×3 convs give a 9×9 receptive field because 3+3+3 = 9."
Wrong — you add per extra layer, not the full kernel: , so it matches a single 7×7.
"Doubling channels after pooling increases spatial resolution to compensate for the pool."
Wrong — doubling adds channels (feature richness), not spatial resolution ; the pool has already halved height and width and nothing restores that.
"The +1 in is one shared bias for the whole layer."
Wrong — it is one bias per output channel (that is why the whole bracket, including the , is multiplied by ), so a 64-filter layer has 64 biases, not 1.
"Because VGG uses the same 3×3 kernel throughout, every layer has the same number of parameters."
Wrong — parameter count scales with , which grows as channels double each block; a 512→512 layer has vastly more weights than a 3→64 one despite the identical 3×3 kernel.
Why questions
Give the reason, not the restated fact.
Why prefer two 3×3 convs over one 5×5 even when both cover the same area?
Fewer parameters ( vs for -in/-out layers) and an extra ReLU for more expressive power — you spend less and buy more non-linearity.
Why does VGG start with only 64 channels () instead of jumping straight to 512?
Low-level features (edges, colors) need few distinct detectors, so a wide first layer would waste computation at full 224×224 resolution where activations are most expensive.
Why does VGG double channels specifically after pooling rather than at random layers?
Pooling quarters the spatial cost, freeing a compute budget to widen channels; doubling right there keeps the per-layer FLOP/memory profile roughly balanced across blocks.
Why does VGG stop doubling at 512 rather than continuing to 1024, 2048?
Diminishing returns — memory and parameters explode while deep semantic features do not need proportionally more width, so extra channels buy little accuracy.
Why is aggressive data augmentation essential for VGG?
138M parameters on ~1.2M images invites severe overfitting; random crops, flips and color jitter effectively multiply the dataset, acting as a regularizer.
Why can VGG still be the better choice for transfer learning on a small dataset despite being "obsolete"?
Its simple, linear feature hierarchy transfers cleanly and is easy to fine-tune/interpret, so on <10k images its rich generic features often beat efficient-but-tangled architectures.
Why does uniform same-padding matter for VGG's design clarity?
It guarantees the spatial size only ever changes at pools, so you can reason about each block's resolution by counting pools alone — no per-conv bookkeeping.
Why do 1×1 kernels fail to do the job VGG's 3×3 kernels do?
A 1×1 kernel mixes only channels at a single pixel — it has no spatial neighborhood, so it cannot detect edges or local texture the way a 3×3 window can.
Edge cases
Boundary and degenerate scenarios the neat formulas (parameter count, output size, and the receptive-field recurrence — all defined at the top of the page) don't advertise.
What happens to if you use a 3×3 conv (, ) with zero padding ()?
Each conv shrinks the map by 2 (); stacked deep, the feature map would vanish — which is exactly why VGG insists on same-padding ().
Does adding same-padding change the receptive-field size of a stacked conv?
No — padding only supplies border pixels so edge outputs exist; the reach per layer is unchanged, so RF depends only on kernels and strides, never on . (Padding shifts which input a pixel maps to, not how wide the seen window is.)
What is the receptive field of a single 3×3 conv, the base case of the recurrence?
; the recurrence needs this starting value or it has nothing to build on.
Why does the stride product multiply the term in the recurrence?
Because each new layer's filter steps across the previous layer's grid, and every earlier stride has already stretched how far one such step reaches back in original-input pixels — a step of 1 on a grid that was downsampled by covers original pixels, so the reaches compound multiplicatively (see the orange spacing arrow in the figure).
If every stride in the recurrence were 2 instead of 1, would three 3×3 convs still give a 7×7 receptive field?
No — with stride 2 the stride product grows, so ; VGG's small clean 7×7 field relies on stride-1 convs.
What is the receptive field over the original input after two stride-2 pooling stages (each with a 3×3 conv before it)? Give the number.
Work the recurrence with strides for the four layers, base : layer 2 (running product ) ; layer 3 (running product ) ; layer 4 (running product ) — so a pixel deep in block 3 sees a 13×13 original-image window.
If , at what do the two-3×3 and one-5×5 parameter counts cross?
They never cross for — for all positive , so the two-3×3 stack is always cheaper in weights, regardless of channel width.
What breaks if you feed VGG-16 a 200×200 image instead of 224×224?
The conv/pool stack still runs (it is size-agnostic), but the flattened size entering the first FC layer changes, so the fixed weight matrix no longer fits — the classifier assumes a 7×7×512 map.
Recall One-line recap of the traps
Equal receptive field ≠ equal parameters ≠ equal function; the "+1" is per-channel bias; flatten multiplies all dims; channel-doubling softens (never cancels) the pool's activation loss; canonical VGG is 3×3-only; same-padding keeps size constant but does not change RF.