LeNet
LeNet 是人类历史上第一个成功商用、真正落地的卷积神经网络(CNN),也是现代所有 CNN(AlexNet、VGG、GoogLeNet、ResNet)的鼻祖。诞生之初是为了实现手写数字识别(银行支票、邮政编码)
其神经网络结构组成为:**卷积 → 池化(平均) → 卷积 → 池化(平均) → 全连接 → 分类。**具体过程如下所示:
- 输入32X32图片
- 经过一个5X5卷积层后输出6个通道的28X28的feature map
- 经过一个pooling层,28X28变为14X14,通道数不变
- 经过一个5X5卷积层后输出10个通道的10X10的feature map
- 经过一个pooling层,10X10变为5X5,通道数不变
- 转换为一个向量,输入到全连接层。第一个全连接输出为120,第二个全连接输出为84,第三个全连接层输出10。之后将输出的10个原始得分经过softmax转换为概率分布

AlexNet
AlexNet(2012 年)是首个引爆深度学习的深度卷积神经网络,其在 ImageNet 竞赛中以15.3% 的 top-5 错误率夺冠,远超第二名的 26.2%,差距之大让学术界震惊,标志深度学习时代正式开启。AlexNet在架构上与LeNet没有本质的区别(更深更大的LeNet),卷积层 → 池化层 → 全连接层 的 CNN 基础结构没变,最主要的区别是它加深加大了神经网络层数,从 "浅层小网络" 变成 "深度大模型"。
AlexNet标准结构为**5 个卷积层 + 3 个全连接层( LeNet为2卷积层 + 2全连接层 )。**下图是AlexNet与LeNet神经网络架构的比较:

- ***输入:***AlexNet输入为224×224×3(彩色图像,适配 ImageNet);LeNet输入为32×32×1(灰度图像,适配 MNIST)
- 11×11 Conv (96), stride: 11×11 核可捕捉更大感受野 ,提取图像全局结构、边缘等低级视觉特征 ,适配大尺寸输入 。stride 4 快速降低特征图尺寸(224→55),大幅减少后续计算量 。96 个通道(双 GPU 各 48)可提取更多低级特征,同时支持双 GPU 并行训练。
- 3×3 MaxPool, stride 2: 最大池化层保留最显著的特征,抑制噪声,比平均池化AvgPool更突出关键信息。将特征图从 55×55 压缩到 27×27。
- 5×5 Conv (256), pad 2: 5×5 核感受野适中,可提取纹理、形状等中级视觉特征。pad 2 使输入 27×27 经卷积后仍为 27×27。256 个通道(双 GPU 各 128),增强中级特征的表达能力。
- ***3×3 MaxPool, stride 2:***再次压缩特征图(27×27→13×13),进一步降低计算。
- 3层卷积3×3 Conv (256), pad 1: 重复 3×3 卷积,进一步强化高级特征的提取,加深网络深度,增强特征表达能力,同时保持尺寸不变。
- ***3×3 MaxPool, stride 2:***最后一次池化,将特征图从 13×13 压缩到 6×6。
- ***Dense (4096):***将 6×6×256 的特征图展平为 9216 维向量,映射到 4096 维。训练时随机失活 50% 神经元(Dropout正则化),防止过拟合,提升泛化能力。
- Dense (4096): 重复全连接层,进一步学习复杂的特征组合与分类边界,增强模型对细分类别的区分能力,同样使用 Dropout。
- ***Dense (1000):***对应 ImageNet 的 1000 个类别,使用 Softmax 激活函数输出各类别概率,完成大规模图像分类任务。
AlexNet相较于LeNet的细节改进包括:
- **Sigmoid->ReLU:**传统 Sigmoid 在深层网络中梯度迅速衰减,导致浅层权重无法更新。AlexNet使用ReLU激活函数替代,让梯度能有效传递到浅层,并大大提高了训练速度
- **丢弃层:**通过在全连接层后加入丢弃层Dropout(0.5),在训练时随机失活一半神经元,防止依赖特定神经元组合。
- **数据增强:**通过随机裁剪、翻转、色彩变换,生成 "虚拟数据"来增强数据(等效扩大数据集,增强鲁棒性)。
- **双GPU并行训练:**对于AlexNet6000 万参数的 8 层网络,单 GPU 难以承载。AlexNet通过纵向拆分网络,让两块 GPU 并行计算,同时保持信息互通。
VGG
VGG 是 2014 年牛津大学 Visual Geometry Group 提出的卷积网络,直接承接 AlexNet,但思想完全不同。AlexNet混用11×11、5×5、3×3卷积核,结构杂乱,通道变化及特征图尺寸变化也不规律。而VGG的核心思路是不用大卷积核,全部用 3×3 小卷积堆叠,靠加深网络提升精度,同时让结构极度规整、统一,成为后来 ResNet、GoogLeNet 的基础。
VGG块:
VGG 块是 VGG 网络的核心构建单元 。一个标准的 VGG 块结构为
多个 3×3 卷积层(带 ReLU 激活) + 1 个 2×2 最大池化层(stride=2)VGG 块的出现,是为了解决 AlexNet 等早期 CNN 的结构杂乱、扩展性差 问题,同时践行 "深度优先" 的设计理念。
不同深度的 VGG 网络(如 VGG11、VGG13、VGG16、VGG19),只是每个 VGG 块中卷积层的数量不同,整体结构高度一致。如VGG16 中的 "16",指的是网络中包含可学习参数的层的总数,具体为 13 个卷积层 + 3 个全连接层 = 16 层 (调整不同的卷积块个数 和每个卷积块里的卷积层数量 可以得到不同复杂度的变种VGG)
VGG网络架构就是将多个VGG块连接在一起,然后接全连接层。

