时间:2024年8月4日
AlexNet(2012)
背景
AlexNet问世之前
1.浅层网络结构
主要使用较浅的神经网络,深层网络尚未广泛应用,限制了模型的表现力和复杂任务处理能力。
2.依赖手工设计特征
图像识别任务依赖手工设计的特征提取方法(如 SIFT 和 HOG),需要大量领域知识进行特征工程。
3.计算资源和数据集限制
计算硬件(如 CPU)和数据集规模有限,限制了大规模深度神经网络的训练和应用。
AlexNet问世之后
1.深层网络结构
更深的网络: AlexNet 采用了8层的深度卷积神经网络(包括5个卷积层和3个全连接层),显著增加了模型的表示能力,使其能够学习更复杂的特征和模式。这比之前大多数浅层网络要深得多。
2.自动特征学习
卷积神经网络(CNN): AlexNet 使用卷积层自动学习图像特征,减少了对手工设计特征的依赖。通过多层卷积和池化操作,模型能够从原始图像数据中自动提取和学习有用的特征,简化了特征工程过程。
3.利用 GPU 计算和大规模数据集
GPU 加速: AlexNet 充分利用了 GPU 的并行计算能力,显著加快了训练过程。这使得训练深层网络成为可能。
ImageNet 数据集: AlexNet 在大规模 ImageNet 数据集上进行训练,这个数据集包含了大量的标注图像,为模型提供了丰富的训练数据,有助于提高模型的性能和泛化能力。
网络架构
AlexNet网A络结构相对简单,使用了8层卷积神经网络,前五层是卷积层,后三层是全连接层
1. 输入层:AlexNet的输入层接收的图像数据通常为 RGB 彩色图像,大小为227 * 227 * 3 。
2. 第一个卷积层(Conv1):包含96个大小为11 * 11 * 3 的卷积核,步长为4,使用了 ReLU 激活函数。该层的输出尺寸是55 * 55 * 96 。
3. 第一个池化层(Pool1):使用最大池化,池化窗口大小为 3x3,步长为 2。该层的输出尺寸为 27x27x96。
4. 第二个卷积层(Conv2):包含 256 个大小为 5x5x48 的卷积核(48 是由于之前的池化层有 2 倍的通道数),步长为 1,使用 ReLU 激活函数。该层的输出尺寸为 27x27x256。
5. 第二个池化层(Pool2):使用最大池化,池化窗口大小为 3x3,步长为 2。该层的输出尺寸为 13x13x256。
6. 第三个卷积层(Conv3):包含 384 个大小为 3x3x256 的卷积核,步长为 1,使用 ReLU 激活函数。该层的输出尺寸为 13x13x384。
7. 第四个卷积层(Conv4):包含 384 个大小为 3x3x192 的卷积核,步长为 1,使用 ReLU 激活函数。该层的输出尺寸为 13x13x384。
8. 第五个卷积层(Conv5):包含 256 个大小为 3x3x192 的卷积核,步长为 1,使用 ReLU 激活函数。该层的输出尺寸为 13x13x256。
9. 第三个池化层(Pool5):使用最大池化,池化窗口大小为 3x3,步长为 2。该层的输出尺寸为 6x6x256。
10. 全连接层(FC1):包含 4096 个神经元,使用 ReLU 激活函数。
11. 全连接层(FC2):包含 4096 个神经元,使用 ReLU 激活函数。
12. 输出层:包含 1000 个神经元,对应 ImageNet 数据集的 1000 个类别,通常使用 softmax 激活函数进行分类。
重要特征
ReLU激活函数
tanh 和 sigmoid 激活函数由于其饱和性在极端输入值下会导致梯度消失,从而使得梯度计算变得更慢;而 ReLU 作为非饱和激活函数,能够提供更稳定的梯度,通常会更高效。
饱和:激活函数的饱和性指的是当输入值(通常是加权和)变得非常大或非常小时,函数的输出会趋近于一个固定值。
上图是使用ReLUs和tanh作为激活函数的典型四层网络的在数据集CIFAR-10s实验中,error rate收敛到0.25时的收敛曲线,可以很明显的看到收敛速度的差距。虚线为tanh,实线是ReLUs。
Local Response Normalization(局部响应归一化)
1. 局部竞争性
在神经网络中,同一层的多个特征图可能会激活相似的特征。LRN 通过在局部区域内进行归一化处理,使得某些特征图的激活被抑制,而其他特征图的激活被增强。这种操作有助于模型更清晰地分离不同特征,减少特征之间的冗余。
2. 提高泛化能力
LRN 有助于抑制高激活值的神经元,防止某些特征过度支配其他特征。这种归一化方式能够促进特征学习的多样性,使模型更加鲁棒,从而提高泛化能力。
3. 稳定训练过程
在深度学习中,激活函数输出较大或较小的值可能导致梯度爆炸或消失问题。
Overlapping Pooling(重叠池化)
一般的最大池化操作
PoolSize = stride
重叠池化操作
PoolSize > stride
这种有点类似于convolutional化的操作,这样可以得到更准确的结果。在top-1,和top-5中使用覆盖的池化操作分别将error rate降低了0.4%和0.3%。论文中说,在训练模型过程中,覆盖的池化层更不容易过拟合。
VGGNet(2014)
背景
AlexNet
网络深度 :只有8层,包括5个卷积层和3个全连接层。
卷积核尺寸 :使用了多种尺寸的卷积核,如11x11、5x5和3x3。
模块化结构设计 :结构设计不够模块化,卷积层和池化层的排列较为复杂。
VGGNet
网络深度 :拥有16到19层的深度,大大增加了模型的表达能力,能够捕捉更复杂的图像特征。
卷积核尺寸 :使用一致的3x3卷积核。这种设计通过多个小卷积核的组合,既增加了感受野,又减少了参数量。
模块化结构设计 :采用了统一的卷积-池化模块设计,使得模型具有良好的可扩展性和结构一致性。
网络架构
重要特征
深度结构
深度结构允许模型捕获更复杂和抽象的特征。通过增加网络的深度,可以在特征空间中找到更有效的表示,这对于高精度的图像分类任务尤其重要。
小卷积核
细粒度特征捕捉:
小卷积核(如 3x3)能够捕捉细粒度的特征,因为它们在每次卷积操作中只涉及到局部区域的像素。这使得网络可以精细地学习图像中的边缘、纹理等低级特征。当多个小卷积核堆叠时,尽管每层单独的感受野较小,但累积起来的感受野能够覆盖更大的区域,因此可以学习到更复杂的特征表示
参数量减少:
相比于大卷积核,小卷积核的参数量更少。例如,使用两个 3x3 卷积核代替一个 5x5 卷积核,在捕捉相似感受野的同时,参数量减少了。较少的参数不仅降低了计算成本,还减小了过拟合的风险。
GooLeNet(2014)
背景
GoogLeNet在2014年由Google团队提出(与VGG网络同年),斩获当年ImageNet竞赛中Classification Task (分类任务) 第一名
GoogLeNet 的创新点 :
1. 引入了 Inception 结构(融合不同尺度的特征信息)
2.使用1x1的卷积核进行降维以及映射处理 (虽然VGG网络中也有,但该论文介绍的更详细)
3. 添加两个辅助分类器帮助训练
4. 丢弃全连接层,使用平均池化层(大大减少模型参数,除去两个辅助分类器,网络大小只有vgg的1/20)
网络架构
GoogLeNet网络有22层深(包括pool层,有27层深),在分类器之前,采用Network in Network中用Averagepool(平均池化)来代替全连接层的思想,而在avg pool之后,还是添加了一个全连接层,是为了大家做finetune(微调)。
重要特征
Inception结构
Inception原始结构
1. 并行分支
Inception模块包含多个并行分支
1. 1.1×1卷积:用于降维和增加非线性
2. 1.3×3卷积:用于捕捉中尺度特征
3. 1.5×5卷积:用于捕捉大尺度特征
4. 1.3×3 max-pooling:用于下采样,并且通常会后接一个1x1卷积层以减少特征图的深度。
2.特征图输出
每个分支在输入特征图上独立操作,输出一组特征图。由于这些特征图的空间维度宽高相同,但是通道数(深度)不同,因此可以通过深度方向上将他们拼接合并。
3.拼接
如果每个分支输出的特征图通道数分别为 c1, c2, c3, c4,那么最后拼接后的特征图通道数为 c1 + c2 + c3 + c4。宽度和高度保持不变。
Inception + 降维
在原始的inception结构的基础上,在分支2,3,4上加入了卷积核大小为1×1的卷积层。
注:CNN参数个数 = 卷积核尺寸×卷积核深度 × 卷积核组数 = 卷积核尺寸 × 输入特征矩阵深度 × 输出特征矩阵深度
降维操作(减少深度),减少了模型需要训练的参数,减少计算量。
Auxiliary Classifier(辅助分类器)
AlexNet 和 VGG 都只有1个输出层,GoogLeNet 有3个输出层,其中的两个是辅助分类层。
它确保了即便是隐藏单元和中间层也参与了特征计算,他们也能预测图片的类别,他在inception网络中起到一种调整的效果,并且能防止网络发生过拟合。
给定深度相对较大的网络,有效传播梯度反向通过所有层的能力是一个问题。通过将辅助分类器添加到这些中间层,可以期望较低阶段分类器的判别力。
ResNet(2015)
背景
深度学习的发展:
近年来,深度学习在计算机视觉领域取得了显著的进展,深度卷积神经网络(CNN)在图像分类、目标检测等任务中表现出色。
深度网络的挑战:
随着网络深度的增加,训练过程中的退化问题(如梯度消失和爆炸)使得网络性能提升遇到瓶颈。
解决方法:
残差学习(Residual Learning):为了应对深度网络的训练难题,何凯明等人提出了ResNet(残差网络),引入了残差块,通过捷径连接(Shortcut Connections)来优化网络的训练。
网络架构
重要特征
residual(残差)模块
实线代表验证集的错误率 虚线代表训练集的错误率
左图为不同深度的神经网络在训练和测试时的错误率
右图为使用resnet搭建的网络在验证集和训练集的错误率
代码:
Batch normalization(批量归一化)
它通过在网络的每一层输入上进行归一化,即将输入数据进行零均值化和单位方差化,然后对数据进行线性变换和缩放,以确保每层网络的输入数据分布相对稳定。
1. 计算均值和方差
对于一个输入数据,计算该批次数据在每个特征上的均值和方差
2.归一化
使用得到的均值和方差对数据进行归一化。每个特征值x都被转换为均值为0,方差为1的数据
3.缩放和偏移
归一化后数据会进行线性变换,以允许模型在归一化之后进行适当的调整
DenseNet(2017)
背景
DenseNet(稠密连接网络)是由Cornell大学的Gao Huang等人于2017年提出的深度学习网络架构。它的设计灵感来自于ResNet以及其前身 Highway Networks 的思想
在深度卷积神经网络中,通常存在梯度消失或梯度爆炸等问题,尤其是随着网络层数的增加,这种问题变得尤为严重
残差网络引入了残差连接(跨层连接)来解决了这些问题,从而允许网络更深地训练,但是,ResNet中的跨层连接是通过相加的方式实现的,这意味着每一层只能直接访问前一层的输出。
网络架构
重要特征
Dense Block
DenseNet 的核心是 Dense Block,每个 Dense Block 包含多个卷积层,这些卷积层之间通过密集连接进行连接。在 Dense Block 中,每一层都会接收来自所有前面层的特征图,结合这些特征图来生成自己的输出特征图。
Dense connections(密集连接)
在 Dense Block 中,每一层的输出都与后续所有层的输入连接,这种连接方式称为密集连接。
密集连接的优点:
特征重用:每一层都可以直接访问前面所有层的特征图,这样可以重用早期层的特征,避免冗余计算。
梯度流动增强:由于每一层都直接连接到损失函数和输入数据,这种架构可以有效地缓解梯度消失问题,增强梯度的流动性。
更有效的参数使用:密集连接允许网络在较少的参数下达到更高的性能,因为每一层都使用了之前所有层的信息。
Transition Layer
在 DenseNet 的不同 Dense Block 之间,通常会插入 Transition Layer。Transition Layer 负责减小特征图的尺寸和深度。
卷积层(1x1 Convolution): 用于减少特征图的深度。
池化层(Average Pooling): 用于减小特征图的尺寸。
标签:卷积,分类,网络,几种,特征,神经网络,池化,深度,连接 From: https://blog.csdn.net/2301_80740635/article/details/140903428