ImageNet Classification with Deep Convolutional Neural Networks
论文杂记 | ||
---|---|---|
上一篇 | 主目录 | 下一篇 |
文章结构
【前言】
为了提高目标识别的性能,我们可以收集更大的数据集,学习更强大的模型,使用更好的技术来防止过拟合。
AlexNet神经网络有6000万参数和650000个神经元,包含5个卷积层(某些卷积层后面带有池化层)和3个全连接层,最后是一个1000维的softmax。为了训练的更快,使用了非饱和神经元并对卷积操作进行了非常有效的GPU实现。为了减少全连接层的过拟合,采用了一个最近开发的名为dropout的正则化方法,结果证明是非常有效的。
1 课题背景
标注图像的数据集都相对较小–在几万张图像的数量级上(例如,NORB[16],Caltech-101/256 [8, 9]和CIFAR-10/100 [12])。简单的识别任务在这样大小的数据集上可以被解决的相当好,尤其是如果通过标签保留变换进行数据增强的情况下。例如,目前在MNIST数字识别任务上(<0.3%)的最好准确率已经接近了人类水平[4]。但真实环境中的对象表现出了相当大的可变性,因此为了学习识别它们,有必要使用更大的训练数据集。
为了从数百万张图像中学习几千个对象,我们需要一个有很强学习能力的模型。然而对象识别任务的巨大复杂性意味着这个问题不能被指定,即使通过像ImageNet这样的大数据集,因此我们的模型应该也有许多先验知识来补偿我们所没有的数据。卷积神经网络(CNNs)构成了一个这样的模型[16, 11, 13, 18, 15, 22, 26]。它们的能力可以通过改变它们的广度和深度来控制,它们也可以对图像的本质进行强大且通常正确的假设(也就是说,统计的稳定性和像素依赖的局部性)。因此,与具有层次大小相似的标准前馈神经网络,CNNs有更少的连接和参数,因此它们更容易训练,而它们理论上的最佳性能可能仅比标准前馈神经网络差一点。
本文贡献:
在ILSVRC-2010和ILSVRC-2012[2]的ImageNet子集上训练了到目前为止最大的神经网络之一,并取得了迄今为止在这些数据集上报道过的最好结果。我们编写了高度优化的2D卷积GPU实现以及训练卷积神经网络内部的所有其它操作,我们把它公开了。我们的网络包含许多新的不寻常的特性,这些特性提高了神经网络的性能并减少了训练时间,详见第三节。即使使用了120万标注的训练样本,我们的网络尺寸仍然使过拟合成为一个明显的问题,因此我们使用了一些有效的技术来防止过拟合,详见第四节。我们最终的网络包含5个卷积层和3个全连接层,深度似乎是非常重要的:我们发现移除任何卷积层(每个卷积层包含的参数不超过模型参数的1%)都会导致更差的性能。
本文使用大约120万训练图像,50000张验证图像和15万测试图像,尺寸大小为256×256。它包含八个学习层–5个卷积层和3个全连接层。
2 架构
不平常的特性:
2.1 ReLU非线性
考虑到梯度下降的训练时间,这些饱和的非线性 比 非饱和非线性f(x) = max(0,x)更慢。用ReLU(f(x) = max(0,x))的深度卷积神经网络训练时间比等价的tanh单元要快几倍。
- 饱和非线性(saturating nonlinearities)和非饱和非线性(non-saturating nonlinearities)的区别
直观理解:饱和**函数会压缩输入值
对于Rectified Linear Unit (ReLU)**函数f(x) = max(0, x),当x趋于正无穷则f(x)也趋于正无穷。所以该函数是非饱和的
饱和函数例如:
sigmoid函数的范围是[0, 1]所以是饱和的
tanh函数也是饱和的,因为其取值范围为[-1,1]
2.2 多GPU训练
-
GPU与CPU比较:
CPU是电脑的*处理器,GPU是电脑的图形处理器
CPU擅长统领全局等复杂操作,GPU擅长对大数据进行简单重复操作,GPU提供了多核并行计算的基础结构,且核心数非常多,可以支撑大量数据的并行计算。关于图形方面的以及大型矩阵运算,如机器学习算法等方面,GPU就能大显身手。
将网络分布在两个GPU上。目前的GPU非常适合跨GPU并行,因为它们可以直接互相读写内存,而不需要通过主机内存。我们采用的并行方案基本上每个GPU放置一半的核(或神经元),还有一个额外的技巧:只在某些特定的层上进行GPU通信。例如,第3层的核会将第2层的所有核映射作为输入。然而,第4层的核只将位于相同GPU上的第3层的核映射作为输入。双GPU网络比单GPU网络稍微减少了训练时间。
2.3 局部响应归一化
-
归一化
归一化是将样本的特征值转换到同一量纲下把数据映射到[0,1]或者[-1, 1]区间内,是一种线性变换,是对向量X按照比例压缩再进行平移。 x’ = (x - X_min) / (X_max - X_min)
ReLU具有让人满意的特性,它不需要通过输入归一化来防止饱和(如果tanh的输入不归一化,即x的取值范围是负无穷到正无穷,那么可能出现饱和现象,因为此时y的取值范围是-1到1;当归一化以后,x取值为0到1,y的取值就不会趋于饱和)(而,ReLU函数无论x的取值,都不会趋于饱和)如果至少一些训练样本对ReLU产生了正输入,那么那个神经元上将发生学习。然而,我们仍然发现接下来的局部响应归一化有助于泛化。
aix,y表示神经元**,通过在(x,y)位置应用核i,然后应用ReLU非线性来计算,响应归一化**bix,y通过下式给定:
局部响应归一化咋做的???
求和运算在n个“毗邻的”核映射的同一位置上执行,N是本层的卷积核数目。核映射的顺序当然是任意的,在训练开始前确定。响应归一化的顺序实现了一种侧抑制形式,灵感来自于真实神经元中发现的类型,为使用不同核进行神经元输出计算的较大活动创造了竞争。常量k,n,α,β是超参数,它们的值通过验证集确定;我们设k=2,n=5,α=0.0001,β=0.75。我们在特定的层使用的ReLU非线性之后应用了这种归一化
2.4 重叠池化
啥意思???
CNN中的池化层归纳了同一核映射上相邻组神经元的输出。习惯上,相邻池化单元归纳的区域是不重叠的(例如[17, 11, 4])。更确切的说,池化层可看作由池化单元网格组成,网格间距为s个像素,每个网格归纳池化单元中心位置z×z大小的邻居。如果设置s=z,我们会得到通常在CNN中采用的传统局部池化。如果设置s<z,我们会得到重叠池化。
2.5 整体架构
网络包含8个带权重的层;前5层是卷积层,剩下的3层是全连接层。最后一层全连接层的输出是1000维softmax的输入,softmax会产生1000类标签的分布。我们的网络最大化多项逻辑回归的目标,这等价于最大化预测分布下训练样本正确标签的对数概率的均值。
第2,4,5卷积层的核只与位于同一GPU上的前一层的核映射相连接,第3卷积层的核与第2层的所有核映射相连。全连接层的神经元与前一层的所有神经元相连。第1,2卷积层之后是响应归一化层。最大池化层在响应归一化层和第5卷积层之后。ReLU非线性应用在每个卷积层和全连接层的输出上。
第1卷积层使用96个核对224 × 224 × 3的输入图像进行滤波,核大小为11 × 11 × 3,步长是4个像素(核映射中相邻神经元感受野中心之间的距离)。第2卷积层使用用第1卷积层的输出(响应归一化和池化)作为输入,并使用256个核进行滤波,核大小为5 × 5 × 48。第3,4,5卷积层互相连接,中间没有接入池化层或归一化层。第3卷积层有384个核,核大小为3 × 3 × 256,与第2卷积层的输出(归一化的,池化的)相连。第4卷积层有384个核,核大小为3 × 3 × 192,第5卷积层有256个核,核大小为3 × 3 × 192。每个全连接层有4096个神经元。
3 减少过拟合
用来克服过拟合的两种主要方式。
3.1 数据增强
图像数据上最简单常用的用来减少过拟合的方法是使用标签保留变换(例如[25, 4, 5])来人工增大数据集。
两种独特的数据增强方式(通过非常少的计算量产生变换的图像,因此变换图像不需要存储在硬盘上。通过CPU的Python代码生成,而此时GPU正在训练前一批图像。)
第一种数据增强方式包括产生图像变换和水平翻转。我们从256×256图像上通过随机提取224 × 224的图像块实现了这种方式,然后在这些提取的图像块上进行训练。这通过一个2048因子增大了我们的训练集,尽管最终的训练样本是高度相关的。没有这个方案,我们的网络会有大量的过拟合,这会迫使我们使用更小的网络。在测试时,网络会提取5个224 × 224的图像块(四个角上的图像块和中心的图像块)和它们的水平翻转(因此总共10个图像块)进行预测,然后对网络在10个图像块上的softmax层进行平均。
第二种数据增强方式包括改变训练图像的RGB通道的强度。具体地,我们在整个ImageNet训练集上对RGB像素值集合执行PCA。对于每幅训练图像,我们加上多倍找到的主成分,大小成正比的对应特征值乘以一个随机变量,随机变量通过均值为0,标准差为0.1的高斯分布得到。因此对于每幅RGB图像像素Ixy=[IRxy,IGxy,IBxy]T,我们加上下面的数量:
pi,λi分别是RGB像素值3 × 3协方差矩阵的第i个特征向量和特征值,αi是前面提到的随机变量。对于某个训练图像的所有像素,每个αi只获取一次,直到图像进行下一次训练时才重新获取。这个方案近似抓住了自然图像的一个重要特性,即光照的颜色和强度发生变化时,目标身份是不变的。
3.2 失活(Dropout)
“dropout”[10],它会以0.5的概率对每个隐层神经元的输出设为0。那些“失活的”的神经元不再进行前向传播并且不参与反向传播。因此每次输入时,神经网络会采样一个不同的架构,但所有架构共享权重。这个技术减少了复杂的神经元互适应,因为一个神经元不能依赖特定的其它神经元的存在。
4 权重更新
我们使用随机梯度下降来训练我们的模型,样本的batch size为128,动量为0.9,权重衰减为0.0005。我们发现少量的权重衰减对于模型的学习是重要的。换句话说,权重衰减不仅仅是一个正则项:它减少了模型的训练误差。权重w的更新规则是
i是迭代索引,v是动量变量,ε是学习率,⟨∂L∂w|wi⟩Di是目标函数对w,在wi上的第i批微分Di的平均。
使用均值为0,标准差为0.01的高斯分布对每一层的权重进行初始化、
在第2,4,5卷积层和全连接隐层将神经元偏置初始化为常量1;在剩下的层将神经元偏置初始化为0。
对所有的层使用相等的学习率,这个是在整个训练过程中我们手动调整得到,学习率初始化为0.01,在训练停止之前降低三次
附:参数说明