NiN
NiN,全称Network in Network(网络中的网络)。它的提出比 VGG 稍早一点,但和 VGG 走了两条完全不同的路线,都是为了解决 AlexNet 的缺点。
全连接层的问题:
AlexNet卷积层参数约为3.75M,全连接层参数约为58.6M,总参数全连接层占94%
VGG卷积层参数约为11.56M,全连接层参数约为123.64M,总参数全连接层占91.5%
所以一个神经网络架构需要训练的参数一般都大部分集中于全连接层。这会导致模型容量过大,易造成过拟合。
NiN的提出主要就是为了解决全连接层参数爆炸问题。设计目标是用更小的参数、更强的特征提取,彻底去掉大全连接层
NiN块( mlpconv 层 ):NiN 网络里重复堆叠的最小标准单元,类似于VGG块。NiN块包括一个普通卷积层(3X3或5X5)+ ReLU ,然后再后面接上 两个1X1卷积层+ReLU(1X1卷积层等价于全连接层) ,即mlpconv = Conv + 1×1 Conv + 1×1 Conv。也就是说NiN是在卷积里再套一个小神经网络1X1 Conv(MLP),这就是名字 Network In Network 的来源。
NiN整体架构中无全连接层,交替使用NiN块和步幅为2的最大池化层,最后通过全局平局池化层得到输出。

- NiN块使用卷积层加两个1X1卷积层。1X1卷积层对每个像素增加了非线性性。
- NiN使用全局平均池化层来替代VGG和AlexNet中的全连接层,参数个数更少,不容易过拟合。
GoogLeNet
GooLeNet(也称为 Inception v1)由Google 团队于 2014 年提出,在当年的ILSVRC (ImageNet 大规模视觉识别挑战赛) 中以 6.67% 的 Top-5 错误率夺得分类任务冠军,同时在检测任务中也表现出色。其核心创新在于Inception 模块 (多尺度并行卷积 + 1×1 降维)与全局平均池化 ,在22 层深度 下仅用500 万参数(远少于 AlexNet 的 6000 万与 VGG 的 1.38 亿)。

