ImageNet Classification with Deep Convolutional Neural Networks

张开发
2026/5/30 12:59:33 15 分钟阅读
ImageNet Classification with Deep Convolutional Neural Networks
mageNet LSVRC-2010 中需要将 1.2M 张高分辨率图片分类至 1000 余种本模型AlexNet效果获得了 SOTA 。AlexNet 包括 5 个卷积层有几个后面配套了最大池化层 3 个全连接层共计 60M 参数、 650K 神经元、 1000 道 softmax 。为了在全连接层中减轻过拟合使用了 dropout 正则化。此外这个模型训练过程中使用了 GPU 进行卷积运算。1. Introduction背景目前的识别方法都是 Machine Learning 而不是 Deep Learning 。因此如果想要提高表现方法就是更多训练数据集、更先进模型、更好防过拟合措施。然而对于在现实复杂背景下的物体本来就不易识别况且当下的数据集规模太小大约只有 10K 只适用于 MNIST 这类轻量级简单分类任务至于数百万张标注图像的大规模数据集直到最近才可能被收集到。这个任务识别复杂度很大 ImageNet 提供的数据集大小尚且也不够需要用先验知识去补充没有的数据。而卷积层的容量是可控制的因此相比于那些层的大小一直不变的单向传递的神经网络使用CNN层能有相当小的连接与参数使用这种局部连接的高效架构自然更容易训练。不过 CNN 也有缺陷。对这么大分辨率的图像集的应用依旧是很贵的。这里就需要使用 GPU 训练了因为 GPU 非常适合执行 2d 卷积大大加速训练 CNN 层的过程。导读训练了一个卷积神经网络写了一个高度优化的使用GPU实现卷积的方法发现 5 层 CNN 、 3 层全连接是最恰当合适的深度理论上还能再优化通过更长训练时间、更快 GPU 、更大数据集Section 3使用特殊的方法减少训练时间、提升表现Section 4防过拟合的手段Section 6在 ILSVRC-2012 上的表现2. The DatasetImageNet 是一个由 15M 个 22k 类别的高分辨率标签过的数据集。 ILSVRC 使用了 1.2M 个训练图片、 50K 个验证图片 150K 测试图片。 ILSVRC-2010 是唯一公开测试集标签的版本因此本模型以此为测试模型的数据集。模型所要求的输入维度是固定的而 ImageNet 所提供的图片分辨率是不一样的因此我们希望将该输入图片下采样至 256×256256×256 所以先进行缩放使图片的短边为 256256 而后切出中心的 256×256256×256 图片块。除了对每个像素减去训练集像素的像素均值外没有对训练集进行任何的其他预处理。也就是说我们是在中心化了的像素的原始RGB值上训练网络。3. The Architecture3.1. ReLU Nonlinearity对于一个神经元的输出 f 标准使用函数的是 ()ℎ()f(x)tanh(x) 或 ()(1−)−1f(x)(1e−x)−1 。然而因为我们使用的是梯度下降法这种饱和[1]非线性的激活函数会训练很慢不如非饱和线性的激活函数 ()(0,)f(x)max(0,x) 即矫正线性单元( ReLU ) 。Figure 11 展示了 ReLU 和 tanh 各自在 44 层卷积神经网络中的表现。在保证各自的学习率都是最优、没有施加任何归一化的条件下在 CIFAR-10 数据集中达成相同的 25%25% 训练 Error 时使用 ReLU 函数的神经网络比使用 tanh 函数的快了 66 倍。可见面对这么大的神经网络 ReLU 函数会有更小的迭代次数是传统饱和神经元模型所不能实现的。当然前人也曾尝试革新 CNN 中的神经元模型过如使用 ()∣ℎ()∣f(x)∣tanh(x)∣ 并接着使用本地平均池化。然而这个创新的主要目的是避免过拟合因此他们并没有过多关注对训练集的加速能力效果。快速学习对大数据集上训练出来的大模型的表现有很大影响。3.2 Training on Multiple GPUs单卡 ( GTX 580 ) 只有 3GB 显存限制了最大可训练网络的大小而这个网络需要使用 1.21.2 M个训练用例单卡就受不了了因此这里将网络散布至两块 GPU 上。当下 GPU 支持跨卡平行化可以在不经过主机内存的情况下直接读写另一块卡的显存。这个平行化计划将卷积核或神经元分成两半放在两张卡里面同时采用了一个小技巧这两张卡只会在特定的层进行交流。比如 layer 3 接受所有 layer 2 中卷积输出而 layer 4 只接受 layer 3 中只来自相同显卡的卷积输出。当然这种联通模式对交叉验证不是很友好但是这允许我们精确调整双卡间交流的数量直到这种交流产生的额外计算在整体计算的占比达到一个可接受的情况。这种结果架构与 Cireşan, D C 的柱式 CNN[2] 相似但是我们的处理单元并不是完全相互独立的。通过构建一个每层卷积核量减半的单 GPU 网络双 GPU 网络的训练仍然比单 GPU 的快。不过这里严谨而言并不是每层都减半卷积核因为最后一层的卷积核数是相等的。这是因为网络的大部分参数都在第一个全连接层而这层以最后一个卷积层的输出为输入。为了保证全连接层大概一致的参数量不能简单地减半最后一层的卷积层因此这里是有偏差的。3.3 Local Response NormalizationReLU 有非常美好的属性就是不需要对输入进行归一化来避免饱和。只要有正数输入学习过程都会发生。然而我们仍然找到了如下的本土归一化方案能够提高泛化能力。不妨让 ,ax,yi​ 代表一个被施加了 (,)(x,y) 处的卷积 i 然后进行了 ReLU 的神经元激活值。那么进行了本土归一化的激活值 ,bx,yi​ 可以表示为,,/(∑max(0,−2)min(−1,2)(,)2)bx,yi​ax,yi​/​kαjmax(0,i−2n​)∑min(N−1,i2n​)​(ax,yj​)2​β​​这里的和跑过了 n 个相邻的在同一空间位置的卷积而 N 是一层卷积核的总数而卷积映射之间的顺序则是训练前决定好的。这种归一化进行了受真正神经元启发的一种侧抑制创造了用不同卷积核计算的神经元输出之间的竞争。 ,,,k,n,α,β 是超参数是通过验证集确定的这里使用的是 2,5,10−4,0.75k2,n5,α10−4,β0.75 。这层归一化是紧跟着部分的 ReLU 层实施的。这个方案和 Jarrett et al. 的 Local Contrast Normalization 相似但是我们的更适合名称“亮度归一化”因为我们不减去均值。在 CIFAR-10 数据集上一个 4 层 CNN 的网络没有归一化和有归一化的 error 率分别是 13%13% 和 11%11% 。3.4 Overlapping PoolingCNN 中的池化层总结了相同卷积核映射中的临近组神经元的输出而传统中相邻池化单元并不会重叠。准确来说一个池化层可以被视作由一些间隔为 s 个像素的池化单元组成的网络每一个池化单元都表示着一个中心点在池化单元处大小为 ×z×z 的邻域。如果我们令 sz 就得到了一个常用于 CNN 中的传统的局部池化如果令 sz 就有了重叠池化层。本次训练中使用的是 2,3s2,z3 。经过观察得出这样的重叠池化层使模型更难过拟合。3.5 Overall Architecture现在可以描述模型的整体架构了。如 Figure 22 所示网络由 88 层拥有权重的层其中前 55 个是卷积的而剩下的 33 个全连接层的输出被送到 10001000 维的 softmax 函数产生 10001000 类预测标签的分布。我们的网络最大化了多项式的逻辑回归目标这相当于最大化训练样例中的对预测分布正确标签的概率平均的对数。Figure 22 . 展示了两个GPU之间的职责划分。一个 GPU 负责运行图中顶部的层部件另一个 GPU 则负责运行底部的层部件。两个 GPU 仅在特定层进行通信。该网络的输入维度为 150,528150,528 - 维其余各层的神经元数量分别为 253,440253,440 - 186,624186,624 - 64,89664,896 - 64,89664,896 - 43,26443,264 - 40964096 - 40964096 - 10001000 。第二、四、五卷积层中的卷积核只与在相同 GPU 中的先前的层连接着第三卷积层上与第二层中所有卷积映射连接全连接层中的神经元和前一层的所有神经元相连。响应归一化层跟着第一、二、五个卷积层 ReLU 在每个卷积、全连接层后面都被应用。第一个卷积层用 9696 个 11×11×311×11×3 、步幅为 44 像素的卷积核过滤 224×224×3224×224×3 的输入图像这个步幅就是卷积核中临近神经元之间感受野的距离。第二个卷积层将前面响应正则化与池化后的输出作为输入使用 256256 个 5×5×485×5×48 卷积核过滤。第三、四、五个卷积层相互连接但中间没有池化或正则化层。第三个卷积层将前面响应正则化与池化后的输出作为输入使用 384384 个 3×3×2563×3×256 卷积核过滤。第四个卷积层使用 384384 个 3×3×1923×3×192 卷积核第四个卷积层使用 256256 个 3×3×1923×3×192 卷积核而全连接层各有 40964096 个神经元。Reducing Overfitting我们的神经网络架构有 60M 个参数。尽管吧 ILSVRC 的 10001000 种类别让每个训练样本从图片到标签的映射控制在 1010 bits 之内仍然不足以在没有相当大的过拟合下学习这么多的参数。于是下面我们描述了两种我们抗击过拟合的方式。4.1 Data Augmentation最简单普通的方法来在图片数据上减轻过拟合是通过保护标签的变换人工扩大数据集。我们采用了两种不同的方式来增强数据每一种都让从原图片变换的过程计算量小因此变换后的图片就无需储存在磁盘上。我们的操作中变换后的图片是在 CPU 上由 Python 代码生成的而 GPU 在同时负责训练先前变换过的一批图片。因此这些数据增强计划实际上是无额外计算负担的。第一种数据增强形式由生成图像变换和水平的翻转构成。我们从 256×256256×256 图像中随机提取出的 224×224224×224 的小块和它们的水平镜像并用这些提取出的小块训练我们的模型。这提升了我们训练集的大小翻了 20482048 倍尽管这产生的训练样例是相互依赖的。若没有这个方案 我们的网络就会承受潜在的过拟合从而迫使我们使用小一些的网络。测试时网络通过在图片的四角、中心处提取出 55 块 224×224224×224 的小块与他们的水平镜像那么就是一共 1010 块产生预测并且平均这 1010 个网络 softmax 层预测的结果。第二种数据增强的方式是改变训练图中 RGB 通道的强度尤其是我们在整个 ImageNet 训练集的 RGB 像素值集中实施 PCA 时。对于每个训练图像我们发现并倍数增加了主要组件其大小与相应特征值成正比并乘以一个从均值为零、标准差为 0.10.1 的高斯分布中抽取的随机变量。因此每个 RGB 图像的像素 [,,]Ixy​[IxyR​,IxyG​,IxyB​]T 我们增加如下的数量[1,2,3][11,22,33][p1​,p2​,p3​][α1​λ1​,α2​λ2​,α3​λ3​]T其中 pi​ 和 λi​ 各自是 3×33×3 的 RGB 像素值的协方差矩阵第 i 个特征值与特征向量并且 αi​ 是上述的随机变量。每个 αi​ 覆盖特定的训练图像的所有像素只被绘制一次直到这张训练图被重新用于训练届时会重新绘制 αi​ 。这个方案大致捕捉了一个自然图像的重要属性就是物体的特征是不随着光照的强度与颜色改变的。这个方案让第一个的误差减少了 1%1% 。4.2 Dropout结合多个不同模型的预测结果是一个非常成功的减少测试误差的方法但是似乎对那些已经花了好几天训练的大神经模型太昂贵了。然而这个有一个非常有效率的模型结合版本只需花上大约两倍的训练成本。这个最近才引入的技巧被称作dropout内容是用 0.50.5 的概率将每个隐藏神经元的输出设为零称作这些神经元被丢弃了。这些被丢弃的神经元并不贡献前向传播也不参加反向传播。因此每次输入被展现神经网络的都采样了一个截然不同的架构不过这所有的架构都共享着权重。这个技巧能够减少神经元间复杂的相互适应因为一个神经元并不能依赖于另外某些特定的神经元的存在。因此这强制神经网络学习更多健壮性特征这些特征需要与许多其他神经元的不同随机子集结合使用。在测试时我们使用所有神经元但将其输出乘以 0.50.5 这近似于对指数级多个 Dropout 产生的预测分布进行几何平均。5 Details of learning我们用随机梯度衰减法batch_size 128,momentum 0.9,weight_decay 0.0005训练我们的模型。我们发现小数量的权重衰减对模型的学习非常重要。换句话说权重衰减并不只是一个正则化工具这减少了模型的训练误差。对于权重 w 的更新规则是1:0.9⋅−0.0005⋅⋅−⋅∂∂∣1:1vi1​wi1​​:0.9⋅vi​−0.0005⋅ϵ⋅wi​−ϵ⋅⟨∂w∂L​​wi​​⟩Di​​:wi​vi1​其中 i 是迭代的索引值v 是动量变量ϵ 是学习率∂∂∣⟨∂w∂L​​wi​​⟩Di​​ 是第 i 个批次 Di​ 的针对目标函数对 w 的在 wi​ 处导数的平均。我们从一个零均值0.010.01 标准差的高斯分布中选择设置每一层的初始权重还用常数 11 初始化了第二、第四、第五卷积层和隐藏全连接层的神经元偏差。 这种初始化通过提供给 ReLU 正输入加速了学期早期阶段。我们同时将剩下层神经元的偏差设为常数 00 。我们对所有层使用了一个相等的学习率这个学习率是我们从整个训练中手动选择的。我们遵循的启发式方法是当验证错误率不再随当前学习率改善时将学习率除以 1010 。学习率最初设为 0.010.01 并且在结束前减少了 33 次。我们对神经网络大概训练了 9090 次循环在整个训练集的 1.2M 张图片中。这耗了我们五到六天在两张 NVIDIA GTX 580 3GB GPU 中。6 Result我们在 ILSVRC - 2010 的结果在表一中概括出来了。我们的神经网络取得了 top-1 37.5%37.5% top-5 17.0%17.0% 错误率。在ILSVRC - 2010 中最佳结果是 top-1 47.1%47.1%top-5 28.2%28.2%使用的方法是对 66 个在不同特征上训练的稀疏编码模型生成的预测进行平均从那时起已公布的最好结果是 top-1 45.7%45.7%top-5 25.7%25.7%使用的方法是平均在费舍尔向量FV上训练的两个分类器的预测结果费舍尔向量是通过两种密集采样特征计算得到的。我们也让我们的模型参加了 ILSVRC - 2012 竞赛并在表二中报告了我们的结果。由于 ILSVRC - 2012 的测试集标签不可以公开得到我们不能报告我们尝试的所有模型的测试错误率。在这段的其余部分我们会互换验证误差率和测试误差率因为在我们的实验中它们之差不会超过 0.1%0.1% 。本文中描述的 CNN 取得了top-5 18.2%18.2% 的错误率。五个类似的 CNN 预测的平均误差率为 16.4%16.4%。为了对 ImageNet 2011 秋 发布的整个数据集15M 图像22K 个类别进行分类我们在最后的池化层后添加了一个额外的第六个卷积层训练了这个 CNN 然后在它上面进行用 ILSVRC - 2012 的数据进行模型微调并在此取得了 16.6%16.6% 的错误率。平均了在 ImageNet 2011秋 发布的整个数据集上预训练的两个 CNN 和前面提到的五个 CNN 的预测进行我们得到了 15.3%15.3% 的错误率。第二名通过对由几个不同密集采样特征计算得到多个 FV 上训练的一些分类器的预测结果进行平均得到的最好的竞赛实体仅仅取得了 26.2%26.2% 的错误率。最后我们在 2009 秋的有 10184 分类8.9M图像的 ImageNet 上发表了我们的错误率。在这个数据集中我们遵循了用一半数据训练一半数据测试的传统。因为没有提前已建立的测试集我们的数据集的分割有必要不同于以前作者的数据集的但这并不明显地影响结果。我们得到的的 top-1 和 top-5 错误率是 67.4%67.4% 和 40.9%40.9% 使用的是上面描述中在最后的池化层之后有一个额外的第六个卷积层的网络。这个数据集上公开可获得的最好结果是 78.1%78.1% 和 60.9%60.9% 。6.1 Qualitative Evaluations图三展示了从网络的两个数据手机层学习得到的卷积核。这个网络学习了大量的频率选择性、方形选择性网络还有大量的颜色点。注意到两个 GPU 所表现出来的专业化这是 Section 3.5 中限制双 GPU 之间连接性的结果。GPU 1 上的核大部分是没有颜色的而 GPU 2 上的核主要是针对有颜色的。这种专业化在每次运行时都会发生并且是与任何特别的随机权重初始化以 GPU 的重新编号为模无关的。在图四的左边部分我们通过在八张测试图像上计算它的 top-5 预测定性地评估了网络学习到的东西。注意到即使不在图像中心的目标例如左上角的螨虫也能被网络识别。大多数的 top-5 标签似乎是合理的。例如对于美洲豹来说只有其它类型的猫被视作合理的标签。而在某些案例格栅樱桃中图片中的注意焦点是真的有点歧义的感觉。探索网络可视化知识的另一种方式是去思考最后的 40964096 维隐藏层在图像上得到的特征激活情况。如果两幅图像生成的特征激活向量之间有较小的欧几里得距离我们可以认为在神经网络的更高层特征中考虑时它们是相似的。图四表展示了测试集的 55 张图像和训练集的 66 张图像中的每一张在这种度量方式下都是最相似的。注意在像素级别检索到的训练图像与第一列的查询图像在 L2 上通常是不接近的比如检索到的狗和大象似乎有很多姿势。我们在补充材料中展示了更多测试图像的结果。通过两个 40964096 维实值向量间的欧氏距离来计算相似性是效率低下的但通过训练一个自动编码器将这些向量压缩为短二进制编码可以使其变得高效。这应该会产生一种比将自动编码器应用到原始像素上更好的图像检索方法自动编码器应用到原始像素上的方法没有使用图像标签因此会趋向于检索与要检索的图像具有相似边缘模式的图像无论它们是否是语义上相似。[3]7 Discussion我们的结果展示了一个大型、深度的卷积神经网络在一个具有高度挑战性的数据集上使用纯粹的监督学习可以取得破纪录的结果。值得注意的是如果移除一个卷积层我们的网络的表现会降级。例如移除任何中间层都会导致网络在 top-1 上的大约 2%2% 性能损失。因此深度对于实现我们的结果真的真的非常重要。为了简化我们的实验我们没有使用任何无监督的预训练尽管我们希望它会有所帮助特别是假如我们获得了足够的计算能力来显著增加网络的大小而标注的数据量没有对应增加。目前为止我们的结果已经提高了因为我们的网络更大、训练时间更长。但要达到人类视觉系统的下颞叶通路水平我们仍然有许多待跨越的数量级要实现。最后我们想在视频序列上使用非常大的深度卷积网络视频序列的时序结构会提供非常有帮助的信息这些信息在静态图像上是缺失的或远不那么明显。

更多文章