AlexNet VGGNet ResNet 对比 简介

本文深入探讨了深度学习领域的三大经典网络结构:AlexNet、VGGNet和ResNet。详细解析了各网络的架构特点,如AlexNet的多GPU与Relu应用,VGGNet的3x3卷积核堆叠,以及ResNet解决深层网络退化问题的残差学习机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AlexNet

网络结构

在这里插入图片描述

  • 输入层: 224 * 224, 3通道
  • 第一层卷积: 96个11 * 11的卷积核, stride 是 4
    • 可以利用计算公式 输出大小 = (输入大小 - 卷积核大小 + padding) / stride + 1 来计算
    • 参数数目: 3 * 11 * 11 * 96
  • 第二层卷积: 256个5*5的卷积核
  • 第二层Max pooling
  • 第一层全连接: 4096
  • 第二层全连接: 4096
  • 输出层: 1000个数的向量, 表示总共1000种类别的概率值

多GPU

结构图中可以看到模型分为了上下两部分, 两部分分别用一个GPU来运算, 可以提高运行速度, 因此也可以增大网络的规模

Relu

数学表达
f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x)
使用 Relu 训练速度更快

Dropout

在这里插入图片描述
每一运算都会随机地将一些神经元置为 0
Dropout 用在了全连接层上, 因为全连接层的参数较多(4096 * 4096), 容易过拟合
AlexNet 中设置的 Dropout = 0.5

工作原理:

  • 每次 Dropout 都相当于训练一个原来的网络的子网络, 最后的结果相当于很多子网络的组合, 所以训练的效果会好些
  • 模型的泛化能力差的原因在于神经元记住了训练的样本, 要记住样本的特征显然需要多个神经元, 而 Dropout 是随机选择神经元的, 能够消除神经元之间的依赖关系, 增强泛化能力
  • Dropout 也相当于数据增强

层叠池化

AlexNet 中使用的是 Overlapping Max Pooling, 池化的窗口每次移动的步长小于它的长度
AlexNet 使用的是 3 * 3 的正方形, 每次移动步长为 2, 重叠池化可以避免过拟合
但其实也可以用步长较大的卷积层代替

图片的随机采样

图片的原大小是[256, 256], 但是输入图片的大小为[224, 224], 每次只输入图像的一部分, 每次取原来图像的一部分, 相当于换了一个角度看图片, 也相当于增加了训练的数据(数据增强), 训练出来的模型泛化能力会更强

其他

  • SGD momentum = 0.9 动量梯度下降
  • Batch size = 128
  • Learning rate = 0.01, 每训练一定次数, 学习率缩小10倍
  • 训练读多个CNN模型, 然后做投票ensemble

VGGNet

Very Deep Convolutional Networks

网络结构

在这里插入图片描述

  • 每经过一个pooling层, 通道数目翻倍, 因为pooling会丢失某些信息, 所以通过增加通道数来弥补, 但是增加到512后, 便不再增加了, 可能是考虑到算力, 内存的问题
  • FC全连接层, 最后输出的是1000个类的分类结果
  • 看D, E, 加卷积层都是在后面加, 因为前面的图片太大, 运算起来太耗时, maxpooling后, 神经图变小
  • 纵向地看, 可以看到神经网络是由浅到深的. VGGNet采用递进式训练, 可以先训练浅层网络A, 然后用A初始化好的参数去训练后面深层的网络

3*3 卷积核

在这里插入图片描述
在这里插入图片描述

如图所示, 2层的 3*3 卷积核可以替代1层的 5*5 卷积核 (步长为1)

  • 两种方式的视野域是一样的, 输入输出格式都不变
  • 2层比1层多一次非线性变化, 网络深度增加也能够保证学习更复杂的模式
  • 采用堆积的小卷积核还可以减少参数数目, 还是拿上图举例(一个绿色方形代表一个参数), 假定输入输出通道数都是 C C C, 那么两层结构的参数数目为 2*3*3* C 2 C^2 C2, 单层结构的参数数目是 5*5* C 2 C^2 C2, 多了28%的数目

如果上面两张图不能理解可以结合一下这张神图
(左边一列表示输入, 通道数3, 中间两列就是参数, 两个神经元, 右边是输出, 通道数2, 总共3*3*3*2个参数)
在这里插入图片描述

1*1 卷积核

在这里插入图片描述

  • 1*1卷积核不改变长宽, 只改变通道数
  • 1*1卷积核相当于通道间的非线性变化
  • 可以对通道数降维, 同时不损失信息
    • 比如原来是32*32*100, 经过1*1*20的卷积后得到32*32*20

LRN

