第61篇AlexNet:CNN开山之作

Posted AI浩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第61篇AlexNet:CNN开山之作相关的知识,希望对你有一定的参考价值。

文章目录

摘要

论文链接:http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf

我们训练了一个大型的深度卷积神经网络,将ImageNet LSVRC-2010竞赛中的120万张高分辨率图像分类为1000个不同的类别。在测试数据上,我们实现了37.5%和17.0%的top-1和top-5错误率,这大大优于之前的最先进方案。神经网络有6000万个参数和65万个神经元,由5个卷积层组成,其中一些是最大池化层,三个全连接层和最终的1000路softmax。为了使训练更快,我们使用非饱和神经元和非常高效的卷积操作的GPU实现。为了减少全连接层中的过拟合,我们采用了最近开发的称为“dropout”的正则化方法,该方法被证明是非常有效的。我们还在ILSVRC-2012竞赛中输入了该模型的一个变体,并实现了15.3%的获胜前5名测试错误率,而第二名的成绩是26.2%。

1 简介

目前的目标识别方法主要使用机器学习方法。为了提高它们的性能,我们可以收集更大的数据集,学习更强大的模型,并使用更好的技术来防止过拟合。直到最近,带标签图像的数据集都相对较小,只有数万张图像(例如NORB [16], Caltech-101/256[8,9]和CIFAR-10/100[12])。在这种规模的数据集上,简单的识别任务可以很好地解决,特别是当它们通过标签保持变换进行扩充时。例如,MNIST数字识别任务上目前最好的错误率(<0.3%)接近人类性能[4]。但现实环境中的物体表现出相当大的可变性,因此要学习识别它们,就必须使用更大的训练集。事实上,小型图像数据集的缺点已经被广泛认识(如Pinto等人的[21]),但直到最近才有可能收集具有数百万图像的标记数据集。新的更大的数据集包括LabelMe[23],它由数十万个完全分割的图像组成,以及ImageNet[6],它由超过22,000个类别中的超过1500万张带标签的高分辨率图像组成。

要从数百万张图像中学习数千个对象,我们需要一个具有大学习能力的模型。然而,目标识别任务的巨大复杂性意味着即使是像ImageNet这样大的数据集也不能指定这个问题,因此我们的模型也应该有很多先验知识来补偿我们没有的所有数据。卷积神经网络(cnn)构成了这样一类模型[16,11,13,18,15,22,26]。它们的容量可以通过改变其深度和广度来控制,并且对图像的性质(即统计的平稳性和像素依赖的局部性)做出强大且基本正确的假设。因此,与具有相似层大小的标准前馈神经网络相比,cnn的连接和参数要少得多,因此更容易训练,而其理论上的最佳性能可能只会稍微差一点。

尽管cnn具有诱人的质量,尽管其本地架构的相对效率,但在大规模应用于高分辨率图像时,它们仍然非常昂贵。幸运的是,当前的gpu,加上高度优化的2D卷积实现,足够强大,可以促进有趣的大型cnn的训练,而且最近的数据集(如ImageNet)包含足够的标记示例,可以训练这样的模型,而不会出现严重的过拟合。

本文的具体贡献如下:我们在ILSVRC-2010和ILSVRC-2012比赛[2]中使用的ImageNet子集上训练了迄今为止最大的卷积神经网络之一,并在这些数据集上取得了迄今为止报告的最好结果。我们编写了一个高度优化的2D卷积和训练卷积神经网络中所有其他操作的GPU实现,并公开了。我们的网络包含许多新的和不寻常的特征,这些特征提高了它的性能并减少了训练时间,详情见第3节。即使有120万个带标签的训练样本,网络的规模也使过拟合成为一个严重的问题,因此我们使用了几种有效的技术来防止过拟合,见第4节。我们的最终网络包含5个卷积层和3个全连接层,这个深度似乎很重要:我们发现删除任何卷积层(每个卷积层包含的参数不超过模型参数的1%)都会导致性能下降。

最后,网络的大小主要受限于当前gpu上可用的内存数量和我们愿意容忍的训练时间。我们的网络在两个GTX 580 3GB gpu上训练需要5到6天。我们所有的实验都表明,我们的结果可以通过等待更快的gpu和更大的数据集来提高。

