VGG、AlexNet、GoogLeNet对比

文章目录

VGG与AlexNet的对比

VGG 相比 AlexNet 最大的升级不是"多几层"那么简单,而是把卷积神经网络从 AlexNet 那种大卷积核、结构不太统一的深度模型 ,升级成了 全 3×3 小卷积核、可重复堆叠、更规整的深度网络范式。

VGG构造的features部分

  • 其中16与19在下方可以展示出来

  • VGG-16全过程

  • VGG-16占用的内存,后面的全联接层占用将近90%

主要升级点

方面 AlexNet VGG
卷积核 11×11、5×5 等大卷积核 全部主要用 3×3 小卷积核
网络深度 5 层卷积 + 3 层全连接 VGG16 有 13 层卷积 + 3 层全连接;VGG19 更深
感受野 靠大卷积核直接获得 多个 3×3 堆叠等效大感受野
非线性 每层后接 ReLU 更多 3×3 层意味着更多 ReLU,非线性更强
池化 有 3×3 池化 统一用 2×2 最大池化
归一化 使用 LRN 去掉 LRN
结构风格 有效但不统一 高度规整,易于复现和迁移

为什么 3×3 堆叠是重要升级

VGG 用多个 3×3 卷积代替 AlexNet 中的大卷积核,比如:

  • 2 个 3×3 卷积 ≈ 1 个 5×5 卷积的感受野;
  • 3 个 3×3 卷积 ≈ 1 个 7×7 卷积的感受野。

这样做有三个好处:

  1. 参数更少

    在相同通道数下,多个 3×3 卷积的参数量通常低于单个大卷积核。比如一个 7×7 卷积相当于 49 倍通道平方级参数,而 3 个 3×3 卷积只有 27 倍。

  2. 非线性更强

    每加一层 3×3 卷积就会多一次 ReLU,网络表达能力更强,能学习更复杂的特征。

  3. 结构更统一

    AlexNet 第一层用 11×11,后面又有 5×5,结构比较杂;VGG 基本统一成 3×3 卷积 + 2×2 池化,模块感很强,后面很多骨干网络都受它影响。

也要看到 VGG 的代价

VGG 虽然结构更漂亮、特征提取能力更强,但参数量很大。VGG16 大约有 1.38 亿参数,其中大部分集中在最后的全连接层,所以显存占用和推理成本都比 AlexNet 高很多。

可以把它理解成:

AlexNet 证明了"深度 CNN 有用",VGG 则证明了"用统一的小卷积核不断加深网络,能进一步提升性能"。 再往后,ResNet 才真正解决了"网络太深反而难训练"的问题。


与GoogLeNet的对比

GoogLeNet 和 AlexNet、VGG 最大的区别不是"更深",而是从"堆层数"转向"设计模块" 。它用 Inception 模块 、1×1 卷积降维 、全局平均池化来让网络更深、更准,同时参数反而更少。

三者核心差异

维度 AlexNet VGG GoogLeNet
层数 8 层 VGG16:16 层;VGG19:19 层 22 层
卷积核 11×11、5×5 等大核 几乎全部 3×3 1×1、3×3、5×5 并行
设计思路 加深 LeNet,证明 CNN 有效 用多个 3×3 堆叠获得更大感受野 用 Inception 模块做多尺度特征提取
参数量 约 6000 万 约 1.38 亿 约 500 万--700 万
尾部结构 大尺寸全连接层 大尺寸全连接层 用全局平均池化替代大 FC
特点 引入 ReLU、Dropout、多 GPU 结构统一、可复现、但参数多 高效、多尺度、参数少、结构复杂

GoogLeNet 最关键的三个升级

1. Inception 模块:并行多尺度卷积

AlexNet 和 VGG 主要是串行堆叠卷积层:一层接一层。

GoogLeNet 则把一层设计成一个 Inception 模块,对同一个输入同时做:

  • 1×1 卷积
  • 3×3 卷积
  • 5×5 卷积
  • 3×3 最大池化

然后把这四路输出在通道维度上拼接起来。

这样网络就能在同一层同时捕获:

  • 小尺度细节
  • 中等尺度结构
  • 大尺度上下文
  • 显著性特征

相当于让网络自己选择"用多大感受野看这张图"。

2. 1×1 卷积:先降维,再计算

如果直接对很多通道做 5×5 卷积,计算量会很大。GoogLeNet 在 3×3、5×5 卷积之前先加 1×1 卷积做通道压缩。

比如输入 64 通道:

  • 直接做 5×5 卷积:计算量很大;
  • 先用 1×1 卷积压到 32 通道,再做 5×5:计算量大幅下降。

1×1 卷积还能增加非线性,因为后面还会接激活函数。

3. 全局平均池化替代全连接层

AlexNet 和 VGG 最后都有很大的全连接层,参数量非常夸张。VGG16 的全连接层就占了绝大多数参数。

GoogLeNet 最后不用大 FC,而是用 全局平均池化,把每个通道的特征图直接平均成一个值,再接分类层。

这就是它参数量只有几百万的重要原因。

