文章目录
一、引言
AlexNet是2012年ImageNet图像分类竞赛冠军。
首次将卷积神经网络CNN和深度学习DL用于大规模图像分类。
性能优异,相比之前获得巨大飞跃,是后续一系列优秀网络的奠定者。
创新点:
- CNN
- ReLU
- 双GPU模型并行
- LRN局部响应归一化
- 重叠最大池化
- 数据增强
- Dropout正则化
二、摘要
训练了一个大而深的卷积神经网络去分类ImageNet2010年比赛1千200万张1000个类别的高分辨率图像。实现top-1的37.5%错误率和top-5的17.0%错误率。比之前最高水平的网络都好。
所使用的该神经网络有5个卷积层(后接最大池化层)+3个全连接层,有65万个神经元和6千万个参数。
为了使训练更快,使用了非饱和激活函数ReLU和双GPU运行。
为了避免过拟合,在全连接层使用正则化方法Dropout。
在ILSVRC-2012比赛中,top-5错误率为15.3%,比第二名的26.2%有明显优势。
1、介绍
过去的图像识别方法都是基于机器学习的。
为了提升性能:
- 收集了更大的数据集
- 学习了更强大的模型
- 使用了很好的技术避免过拟合
过去的网络在小数据集上可以刷到很高的分,比如在MINIST手写数字数据集上的错误率能抵御0.3%,但现实世界很复杂,需要更大的数据集。为了在大数据集上学习,我们需要一个更大学习能力的网络。 CNN具备很多优点,可以用于大规模图像识别。CNN的深度、宽度都可以控制这个网络的容量,局部链接、权值共享、下采样具有更少的参数。
该网络使用5个卷积层和3个全连接层。通过实验也发现深度很重要,去掉任何一个卷积层都会有更差的表现。
2.数据集
- ImageNet:1千500万张标注的高分辨率图像,22000个类别。是人为标注的数据集。
- ILSVRC(ImageNet Large-Scale Visual Recognition Challenge):是ImageNet数据集的子集,1000个类别。
训练集:1千200万张图片;
验证集:5万张图片;
测试集:15万张图片。
ILSVRC-2010是唯一一年公开了测试集标签的,因此2010年版本的数据是在实验中使用得最多的。
ImageNet包含了大小不一分辨率的数据集,但模型的输入需要固定尺寸256×256,因此需要对数据集进行下采样。
- 首先缩放图片至最短边为256
- 从上图裁出中心256×256
预处理:减去训练集图像中每个像素的均值
三、网络结构
网络结构如图2所示。包含8个学习权重的层——5个卷积+3个全连接。接下来介绍该网络的重点部分。先说最重要的。
1. ReLU Nonlinearity
ReLU(修正线性单元)非线形激活函数
以前使用的是饱和激活函数:
- tanh: f ( x ) = e x − e − x / e x + e − x f(x)=e^x-e^{-x}/e^x+e^{-x} f(x)=ex−e−x/ex+e−x 双曲正切激活函数
- Sigmoid:
f
(
x
)
=
(
1
+
e
−
x
)
−
1
f(x)=(1+e^{-x})^{-1}
f(x)=(1+e−x)−1
由上图可知,饱和的激活函数容易梯度消失,而非饱和的激活函数有助于避免梯度消失。
经过实验发现,非饱和的激活函数比饱和的激活函数收敛快。
- 数据集规模小,核心问题是防止过拟合;
- 数据集规模大,核心问题是加快训练;
由于ImageNet数据集规模很大,因此核心问题是:加速训练。
由图1可知,ReLU激活函数可以加速训练,比tanh收敛快6倍。
2. Training on Multiple GPUs
多GPU模型并行
由反向传播原理可知,显存中不仅要存储模型参数,还需存储正向传播时每一层整个batch的中间结果。batch size越大,占用显存越大。我们这个网络会对显存造成压力,所以使用双GPU并行的策略。
每个GPU各占一半的神经元,而且两个GPU可以读取对方的显存,并行计算。两个GPU只在某些层进行交流,在具体讲解网络结构组成部分会进行具体说明。
双GPU(全参数)的训练时间比单GPU(半参数)更短。
单GPU模型中,最后一个卷积层和全连接层参数数量与双GPU模型相同,因此“半参数”并非真的只有一半。
top-1错误率降低了1.7%,top-5错误率降低了1.2%。
3. Local Response Normalization
LRN局部对比度归一化
该方法在VGG中已经被证明没有什么作用,因此不过多进行讲解。原理是侧向抑制,兴奋的神经元对周围的神经元抑制作用。(强者愈强,弱者愈弱)
该操作就是指:与附近的神经元做归一化。
公式:
如下图,n=2,就是和周围的2个神经元做归一化操作。
文章表明,
k
=
2
,
n
=
5
,
α
=
1
0
−
4
,
β
=
0.75
k=2,n=5,α=10^{-4},β=0.75
k=2,n=5,α=10−4,β=0.75
该操作在ReLU激活函数之后。
top-1错误率降低了1.4%,top-5错误率降低了1.2%。
4. Overlapping Pooling
重叠的池化(池化窗口是重叠的)
这个操作后期也不怎么用了。
池化的作用:
- 可以减少尺寸、减少计算量
- 防止过拟合
- 把噪声去掉
- 引入了平移不变性
该文章发现,重叠池化有助于避免过拟合。top-1错误率降低了0.4%,top-5错误率降低了0.3%。
5. Overall Architecture
整体网络架构
上下各一个GPU,在C2和C3层两个GPU可相互通信,是全部连接的,C5和F1、 F1和F2、F2和F3也是全部连接,其余都是各自一半连接。
5个卷积层+3个全连接层,分类1000类。
四、减少过拟合
1. Data Augmentation
数据增强
人为地去扩充数据集,扩充的数据集无需硬盘存储,且有CPU负责。GPU在上一批训练时,CPU已经将下一批的准备好了。有两种方法:
(1) 平移、水平翻转
训练阶段:假设需要224×224的图片,输入图片是256×256。256-224=32,所以有32×32个位置可以裁剪,并且对裁剪所得图片进行水平翻转。因此有32×32×2=2048个图片。裁出来的这些图片虽然都很相像,但是可以有效防止过拟合。
测试阶段:从左上角、左下角、右上角、右下角以及中心位置裁出5张图片,并进行翻转,因此共10张图片。取结果的平均。
(2)颜色光照变换
这一部分我不是很理解,感觉就是对图像RGB像素值进行主成分分析。该方法近似地捕捉原始图像的一些重要属性,对象的身份不受光照的强度和颜色变化影响。
4.2 Dropout
多个不同的模型集合可有效防止过拟合,但对大型网络不太经济。
- 在训练阶段:随机掐死一半的神经元,将其值置为0,阻断该神经元的前向、反向传播。
- 在预测阶段,保留所有神经元,预测结果乘以0.5。
在F1和F2层使用该操作。虽然使用dropout操作需要double训练轮次,但是也很值得。
五、学习细节
- batch size=128
- momentum=0.9(动量的目的是防止困在鞍点和局部最优点)
- weight decay=0.0005(它不仅仅可以有正则效果,还可以减少错误率)
- 初始化权重均值为0,标准差为0.001
- biases在2、4、5卷积层和全连接层初始化为1
- biases在其他层的初始化为0
- 学习率初始化为0.01,在训练没有进展时,除以10;减少3次。
- 训练90轮
六、性能