在GoogLeNet出现之前,CNN 主要沿着 "加深层数" 的路线发展(如 AlexNet、VGG),但面临两大核心瓶颈
- **计算效率困境:**AlexNet (6000 万参数)、VGG (1.38 亿参数) 等模型通过堆叠更多卷积层提升性能,但导致参数量和计算量爆炸式增长,难以部署,硬件资源难以支撑
- 特征表达局限:传统 CNN 使用单一尺度卷积核,难以有效捕捉图像中不同大小的目标和结构特征(如大小不同的物体)。
GooLeNet的设计思路是围绕以下核心原则:
- **多尺度特征融合:**并行使用不同大小的卷积核 (1×1、3×3、5×5) 和池化操作,同时捕获局部细节、中等范围和全局特征,模拟人类视觉系统对多尺度信息的处理能力。
- **1×1 卷积的应用:**在大卷积核 (3×3、5×5) 前插入 1×1 卷积,大幅减少输入通道数,降低计算量。
⭐Inception块:
Inception 块是 GooLeNet 的基础构建单元,它本质上是一个具有4 条并行分支的子网络,通过精心设计的结构实现高效特征提取。
- 分支一: 1×1 卷积 + ReLU。用来捕获最细粒度的局部特征 (1×1 卷积仅感受单个像素的信息,是特征提取的基础)。
输入输出
- 分支二: 1×1 卷积 → ReLU → 3×3 卷积 → ReLU。用来捕获中等尺度的空间特征 (3×3 卷积感受野更大,能捕捉像素间的局部关联,比如边缘、纹理),前置 1×1 卷积用于降维以降低计算。
输入输出
- 分支三: 1×1 卷积 → ReLU → 5×5 卷积 → ReLU。用来捕获更大尺度的全局特征 (5×5 卷积感受野最大,能捕捉目标轮廓、局部结构等大范围特征),前置 1×1 卷积用于降维以降低计算。
输入输出
- 分支四: 3×3 最大池化 → 1×1 卷积 → ReLU。引入池化操作,降低空间冗余,保留关键结构信息 (最大池化提取局部最大值,突出显著特征)。池化后接 1×1 卷积调整通道数。
输入输出
最后Concatenation将分支一到四的通道融合,变为
。这也就意味着 Inception 块设计的第一原则是所有分支的输出特征图必须保持相同的高度 (H) 和宽度 (W),只有通道数 (C) 不同,这样才能完成后续融合。
- 通道融合保留了每个分支的多尺度特征(1×1 的局部特征、3×3 的中等特征、5×5 的全局特征、池化的筛选特征),让网络能自主选择对任务最有用的特征。
GooLeNet:

- Stage 1(基础特征提取): 输入经过7×7 卷积→ ReLU → 3×3 最大池化
7×7 大卷积核提取图像低级特征(如边缘、纹理),池化层进一步降维,减少计算量。 - Stage2(中级特征增强): 1×1 卷积→ ReLU → 3×3 卷积→ ReLU → 3×3 最大池化
1×1 卷积实现通道降维,降低后续 3×3 卷积的计算量;3×3 卷积增强中级特征表达,捕捉更复杂的局部结构。 - Stage3(Inception1): 2 个 Inception 块(Inception 3a、Inception 3b)→ 3×3 最大池化
首次通过 Inception 块实现多尺度特征融合,同时捕获局部(1×1)、中等(3×3)、全局(5×5)特征。 - Stage4(Inception2): 5 个 Inception 块(Inception 4a、4b、4c、4d、4e)→ 3×3 最大池化
5 个 Inception 块堆叠,深度提取高层语义特征 - Stage5(Inception3): 2 个 Inception 块(Inception 5a、Inception 5b)→ 全局平均池化(7×7)→ 全连接层
2 个 Inception 块进一步抽象高层语义特征;全局平均池化替代传统全连接层,大幅减少参数量;最后全连接层输出 1000 类概率,完成 ImageNet 图像分类任务。
Stage 1 & Stage 2:

Stage 3:

Stage 4 & Stage 5:

上述介绍的是GooLeNet v1版本,后续通过改进又诞生了v2(使用batch nomalization)、v3(修改了Inception块)、v4(v3基础上使用残差连接)。
Inception v3的Inception块:
Stage3:(使用两个3X3卷积替代5X5卷积)
Stage4(使用1X7卷积和7X1卷积替代3X3卷积):
Stage5:
Inception v3与其他模型的比较:
ResNet
ResNet(Residual Network)是 2015 年提出的经典深度卷积网络,核心解决了 深度神经网络的退化问题(网络层数增加后,训练精度饱和甚至下降)。
在 ResNet 出现前,神经网络训练有一个矛盾现象。理论上,更深的网络能提取更复杂的特征,精度应该更高;但实际中,当网络层数增加到一定程度(如超过 20 层),训练误差和测试误差都会上升(不是过拟合,而是 "退化")。对于出现这个现象的原因,有两种解释:
解释一
具体解释可以参考下图,右上角表示最优点位置,
均表示我们在训练时设计的模型,其所在区域表示它能找到的不同函数集合,面积越大表示能找到的函数越多,同时也意味着模型更复杂;红色虚线表示对应模型所能找出的最优函数与全局最优函数
的差别,红色虚线越长表示差异越大。可以看到随着模型复杂度增大
能找到的最优函数越来越接近全局最优,但是随着复杂度继续增大模型能找到的函数越来越多,模型却逐渐偏移最优解。也就是说我们无法保证在堆叠模型深度的同时让模型朝着正确的方向演进。

