摘要
我们训练了一个又大又深的卷积神经网络CNN来将ImageNet LSVRC-2010数据集中的120万章高分辨率的图片分成1000个不同的类。在测试集中,我们的top1错误率是37.5%,top5的错误率是17.0%。相对而言比之前的state-of -art好很多。这个神经网络有6000万个参数,65个神经元,5个卷积神经网络(有一些带有最大池化层),3个全连接层,最后有一个1000路的softmax。为了训练的快一些,我们采用了一个非饱和的神经元和非常有效的卷积神经网络GPU实施方式。为了减少全连接层的过拟合,我们使用了最近研究出来的一种方法-droupout,他能够有效的降低过拟合。我们还将这个模型的变体参加了ILSVRC-2012竞赛,并取得冠军,top5的错误率是15.3%,第二名是26.2%。
1、开场白
四年前,Yann LeCun和他的团队的一个论文被最领先的CV会议拒绝了,因为怎么设计一个视觉系统内部是不明确的。那个时候,大部分的计算机视觉的研究人员认为视觉系统需要使用任务的自然理解来手动进行设计视觉系统。他们认为图片中对象的分类任务不会被简单的呈现图片和和对相应的图片进行标记这种方式获得。
很多计算机视觉领域内的团队没有意识到:之前的方法 由理解这个领域内的程序员来手动设计;用一种有力的通用的学习过程来替代这个专门领域中的程序员,也是可以的。在复杂程度很高又有噪音的竞赛中大量数据的学习击败了专门领域的程序员的编程。
四年前我们在tornado 大学的时候,我们的深度神经网络叫做Supervision,这个网络减半了错误率,在计算机视觉领域带来了一个范式改革。(也就是以后大家都是用这个模型了)。figure4展示了Supervision可以做什么:
Supervision使用了1980年广泛研究的多层神经网络。这些网络使用从训练集中学到的额多层特征检测器。神经科学家和物理学家期望这些隐藏的特征检测器可以提供一个鲁棒的方法来识别对象,但是他们不知道这样的隐层怎么样才能够学到。80年代是一个伟大的时刻,因为几个不同的研究团队发现多层特征检测器可以通过反向传播算法来计算,对于每个图片,整个网络是怎么分类的取决于每一个连接点的权重。
反向传播在很多任务中表现很好,但是在80年代他没有达到倡导者的期望。学习很多层的网络被证明是很困难的,但是这些正是我们需要提供的网络。很多研究人员错误的总结从随机的初始值中学习一个深度神经网络太困难了。二十年过去了,我们知道我们哪里错了:想要让深度神经网络大放异彩,我们需要大量的标记的数据和更强的计算能力。
2、介绍
当前的对象识别方法使用了大量的机器学习的方法。为了提高他们的表现能力,我们可以收集大量的数据集,学习更有效的模型,使用更好的计数来防止过拟合。直到最近,标记的数据集相对来说比较小,大概是几万的级别的。简单的识别任务可以使用这个量级的图片很好的解决,特别是在标签压缩增广时候(可能说的就是one-hot编码)。比如,最近数字识别任务的错误率达到了人类的错误率(<0.3%)。但是在现实中的物体是更加变化多端的,所以要识别这样的物体就会需要更加多的训练数据集。小型的图片数据集的缺点被大家认识到了,但是目前收集大量的几百万张标记的数据集变得可能了。最近的数量大的数据集:包含成百上千分段的图片的LableMe,1500万张标记的高清的22000个分类的图片ImageNet。
从几百万的图片中学习几千个分类,我们需要学习容量很大的学习器。很强的复杂程度意味着对象识别任务不满足于ImaNet训练集的大小,所以我们的模型应该由先进的知识来补偿我们没有的数据。CNNs包含这样一系列的模型。他们的容量可以通过深度和广度来控制。并且他们总是做出正确的假设。因此,标准的反馈,有相同层的神经网络,cnns由更少的连接曾和参数,所以CNNs训练起来更加容易。理论上只比标准的反馈差一点点。
尽管CNNs的数量的魅力,以及和他们本地结构的相对效率,他仍然令人望而却步的是他大量的计算能力。幸运的是现在的GPU,往往高性能的和2D卷积实施组合在一起了,从而能够处理训练相当大的CNNs。并且最近的数据集比如说ImageNet包含足够的标记的例子来训练没有过拟合的模型。
这个文章的特别贡献如下:我们以ImageNet为数据集来训练了一个最大的CNNs,用在ImageNet Large-Scale Visual Recognition Challenge(ILSRC)-2010和ILSVRC-2012竞赛上面,并且取得了在这个数据集上面有史以来最好的成绩。我们写了一个高性能的实施在GPU上面的2D卷积其他的操作阴残在CNNs中,我们变得让他被大家接受。我们的神经网络包含很多的新的和不同寻常的提高他性能减少他训练时间的特征,在第四部分详细描述了。我们的网络的大小让过拟合变成了一个典型的问题,及时有120万标记的训练例子。因此我们使用集中有效的计数来防止过拟合,在第五部分有介绍。我们族中的网络包含5个卷积层和三个全连接层,这个深度看起来很重要:我们发现去掉任何一个卷积层都会导致低性能。
最终,这个网络的大小主要受限于当时GPUs的内存大小和我们能够容忍的训练时间。在两块GTX580上面我们的网络花费5到6天来训练。我们的经验告诉我们如果更快的GPUs和更大的训练集出现的时候,我们的结果会更好。
3、数据集
ImageNet是一个超过1500万的带标记的高精度的图片,大概有22000个分类。这些图片从网上收集由人工标注。从2010年开始,作为Pascal Visual Object Challenge的一部分,一个年度举行的竞赛叫做ImageNet Large-Scale Visual Recognition Challenge(ILSVRC)。ILSVRC使用Imagenet1000各类别,每个类别1000张照片。接近120万个训练照片5万个验证照片15万张测试照片。
ILSVRC-2010是唯一的一个有测试集的版本,因此我们就在这个数据集上执行验证。因为我们也参加了ILSVRC-2012竞赛,在section 7 中我们报道了我们在这个版本数据集上的结果。在ImageNet竞赛中,使用的性能指标是top1和top5 错误率。
ImageNet包含各样的照片,但是我们的系统需要一个固定的输入尺寸。因此我们将输入调整到256*256.除了从像素中减去训练集上的平均活动之外,我们没有对图片进行人和的预处理,因此我们将网络训练为原始的RGB值。
4、结构
我们网络的机构总结在图二中。包含8个学习层-5个卷积层,3个全连接层下面介绍了我们的一些特别的地方
4.1 非线性修正单元
一个神经元的标准建模的方法是f(x) = tanh(x) ;f(x) = (1+e-x)-1.
用梯度下降法来比较他们的训练时间的话,饱和非线性比非饱和非线性f(x) = max(0,x)慢得多,根据Nair和Hinton,我们把这种非线性神经元叫做ReLUs。带有ReLU的深度CNNs比tanh单元快好几倍。这个在图一中体现了,图一展示了达到25%的训练误差各自需要的迭代次数。这个说明如果我们使用传统的饱和非线性单元将不能测试这么大的神经网络。
我们不是第一个考虑将CNNs替代传统神经网络的。比如说,Jarrett et al.声明非线性f(x) = |tanh(x)|在本地平均池化后采用对应的正则化会表现更好。但是,在这个数据集中主要关心的是预防过拟合,因此他们观察到的效果和我们使用ReLU加速适应训练集的效果不同。快速学习在基于大数据集的大模型上有一个更大的影响。
4.2 在多个GPU上面训练
单个的GTX580只有3GB的内存,限制了我们能在它上面训练的最大的网络内存大小。120万的训练数据在一个GPU上面训练,数据太大了。因此我们将这个网络分割成两个GPU。当前的GPUs特别适合GPU并行,因为他们能够从另一个中直接读写,不用通过主机内存。我们使用的并行结构严格的每个GPU处理一半的神经元。GPU只有在特定的层才会交流。这个就意味着,第三层的kernel将所有的第二层的kernel作为输入,第四层的kernel将对用GPU的第三层的所有kernel作为输入。对于交错验证来说,选择连接方式是一个关键问题。但是这个允许我们精确的调节通信的数量直到达到一个可以接受的精度。
这个结构的集过在一定程度上来说和Ciresan et al的柱状CNN相似,除了我们的柱子不是独立的(看图二)。相对而言,和一个网络有一半的kernel在每一个卷积层训练在一个GPU上比较。我们的结构减少了top1的错误率1.7%,top5的错误率1.2%。两个GPU的网络比一个GPU的网络训练时间减少了一点点。
4.3本地响应正则化
ReLUs有一个合乎要求的性能,他不需要输入进行正则化来防止输入饱和。如果一些训练样例产生了正值输入到ReLU,在这个神经元上就会发生学习。并且我们发现下面的本地正则化结构有助于泛化。
他首先将特征映射上按着核进行分割然后按照某种特定的顺序进行一字排开。
n:我们采用n个相邻的核来进行正则化。选择临近的channel相同位置上的点进行局部正则化
N:所有的kernel数量(256,192等等),这应该是所有的channe数
max和min是为了防止超出特征映射的边长。
kernel maps的顺序可以是任意的,在训练开始前确定顺序即可
这种反应正则化实施的一种方式灵感来自于真实的神经元,不同神经元使用不同内核计算的输出产生了大型的竞争。k,n,a和B是超参数他的值被验证集测试决定。我们使用k = 2;n= 5,a = 0.0001,B= 0.75.我们在中间层实施ReLUs正则化后实施反应正则化。(见section4.5)
这个结构和Jarret局部归一化对比有一定的相似之处。但是我们的亮度归一化更准确,因为我们不减去平均活跃程度。反应归一化减少了我们的top1错误率1.4%,top5错误率1.2%。我们也在CIFAR-10 数据集上验证了这个结构的有效性:一个四层的CNN没有正则化取得13%的测试错误率,有正则化11%的错误率。
4.4 重叠池化
在CNNs中的池化层总结了相同的核映射附近区域神经元的输出。通常被临近的池化单元总结的相邻神经元不会重叠。为了精度更高一些,一个池化层可以理解为包含s个像素间隔,每次总结的 临近的区域的大小是z*z。如果我们设置s=z,这个就是我们在CNN是中经常用的。如果我们设置s<z,我们获得重叠池化层。考虑这些情况,我们的网络s = 2,z = 3。这个结构和s=2,z=2相比减少了top1的错误率0.4%,top5的0.3%,我们在训练期间一般发现重叠池化可以轻微的抑制过拟合。
这里的s指的是kernel的步长,z指的是kernel的size。
4.5 整体的结构
我们现在准备好来介绍CNN的整体的结构了。像图二描述的那样,这个网络包含8层;前五层是卷积层剩下的三层是全连接层。最终的输出全连接层是1000路。我们的网络最大化了多个逻辑回归,等价于最大化log(y/(1-y))这个大概就是周志华西瓜书上面介绍的逻辑回归和线行回归的联系。
2,4,5卷积层的kernel只和相同前面层相同GPU的全连接。第三层的卷积层和第二层所有的卷积层相连接。全连接层的神经元和前面一层所有的神经元相连接。反应正则化层在第一层和第二层卷积层后面。最大池化层,像section4描述的那样,在反应正则化和第五层卷积层后面。ReLU非线性话单元在每一个卷积层和全连接层后面。
第一层输入224*224*3 96kernel11*11*3 步长4,第二层卷积层将第一层的输出作为输入, 256kernel5*5*48,第三层第四层,第五层卷积层没有连接池化层或者正则化层。第三层的卷积层有384kernel 3*3*256连接到第二层(正则化后,池化层后)的输出。第四层 384kernel 3*3*192,第五层卷积层有256kernel3*3*192.全连接层每层有4096个神经元。
输入 | 224*224*3 |
|
|
conv1 | kernel size:11*11*3 (在翻译资料中常称作通道数) | 55*55*(48*2) |
|
| response-noemalization |
|
|
| max_pool step = 2 size = 3 | 27*27*(48*2) |
|
| ReLU |
|
|
conv2 | kernel size:5*5*48 step :1 | 27*27*(128*2) | same GPU |
| response_normalization |
|
|
| max_pool step = 2 size = 3 | 13*13*(128*2) |
|
| ReLU |
|
|
conv3 | kernel size:3*3*256 step :1 | 13*13*(192*2) | all GPU |
| ReLU |
|
|
conv4 | kernel size:3*3*192 step :1 | 13*13*(192*2) | same GPU |
| ReLU |
|
|
conv5 | kernel size:3*3*192 step :1 | 13*13*(128*2) | same GPU |
| max_pool step = 2 size = 3 | 6*6*(128*2) |
|
| ReLU |
|
|
fc6 |
| 2048*2 | all neurons |
| ReLU |
|
|
fc7 |
| 2048*2 | all neurons |
| ReLU |
|
|
fc8 |
| 1000 | all neurons |
| ReLU |
|
|
5、减少过拟合
我们的神经网络结构有6000万个参数。尽管1000类的ILSVRC让每个训练样本都有一个10bits的限制,但是如此庞大的参数这样做是不够的。下面我们介绍了两种主要的方法来降低过拟合:
5.1 数据增强
在图片数据上降低过拟合最简单的也是最常用的方法就是加大数据集使用label-preserving transformation。我们使用了两种有明显区别的数据参数,他们将原始图片进行转换需要很小的计算量,因此转换后的图片不必存放在硬盘中。在我们的实施中转换图片是在GPU训练前一批量的图片的时候由CPU上的Python代码实现的。
第一种格式的数据参数包括图像转换和横向镜像。通过从256*256的图片随机获得224*224图像,然后再这些224*224的图像上训练我们的网络。这些增加我们的训练集2048倍,尽管训练样本是高度中心依赖的。如果没有这一步,我们的网络将会过拟合,从而迫使我们使用更小的网络。在测试时,我们的网络通过提取5个224*224个patch(四个角patch和中心patch)及其水平反射(5个patch)进行预测,并将网络的softmax层的预测平均到10个patch上。
pi和λi是RGB像素值协方差矩阵的特征向量和特征值,每个αi就是前面所说的随机变量。对于一个特定的训练图像的全部像素,每个α仅被绘制一次,图像被再次训练之前,该点再次绘制。也就是说相同的图像第二次被使用α也还是会重新选择。这种结构能够捕获自然图像的重要性能。也就是说目标识别对于强度不变和光照不变,这个方法降低了top1错误率的1%。
5.2 dropout
结合多种不同的模型进行预测是一个降低测试过拟合的好办法,但是对于大型的神经网络来说代价太大了,它本身就需要好几天的训练。这里有一个非常有效的模型组合的版本,只需要花费两倍的训练时间。最近介绍的技术是dropout,每一个隐藏层的神经元的输出都有50%的概率置为0.这样的神经元就dropout掉了,他就不会对后面的神经元产生贡献。因此对于每个输入神经网络采样是一个不同的结构,但是所有这些结构共享权重。这个技术减少了神经元适应的复杂性,因为一个神经元不能依靠特定的其他的神经元。他就强迫网络学个更加鲁棒的特征。在测试的时候我们使用所有的神经元,但是将他们的输出乘以0.5。我们使用dropout在前两个全连接层。如果没有dropout我们的网络将会展示出过拟合。dropout达到收敛迭代次数几乎是没有dropout的两倍。
6、学习过程的一些细节
我们训练我们的模型使用随机梯度下降,批量大小是128,动量是0.9,权重衰减是0.0005.我们发现小的权重衰减在模型学习的时候是重要的。换句话说,权重衰减这里不仅仅是一个规则制定者:他还减少了模型的训练错误。权重的更新规则如下:
这个是衰减动量法:
这个方法,我们没有直接在权重上面采取措施来更新权重。
我们采取的是权重每次都会更新一个动量的。这个动量我们改变的。
动量每次会衰减90%,第i个批量内偏导的平均值,动量的变化还和上次的权重有关
我们初始化每层的权重来自于平均值为0的高斯分布,标准差为0.01.我们初始化第二,四,五层卷积层神经元和全连接层隐藏层的偏置是常数1.这个初始化通过ReLUs在早期阶段加速了学习。我们初始化其余层的神经元偏置用常数0.
我们所有层使用的学习率都是相等的,我们在训练过程中会自动改变。我们后面的探索:在验证错误率不再随学习率改善的时候,将学习率除以10。学习率初始化是0.01,在停止之前减少了三倍。我们训练这个网络将这1200玩个网络迭代了90次,在NVIDA GTX580 3GB上面花费了5-6天。
7、结果
我们在ILRSVRC-2010上面的结果总结在表1中。
我们的网络top1测试误差37.5%top5 测试误差17.0%。最好的性能在ILSVRC-2010竞赛上面获得47.1%和28.2%,用平均了的六种不同特征的稀疏编码预测;从那以后最好的公布的结果是45.7%和25.7%,用两个在FisherVectors上计算两种类型的密度采样的平均值。
我们也参加了ILRSVRC-2012竞赛,竞赛结果在表二里面
因为2012的测试集没有公开所以我们不能把我们的所以模型的测试错误率体现出来。
在这一段的剩下的部分,我们交叉使用验证错误率和测试错误率,因为在我们的进严重,他们不会超过0.1%的差别(看表二)。在这个文章中描述的CNN获得了一个top5错误率18.2%。平均五个CNNs的预测的错误率是16.4%。
训练一个带有额外的六个卷积层和最后一个是池化层的CNN来区分全部的ImageNet Fall 2011 release(15M图片22K个分类),然后进行微调在ILSVRC-2012的错误率是16.6%。平均我们提前在全部的Fall 2011版本上训练并且带着前面提到的5个CNNs,训练的两个CNN的预测错误率是15.3%。这个第二好的竞赛获得的错误率是26.2%,使用的方法是平均在FVs上训练的在不同类型的稀疏采样特征值上进行计算的分类器进行平均。
最后,我们也报道一下我们在Fall2009版本的ImageNet上面10184个分类890万张图片的结果。在这个数据集上面我们我们用一半的数据集进行训练,一半的进行测试。因为这里没有测试集,所以我们的分割必须和前面的作者的分割不同,但是没有什么影响。我们的top1和top5错误率分别是67.4和40.9%,由上面的网络再加上第六个卷积层。最好的发表的结果是78.1%和60.9%
7.1定性评估
图三展示了一个卷积内核通过网络的两个数据连接层学习到的。这个网络学习了多种的频率和方向选择的内核,颜色的斑点。注意到由两个GPUs展示出来的特殊性,就像再section 4.5中介绍的那样。GPU1是颜色不可知,在GPU2上面的内核是大量的颜色指定的。这种特殊性发生再每次执行的时候,和初始化权重没有关系。
在图四的左半部分我们查看了8张输入照片网络从计算中学到他的前五个预测。注意到即使不是中心的对象,比如说左上的小虫,也可以被网络识别。大部分的top5的标记是比较合理的。比如说,只有其他类型的猫被认为是合理的豹的类型。有时候(栅格,樱桃),确实有模糊分不清的图片。
另外一种方法来检测网络的视觉知识的是考虑图图片在最后的特征激活,4096维度的隐藏层。如果两个图片产生的特征激活向量有一个很小的欧几里得举例,我们可以说高层的神经网络认为他们是相似。图四从测试集合中展示了5个图像这六个图像来自于训练集合根据这个测量他们是十分相似的。注意,相似级别的欧几里得举例往往不接近。比如说分离的狗和大象呈现在不同的姿势。我们在补充材料里展示了更多的测试样例。
通过欧几里得举例计算相似性,实值计算往往太低效了。可以训练一个二进制的编码器进行高效的学习比较。这个方法比直接用原始的像素进行欧几里得举例的比较靠谱的多,这个不会使用图片标签因此具有检测图片边缘相似的趋势,无论语义上是否相似。
8、讨论
我们的结果证明一个大的深的CNN在一个高挑战的数据集上使用纯粹的监督学习是可以打破纪录的。值得注意的是我们的网络如果减少一个卷积层性能就会降低。比如说,去掉任意的中间层将会降低2%的top1性能。因此网络的深度对于我们取得这个性能结果是至关重要的。
为了简化我们的实验,我们没有使用任何无监督预训练,即使我们直到预训练将会有帮助,如果我们获得足够的计算能力来显著的增加网络的大小不用增加标记的数据集。迄今为止,因为我们把我们的网络变得更大训练的时间更长我们取得了改善。但是为了和人类的视觉系统时间上的下线相匹配,我们还有很多工作等待着做。最终我们想在时间结构提供很有用信息的视频序列上使用很大的很深的网络,这样的时间信息在静态的图片中是不存在,或者是不明显的。
9、结束语
计算机视觉领域的人对于SuperVision的成功印象是十分深刻的。在接下来的一或两年,他们将会使用深度神经网络和这些正被Google,Facebook,Microsoft,Baidu和很多其他的公司广泛研究的网络。到2015年,更好的硬件,更多的隐藏层,主流技术的进步增加其他的因素减少了深度卷积神经网络的错误率从而达到人类近似的水平。这场革命的最大功劳应该归功于花费了好几年研发出CNNs的先驱者,最重要的缺失部分是由FeiFei等人提供的。他投入巨大的精力来产生标签数据,并使这个数据集足够大来展示神经网络最终能做什么。