局部归一化, 把相邻的几个通道进行归一化
快过时了

其他

  • 多尺度输入: AlexNet中也有用到(就是从不同的角度看图片), VGGNet做的更极端, 它随机使用不同的尺度缩放训练多个分类器, 然后做ensemble

ResNet

Residual Network

退化问题

在这里插入图片描述
VGGNet中我们可以看出深度对于神经网络的重要性, 但从图中可以看出网络深度达到一定程度时, 深层网络的总体表现不如浅层网络, 这种现象称为退化问题(degradation problem)
为什么会这样?
如果是因为梯度消失, 梯度爆炸, 可以通过中间层标准化(batch normalization)等缓解
也不是过拟合造成的, 因为训练集上深层网络也不如浅层的

可能是因为网络越深, 参数越多, 优化也就更难

ResNet的提出就是为了解决这种退化问题

残差学习

在这里插入图片描述

  • Identity: 恒等变换, shortcuts, 没有引入额外的参数, 不会增加计算复杂性
  • H ( x ) H(x) H(x): 期望的结果
  • F ( x ) = H ( x ) − x F(x) = H(x)-x F(x)=H(x)x, 为残差 (残差定义: 数理统计上, 残差表示实际观测值与估计值(拟合值)的差, 蕴含模型的重要信息.), F F F通常包括卷积, 激活等操作, 上图是2层网络, 当然也可以更多层, 如果只有1层, 就退化为线性

H ( x ) − x H(x)-x H(x)x x x x求偏导后会有一个恒等项1, 使用链式法则求导时,

残差网络子结构

在这里插入图片描述

网络结构

下图为VGG-19, 34层的普通卷积神经网络, 34层的ResNet网络的对比图
在这里插入图片描述

在这里插入图片描述

  • conv1: 普通卷积层, 步长是2
  • 经过3*3的maxpooling层, 就是一堆残差网络结构
  • 深层网络相对于浅层网络主要是在conv4层增加了更多层
  • 最后只有一个全连接层, 所以参数数目会少, 可以加到卷积层上

reference

  • AlexNet: Sunita Nayak, https://www.learnopencv.com/understanding-alexnet/
  • ResNet: nowgood, https://www.cnblogs.com/nowgood/p/resnet.html
  • ResNet: Kaiming He, https://developer.aliyun.com/article/176771
  • ResNet: 木瓜子, https://zhuanlan.zhihu.com/p/43200566
  • ResNet 论文: Kaiming He, https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf
  • KOUSTUBH, https://cv-tricks.com/cnn/understand-resnet-alexnet-vgg-inception/
