DL0071 VGG vs GoogLeNet vs ResNet

Compare VGG, GoogLeNet/Inception, and ResNet: what key problem did each architecture address?

Answer

The three architectures answer three different questions that the ImageNet era asked in sequence. VGG (2014) asked whether depth alone helps and showed that stacking small 3×3 convolutions to 16 or 19 weight layers beats wide shallow filters, but it paid for that with 138M parameters and 15.3 GFLOPs, roughly 90% of the parameters sitting in three fully connected layers. GoogLeNet/Inception (2014) asked how to get depth and multi-scale receptive fields cheaply: parallel 1×1, 3×3, 5×5, and pooling branches inside one Inception module, with 1×1 bottleneck convolutions cutting channel depth before the expensive kernels, plus global average pooling replacing the fully connected head, giving better accuracy than VGG with about 6.8M parameters and 1.5 GFLOPs. ResNet (2015) asked why depth stopped paying off past roughly 20 to 30 layers and identified the degradation problem: a 56-layer plain net reaches higher training error than a 20-layer one, so this is an optimization failure, not overfitting. Its fix, the identity shortcut y = \mathcal{F}(x) + x, makes each block learn a residual and gives gradients a direct path, which made 152-layer and even 1000-layer networks trainable.

(1) VGG, Depth Through Uniformity: three stacked 3×3 layers match the 7×7 receptive field with fewer parameters and two extra nonlinearities, proving that a simple repeated motif scales; the cost is a parameter-heavy fully connected head and no answer to what happens beyond ~19 layers.
(2) Inception, Depth Under a Compute Budget: the module runs several kernel sizes in parallel so the network does not have to choose one scale per layer, and 1×1 reduce → 5×5 conv keeps the cost of the wide branches roughly an order of magnitude lower than the naive version.
(3) ResNet, Depth Without Degradation: residual blocks reframe the layer’s job as learning a correction to identity, so adding layers can never be worse than copying the input; combined with batch normalization and bottleneck blocks (1×1, 3×3, 1×1), it made very deep training routine.

Parameter Arithmetic:
3 \times 3^2 C^2 = 27 C^2
1 \times 7^2 C^2 = 49 C^2
5^2 \cdot 192 \cdot 32 = 153{,}600
192 \cdot 16 + 5^2 \cdot 16 \cdot 32 = 15{,}872

Where:

  • C is the channel count held constant across the stack, so the first two lines compare three 3×3 layers against one 7×7 layer of identical receptive field: about 45% fewer weights and two extra ReLUs.
  • The third line is the naive Inception 5×5 branch: 192 input channels, 32 output channels, 5^2 spatial taps.
  • The fourth line inserts a 1×1 reduce to 16 channels first, so the same branch costs 15,872 weights, roughly 10\times cheaper; this bottleneck is what let GoogLeNet run 22 layers at 1.5 GFLOPs.
Scatter plot of ImageNet top-5 error against parameter count on a log scale for VGG-16 at 138M parameters and 7.3 percent, GoogLeNet at 6.8M and 6.7 percent, ResNet-50 at 25.6M and 5.25 percent, and ResNet-152 at 60.2M and 4.49 percent

Figure 1: Accuracy did not come from parameter count: GoogLeNet beats VGG-16 with about 20\times fewer parameters, and ResNet improves again at moderate size. Evaluation protocols differ slightly across the original papers, so read the trend rather than the decimals.

The residual idea is the one that generalized furthest. Writing a block as y = \mathcal{F}(x, \{W_i\}) + x means the optimizer only has to push \mathcal{F} toward zero to recover the identity mapping, which is exactly the solution the deeper plain net failed to find. The gradient view is just as important: the identity term contributes an ungated path so the signal reaching early layers cannot vanish through repeated multiplication by small Jacobians. In practice the projection shortcut (1\times1 convolution with stride 2) handles the stage boundaries where spatial size and channel count change.

Residual Formulation:
y = \mathcal{F}(x, \{W_i\}) + x
\frac{\partial L}{\partial x} = \frac{\partial L}{\partial y}\left(I + \frac{\partial \mathcal{F}}{\partial x}\right)

Where:

  • x is the block input, y its output, and \mathcal{F} the two or three stacked convolutions with weights \{W_i\}.
  • I is the identity Jacobian of the shortcut; it keeps the gradient norm from collapsing even when \partial \mathcal{F} / \partial x is tiny, which is why depth beyond 100 layers becomes trainable.
  • L is the training loss; when shapes differ across a stage, x is replaced by W_s x with a projection shortcut.
Schematic training error curves over 160 epochs: a 56-layer plain network plateaus at a higher training error than a 20-layer plain network, while a 56-layer ResNet reaches the lowest training error

Figure 2: Schematic of the degradation problem: the deeper plain network settles at higher training error than the shallower one, ruling out overfitting; the residual version of the same depth trains to the lowest error.

AspectVGG (2014)GoogLeNet / Inception (2014)ResNet (2015)
Key problem addressedDoes depth with small kernels beat shallow wide kernels?How to buy depth and multiple scales on a fixed compute budgetDegradation: deeper plain nets train worse
Signature componentUniform 3×3 conv stacks plus 2×2 max poolInception module with 1×1 bottlenecks, global average poolingIdentity shortcut, bottleneck block (1×1, 3×3, 1×1), batch norm
Depth16 or 19 weight layers22 layers18 to 152, and 1000+ in experiments
Parameters / compute138M, 15.3 GFLOPs~6.8M, 1.5 GFLOPs25.6M, 3.8 GFLOPs (ResNet-50)
Main drawbackHuge FC head, memory hungry, stalls past ~19 layersHand-tuned, irregular module; harder to modify or scaleStill heavy for edge devices; deep variants give diminishing returns
Lasting legacy3×3 as the default kernel; perceptual loss backbone1×1 channel bottlenecks; no-FC classification headsResidual connections in nearly every modern net, including Transformers

Login to view more content


Log in to track your progress

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *