ImageNet classification with deep convolutional neural networks
使用深度卷积神经网络进行ImageNet图像分类
目录
1.引言
2.网络结构
2.1 小细节
2.2 代码部分
3. 创新点
3.1 非线性激活函数ReLU(提速)
3.2 多GPU训练(提速)
3.3局部响应归一化(增强泛化能力,已不再使用)
3.4重叠池化(轻微防止过拟合/提高准确率,不再使用)
3.5 数据增强(防止过拟合)
3.6 dropout
4.参考
1.引言
2012年被视为深度学习复兴的关键一年,在这一年里来自多伦多大学的Hinton教授及其学生Alex Krizhevsky提出了以"AlexNet"命名的神经网络架构。该创新成果使他们在ImageNet LSVRC-2012竞赛中取得了压倒性胜利,并由此引发了深度学习领域的广泛关注与研究热潮。
2.网络结构
网络由8个层次构成:包括前5个层次的是卷积层,在线之后的是后3个层次均为全连接层;其输出将输入到1个拥有1000个神经元的softmax分类器中。

2.1 小细节
- 原论文中,AlexNet的输入图像尺寸是224x224x3,但是实际图像尺寸为227x227x3。
- 因为计算量太大,使用了两台GPU进行训练,并只在确定的层之间交互(注意看卷积核映射虚线:第2、第4和第5个卷积层的内核,仅连接到位于同一GPU上的前一层中的内核映射,第三个卷积层的内核连接到第二层的所有内核映射。)

(最好跟着流程算一遍)
2.2 代码部分
#01:定义网络结构:在__init__构造函数中申明各个层的定义,在forward中实现层之间的连接关系
class AlexNet(nn.Module):
def __init__(self,num_classes):
super().__init__()
self.conv1=nn.Sequential(
nn.Conv2d(in_channels=3, out_channels=96, kernel_size=11, stride=4, padding=0),
nn.BatchNorm2d(96), #BN加在激活函数前面或后面
nn.ReLU(inplace=True), #inplace=True将上层网络传递下来的tensor直接进行修改,来节省运算内寸
nn.MaxPool2d(kernel_size=3, stride=2)
)
self.conv2=nn.Sequential(
nn.Conv2d(in_channels=96, out_channels=256, kernel_size=5, stride=1,padding=2), nn.BatchNorm2d(256),
nn.BatchNorm2d(256)
nn.ReLU(inplace=True),
nn.MaxPool2d(3,2)
)
self.conv3=nn.Sequential(
nn.Conv2d(in_channels=256,out_channels=384,kernel_size=3,stride=1,padding=1),
nn.BatchNorm2d(384),
nn.ReLU(inplace=True)
)
self.conv4=nn.Sequential(
nn.Conv2d(in_channels=384,out_channels=384,kernel_size=3,stride=1,padding=1),
nn.BatchNorm2d(384),
nn.ReLU(inplace=True)
)
self.conv5=nn.Sequential(
nn.Conv2d(in_channels=384,out_channels=256,kernel_size=3,padding=1),
nn.BatchNorm2d(256),
nn.ReLU(inplace=True),
nn.MaxPool2d(3,2)
)
self.fc=nn.Sequential(
nn.Linear(in_features=9216,out_features=4096),
nn.ReLU(inplace=True),
nn.Dropout(0.5),
nn.Linear(in_features=4096, out_features=4096),
nn.ReLU(inplace=True),
nn.Dropout(0.5),
nn.Linear(in_features=4096, out_features=num_classes),
)
def forward(self,x):
x=self.conv1(x)
x=self.conv2(x)
x=self.conv3(x)
x=self.conv4(x)
x=self.conv5(x)
x=x.view(x.size(0),-1) #x=torch.flatten(x,start_dim=1)
x=self.fc(x)
return x
3. 创新点
3.1 非线性激活函数ReLU(提速)
ReLU展现出显著的速度优势,在收敛速率方面超越了sigmoid和tanh两种激活函数;其主要原因在于后者存在饱和区域,在这一区域中(或称为激活区域),ReLU函数表现出更快的收敛速率
3.2 多GPU训练(提速)
单个GPU导致的内存约束成为制约AlexNet等网络训练规模的关键因素;通过多GPU协同优化能够将AlexNet的训练速度显著提升。
3.3局部响应归一化(增强泛化能力,已不再使用)