2 数据集

ImageNet数据集有超过1500万的标注高分辨率图像,这些图像属于大约22000个类别。这些图像是从网上收集的,使用了Amazon’s Mechanical Turk的众包工具通过人工标注的。从2010年起,作为Pascal视觉对象挑战赛的一部分,每年都会举办ImageNet大规模视觉识别挑战赛(ILSVRC)。ILSVRC使用ImageNet的一个子集,1000个类别每个类别大约1000张图像。总计,大约120万训练图像,50000张验证图像和15万测试图像。

ILSVRC-2010是ILSVRC竞赛中唯一可以获得测试集标签的版本,因此我们大多数实验都是在这个版本上运行的。由于我们也使用我们的模型参加了ILSVRC-2012竞赛,因此在第六节我们也报告了模型在这个版本的数据集上的结果,这个版本的测试标签是不可获得的。在ImageNet上,按照惯例报告两个错误率:top-1和top-5,top-5错误率是指测试图像的正确标签不在模型认为的五个最可能的便签之中。

ImageNet包含各种分辨率的图像,而我们的系统要求不变的输入维度。因此,我们将图像进行下采样到固定的256×256分辨率。给定一个矩形图像,我们首先缩放图像短边长度为256,然后从结果图像中裁剪中心的256×256大小的图像块。除了在训练集上对像素减去平均活跃度外,我们不对图像做任何其它的预处理。因此我们在原始的RGB像素值(中心的)上训练我们的网络。

3 架构

我们的网络架构概括为图2。它包含八个学习层–5个卷积层和3个全连接层。下面,我们将描述我们网络结构中的一些新奇的不寻常的特性。3.1-3.4小节按照我们对它们评估的重要性进行排序,最重要的最有先。

3.1 ReLU非线性

将神经元输出f建模为输入x的函数的标准方式是用 f ( x ) = tanh ⁡ ( x ) f(x)=\\tanh (x) f(x)=tanh(x) f ( x ) = ( 1 + e − x ) − 1 f(x)=\\left(1+e^-x\\right)^-1 f(x)=(1+ex)1。考虑到梯度下降的训练时间,这些饱和的非线性比非饱和非线性 f ( x ) = max ⁡ ( 0 , x ) f(x)=\\max (0, x) f(x)=max(0,x)更慢。根据Nair和Hinton[20]的说法,我们将这种非线性神经元称为修正线性单元(ReLU)。采用ReLU的深度卷积神经网络训练时间比等价的tanh单元要快几倍。在图1中,对于一个特定的四层卷积网络,在CIFAR-10数据集上达到25%的训练误差所需要的迭代次数可以证实这一点。这幅图表明,如果我们采用传统的饱和神经元模型,我们将不能在如此大的神经网络上实验该工作。


图1:使用ReLU的四层卷积神经网络在CIFAR-10数据集上达到25%的训练误差比使用tanh神经元的等价网络(虚线)快六倍。为了使训练尽可能快,每个网络的学习率是单独选择的。没有采用任何类型的正则化。影响的大小随着网络结构的变化而变化,这一点已得到证实,但使用ReLU的网络都比等价的饱和神经元快几倍。

我们不是第一个考虑替代CNN中传统神经元模型的人。例如,Jarrett等人[11]声称非线性函数f(x) = |tanh(x)|与其对比度归一化一起,然后是局部均值池化,在Caltech-101数据集上工作的非常好。然而,在这个数据集上主要的关注点是防止过拟合,因此他们观测到的影响不同于我们使用ReLU拟合数据集时的加速能力。更快的学习对大型数据集上大型模型的性能有很大的影响。

3.2 多GPU训练

单个GTX580 GPU只有3G内存,这限制了可以在GTX580上进行训练的网络最大尺寸。事实证明120万图像用来进行网络训练是足够的,但网络太大因此不能在单个GPU上进行训练。因此我们将网络分布在两个GPU上。目前的GPU非常适合跨GPU并行,因为它们可以直接互相读写内存,而不需要通过主机内存。我们采用的并行方案基本上每个GPU放置一半的核(或神经元),还有一个额外的技巧:只在某些特定的层上进行GPU通信。这意味着,例如,第3层的核会将第2层的所有核映射作为输入。然而,第4层的核只将位于相同GPU上的第3层的核映射作为输入。连接模式的选择是一个交叉验证问题,但这可以让我们准确地调整通信数量,直到它的计算量在可接受的范围内。

