• IMAGENT CLASSIFICATION WITH DEEP CONVOLUTIONAL NEURAL NETWORKS(翻译)


    0 - 摘要

       我们训练了一个大型的、深度卷积神经网络用来将ImageNet LSVRC-2010竞赛中的120万高分辨率的图像分为1000个不同的类别。在测试集上,我们在top-1和top-5上的错误率分别为37.5%和17.0%,这比当前最好的技术好得多。这个拥有6000万参数和65万神经元的神经网络,由5个卷积层构成(其中有一些后接有池化层)和3个全连接层以及最后一个1000类别的softmax层。为了使得训练更加快速,我们使用非饱和神经元以及一个高效的GPU卷积操作实现。为了降低全连接层的过拟合,我们使用了一种最近提出的并被证明非常有效的叫做“dropout”的正则化方法。我们还在ILSVRC-2012比赛中加入该模型的一个变体,并且在top-5测试错误率为15.3%,而相比,第二名的测试错误率为26.2%。

    1 - 介绍

      目前的目标识别主要是利用机器学习方法。为了提高他们的性能,我们能通过收集更加庞大的数据集、学习更加有效的模型以及通过更好的技术防止过拟合。截至目前,标记图像数据集相对较小。简单的识别任务通过这个规模的数据集(特别是经过图像加强)可以得到很好的解决。举个例子,当前在MNIST数字识别任务上最低的错误率(<0.3%)达到人类的水平。但真实环境下的物体表现出相当大的可变性,所以为了去识别他们,更大的训练数据集是必须的。并且明确地,小图像数据集的缺点已经被广泛承认,但是直到最近才有可能收集数百万级别的标签图像数据集。新的更大数据集包括LabelMe,其包含了成百上千的全分隔图像,以及ImageNet,其包含超过1500万属于超过22000类别的高像素标签图像。

      为了从数百万张图像中学习数千中物品,我们需要一个有着很强学习能力的模型。然而,物体识别任务的巨大复杂性意味着连ImageNet这样大的数据集也无法适用这个问题,所以我们的模型需要具备很多的先验知识以用来弥补这些我们没有的数据。卷积神经网络(CNNs)就是这类网络中的一种。他们的能力能够通过改变他们的深度和宽度来控制,并且他们也对图像做出了强有力且基本正确的假设(也就是统计的平稳性以及像素的局部性)。因此,在与标准的前馈神经网络有相似大小的层数的前提下,CNNs有着更少的连接以及参数所以他们更加容易进行训练,尽管他们理论上的最佳表现可能只会稍差一点。

      尽管CNNs有如此吸引人的特性以及相对高效的架构,将他们应用到到规模高分辨率图像上还是有很高的成本。幸运地是,当前的CPUs结合上高度优化实现的2D卷积,已经足够有效地促进大规模CNNs的训练,并且当前的数据集(例如ImageNet)包含了足够的标注样本使得训练此类型的模型而不至于过度过拟合。

      这篇论文的独特贡献如下:我们在ILSVRC-2010以及ILSVRC-2012竞赛的ImageNet数据集子集上训练了迄今为止最大的卷积神经网络并且在这些数据集上取得了迄今为止最好的结果。我们实现了一个基于GPU的高度优化的2D卷积操作以及所有其他在训练卷积神经网络中的固有操作,这部分我们已经开源了。我们的网络包含了一些新的以及特殊的特征,他们提高了网络的性能并且减少了训练时间,这将在第三部分详细介绍。我们的网络尺寸较并且加上120万标注训练样本,使得过拟合是一个严重的问题,所以我们使用几个有效的技术去防止过拟合,这将在第四部分详细介绍。我们最后的网络包含五个卷积成以及三个全连接层,并且这个深度是非常重要的:我们发现移除掉任何一个卷积层(每一层包含不超过整个模型1%的参数量)都将导致性能的下降。

      最后,网络的规模大小受限于当前GPUs的可用内存容量以及我们能够容忍的训练时间大小。我们的网络在GTX 250 3GB GPUs上训练了五到六天。我们的经验告诉我们,该网络的性能能够容易地通过更快的GPUs支持以及更大的数据集而得到提升。

    2 - 数据集

      ImageNet是一个包含了超过1500万标注可划分为大约22000类别的高分辨率图像数据集。这些图像通过网络收集并且通过使用亚马逊的土耳其机器人资源工具进行人工标注。从2010年开始,作为帕斯卡视觉物体的挑战的一部分,一个名为ImageNet Large-Scale Visual Recognition Challenge(ILSVRC)的年度比赛开始举办。ILSVRC使用了ImageNet中大约1000个类别,每个类别大约1000张图片的数据子集。总的来说,大约有120万张训练图片,50000张验证图片以及150000张测试图片。

      ILSVRC-2010是ILSVRC中唯一一届有测试集标签的版本,所以这个版本在我们的实验中使用得最多。我们也将我们的模型运用到ILSVRC-2010挑战赛中,在第六部分我们展示了我们在这个版本的数据集(测试集标签不可用)上的效果。在ImageNet上习惯使用两个错误率:top-1和top-5,前5错误率是指在模型认为最有可能的5个标签中没有正确标签的情况。

      ImageNet由可变分辨率的图像组成,而我们的系统需要一致的输入维度。因此,我们将图像下采样为256×256像素分辨率大小。给一张矩形图片,我们第一步先将放缩图片,是的其短边为256,然后从放缩后的图像中间裁减出256×256的小片。我们除了将训练集的每一个像素减去平均像素之外,没用通过其他预处理方式处理图片。所以我们把网络训练成(居中)未加工的RGB值。

    3 - 架构

      我们网络的架构如图2总结。他包含了八个学习层——五个卷积层和三个全连接层。下面我们将讨论我们网络架构中的新颖的以及有特点的特点。3.1-3.4部分是根据我们所估计的他们的重要性进行排序的,最重要的排在最前面。

    3.1 - ReLu非线性

      将神经元的输出f作为输入x的函数进行建模的标准方法有f(x) = tanh(x)或者f(x) = (1+e^(-x))^(-1)。依照梯度下降训练时间,这些饱和非线性慢于f(x) = max(0, x)该非饱和非线性。根据Nair and Hinton,我们使用了这种非线性ReLUs。深度卷积神经网络结合ReLUs训练时间快于等价的网络结合tanh单元。这在图1中得到证明,其展示了一个特殊的四层卷积网络模型在CIFAR-10训练集上达到25%错误率的训练轮数。这条曲线说明如果我们采用传统的饱和神经元模型,我们将无法将其应用到如此大的神经网络实验中去。

                  

    图一:一个四层卷积神经网络结合ReLUs(实线)在CIFAR-10训练集错误率上达到25%要比同个网络结构结合tanh神经元(虚线)快六倍。每个网络的学习率是独立选择的,以使得网络训练尽可能快。没有采用任何形式的正规化处理。这里演示的效果大小随着网络架构的变化而变化,但是包含ReLUs的网络总是比等价的网络包含饱和神经元的效果好几倍。

      我们不是第一个考虑替换CNNs中的传统神经元。举个例子,Jarrett等人,表示说非线性f(x) = |tanh(x)|在Caltech-101数据集上,应用于通过平均池化层进行对比度归一化后的模型效果特别有效。然而,在这个数据集上最主要的关注点是防止过拟合,所以他们通过训练集发现的替换效果不同于我们所说的替换成ReLUs那样。高效的学习对于大数据集上训练大模型的性能有着很大的影响。

    3.2 - 在并行GPU上训练

      一个简单的GTX 580 GPU只有3GB的内存,这很大的限制了可以训练的网络最大大小。这导致其对于需要120万训练样本的网络将无能为力。因此,我们将网络分布到两个GPUs上。当前的GPUs特别适合跨GPU并行化,因为他们能够不通过主机内存而直接读写另外一块内存。并行化策略实际上是我们将网络的核(神经元)分为两半分别放在每一个GPU上,并结合一个附加的技巧:GPUs的通信只限制在特定的层上面。这意味着,举个例子,第三层的核将第二层的所有输出作为输入。然而,第四层的核只将第三层中那些与其在同一个GPU上的核的输出作为其输入。选择连接模式是交叉验证的一个问题,但是这允许我们去精确地调整通信数量以使得其符合计算量的可接受范围。

      最终结果的架构有些许类似于Ciresan等人提出的“柱状”CNN,除了我们的柱并不是互相独立的(见于图2)。这个策略对比于将每一个卷积层的核平均分到两个GPU上训练,分别将我们的top-1和top-5错误率减少了1.7%和1.2%。两个GPU网络相比于一个GPU网络稍微少了一些训练时间(应该是并行费时?)。

         

    图二:我们CNN整体架构的图解,明确显示了两个GPU间的职责划分。一个GPU运行图中上部分的层,另一个GPU运行图中下部分的层。GPU只在特定的层进行交流。这个网络的输入是150528维度,并且网络中余下层的神经元数量依次为253440-186624-64896-64896-43264-4096-4096-1000

    3.3 - 局部响应归一化(Local Response Normalization)

      ReLUs拥有理想的属性,即他们不需要要求输入正则化来防止过饱和。如果至少有一些训练样本使得ReLU的输入为正,则在那些神经元中将会进行学习。然而,我们仍然发现下述的局部归一化方法有助于泛化。用$a^i_{x,y}$表示将第i个核应用到位置(x, y)之后再通过非线性ReLU的神经元计算,响应归一化(response-normalized) 用公式表示如下 :

       其中,对相同空间位置的n个“相邻”核映射求和, N是这一层中的核总数量。核映射的顺序当然是任意的,并且在训练之前就确定好的。这种响应归一化受到了真实神经元的启发实现了一种侧抑制,在不同核计算的神经元输出中创造大型活动的竞争。其中常数 为超参数,它们的值是通过验证集确定的;我们使用 。我们将此归一化方法应用到特定的几个层的ReLU非线性之后(见于3.5部分)。

      这个策略与Jarrett等人提出的对比度局部归一化有一定的相似之处,但是我们的归一化应该更准确地叫做为“亮度归一化”,因为我们不减去平均值。响应归一化将我们在top-1和top-5上的错误率分别减少了1.4%和1.2%。我们也验证了该方案在CIFAR-10数据集上的有效性:一个四层的CNN在没有加入归一化的测试集错误率为13%,而加入归一化之后错误率降低到11%。

    3.4 - 重叠池化

      CNNs中的池化层将邻近的神经元的输出结合起来作一个核映射。传统的,邻居之间会被临近的没有重叠的池化单元总结。更精确地描述,一个池化层可以被描述为一张间距为s像素的池化单元网格,每一个单元对以其为中心对应到的邻近z×z大小进行结合做核映射。如果我们设置s=z,则我们采用了传统的通常的CNNs局部池化。如果我们设置s<z,则我们采用了重叠池化。这就是我们在我们网络中使用的,其中s=2并且z=3。这个策略将我们的top-1和top-5错误率分别减少了0.4%和0.3%,其结果比较于没有重叠策略s=2且z=2但产生相同尺寸的输出。我们普遍观察到,在训练模型中加入重叠池化会稍微使得过拟合变得困难。

    3.5 - 整体结构

      现在我们已经准备好去描述我们CNN的整体架构了。如图2所示,这个网络包含了八个有权重的层;前五个为卷积层而剩下三个为全连接层。最后一个全连接层的输出将通过一个1000类别的softmax层产生一个对于1000类别标签的分布。我们的网络最大化多项逻辑回归目标,这等价于最大化在预测分布下正确标签对数概率训练情况平均值。

      第二、四和五层的卷积层只连接与他们在同一个GPU上的前一层卷积核(见于图2)。第三层的每一个卷积核与第二层的所有卷积核连接。全连接层的神经元与前一层的所有神经元连接。响应归一化层应用与第一和第二层卷积层之后。在3.4部分描述的那个类别的最大化池化层,接在局部归一化层以及第五层卷积层之后。ReLU非线性应用在每一个卷积层以及全连接层之后。

      第一个卷积层通过96个11×11×3的步长为4像素的核过滤224×224×3的输入图片。第二个卷积层通过256个5×5×48的卷积核过滤第一个卷积层的输出(经过局部归一化层以及池化层)。第三、四和五个卷积层依次相连而没有介于中间的池化层和归一化层。第三个卷积层通过384个3×3×256的卷积核过滤第二个卷积层的输出。第四个卷积层拥有384个3×3×192的卷积核,第五个卷积层拥有256个3×3×192的卷积核。全量层每一个都拥有4096个神经元。

    4 - 减少过拟合

      我们的神经网络架构有6000万参数。虽然ILSVRC的1000个类别对训练样本的图像映射到标签施加了10比特的约束(这句怎么理解?),但结构表明,如果没有相当的过拟合,学习这么多参数是不够的。下面我们将介绍两种主要方法来防止过拟合。

    4.1 - 数据增强

      最简单也是最常用的减少过拟合的方法是人工对保持标签的图片数据集进行扩充。我们应用了两种特殊的数据增强形式,他们都只需要从原始图像进行少量的计算即可生成,所以转换后的图片并不需要存储在磁盘中。在我们的实现中,生成图像在GPU训练上一批次图像时在CPU上运行python代码生成。所以这些数据增强策略实际上是没有计算成本的(因为并行?)。

      第一种数据增强的形式包含了图像变化以及水平映射。我们通过从256×256图像中随机提取224×224小片(以及他们的水平映射)作为我们网络的训练数据。虽然当然由此产生的训练样本是高度相关的,但这使得我们的训练集合增加了2048倍。如果没有这个策略,我们的网络会发生相当的过拟合,这将迫使我们只能使用更小的网络。在测试的时候,这个网络将对从图像中提取的五个244×244的小片(四个角以及中心)以及他们的水平映射(因此一共是10个小片)进行预测,然后对10个小片的softmax层预测结果进行平均。

      第二种数据增强的形式包含了改变训练图像的RGB通道强度。具体地,我们对ImageNet的训练集进行了PCA特征提取。对于每一张训练图像,我们将发现的主成分部分相加,其大小与对应的特征值成正比,并且乘以一个随机变量,这个随机变量来自于均值为0,标准差为0.1的高斯分布。因此,对于每一个RGB图像像素,我们加入了下面量,其中和分别是RGB像素值的3×3协方差矩阵的特征向量和特征值,是上面所提到的随机变量。每一个在每一张图像的每一次训练中只做一次对全部像素的描画,但重新训练的时候再被重新确定。这个策略粗略的捕获到自然图像的重要属性,换句话说,物体的统一性不随光照强度和颜色的变化而改变。这个策略将减少了top-1的错误率超过了1%。

    4.2 - dropout

      组合几个不同模型的预测结果是一种降低测试错误率的成功的方法,但这对于需要几天训练时间的大型神经网络来说成本太高。然而有一种非常有效的模型zu'he叫做“dropout”,其对每一个神经元有一半的概率将其输出设置为0。对于"dropped out“的神经元其将不会对前向传播有任何贡献,同时也不会参加到反向传播中去。所以每一次输入数据,这个神经网络的架构都不一样,但是所有的这些架构都共享权重。这个技术减少了神经元将相互适应的复杂度,因为每一个神经元都不会依赖于某一个其他的特定的神经元。因此,网络被迫去学习更加健壮的特性以至于这些特性组合其他的神经元的随机子集是有用的。在测试的是否,我们使用所有神经元但是将他们的输出乘以0.5,这是对exponentially-many dropout网络的预测分布的几何平均值的一个合理的近似。

      我们在前面的两个全连接层使用dropout,见于图2。如果没有dropout,我们的网络表现出相当的过拟合。dropout大概会使得收敛所需迭代数变为两倍。

     5 - 学习的细节

      我们采用随机梯度下降,其批大小为128个样本,momentum为0.9,权重衰减率为0.0005,来训练我们的模型。我们发现这个小数量级的权重衰减率对于我们模型训练是重要的。换句话说,这里的权重衰减率不仅仅是一个调节因素:他减少了模型的训练错误。对于权重w的更新有如下公式:

     

      其中i为训练轮数,v是动量变量,是学习率,最后一项是批次对于w的导数的平均值,在上取值。

      我们对每一层采用均值为0标准差为0.01的高斯分布进行初始化。我们初始化第二、四、五个卷积层以及全连接层中的隐藏层的神经元偏置为常数1。这些初始化通过给ReLUs提供正输入而加快早期阶段的训练速度。我们初始剩余的其他层的神经元偏置为0.

      我们对所有层使用同一个学习率,学习率在训练过程中手动调整。我们采用的启发式方法是,但验证集的错误率不在随着当前学习率改善的是否,将学习率除以10。学习率初始化为0.01,并且在终止前减少了上次。我们在120万训练图片数据上大约训练了90个周期,这在NVIDIA GTX 580 3GB GPU花费了五到六天。

    6 - 结果

      我们在ILSVRC-2010上的结果如表1所示。我们的网络在测试集上top-1和top-5的错误率分别达到了37.5%和17.0%。ILSVRC-2010最好的效果为47.1%和28.2%,他的方法是通过平均六个基于不同特征训练的稀疏编码模型的预测结果。之他们之后,最好的公开结果为45.7%和25.7%,他的方式是通过平均两个基于密集抽样特征的Fisher Vectors(FVs)训练的分类器的预测结果。

                   

    表一:基于ILSVRC-2010测试数据集的结果比较。斜体(应该是加粗?)是最好结果。

      我们也将我们的模型参加了ILSVRC-2010比赛,结果如表二所示。因为ILSVRC-2012的测试数据集标签没有开源,我们不能展示我们说尝试的所有模型的测试错误率。在这一段的其余部分,我们交错地使用验证和测试错误率,因为在我们的实验中,他们象差不超过0.1%(见于表二)。在这篇论文中描述的CNN的top-5错误率达到18.2%。对于五个类似的CNNs的预测进行平均,其错误率为16.4%。训练一个CNN,这个网络在最后的池化层加入额外的卷积层,将ImageNet2011秋季发布的数据进行分类(15M图像,22K类别),然后在ILSVRC-2012上进行微调,错误率为16.6%。平均我们在2011秋季发布的数据集上预训练的两个CNNs,错误率为15.3%。比赛第二名的错误率为26.2%,他的方法是通过平均几个基于密集抽样特征的FVs训练的分类器的预测结果。

              

    表二:基于ILSVRC-2012验证集和测试集的结果比较。斜体(加粗?)为最好的结果。用星号*标注的模型是基于ImageNet 2011秋季发布数据集分类任务预训练的。详细见于第六部分。

      最后,我们也展示我们在ImageNet2009秋季发布的有10184类别的890万张图片的数据集上的效果。在这个数据集上,我们遵循文献中一半图像用于训练,一半图像用于测试的惯例。由于没有分隔好的测试集,所以我们的分隔必然和之前作者的分隔有所不同,但是这对结果不会产生明显的影响。我们采用上面描述的网络但是在最后一个池化层后加入了一个额外的第六个卷积层,该网络在这个数据集上的top-1和top-5错误率分别为67.4%和40.9%。而最好的在此数据集上的公开结果为78.1%和60.9%。

    6.1 - 定性评估

      图三显示了由网络的两个数据连接层学习的卷积内核。这个网络已经学会了各种频率和方向选择的内核以及各种颜色的斑点。注意到这两个GPU说显示的专门化,这是3.5部分所描述的受限连接的结果。GPU 1上的内核很大程度是颜色无关的,而GPU 2上的内核很大程度是相关特定颜色的。这种专门化发生在每一次运行中,并且是独立于任何特定的随机权重初始化(对GPUs进行模块化编号)。

                   

    图三:第一层卷积层中学习224×224×3输入图片的96个11×11×3的卷积核。最上面的48个卷积核实在GPU 1上,下面48个卷积核在GPU 2上。详细见于6.1部分。

      在图四的左半栏,我们通过计算八张测试图片对于top-5的预测对学习到的网络进行定性评估。注意到,即使是中心以外的物品,例如左上角的螨虫,也是可以被网络识别的。大部分top-5的标签是合理的。例如,只有其他类型的猫被认为是美洲豹。在某些情况下(格栅、樱桃),照片的焦点确实不够清楚。

      

    图四:(左侧)八张ILSVRC-2010的测试图片以及我们模型对其预测的最有可能的五个标签。正确的标签写在每一张图片的下方,并且正确标签的概率用红色柱状条显示(如果正确标签包含在top 5里面的话)(右侧)第一列为五张ILSVRC-2010的测试图片。其余的列显示了在最后一个隐藏层中生成特征向量的六个训练图像,他们与测试图像的特征向量欧式距离最小。

      另一种探测网络视觉知识的方法是考虑图像在最后一个4096维的隐藏层上引起的特征激活。如果两张图片产生一个小于欧几里得分离的特征激活向量,我们可以说在更高层次的神经网络上他们是相似的。图四显示了从测试集中选取的五张图片以及六张从训练数据集中根据这个衡量标准最相似的图片。注意到,在像素级别,在L2中检索到的训练图像通常与第一列的查询图像不太相近。例如,查询到的狗和大象有着各种动作。我们在补充材料中给出了更多测试图像的结果。

      利用两个4096维度的实际值向量计算欧几里得距离来计算相似度是低效的,但是通过训练一个自动编码器将这些向量压缩成短的二进制编码,可以提高编码效率。与对原始图像应用自动编码器相比,这将产生更好的图像检索方法,它不使用图像标签,因此更加倾向于检索具有相似边缘模式的图像而无论他们在语义上是否显示。

    7 - 总结

      我们的结果显示一个大的、深的绝技神经网络能够利用纯粹的监督学习,在一个具有挑战性的数据集上取得破纪录的结果。值得注意的是,如果去掉一个简单的卷积层,我们的网络性能将会下降。例如,去掉任一个中间层都将是的网络在top-1上的性能损失2%。所以,深度对于实现我们的网络是真的重要的。

      为了简化我们的实验,我们没有使用任何无监督的预训练,尽管我们期望他会有所帮助,特别地,如果我们获得足够的计算力来显著增加网络的大小而不使得相应标签数据量的增加。到目前为止,我们的结果已经得到了改善,因为我们已经让我们的网络变得更大以及训练时间更长,但是与人类视觉系统的infero-temporal pathway相比仍有很大量级的差距。最后,我们想要在视频序列上使用非常大而深的卷积网络,在这些视频序列中,时间结构提供了非常有用的信息,这在静态图像中是缺失的胡总和没那么明显。

  • 相关阅读:
    java基础02标识符
    java基础08自增、自减运算符 初识Math
    java基础04 数据类型扩展及面试题讲解
    java基础03数据类型
    大家好,近期学习设计模式,我会把自己的例子上传,以供大家参考
    关于寂寞
    从以文件流的形式下载文件
    大家好,我的程序博客开始了
    如何学好C语言
    大学生如何将自己从迷茫中解困
  • 原文地址:https://www.cnblogs.com/CZiFan/p/9511854.html
Copyright © 2020-2023  润新知