一句话总结

  • AlexNet:证明深度 CNN 可行;
  • VGG:证明小卷积核堆深有效,但参数很重;
  • GoogLeNet :证明结构设计和计算效率同样重要,用 Inception 模块和 1×1 卷积让网络既深又轻。

后面 ResNet 再解决"网络太深难训练"的问题,GoogLeNet 其实已经为"高效深度网络"打下了很重要的基础。


疑问

感受野与参数量是不一样的

32 = 27 这个数,在 VGG 里确实会反复出现,但它不是"感受野大小",而是:

3 个 3×3 卷积核里,每个核有 9 个权重,3 层一共 3 × 9 = 27 个权重系数。

先看感受野

感受野是指:输出上的一个点,能"看到"输入上多大的区域。

  • 1 个 3×3 卷积:感受野 = 3
  • 2 个 3×3 堆叠:感受野 = 5
  • 3 个 3×3 堆叠:感受野 = 7

所以 VGG 说:

3 个 3×3 卷积堆叠,感受野 ≈ 1 个 7×7 卷积。

这里说的是"看得一样大",不是"参数一样多"。

再看参数量

假设输入通道数和输出通道数都是 C,并且只算卷积核权重,不算 bias。

一个 7×7 卷积层的参数量是:

7 × 7 × C × C = 49C²

三个 3×3 卷积层的参数量是:

3 × (3 × 3 × C × C) = 27C²

所以:

27C² < 49C²

也就是说,在获得相同 7×7 感受野的前提下,3 个 3×3 卷积比 1 个 7×7 卷积少约 45% 的参数。

如果考虑通道数,一个卷积核的参数量是:

kernel_h × kernel_w × in_channels × out_channels

所以 VGG 里"参数更少"的意思是:

用 3 个 3×3 达到和 1 个 7×7 相同的感受野,但权重参数从 49C² 降到 27C²。

而且每层后面都会接一次 ReLU,所以 3 个 3×3 还比 1 个 7×7 多了两次非线性变换,表达能力更强。


卷积核里的权重就是神经网络自己要学的参数

和全连接层里的权重本质一样的

它不是人写死的

传统图像处理里,卷积核可以是人工设计的,比如:

  • 边缘检测核
  • 模糊核
  • 锐化核

这些值是工程师根据经验写好的,训练时不会变。

但在 CNN 里,卷积核的值一开始是随机初始化的,比如用 Xavier 或 He 初始化。

训练时怎么学

训练过程大致是:

  1. 初始化:给每个卷积核随机赋一组小数值。
  2. 前向传播:用这些卷积核对图像做卷积,得到特征图。
  3. 算损失:看模型预测和真实标签差多少。
  4. 反向传播:计算损失对每个权重的梯度。
  5. 更新权重:按梯度方向微调卷积核里的每个值。

反复很多轮以后,卷积核就不再是随机噪声了,会逐渐变成能提取边缘、纹理、形状等特征的"过滤器"。

一个 3×3 卷积核有多少权重?

如果输入有 C_in 个通道,输出有 C_out 个通道,那么一个卷积层会学:

C_out × C_in × 3 × 3 个权重

比如输入 3 通道、输出 16 通道、卷积核 3×3:

16 × 3 × 3 × 3 = 432 个权重

每个卷积核不是只有 9 个数,而是 9 × 输入通道数 个数。

所以可以把它理解成:

卷积核 = 一组可学习的权重矩阵,网络通过训练自动决定每个位置该取什么值。


在深度学习项目中,全联接层会更占内存吗?

要看说的"内存"是哪一种。按参数量/模型权重来看,卷积层通常远小于全连接层;但按训练时中间激活值来看,卷积层不一定少。

1. 参数量:卷积层通常比全连接层少很多

卷积层之所以参数少,是因为它共享卷积核权重:同一个 3×3 卷积核会在整张特征图上滑动复用。

全连接层则是每个输入维度都有独立权重,所以一旦输入维度很大,参数量会爆炸。

以 VGG16 为例,输入是 224×224×3:

  • 总参数量约 1.38 亿
  • 卷积层部分约 1470 万
  • 全连接层部分约 1.236 亿
  • 全连接层占参数量约 90%

尤其是第一个全连接层,输入是 7×7×512 = 25088,输出是 4096,仅这一层就有约 1.02 亿参数。

所以如果只看"模型权重占多少内存",你的直觉基本正确:卷积层参数少,全连接层参数多。

2. 训练显存:卷积层的激活值可能很大

训练时 GPU 显存不只存参数,还要存:

  • 模型参数
  • 每层输出的激活值
  • 反向传播的梯度
  • 优化器状态

其中激活值往往很占显存。

卷积层输出的是特征图,比如形状是:

[batch_size, channels, height, width]

如果分辨率高、batch size 大,激活值就会很大。比如前面几层卷积输出可能是 224×224×64,这种空间尺寸很大,激活值显存并不小。

而全连接层输出通常只是一个一维向量,比如 4096 维,激活值本身不大;但它前面的权重矩阵非常大,所以参数显存高。

3. 可以这样记

