文章目录
CNN架构概览:VGG、Inception与ResNet
📌 适合对象:计算机视觉初学者、深度学习入门者
⏱️ 预计阅读时间:60-70分钟
🎯 学习目标:理解经典CNN架构(VGGNet、GoogLeNet、ResNet)的设计思想和特点,掌握如何设计有效的CNN架构
📚 学习路线图
本文内容一览(快速理解)
- CNN架构基础(CNN Architecture Basics):卷积、下采样和全连接层的组合
- VGGNet(VGGNet):通过增加网络深度提升性能
- GoogLeNet(GoogLeNet / Inception):使用Inception模块和辅助分类器
- ResNet(Residual Network):通过残差连接解决深度网络的退化问题
一、CNN架构基础(CNN Architecture Basics):卷积、下采样和全连接
这一章要建立的基础:理解CNN的基本组成和设计原则
核心问题:CNN的基本架构是什么?如何设计有效的CNN?
[!NOTE]
📝 关键点总结:CNN主要由卷积层、下采样层(池化)和全连接层组成。卷积层和下采样层用于特征提取,全连接层用于分类。CNN的关键特性包括局部连接、权重共享、池化和多层结构。
1.1 CNN的基本组成(Basic Components of CNN):卷积、下采样、全连接
概念的本质:
卷积神经网络(CNN)主要由三种类型的层组成:
- 卷积层(Convolution Layer):使用卷积操作提取局部特征
- 下采样层(Subsampling Layer / Pooling Layer):降低空间维度,减少参数
- 全连接层(Fully Connected Layer):将提取的特征映射到类别分数
图解说明:
💡 说明:
- 卷积层:提取局部特征(如边缘、纹理)
- 下采样层:降低空间维度,减少计算量
- 全连接层:进行最终分类
- 多层结构:通过多层堆叠学习更抽象的特征
类比理解:
想象你在分析一幅画。CNN就像:
- 卷积层:用放大镜看局部细节(边缘、纹理)
- 下采样层:缩小视野,只看主要特征
- 更多卷积层:用更大的放大镜看更抽象的特征(形状、物体)
- 全连接层:综合考虑所有特征,做出最终判断
实际例子:
CNN的基本组成:
典型架构:
输入图像(32×32×3)
↓
卷积层1(28×28×6)
↓
池化层1(14×14×6)
↓
卷积层2(10×10×16)
↓
池化层2(5×5×16)
↓
展平(400)
↓
全连接层1(120)
↓
全连接层2(84)
↓
输出层(10类)
各层作用:
- 卷积层:提取特征
- 池化层:降维
- 全连接层:分类
1.2 CNN的关键特性(Key Properties of CNN):局部连接、权重共享、池化
概念的本质:
CNN的关键特性包括:
- 局部连接(Local Connections):每个神经元只连接输入的一小部分区域
- 权重共享(Shared Weights):同一个滤波器在所有位置共享参数
- 池化(Pooling):降低空间维度,提供平移不变性
- 多层结构(Many Layers):通过多层堆叠学习层次化特征
图解说明:
💡 说明:
- 局部连接:减少参数数量,利用空间局部性
- 权重共享:进一步减少参数,提高参数效率
- 池化:降低维度,提供平移不变性
- 多层结构:学习从低级到高级的特征
类比理解:
想象你在用模板匹配。CNN的特性就像:
- 局部连接:模板只匹配局部区域(不是整个图像)
- 权重共享:同一个模板在所有位置使用(不是每个位置一个模板)
- 池化:只看主要特征,忽略细节
- 多层结构:先用小模板找细节,再用大模板找整体
实际例子:
CNN特性的例子:
局部连接:
- 全连接层:每个神经元连接所有输入(3072个连接)
- 卷积层:每个神经元只连接局部区域(如5×5×3=75个连接)
- 优势:参数数量大幅减少
权重共享:
- 全连接层:每个位置有独立的权重
- 卷积层:所有位置共享同一组权重
- 优势:参数数量进一步减少
池化:
- 输入:28×28×6
- 最大池化(2×2):14×14×6
- 优势:降低维度,提供平移不变性
多层结构:
- 第1层:检测边缘
- 第2层:检测纹理
- 第3层:检测形状
- 第4层:检测物体
二、VGGNet(VGGNet):深度网络的重要性
这一章要建立的基础:理解VGGNet的设计思想和如何通过增加深度提升性能
核心问题:为什么需要更深的网络?VGGNet如何设计?
[!NOTE]
📝 关键点总结:VGGNet通过使用小的卷积核(3×3)和增加网络深度来提升性能。VGGNet展示了深度的重要性,但同时也暴露了深度网络训练困难的问题。
2.1 VGGNet的设计思想(VGGNet Design Philosophy):小卷积核和深度网络
概念的本质:
VGGNet(Very Deep Convolutional Networks)的核心思想是使用小的卷积核(3×3)和增加网络深度。多个3×3卷积核可以模拟更大的卷积核(如两个3×3卷积核相当于一个5×5卷积核),但参数更少,非线性更多。
图解说明:
💡 说明:
- 小卷积核:3×3卷积核代替5×5或7×7
- 增加深度:通过堆叠更多层增加网络深度
- 优势:参数更少,非线性更多,表达能力更强
类比理解:
想象你在建房子。VGGNet就像:
- 大砖块(5×5):一次建一大块,但灵活性差
- 小砖块(3×3):用多个小砖块组合,更灵活,可以建更复杂的结构
- 深度:建更多层,可以建更高的房子(更深的网络)
实际例子:
VGGNet的设计:
对比:
- 一个5×5卷积核:参数 = 5×5×C = 25C
- 两个3×3卷积核:参数 = 2×(3×3×C) = 18C
- 优势:参数更少,但非线性更多(两个ReLU)
VGGNet架构(简化):
- 多个3×3卷积层
- 2×2最大池化层
- 全连接层
- 深度:16层或19层
效果:
- 在ImageNet上取得很好性能
- 展示了深度的重要性
- 但训练困难(梯度消失)
三、GoogLeNet(GoogLeNet / Inception):Inception模块和辅助分类器
这一章要建立的基础:理解GoogLeNet的Inception架构和如何解决深度网络的问题
核心问题:GoogLeNet如何解决深度网络的问题?Inception模块如何工作?
[!NOTE]
📝 关键点总结:GoogLeNet使用Inception模块,在单层上使用不同尺度的卷积核来提取多尺度特征,并使用1×1卷积降维。GoogLeNet还使用辅助分类器来加速训练和缓解梯度消失问题。
3.1 GoogLeNet面临的问题(Problems Faced by GoogLeNet):过拟合、计算量、梯度消失
概念的本质:
GoogLeNet在2014年ILSVRC挑战赛中取得冠军,但在设计时面临三个主要问题:
- 过拟合(Overfitting):网络规模大,参数多,容易过拟合
- 计算量(Computational Cost):卷积层增加带来计算量几何级数上升
- 梯度消失(Gradient Vanishing):网络深,梯度难以传播
图解说明:
💡 说明:
- 过拟合:参数多,容易记住训练数据
- 计算量大:特别是卷积层,计算量随深度指数增长
- 梯度消失:深层网络梯度难以传播到前面层
实际例子:
GoogLeNet面临的问题:
问题1:过拟合
- 网络规模大:22层(考虑池化层是27层)
- 参数多:容易过拟合
- 需要正则化
问题2:计算量大
- 卷积层增加:计算量几何级数上升
- 需要优化计算
问题3:梯度消失
- 网络深:22层
- 梯度难以传播到前面层
- 需要辅助机制
3.2 Inception架构(Inception Architecture):多尺度特征提取
概念的本质:
Inception架构的核心思想是:
- 多尺度卷积核:在单层上使用1×1、3×3、5×5卷积核,提取不同尺度的特征
- 特征融合:将不同尺度的特征拼接(concatenate)在一起
- 1×1卷积降维:使用1×1卷积核降维,减少计算量
图解说明:
💡 说明:
- 多尺度:不同大小的卷积核提取不同尺度的特征
- 特征融合:拼接不同尺度的特征
- 降维:使用1×1卷积减少计算量
类比理解:
想象你在看一幅画。Inception架构就像:
- 1×1卷积:看细节(局部特征)
- 3×3卷积:看中等范围(中等特征)
- 5×5卷积:看大范围(大范围特征)
- 拼接:综合考虑所有尺度的信息
实际例子:
Inception模块的例子:
输入:28×28×256
分支1:1×1卷积
- 1×1×256卷积核,64个
- 输出:28×28×64
分支2:3×3卷积
- 先1×1降维到128,再3×3卷积,128个
- 输出:28×28×128
分支3:5×5卷积
- 先1×1降维到32,再5×5卷积,32个
- 输出:28×28×32
分支4:最大池化
- 3×3最大池化,然后1×1卷积,32个
- 输出:28×28×32
拼接:
- 输出:28×28×(64+128+32+32) = 28×28×256
优势:
- 多尺度特征提取
- 1×1卷积降维,减少计算量
- 特征融合,表达能力更强
3.3 辅助分类器(Auxiliary Classifiers):加速训练和缓解梯度消失
概念的本质:
GoogLeNet使用辅助分类器(Auxiliary Classifiers)来:
- 加速训练:在中间层添加分类器,提供额外的监督信号
- 缓解梯度消失:辅助分类器的梯度可以直接传播到前面层
- 正则化:辅助分类器起到正则化作用
图解说明:
💡 说明:
- 辅助分类器:在中间层添加分类器
- 额外监督:提供额外的监督信号
- 梯度传播:帮助梯度传播到前面层
类比理解:
想象你在学习。辅助分类器就像:
- 主目标:最终考试(主分类器)
- 辅助目标:期中考试(辅助分类器)
- 作用:提供中间反馈,帮助学习
实际例子:
辅助分类器的例子:
GoogLeNet架构:
- 主网络:22层
- 辅助分类器1:在第9层
- 辅助分类器2:在第17层
- 主分类器:在第22层
损失函数:
总损失 = 主损失 + 0.3×辅助损失1 + 0.3×辅助损失2
效果:
- 加速训练:中间层有监督信号
- 缓解梯度消失:梯度可以直接传播
- 正则化:防止过拟合
注意:
- 训练时使用辅助分类器
- 测试时只使用主分类器
3.4 GoogLeNet的版本演进(GoogLeNet Evolution):v1到v4
概念的本质:
GoogLeNet有多个版本,每个版本都有改进:
- v1:原始版本,Top-5错误率6.67%
- v2:加入Batch Normalization,Top-5错误率4.8%
- v3:重新思考Inception架构,Top-5错误率3.5%
- v4:结合ResNet的残差连接,Top-5错误率3.08%
实际例子:
GoogLeNet版本演进:
v1 (2014):
- 原始Inception架构
- Top-5错误率:6.67%
- 22层网络
v2 (2015):
- 加入Batch Normalization
- Top-5错误率:4.8%
- 改善训练稳定性
v3 (2015):
- 重新思考Inception架构
- Top-5错误率:3.5%
- 优化网络设计
v4 (2016):
- 结合ResNet的残差连接
- Top-5错误率:3.08%
- Inception-ResNet架构
四、ResNet(Residual Network):残差连接解决退化问题
这一章要建立的基础:理解ResNet的残差连接和如何解决深度网络的退化问题
核心问题:什么是退化问题?残差连接如何解决?
[!NOTE]
📝 关键点总结:ResNet通过残差连接(Residual Connection)解决了深度网络的退化问题。残差连接允许梯度直接传播,使训练更深的网络成为可能。ResNet可以训练非常深的网络(如152层),在ImageNet上取得突破性成果。
4.1 退化问题(Degradation Problem):深度网络的困境
概念的本质:
退化问题(Degradation Problem)是指:随着网络深度增加,训练误差和测试误差都会增加,而不是减少。这不是过拟合问题(因为训练误差也在增加),而是网络难以优化的问题。即使浅层网络已经可以很好地工作,更深的网络反而表现更差。
图解说明:
💡 说明:
- 退化问题:深度增加,性能反而下降
- 不是过拟合:训练误差也在增加
- 优化困难:深层网络难以优化
类比理解:
想象你在学习。退化问题就像:
- 浅层网络:学10个知识点,掌握得很好
- 深层网络:学20个知识点,反而掌握得更差
- 问题:不是知识点太多(过拟合),而是学习方式有问题(优化困难)
实际例子:
退化问题的例子:
实验观察:
- 18层网络:训练误差低,测试误差低
- 34层网络:训练误差高,测试误差高
问题分析:
- 不是过拟合:训练误差也在增加
- 是优化问题:深层网络难以优化
- 梯度消失:梯度难以传播到前面层
解决方案:
- 残差连接:允许梯度直接传播
- 恒等映射:如果不需要学习,可以跳过
4.2 残差连接(Residual Connection):恒等映射和梯度传播
概念的本质:
残差连接(Residual Connection)的核心思想是:不是让网络学习从输入 x x x到输出 H ( x ) H(x) H(x)的映射,而是让网络学习残差 F ( x ) = H ( x ) − x F(x) = H(x) - x F(x)=H(x)−x,然后输出 x + F ( x ) x + F(x) x+F(x)。这样,如果不需要学习( F ( x ) = 0 F(x) = 0 F(x)=0),网络可以简单地输出 x x x(恒等映射),梯度也可以直接传播。
图解说明:
💡 说明:
- 残差学习:学习 F ( x ) = H ( x ) − x F(x) = H(x) - x F(x)=H(x)−x而不是 H ( x ) H(x) H(x)
- 恒等映射:如果 F ( x ) = 0 F(x) = 0 F(x)=0,输出就是 x x x
- 梯度传播:梯度可以直接通过跳跃连接传播
类比理解:
想象你在调整音量。残差连接就像:
- 直接调整:从当前音量直接调到目标音量(困难)
- 残差调整:只调整变化量(容易)
- 如果不需要调整:变化量为0,保持原样
实际例子:
残差连接的例子:
传统网络:
- 输入:x
- 输出:H(x)
- 学习:H(x) = f(x)
残差网络:
- 输入:x
- 残差:F(x) = H(x) - x
- 输出:H(x) = x + F(x)
- 学习:F(x) = f(x) - x
优势:
- 如果F(x) = 0,输出就是x(恒等映射)
- 梯度可以直接通过跳跃连接传播
- 更容易优化
残差块结构:
输入x
↓
卷积层1 → ReLU → 卷积层2
↓ ↓
└────── 相加 ──────┘
↓
输出 x + F(x)
4.3 ResNet架构(ResNet Architecture):深度网络的突破
概念的本质:
ResNet通过残差连接可以训练非常深的网络(如50层、101层、152层)。ResNet使用瓶颈结构(Bottleneck)来减少计算量:1×1卷积降维 → 3×3卷积 → 1×1卷积升维。ResNet在ImageNet上取得突破性成果,Top-5错误率降至3.57%。
图解说明:
💡 说明:
- 残差块:基本的残差单元
- 瓶颈结构:减少计算量的设计
- 深度网络:可以训练非常深的网络
实际例子:
ResNet架构的例子:
ResNet-50:
- 50层网络
- 使用瓶颈结构
- Top-5错误率:3.57%
瓶颈结构:
输入:256通道
↓
1×1卷积:降维到64通道
↓
3×3卷积:64通道
↓
1×1卷积:升维到256通道
↓
输出:256通道
优势:
- 减少计算量(3×3卷积在低维进行)
- 保持表达能力
- 可以训练更深的网络
ResNet变体:
- ResNet-18:18层
- ResNet-34:34层
- ResNet-50:50层
- ResNet-101:101层
- ResNet-152:152层
📝 本章总结
核心要点回顾:
-
CNN架构基础:
- 卷积层、下采样层、全连接层的组合
- 局部连接、权重共享、池化、多层结构
-
VGGNet:
- 使用小卷积核(3×3)和增加深度
- 展示了深度的重要性
- 但训练困难
-
GoogLeNet:
- Inception模块:多尺度特征提取
- 1×1卷积降维:减少计算量
- 辅助分类器:加速训练和缓解梯度消失
-
ResNet:
- 残差连接:解决退化问题
- 恒等映射:允许梯度直接传播
- 可以训练非常深的网络
知识地图:
关键决策点:
- 网络深度:更深的网络通常性能更好,但需要解决训练问题
- 特征提取:多尺度特征提取可以提高表达能力
- 计算效率:使用1×1卷积降维可以减少计算量
- 梯度传播:残差连接可以改善梯度传播,使训练更深网络成为可能
📚 延伸阅读
推荐资源
-
VGGNet:
- Simonyan and Zisserman, “Very Deep Convolutional Networks for Large-Scale Image Recognition”, 2014
-
GoogLeNet:
- Szegedy et al., “Going Deeper with Convolutions”, 2014
- Ioffe and Szegedy, “Batch Normalization: Accelerating Deep Network Training”, 2015
- Szegedy et al., “Rethinking the Inception Architecture”, 2015
-
ResNet:
- He et al., “Deep Residual Learning for Image Recognition”, 2015
-
实践项目:
- 实现简单的VGGNet
- 实现Inception模块
- 实现ResNet残差块
- 比较不同架构的性能
2万+

被折叠的 条评论
为什么被折叠?