为了让模型训练时不偏离最优解,可以在增加模型复杂度时使更复杂的模型包含之前的简单的模型,即。这样在模型复杂度不断增加的过程中,区域逐渐膨胀,自然就会越来越接近最优点。

ResNet就是用了这样一种思路来解决深度增加而模型退化的问题。对于之前的VGG、GoogLeNet等模型,思路都是将VGG块、Inception块一块块串联起来。为了在模型复杂度增加的同时使更复杂的模型包含之前的简单模型,ResNet使用了残差连接(Skip Connection),即在每个块之后引入加法来得到的结构,
即代表之前简单模型计算后得到的结果,
则表示在之前简单模型基础上加上块后的更复杂模型计算结果后的结果。这样即完成了更复杂模型包括之前的简单模型的目的。

注意:残差连接是逐元素相加(Element-wise Addition),而非通道拼接(Concatenation),即输出
的对应通道对应位置的值与上一步输出
的对应通道对应位置的值相加。这意味着
与
的形状(H×W×C)必须完全一致。
ResNet基础残差块细节如下:

- 左侧残差块(无维度适配的短路连接):当上一步输出
与主路径输出
的空间尺寸(H×W)和通道数(C)完全一致时使用,此时短路连接无需任何额外操作。
- 右侧残差块(带维度适配的短路连接):当上一步输出
与主路径输出
的空间尺寸或通道数不一致时使用(例如:主路径第一个卷积步长为 2,导致特征图尺寸缩小;或通道数从 64 变为 128),此时需要用 1×1 卷积对短路路径做维度适配,保证相加时维度匹配。
VGG证明了2 个 3×3 卷积的感受野与 1 个 5×5 卷积等价,但参数量更少,且增加了非线性层(ReLU),提升特征表达能力。所以ResNet残差块核心继承自VGG网络,也采用两个 3×3 的卷积并搭配ReLU使用。并且在VGG 之后,BN(批归一化)被证明能加速训练、缓解梯度消失,也成为卷积层的标配。
关于BN(批归一化的内容查看PyTorch_conda-CSDN博客中的 "Normalization Layers(归一化层)" 部分)
当然也可以选择不同排列顺序的残差块:

ResNet的总体架构类似于VGG、GoogLeNet,基本只是将块进行替换:

解释二
深层网络在层数很多时,其梯度在反向传播时易逐渐消失 / 爆炸,导致网络无法有效学习。ResNet通过短路连接给梯度反向传播提供了一条 "直通路",让深层梯度能无损地传到浅层,从根本上避免梯度消失 / 爆炸。具体解释如下:

对于无残差连接的网络,每层的输出为:

反向传播时,损失对第 1 层参数的梯度为:

若每层的梯度都小于 1(如 ReLU 激活后梯度衰减、sigmoid 梯度最大值仅 0.25),多层相乘后,梯度会指数级缩小(梯度消失);若每层梯度大于 1,多层相乘后梯度会指数级增大(梯度爆炸)
而ResNet的残差块输出为:

是主路径的 "卷积 + BN+ReLU" 变换,
是短路连接的输入。
对损失求
的梯度:

拆解后:

- 对于梯度消失:公式中第二项
是直接从输出端传回的梯度,没有经过任何 卷积 / 激活 的衰减,相当于给
加了一个 "保底值"。即使第一项
因多层传播衰减到接近 0,第二项依然能保证
不会消失。
- 对于梯度爆炸:BN(批归一化)会对每层输出做归一化,配合残差连接的梯度 "直通路",梯度不会无限制放大。
ResNet 主要有 ResNet-18/34/50/101/152 这几个经典版本:
残差块类型:
- Basic Block (用于 ResNet-18/34):
结构 "3×3 Conv → BN → ReLU → 3×3 Conv → BN+ 残差连接"
结构简单、计算快,但深层时参数量和计算量增长快- Bottleneck Block (用于 ResNet-50/101/152):
结构 "1×1 Conv (降维) → 3×3 Conv → 1×1 Conv (升维) → BN+ 残差连接"
用 1×1 卷积压缩通道,大幅减少计算量和参数量,适合构建极深层网络