比较维度 卷积层 全连接层
参数量 少,因为权重共享 多,每个输入都有独立权重
参数显存 通常较小 通常较大
激活值显存 可能很大,尤其高分辨率时 通常较小
计算量 可能很高,因为要在空间上滑动 取决于输入维度

所以更准确的说法是:

卷积层的参数量和参数显存通常远小于全连接层;但卷积层在训练时产生的中间激活值可能很多,尤其输入图像分辨率高、batch size 大时,显存占用不一定低。

这也是为什么后来很多网络,比如 ResNet、GoogLeNet,会用全局平均池化替代大尺寸全连接层,能显著减少参数量。


上面说的中间激活值是什么?

中间激活值就是网络前向传播时,每一层算出来的"输出结果"。

用一个例子理解

假设输入一张 224×224×3 的图片,经过第一层卷积后,输出可能是 112×112×64 的张量。这个张量就是第一层的激活值。

它会被送到第二层继续计算,第二层又输出一个新的张量------这就是第二层的激活值。

一层一层往下传,每一层都会产生一个"中间结果",这些就是中间激活值。

为什么训练时要存下来?

因为反向传播需要它们。

反向传播计算梯度时,要用到前向传播时每一层的输出。如果前向时没存,反向就没法算。所以训练过程中,所有层的激活值都要同时留在显存里,直到反向传播结束才能释放。

为什么卷积层的激活值可能很大?

卷积层输出的是三维特征图(高 × 宽 × 通道数),比如:

112 × 112 × 64 = 802,816 个数值

如果 batch size 是 32,那这一层的激活值就有:

802,816 × 32 ≈ 2569 万 个数值

按 FP32(4 字节)算,约 100 MB,仅一层就占这么多。

而全连接层输出只是一个一维向量,比如 4096 维,激活值本身很小。

总结

卷积层 全连接层
参数量 少(权重共享) 多(每个输入独立权重)
激活值 可能很大(空间分辨率高) 通常很小(一维向量)

所以之前说的"卷积层显存不一定少",指的是激活值显存,不是参数显存。


卷积核的通道数和上一层的通道数是一样的,卷积核的组数能够改变其通道数,对吗?

理解基本方向是对的,但要分两种情况看。

1. 普通卷积:卷积核通道数 = 输入通道数

在标准卷积里:

  • 每个卷积核的通道数必须等于上一层输出的通道数;
  • 卷积核的个数决定输出通道数。

比如输入是 64 通道,用 128 个 3×3 卷积核:

  • 每个卷积核形状是 3 × 3 × 64;
  • 输出就是 128 通道。

所以这里你说的"卷积核的通道数和上一层的通道数一样"是对的。

2. 分组卷积:卷积核通道数不一定等于完整输入通道数

如果用了 分组卷积 groups > 1,就不一样了。

假设输入 64 通道,输出 128 通道,groups=4:

  • 输入被分成 4 组,每组 16 通道;
  • 每组卷积核只负责对应的那 16 个输入通道;
  • 所以每个卷积核的通道数是 64 / 4 = 16,而不是完整的 64。

这时可以说:通过改变组数,确实可以改变每个卷积核实际连接的通道数。

更准确的总结

情况 卷积核通道数 输出通道数
普通卷积 等于输入通道数 等于卷积核个数
分组卷积 等于 输入通道数 / groups 仍等于卷积核个数
深度可分离卷积 每组只处理 1 个通道 取决于后面逐点卷积

所以更严谨的说法是:

普通卷积中,单个卷积核的通道数等于输入通道数;输出通道数由卷积核个数决定。分组卷积中,每个卷积核只连接输入的一部分通道,组数会影响每个卷积核实际处理的通道数。


相关推荐
马剑威(威哥爱编程)1 小时前
【AI全栈后端12-08】Spring Boot 用 MCP 统一接入内部系统:让 AI 接一次,全公司复用
java·人工智能·spring boot
oooost1 小时前
RecFno
人工智能·机器学习
屹立芯创ELEADTECH1 小时前
先进封装RDL制程中的Build-up Film:关键应用、工艺挑战与发展趋势
大数据·人工智能·microsoft
bst@微胖子1 小时前
Spring AI (5) : MCP 深度实战:从工具抽取到鉴权,SSE 与 STDIO
人工智能·spring·dubbo
richard_yuu1 小时前
OpenCV 实战第 8 篇:几何测量算子族,从 boundingRect 到亚像素定位
人工智能·opencv·计算机视觉
2601_956743681 小时前
上海GEO营销公司技术评估方法|以盾码无界公开产品路线为例,拆解企业知识库语义检索、资料版本核验、内容人工审核与大模型监测复测的验证要点及适用边界
人工智能·geo·上海·企业服务
中伟视界1 小时前
AI视频监控矿山落地实践:从算法部署到误报调优全流程
人工智能
打工仔折腾 AI1 小时前
FaceFusion本地换脸实战:Windows整合包、模型选择与遮罩调参记录
人工智能·windows·后端·python·深度学习·性能优化·ai agent 实战
DeviceHub1 小时前
AI服务器电源设计进阶:TLVR电感的应用解析与选型验证指南
运维·服务器·人工智能