表示第

片特征图在位置

通过应用ReLU激活函数获得的输出结果中包含以下信息:n代表同一位置相邻特征图的数量;而N表示所有特征图的数量。其中k、n、α和β均为超参数。具体而言:k值设为2;n取值为5;α设定为1×10^{-4}(即1e-4);β设置为0.75(即3/4)。其中k的作用在于防止分母出现零的情况。

举一个例子:
i = 10, N = 96 时,第 i=10 个卷积核在位置(x,y)处的取值为

,它的局部响应归一化过程如下:用

除以第 8、9、10、11、12 片特征图位置(x,y)处的取值平方求和。
也就是跨通道的一个 Normalization 操作

局部响应归一化(local response normalization, LRN)的概念源自生物学中的"侧抑制"现象。其核心机制在于当某个神经元受到刺激后发生兴奋时,在刺激与其相近的其他神经元后,则后者所引发的兴奋会对前者产生抑制作用。即此消彼长现象即为相邻感受器之间的相互抑制作用。通过应用LRN技术旨在...
3.4重叠池化(轻微防止过拟合/提高准确率,不再使用)
AlexNet采用了全部的最大池化方式,并未采用平均池化的策略。由于所选步长小于池化核尺寸,在这种情况下相邻池化层之间的输出会存在重叠区域。这不仅降低了信息丢失的可能性,并且使得模型能够捕捉到更加丰富的特征描述信息。实验中设置参数stride=2, kernelsize=3
此前的 CNN 一直使用平均池化的操作。
3.5 数据增强(防止过拟合)
alexnet中采用两种数据增强的策略
- 训练时从256x256的原图中随机提取224x224的图片以及水平翻转,数据集扩大了2048倍

即从一个原始大小为M \times M的图像中提取一个大小为m \times m(其中m < M)的小样本图像的可能性数目是(M - m) \times (M - m)种,在对原始图像进行水平翻转操作时,则会将可能性数目增加一倍。具体来说,则是将可能性数目乘以二。
在测试阶段,该系统通过采集5组224×224像素的图像片段(包括四个角区域及其中心区域)及其对应的水平投影(因此总共获得10组图像片段)来进行推断,并将网络的Softmax层对这10组图像片段分别进行推断,并取其结果的平均值作为最终预测输出
- 改变训练集图片RGB通道的强度,在此之前需要对原始RGB图像进行主成分分析


为RGB像素值的3x3协方差矩阵,

该扰动项遵循均值为0、标准差为0.1的高斯分布。我认为应该按照以下步骤操作:首先将RGB图像 resize 成 3×256×256 的尺寸;接着对图像进行归一化处理;然后计算生成的数据矩阵的协方差;最后通过奇异值分解(SVD)方法获得对应的特征向量 p 及其所对应的特征值 λ。
3.6 dropout
AlexNet在两个全连接层之前应用了Dropout机制,在这种情况下会以概率为0.5的方式抑制各个隐藏层中的神经元活性;即无论是在正向信息传递还是反向信号传导过程中都会被排除在外。这种方法通过降低各神经元间的相互依赖关系来增强网络的鲁棒性
4.参考:
深度学习论文 01-1
深度学习论文 01-1
深度学习论文 01-1
深度学习论文 01-1
该技术属于深度学习领域中的一种模型,在其架构设计上体现出高度的灵活性与可扩展性特点。
其数据处理过程依赖于多层感知机这一关键组件。
其基本组成单元通常由卷积层和激活函数模块构成。
其核心思想在于通过滑动窗口机制提取特征。
其中池化层的作用在于减少计算复杂度。
经过非线性激活后传递到下一层结构。
这种设计使得该方法在图像识别方面表现突出。
并被广泛应用于图像识别任务中。
同时还能处理非结构化数据如语音信号和文本数据等。
3、目标识别入门——AlexNet模型(代码解析详细)_B站_Bilibili
第四章探讨了在AlexNet模型中引入的一种关键技术——Local Response Normalization机制的作用及其设计原理
第5集:AlexNet深度学习在图像分类中的应用——哔哩哔哩视频内容
第六部分:基于PyTorch的Alex网络实现