除了我们的列不是独立的之外(看图2),最终的架构有点类似于Ciresan等人[5]采用的“columnar” CNN。与每个卷积层一半的核在单GPU上训练的网络相比,这个方案降分别低了我们的top-1 1.7%,top-5 1.2%的错误率。双GPU网络比单GPU网络稍微减少了训练时间。

3.3 局部响应归一化

ReLU具有让人满意的特性,它不需要通过输入归一化来防止饱和。如果至少一些训练样本对ReLU产生了正输入,那么那个神经元上将发生学习。然而,我们仍然发现接下来的局部响应归一化有助于泛化。 a x , y i a_x, y^i ax,yi​表示神经元激活,通过在 ( x , y ) (x, y) (x,y)位置应用核 i i i,然后应用ReLU非线性来计算,响应归一化激活 b x , y i b_x, y^i bx,yi通过下式给定:
b x , y i = a x , y i / ( k + α ∑ j = max ⁡ ( 0 , i − n / 2 ) min ⁡ ( N − 1 , i + n / 2 ) ( a x , y j ) 2 ) β b_x, y^i=a_x, y^i /\\left(k+\\alpha \\sum_j=\\max (0, i-n / 2)^\\min (N-1, i+n / 2)\\left(a_x, y^j\\right)^2\\right)^\\beta bx,yi=ax,yi/ k+αj=max(0,in/2)min(N1,i+n/2)(ax,yj)2 β

求和运算在n个“毗邻的”核映射的同一位置上执行,N是本层的卷积核数目。核映射的顺序当然是任意的,在训练开始前确定。响应归一化的顺序实现了一种侧抑制形式,灵感来自于真实神经元中发现的类型,为使用不同核进行神经元输出计算的较大活动创造了竞争。常量k,n,α,β是超参数,它们的值通过验证集确定;我们设k=2,n=5,α=0.0001,β=0.75。我们在特定的层使用的ReLU非线性之后应用了这种归一化(请看3.5小节)。

该方案与Jarrett等人的局部对比度归一化方案有一些相似之处,但我们的方案更准确地称为“亮度归一化”,因为我们没有减去均值。响应归一化分别降低了1.4%和1.2%的top-1和top-5错误率。我们还在CIFAR-10数据集上验证了该方案的有效性:四层CNN在未归一化情况下取得了13%的测试错误率,在归一化情况下取得了11%的测试错误率。

3.4 重叠池化

CNN中的池化层归纳了同一核映射上相邻组神经元的输出。习惯上,相邻池化单元归纳的区域是不重叠的(例如[17, 11, 4])。更确切的说,池化层可看作由池化单元网格组成,网格间距为s ss个像素,每个网格归纳池化单元中心位置 z × z z \\times z z×z大小的邻居。如果设置 s = z s=z s=z,我们会得到通常在CNN中采用的传统局部池化。如果设置 s < z s<z s<z,我们会得到重叠池化。这就是我们网络中使用的方法,设置s=2,z=3 。这个方案分别降低了top-1 0.4%,top-5 0.3%的错误率,与非重叠方案 s=2, z=2 相比,输出的维度是相等的。我们在训练过程中通常观察采用重叠池化的模型,发现它更难过拟合。

3.5 整体架构

现在我们准备描述我们的CNN的整体架构。如图2所示,我们的网络包含8个带权重的层;前5层是卷积层,剩下的3层是全连接层。最后一层全连接层的输出是1000维softmax的输入,softmax会产生1000类标签的分布。我们的网络最大化多项逻辑回归的目标,这等价于最大化预测分布下训练样本正确标签的对数概率的均值。