<think>嗯,用户现在想了解AlexNet、VGG和ResNet的优势和缺点。我需要先回顾一下这些经典CNN模型的结构和特点,然后比较它们的优缺点。 首先,用户之前问过关于代码解析的问题,现在转向了模型比较,可能是在学习深度学习中的卷积神经网络,想要了解不同模型的演变。用户可能是学生或者刚入门的研究者,需要清晰的对比来帮助理解这些模型的差异。 接下来,我得分别分析每个模型。AlexNet是早期的成功模型,2012年ImageNet冠军,使用了ReLU和Dropout,但结构相对简单,参数量大,可能过拟合。VGG则通过小卷积堆叠加深网络,结构统一但参数量更大,计算成本高。ResNet引入了残差连接,解决了深层网络梯度消失的问题,允许训练非常深的网络,结构也更复杂。 要比较它们的优缺点,需要从网络深度、参数效率、创新点等方面展开。同时要注意用户可能需要知道为什么ResNet比VGG好,或者为什么这些模型会被后来的结构取代。可能还需要提到计算资源的需求,因为VGG参数量大,在实际应用中可能不高效。 另外,用户可能想知道这些模型的应用场景,比如AlexNet在早期图像分类的效果,VGG在特征提取上的优势,ResNet在深度上的突破。还要提到各自的缺点,比如AlexNet的过拟合问题,VGG的计算成本,ResNet虽然深但可能在某些情况下冗余。 需要确保用中文解释清楚,结构清晰,分点列出优缺点,可能用表格对比更直观。同时,要避免使用太多专业术语,或者如果使用的话,要简单解释一下,比如残差连接、梯度消失等概念。 最后,总结它们的演变,说明如何互相改进,以及后续的影响,比如ResNet对后续模型如DenseNet的启发。这样用户能有一个整体的认识,理解为什么这些模型在深度学习发展中重要。</think>以下是AlexNet、VGG和ResNet对比分析,按技术演进顺序展开: --- ### **1. AlexNet (2012)** **🔍 核心创新** - 首个成功实践GPU加速的CNN(ImageNet 2012冠军) - 使用ReLU激活函数替代Sigmoid(缓解梯度消失) - 提出Dropout正则化(在FC层应用) **✅ 优势** ```python # 结构示例(简化版) nn.Sequential( nn.Conv2d(3,96,kernel_size=11,stride=4), # 大卷积核捕捉全局特征 nn.MaxPool2d(3,2), nn.Conv2d(96,256,kernel_size=5,padding=2), nn.MaxPool2d(3,2), nn.Conv2d(256,384,kernel_size=3,padding=1), nn.Conv2d(384,384,kernel_size=3,padding=1), nn.Conv2d(384,256,kernel_size=3,padding=1), nn.MaxPool2d(3,2), nn.Flatten(), nn.Linear(9216,4096), # 参数量爆炸点 nn.Dropout(0.5), nn.Linear(4096,4096), nn.Dropout(0.5), nn.Linear(4096,1000) ) ``` - 突破传统方法的性能瓶颈 - 奠定CNN基础设计范式 **❌ 缺点** - 参数量过大(如FC层占模型总参数量的95%+) - 大卷积核(11x11)导致计算效率低 - 网络深度有限(仅8层) --- ### **2. VGGNet (2014)** **🔍 核心创新** - 统一使用3x3小卷积核堆叠(参数量更少,感受野等效大卷积核) - 标准化网络结构(VGG16/VGG19) **✅ 优势** $$ \text{参数量优化} = \frac{(3\times3\times C_{in}\times C_{out})}{(5\times5\times C_{in}\times C_{out})} = \frac{9}{25} $$ - 更深的网络(16-19层)提升特征抽象能力 - 小卷积核堆叠实现高效局部特征提取 **❌ 缺点** ```python # VGG16参数量计算(部分层) Conv2d(3,64,kernel_size=3,padding=1): 3*3*3*64 = 1,728 Conv2d(64,64,kernel_size=3,padding=1): 3*3*64*64 = 36,864 ... Linear(4096,4096): 4096*4096 = 16,777,216 # 仍存在FC层参数冗余 ``` - 参数量仍较大(VGG16约1.38亿参数) - 深层网络梯度消失问题未解决 - 计算成本高(FLOPs是AlexNet的3倍) --- ### **3. ResNet (2015)** **🔍 核心创新** - 提出残差连接(Residual Connection) $$ \text{输出} = F(x) + x $$ - 使用Bottleneck结构(1x1卷积降维/升维) **✅ 优势** ```python # 残差块结构(PyTorch实现) class ResidualBlock(nn.Module): def __init__(self, in_channels, out_channels, stride=1): super().__init__() self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1) self.bn1 = nn.BatchNorm2d(out_channels) self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1) self.bn2 = nn.BatchNorm2d(out_channels) self.shortcut = nn.Sequential() if stride !=1 or in_channels != out_channels: self.shortcut = nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride), nn.BatchNorm2d(out_channels) ) def forward(self, x): out = F.relu(self.bn1(self.conv1(x))) out = self.bn2(self.conv2(out)) out += self.shortcut(x) # 残差连接 return F.relu(out) ``` - 解决深度网络梯度消失问题(可训练1000+层网络) - 参数量显著优化(ResNet50仅约2500万参数) - 性能显著提升(ImageNet top-5错误率3.57%) **❌ 缺点** - 残差连接引入恒等映射可能造成信息冗余 - 极端深度时出现特征"稀释"现象(后被DenseNet改进) --- ### **📊 对比总结** | 指标 | AlexNet | VGG | ResNet | |-------------|------------------|------------------|------------------| | **深度** | 8层 | 16-19层 | 18-152层(可扩展至1000+) | | **参数量** | ~6000万 | ~1.38亿(VGG16) | ~2500万(ResNet50)| | **创新点** | ReLU/Dropout | 小卷积核堆叠 | 残差连接 | | **训练难度**| 易过拟合 | 梯度消失 | 稳定训练深度网络 | | **计算效率**| 较低(大卷积核) | 低(全连接冗余) | 高(Bottleneck设计)| --- ### **🔧 技术演进启示** 1. **AlexNet → VGG**:通过小卷积核堆叠实现更深网络,但未解决梯度问题 2. **VGG → ResNet**:残差连接突破深度限制,BatchNorm提升训练稳定性 3. **后续发展**:ResNet启发了DenseNet(密集连接)、ResNeXt(分组卷积)等变体 这些模型体现了CNN设计的核心思路演变:从追求特征提取效率(AlexNet/VGG)到解决深度训练难题(ResNet),最终实现精度与效率的平衡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值