动手学深度学习|VGG 超详细讲解:为什么说它把“深层 CNN”做到了极致?

张开发
2026/6/5 20:27:41 15 分钟阅读
动手学深度学习|VGG 超详细讲解:为什么说它把“深层 CNN”做到了极致?
前言学完LeNet和AlexNet之后再看VGG你会明显感觉到一种“结构变规整了”的味道。如果说LeNet让我们看到了卷积神经网络的基本雏形AlexNet让深度学习在视觉领域真正爆发那么VGG做的事情就是用一种非常统一、非常规整的方式把“更深的卷积神经网络”推向了一个新高度。VGG 在深度学习发展史上的地位非常重要。它不像 AlexNet 那样靠很多“新技巧”出名而是靠一种看起来很朴素、但非常有效的思想把大卷积核换成多个小卷积核堆叠通过加深网络来增强特征提取能力。这个思想后来深刻影响了很多 CNN 模型设计。一、什么是 VGGVGG 是由牛津大学视觉几何组Visual Geometry Group提出的一类经典卷积神经网络所以叫VGG。最常见的几个版本有VGG-11VGG-13VGG-16VGG-19这里数字的含义一般表示网络中带参数的层数也就是卷积层全连接层其中最出名的就是VGG-16和VGG-19。二、VGG 为什么经典VGG 经典的地方不在于它有多花哨而在于它的设计思想特别清晰。它的核心思想可以概括成两句话1. 用小卷积核代替大卷积核VGG 大量使用3×3卷积核而不是像 AlexNet 那样一开始就用11×11、5×5这样比较大的卷积核。2. 通过堆叠更多卷积层来增强表达能力不是靠单层变得很复杂而是靠“多层小卷积”一层一层往上堆。这两个思想结合起来就形成了 VGG 的核心风格结构规整、层数更深、特征提取更强。三、VGG 的整体结构长什么样四、为什么 VGG 喜欢用 3×3 卷积核这是 VGG 最核心的设计点之一。很多同学第一次学到这里都会问既然5×5、7×7卷积核一次就能看更大区域为什么还要连续堆多个3×3答案就在于多个小卷积堆叠既能获得相似的感受野又更省参数还能增加非线性表达能力。2. 参数更少3. 非线性能力更强每个卷积层后面一般都会接一个激活函数比如 ReLU。所以两个3×3卷积之间其实会多出一次非线性变换。这意味着网络表达能力更强。简单理解就是一个5×5卷积只有一次卷积 一次激活两个3×3卷积两次卷积 两次激活因此多层小卷积不仅省参数还能提升模型学习复杂特征的能力。五、VGG 的网络块是怎么设计的VGG 把整个网络拆成若干个卷积块block。每个 block 内部通常由几层3×3卷积组成最后接一个2×2最大池化层。典型结构如下Block 1ConvConvMaxPoolBlock 2ConvConvMaxPoolBlock 3ConvConvConvMaxPoolBlock 4ConvConvConvMaxPoolBlock 5ConvConvConvMaxPool最后再接三层全连接层。这种结构非常工整看起来就很“整齐划一”。六、VGG-16 为什么叫 16因为它一共有16 个带参数的层13 个卷积层3 个全连接层所以叫VGG-16。同理VGG-19 16 个卷积层 3 个全连接层七、VGG-16 的经典结构全连接部分八、VGG 的结构特点总结如果把 VGG 的风格总结成几个标签那就是1. 小卷积核基本全程使用3×3卷积。2. 深层网络通过增加卷积层数提升表达能力。3. 结构规整每一组都很像特别整齐。4. 最大池化每个 block 结束后做一次2×2最大池化下采样很规律。5. 通道数逐步增加一般是也就是空间分辨率越来越小通道数越来越多语义信息越来越强九、VGG 比 AlexNet 强在哪里这是一个很常见的比较问题。1. 结构更深AlexNet 是 5 层卷积 3 层全连接。VGG 则显著加深了卷积层数量。更深的网络意味着能够逐层学习更复杂、更抽象的特征。2. 结构更规整AlexNet 的卷积核大小不统一有11×11、5×5、3×3。VGG 基本统一用3×3设计更整洁。这种规整结构后来被证明更适合系统化加深网络。3. 小卷积堆叠更有效VGG 说明了一个很重要的事实多个小卷积核堆叠比少数大卷积核更划算、更有效。这对后续 CNN 架构设计影响非常深远。4. 特征提取能力更强因为卷积层更多、非线性更多VGG 在复杂图像任务上通常能比 AlexNet 学到更强的表示。十、VGG 的缺点是什么虽然 VGG 很经典但它也有明显问题。1. 参数量非常大尤其是后面的全连接层参数量惊人。这会导致模型文件很大显存占用高训练成本高推理速度慢2. 计算量很大虽然小卷积核本身单次参数少但 VGG 层数很多所以整体计算量并不低。3. 容易遇到深层网络训练问题VGG 比 AlexNet 更深但再继续加深时网络会逐渐出现训练困难、梯度传播不理想等问题。这也是后面 ResNet 出现的重要背景之一。十一、PyTorch 中如何实现 VGG 块先看一个 VGG block 的基本写法。import torch from torch import nn def vgg_block(num_convs, in_channels, out_channels): layers [] for _ in range(num_convs): layers.append(nn.Conv2d(in_channels, out_channels, kernel_size3, padding1)) layers.append(nn.ReLU()) in_channels out_channels layers.append(nn.MaxPool2d(kernel_size2, stride2)) return nn.Sequential(*layers)这个函数的意思很清楚先堆若干个3×3卷积每层后接 ReLU最后接一个最大池化这就是 VGG block 的核心结构。十二、PyTorch 中如何实现一个简化版 VGG下面给你一个适合学习的简化版 VGG 网络实现。import torch from torch import nn def vgg_block(num_convs, in_channels, out_channels): layers [] for _ in range(num_convs): layers.append(nn.Conv2d(in_channels, out_channels, kernel_size3, padding1)) layers.append(nn.ReLU()) in_channels out_channels layers.append(nn.MaxPool2d(kernel_size2, stride2)) return nn.Sequential(*layers) class VGG(nn.Module): def __init__(self): super().__init__() self.features nn.Sequential( vgg_block(1, 1, 64), vgg_block(1, 64, 128), vgg_block(2, 128, 256), vgg_block(2, 256, 512), vgg_block(2, 512, 512) ) self.classifier nn.Sequential( nn.Flatten(), nn.Linear(512 * 7 * 7, 4096), nn.ReLU(), nn.Dropout(0.5), nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(0.5), nn.Linear(4096, 10) ) def forward(self, x): x self.features(x) x self.classifier(x) return x x torch.randn(1, 1, 224, 224) model VGG() y model(x) print(y.shape)输出torch.Size([1, 10])说明最后输出的是 10 个类别分数。十三、VGG 学习时最该抓住的核心点1. VGG 的核心思想不是“更复杂”而是“更规整”这一点特别重要。VGG 的伟大不是它用了很多奇怪技巧而是它把 CNN 的设计变得非常统一。2. 小卷积核堆叠是 VGG 的灵魂要记住这句话多个 3×3 小卷积核堆叠可以代替更大的卷积核同时减少参数并增强非线性能力。这几乎是 VGG 最核心的面试点和笔记点。3. VGG 把“加深网络”这件事做得很彻底LeNet 比较浅。AlexNet 开始变深。VGG 则把“深层 CNN”做成了一个非常系统化的方案。4. 它既强也重VGG 的特征提取能力强但代价是参数多计算量大模型很重所以它经典但也给后面模型留下了优化空间。十四、LeNet、AlexNet、VGG 三者如何串起来理解我们可以把这三个模型放在一起看就会非常清晰。LeNetCNN 的早期代表结构简单适合手写数字任务让人看到卷积 池化 全连接的基本范式AlexNet在 ImageNet 上一战成名更深、更宽引入 ReLU、Dropout、数据增强、GPU 训练让 CNN 真正爆发VGG进一步加深网络用统一的3×3小卷积核堆叠结构极其规整把深层 CNN 的设计思想推向成熟所以一句话总结LeNet 是起点AlexNet 是爆发VGG 是深层规整化的代表。十五、总结VGG 这一节最核心的内容可以浓缩成下面几点1. VGG 是经典深层卷积神经网络代表了 CNN 结构设计向“更深、更规整”发展的方向。2. VGG 的最大特点是大量使用3×3小卷积核这是它最核心的设计思想。3. 多个小卷积核堆叠的好处有三个感受野接近大卷积核参数更少非线性表达能力更强4. VGG 使用多个卷积块堆叠每个 block 后接最大池化结构非常整齐。5. VGG 虽然强但参数量和计算量都很大这也推动了后续更高效网络的研究。十六、结尾VGG 的魅力就在于它用一种几乎“朴素”的方式告诉大家只要结构设计合理把网络加深性能真的可以继续提升。它不像某些模型那样有很多复杂模块但它把 CNN 的基本思想打磨得非常纯粹、非常彻底。也正因为如此VGG 一直到今天仍然是学习卷积神经网络时绕不开的经典模型。

更多文章