图 2:我们CNN架构图解,明确描述了两个GPU之间的责任。在图的顶部,一个GPU运行在部分层上,而在图的底部,另一个GPU运行在部分层上。GPU只在特定的层进行通信。网络的输入是150,528维,网络剩下层的神经元数目分别是253,440–186,624–64,896–64,896–43,264–4096–4096–1000(8层)。

第2,4,5卷积层的核只与位于同一GPU上的前一层的核映射相连接(见图2)。第3卷积层的核与第2层的所有核映射相连。全连接层的神经元与前一层的所有神经元相连。第1,2卷积层之后是响应归一化层。3.4节描述的这种最大池化层在响应归一化层和第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个神经元。

4 减少过拟合

我们的神经网络架构有6000万参数。尽管ILSVRC的1000类使每个训练样本从图像到标签的映射上强加了10比特的约束,但这不足以学习这么多的参数而没有相当大的过拟合。下面,我们会描述我们用来克服过拟合的两种主要方式。

4.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图像像素 I x y = [ I x y R , I x y G , I x y B ] T I_x y= \\left[I_x y^R, I_x y^G, I_x y^B\\right]^T Ixy=[IxyR,IxyG,IxyB]T ,我们加上下面的数量:

[ p 1 , p 2 , p 3 ] [ α 1 λ 1 , α 2 λ 2 , α 3 λ 3 ] T \\left[\\mathbfp_1, \\mathbfp_2, \\mathbfp_3\\right]\\left[\\alpha_1 \\lambda_1, \\alpha_2 \\lambda_2, \\alpha_3 \\lambda_3\\right]^T [p1,p2,p3][α1λ1,α2λ2,α3λ3]T

p i \\mathbfp_i pi λ i \\lambda_i λi 分别是RGB像素值3 × 3协方差矩阵的第i 个特征向量和特征值, α i \\alpha_i αi是前面提到的随机变量。对于某个训练图像的所有像素,每个 α i \\alpha_i αi只获取一次,直到图像进行下一次训练时才重新获取。这个方案近似抓住了自然图像的一个重要特性,即光照的颜色和强度发生变化时,目标身份是不变的。这个方案减少了top 1错误率1%以上。

4.2 失活(Dropout)

将许多不同模型的预测结合起来是降低测试误差[1, 3]的一个非常成功的方法,但对于需要花费几天来训练的大型神经网络来说,这似乎太昂贵了。然而,有一个非常有效的模型结合版本,它只花费两倍的训练成本。这种最近引入的技术,叫做“dropout”[10],它会以0.5的概率对每个隐层神经元的输出设为0。那些“失活的”的神经元不再进行前向传播并且不参与反向传播。因此每次输入时,神经网络会采样一个不同的架构,但所有架构共享权重。这个技术减少了复杂的神经元互适应,因为一个神经元不能依赖特定的其它神经元的存在。因此,神经元被强迫学习更鲁棒的特征,它在与许多不同的其它神经元的随机子集结合时是有用的。在测试时,我们使用所有的神经元但它们的输出乘以0.5,对指数级的许多失活网络的预测分布进行几何平均,这是一种合理的近似。

我们在图2中的前两个全连接层使用失活。如果没有失活,我们的网络表现出大量的过拟合。失活大致上使要求收敛的迭代次数翻了一倍。

5 学习细节

我们使用随机梯度下降来训练我们的模型,样本的batch size为128,动量为0.9,权重衰减为0.0005。我们发现少量的权重衰减对于模型的学习是重要的。换句话说,权重衰减不仅仅是一个正则项:它减少了模型的训练误差。权重w的更新规则是
v i + 1 : = 0.9 ⋅ v i − 0.0005 ⋅ ϵ ⋅ w i − ϵ ⋅ ⟨ ∂ L ∂ w ∣ w i ⟩ D i w i + 1 : =

以上是关于第61篇AlexNet:CNN开山之作的主要内容,如果未能解决你的问题,请参考以下文章

专栏目录汇总

专栏目录汇总

CV开山之作:《AlexNet》深度学习图像分类经典论文总结学习笔记(原文+总结)

CV开山之作:《AlexNet》深度学习图像分类经典论文总结学习笔记(原文+总结)

经典卷积神经网络 之 AlexNet

手撕 CNN 经典网络之 AlexNet(理论篇)