为了参加LSVRC-2010的ImageNet比赛,我们训练了一个广而深的卷积神经网络来上正确进行具有1000种类别的120万张高解析度的图片分类,最后top-1和top-5的错误率,分别为37.5%和17.0%,比之前最先进的技术还要好。这个网络有6000万个参数,650000个神经元,共5层,其中某些层后面为Max Pooling层,还有3层全连接层,最后是一层softmax来给出1000个分类。为了让训练更快,我们使用了非饱和神经元_(反向传播经过这个神经元时,梯度不接近0,还能继续向前传)_和效果很好的GPU来进行卷积操作。为了减少全连接层的过拟合,我们使用了最近正在发展的正则化方法dropout,效果非常好。我们还将这个模型的辩题用在了ILSVRC-2012的比赛上,最后top-5错误率只有15.3%,比较而言第二名只有26.2%。
四年前,Yann LeCun和他的小伙伴们被世界领先的计算机大会拒接了,理由是他们使用的神经网络并没有洞察*(provide no insight)如何设计一个世界系统。当时,大多数的计算机视觉研究者坚信,必须要对任务进行细致的理解并用精心的手工设计(hand-designed)*来整一个视觉系统。他们声称,仅通过自然图片的简单例子和他们的正确标签是无法解决对物体的分类的。
许多视觉研究行业的人们没有意识到,哪些需要认真手工编写*(hand-engineering)的方法并不能像那些强大的通用学习工程一样可泛化。当我们有了足够的数据,进行了足够多的计算,学习就能胜过哪些需要大量不同的有噪声的线索(noisy cues)*的复杂任务的编程。
四年前,当我们还在多伦多大学的时候,我们有一款叫做SuperVision的深度神经网络几乎将自然图片的识别错误率减小了一半,而且它也引起了一系列计算机视觉中固定思维的变化。图4中展示了SuperVision的能力的部分例子。
SuperVision从80年代开始被广泛研究的多层神经网络中演化出来。这些网络使用许多许多充当特征探测作用的层,可以从训练数据中很好的进行学习。神经科学家和信息学家猜测,这些特征探测器之间的层级关系可以为识别物体提供一种具有鲁棒性的方法,然而对于这种层级关系要怎样学习毫无头绪。80年代,一件令人振奋的事情发生了,许多研究组都发现,这些特征探测层可以以一种叫做反向传播的算法进行训练,这种算法较为直截了当,对每种图片的分类表现究竟如何,主要取决于每层连接的权重值。
反向传播在许多任务上表现的都很好,但是在80年代,它没有达到其推崇者的期望。尤其是那些多层的网络非常难以学习,然而往往这些严谨*(precisely)*的网络应该表现的最好。许多研究学者得到了一个错误的结论,那就是从随机初始化的权重中去让神经网络进行学习是在太难了。20年后,我们明白这是谬论:如果要让深度神经网络表现良好,他们需要更多有标签的数据和海量的计算。
目前的目标识别主要用的是机器学习的方法。为了提升其性能,我们可以收集更多的数据集,学习更强大的模型,使用更好的技术来避免过拟合。直到现在,带标签的数据集还是相对较少的——只有数万张*(例如NORB,Caltech-101/256和CIFAR-10/100)。简单的识别任务还是能用这样大小的数据集训练的比较好的,尤其是使用了数据扩充后(label-preserving transformations)。举个例子,当前在MNIST上进行字符识别的最好错误率已经达到了人类水平(<0.3%)*。但是现实生活中的物体变化多样,理应需要更大的训练集来识别他们。并且实际上,小数据集带来的缺点已经被广泛认知到了,但是也是直到现在,收集百万级的带标签的数据集才成为可能。最新的数据集LabelMe由成千上万个被完全分割好的图像组成,还有ImageNet,有超过150万个带标签的高解析度图片构成,超过22000个分类。
要从这百万张图片中学习,我们需要学习能力强的模型。然而,这极大的复杂度意味着这个问题不能被精确定位,即使是用了如ImageNet这么大的数据集。所以我们的模型应该有大量的先验知识*(prior knowledge)来弥补数据缺失的影响。卷积神经网络(CNNs)就是这样的一类模型。可以通过控制宽度和深度来控制它的学习能力,并且对于自然图片也有健壮且基本正确的判断(即平稳的统计和依赖像素的局部性)*。因此,与具有相同层数的标准前馈神经网路相比,CNNs的连接数和参数更少,因此更容易训练,同时他们在理论上的最好表现只稍稍差一点。
尽管CNNs有着吸引人的特质,尽管它在局部架构上更加有效,它在高分辨率的图片上的消耗还是令人望而却步。幸好,我们的GPU加上高度优化后的二维卷积已经完全有能力去对很大的CNNs进行训练,并且近来的数据集,比如ImageNet,包含足够带标签的样本来进行不会严重过拟合的训练。
本文的具体贡献如下:我们用ImageNet的子集中的数据训练了一个最大的卷积神经网络,并用它参加了2010和2012的ILSVRC,取得了在这个数据集上前无古人的成绩。我们编写了在二维卷积上的高效GPU操作和在训练卷积神经网络时的其他固定方法,并将他们公开。我们的网络包含数个全新且罕见的特征,这些特征可以提升其性能并缩短训练时间,细节在第4节。即使有120万个带标签的训练样本,我们的网络也太大以至于过拟合成了关键问题,所以我们使用了许多有效方法来避免过拟合,细节在第5节。 我们的网络共有5层卷积,3层全连接层,而且这个层数很重要:因为不论把哪一层的卷积删了*(即使是他们每层都只有占全部参数少于1%的参数)*都会导致较差的性能。
最后,网络最后决定的大小主要是由于其在当前GPU上占的内存和我们还能忍的训练时间。 在两张显存为3GB的GTX580我们的网络花了5到6天时间去训练。我们的经验告诉我们,最后的结果可以用更快的GPU和更大的数据集来提升。
ImageNet是一个拥有超过150万张高清晰度照片,22000多个分类的数据集。这些数据从网络收集,由专门标签的人们用Amazon的Mechanical Turk众包工具打标签。2010年开始,作为Pascal Visual Object Challenge的一部分,叫做ILSVRC的年度比赛开始举办,ILSVRC用的是ImageNet 的子集,大约有1000个类别,每个类里有1000多张图片。最后大概有120万张训练图片,50000张验证数图片和150000张测试图片。
2010年的ILSVRC是唯一一届测试集的标签可用,所以这一年我们取得了我们的最好成绩。在2012年测试集标签就不可用了,如第7节中我们也给出了结果。在ImageNet中通常会给出两个错误率,top1和top5,其中top5是指正确标签不是网络所预测的最有可能的五个标签时的部分。
Im ageNet中的图片分辨率参差不齐,但我们的网络需要固定维度的输入。躲我,我们将图片下采样到256x256。给定一个矩形图像,我们先将图片缩放至短边为256,然后把图片裁为256x256。除了减去训练集的均值图像,就没有对图片进行其他预处理了。所以我们实际上把网络作用在原生RGB的像素图的中央。
我们的网络结构在图2中有所总结。共包含8层——5层卷积,3层全连接。下面我们会详细表述我们的网络结构中新奇且罕见的特点。4.1-4.4节的重要性依次递减。
将神经元的输出f建模为在x上使用的函数的常规方法是使用f(x)=tanh(x)或f(x)=(1+e-x)-1。在梯度下降训练时间方面而言,这些饱和的非线性函数比f(x)=max(0,x)这种非饱和的非线性函数慢得多。在Nair和Hinton后,我们将这种具有非线性的神经元称为校正线性单位*(Rectified Linear Units)(ReLUs)*,使用ReLU的深度卷积神经网络比使用tanh的速度要快得多。图1中展示了使用一个4层的卷积神经网络识别CIFAR-10时,达到25%的训练误差时的迭代次数变化。该坐标图说明,如果我们使用传统的饱和神经元,是无法在如此大的神经网络上进行试验的。
我们不是第一个考虑替换传统神经元的。例如Jarrett等人声称,在Caltech-101数据集上,使用对比度标准化后的局部平均池时,非线性函数f(x)=|tanh(x)|表现的特别好。然而,在这数据集上最先应该担心的是避免过拟合。所以他们观察到的效果,和我们在文中提及的不一样,我们提及的在使用了ReLU后网络会训练的更快速。更快的学习在更大的训练集和更大的数据集上会有更好的表现。
单个GTX580的GPU只有3GB的显存,限制了可以在其上训练的网络大小。结果证明,120万个训练样本足以训练无法在一个GPU上装不下的网络。因此我们把网络扩展到了2个GPU上。当前的GPU已经为跨GPU的并幸运号做了很好的适配,可以从另一个存储空间直接拿数据,不用去主机上拿。我们采用的并行计算本质上是在每个GPU上放一半的卷积核,有个额外的技巧:GPU只在特定的层中通信。这意味着,举例来说,第三层上的卷积核从第二层的卷积核上取数据,当第四层和第三层在一个GPU上时,第四层只在第三层上取。对于交叉验证问题,是选择何种连接模式,但这可以让我们精确地调整层间通信知道计算量可以接受。
由此产生的结构与Ciresan等人采用的柱状CNN有些类似,区别在于我们的柱不是独立的。 和在GPU上训练,每层卷积层的卷积核只用一半相比, 这一结构将top1和top5下降了1.7%和1.2%。在两个GPU上训练比在一个GPU上训练花的时间要略少。
ReLU的一大特性是他不需要将输入归一化来避免饱和。如果有些训练样本对ReLU输入正数,这些神经元就会进行学习。然而我们发现本地局部归一化有助于泛化。
a表示神经元激活,在(x,y)位置上应用卷积核i,应用ReLU非线性计算,相应归一化激活b通过上式计算。
CNN中的池化层把输出中在同一个卷积核中的相邻组进行池化。以往,用临近的池化单元进行邻接组池化时不重叠。更准确的说,一个池化层可以想象成是由许多池化单元的方格组成的,池化单元之间的间距为s个像素,每个池化单元的方格是以其位置为中心,大小为zxz的领域,如果令s=z,就是传统的CNN中的池化层。如果令s 现在我们就有了这个CNN的整体架构。如图2,这个网络包括8个带权重的层,5层卷积,3层全连接。最后一层的全连接用softmax作为输出给出对应于1000个类别标签的值。我们的网络使多项式线性回归最大化,相当于在预测分布下让正确标签的对数概率的平均值最大。 第二、四、五卷积层的卷积核只分别和他们前一层的kernel map在同一个GPU上相连。第三卷积层的卷积核和第二层的所有kernel map都相连。全连接层的神经元和他们之前的一层的神经元全部先过来。响应归一化层跟在第一二卷积层后。4.4中的描述的那种最大池化层跟在响应归一化层和第五卷积层之后。每个卷积层和全连接层之后都接着ReLU层。 第一层卷积层对224x224x3的输入图像进行滤波,滤波器大小为11x11x3,步长为4,共96个。第二卷积层以前一卷积层的输出(响应归一化和池化后的)作为输入,进行5x5x48大小的滤波,滤波器共256个。三四五层的卷积层相互连接,但没有夹杂池化和归一化层。第三层卷积层用384个大小为3x3x256的卷积核对第二层的结果进行滤波。第四层用384个大小为3x3x192的滤波器,第五层用256个大小为3x3x192的滤波器。全连接层每层都有4096个神经元。 我们的网络架构有600万个参数,尽管ILSVRC的1000个类别让每个训练样本从图像到标签时添加了10位的约束,如此多的参数也让我们不得不考虑过拟合的问题。下面我们讨论了两种对抗过拟合的办法。 最简单和常用的对抗过拟合的办法就是人工的增强数据。我们使用了两种不同的数据增强办法,他们去从原始图片上生成变换后的图片所用的代价都很小,所以这些转换后的图片不需要保存在磁盘上。在我们的实施办法中,我们在CPU上跑转换图片的代码,在GPU上训练之前的批图像。所以这些数据扩充有效率且不用花费算力。 第一个数据增强的办法是平移或者水平翻转图像。我们通过从256x256的图像中随机提取224x224的块(和他们的水平翻转)之后用这些提取后的块训练网络。这使得我们的训练集规模增大了2048倍,尽管最后的训练样本理所当然是高度相互依赖的。如果没有这个操作,我们的网络会遭受到潜在过拟合的影响,这会迫使我们使用一个更小的网络。在训练的时候,网络在进行预测时,会提出5个224x224的块(4个角落的,1个中心的)和水平翻转后的(总共10个)的图片,最后在这10个小块上用softmax进行预测,最后求平均值。 第二中数据扩充的办法是增强训练图片中的RGB通道。具体来说是在ImageNet的训练集中的RGB像素上进行PCA。对每个训练图片,我们加上相应特征值成比例的乘上平均值为0,标准偏差为0.1的随机高斯特征值的主成分。对于RGB的图像像素,加上 p是主成分,lamda是特征值,alpha是N(0,0.1)高斯分布中采样得到的随机值。这个方案的重要特性就是,自然图像在不同的光照强度和颜色下理应是不变的,这个方案将top1错误率减少了超过1%。 结合不同模型的预测是减小测试误差的好办法,但对于一个本来就要训练好几天的很大的神经网络来说花费太高。然而有一个非常有效的组合办法只需要花费两倍的训练消耗。这种最近兴起的技术叫“dropout”,有50%的几率将神经元的输出设置为0。那些被“dropout”了的神经元将不会进行前向和反向传播。所以每次输入时,神经网络都有不同的结构,这些结构共享权重。当神经元不能依靠于其他特定的神经元时,这项技术就成功地减少了神经元之间的相互适应。因此,他们被迫去学习更加健壮的特征,这些特征和其他神经元的互不相同的子集协同作用。在训练师,我们使用所有的神经元,但把他们的输出乘0.5,这是一个合理的近似值,我们从而可以得到经过dropout后的网络预测的几何平均值。 我们用batch_size=128的SGD训练网络,momentun=0.9,weight decay=0.005,我们发现这里的微小值很重要,换句话说,这里的wight decay不仅仅是正则项:它见笑了模型的训练误差。w的更新公式为 i为迭代次数,v是冲量,ε是学习率,上面的最右边是目标关于w、对求值的导数在第i批样例上的平均值。我们用一个均值为0、标准差为0.01的高斯分布初始化了每一层的权重。初始化了第二、四、五卷积层还有全连接层的神经元偏置为1。这样的初值可以避免给ReLU提供正数从而加快一开始的学习。剩下的层的偏置用0初始化。 所有层的学习率都一样,都是我们手工在训练中调整的。我们遵循的启发式方法是,当验证错误率不提升时把学习率除以10。学习率的初始值为0.01,在结束前要下调3次。我们在120万张图片上进行了大概90轮循环,用GTX580,3gb的两张显卡跑了5到6天。 表1汇总了ILSVRC-2010上的结果,我们的CNN的top-1和top-5的测试集错误率分别为37.5%和17.0%。 我们同样参加了ILSVRC-2012,结果如表2。自从2012年起,测试集的标签就不可获取了,我们没法得到该模型上的测试错误率,在本段落,我们把验证和测试错误率混合使用,因为实践表明他们相差不到0.1%(参见表2)。 图3中展示了卷积核是如果通过两层的神经网络进行学习的。卷积层学到的有频率和方向选择性的卷积核,和颜色斑点。注意到GPU1和GPU2学习到的东西不一样。GPU1不感知颜色,GPU2感知颜色。这种情况在每次运行中都会出现,和权重的初始化无关。 图4的左边部分展示了我们的网络是符合对这8个图片做出5种预测的。注意到就算物体偏离中心,网络也可以成功识别。大多数的top5预测都准确。例如leopard的其他预测看起来也挺合理。有些情况下,例如grille和cherry这两张,他们的焦点本身就有点模模棱两可。 另一个检测其能力的办法是考虑最后一张图片引起的特征激活,就是4096维的那层隐藏层。如果两幅图片产生的特征激活向量具有很小的欧几里得分隔,我们就认为,网络认为他们是类似的。图4展示了测试集中的5张图片和对应的网络认为与之分别相似的训练集中的6张图片。注意到在像素级别,第一列的图片和选出的训练图片的L2普遍不同。例如狗和大象的姿态都是不一样的。在补充材料中有更多的结果。4.5 总架构
5. 减小过拟合
5.1 数据扩充
5.2 Dropout
6. 学习的细节
7. 结论
7.1 定性评价
8. 讨论
9. 后记