经典论文阅读-8:CNN-AlexNet

104 阅读12分钟

通过深度卷积网络进行 ImageNet 分类

论文地址:[PDF] ImageNet classification with deep convolutional neural networks | Semantic Scholar

摘要

本文训练一个大型卷积神经网络来分类 ImageNet 数据集的高清图片,该数据集包含 120 万图片和 1000 个不同类型。在测试集上,该模型取得第一与第五,比之前最新的算法效果好不少。该神经网络含有 650000 个神经元与 6 千万参数,结构包括 5 个卷积层、5 个紧随其后的池化层、3 个全连接层。为使训练速度更快,该模型使用非饱和神经元与高效 GPU 卷积运算。为减少全连接层过拟合,该模型采样最近发现的高效正则化方法 Dropout 。

简介

当前目标识别问题主要依靠机器学习方法。为了提升识别性能,我们通常收集更多数据、学习更高效模型、使用更好的预防过拟合技术。直到最近,带标签图片的数据集也是相当小,差不多在万级。在该规模数据集上解决简单识别任务,可以得到很好的效果,尤其在使用标签保留转换技术增强数据后。例如,最好的 MNIST 数字识别模型的误差率小于 0.3% ,达到人类的分类。但识别目标按照现实情况设置后,能表现出惊人的变化性,因此学习识别这些目标需要更多训练集。实际上,小规模图片数据集的缺点早已被广泛认识到,但直到最近才有可能收集到百万数量级的标签图片。新的大型数据集包括 LabelMe,由数百万完全分隔的图片构成,ImageNet,包含 150 高清图片和超过 22000 个分类。

为了从百万图片中学习上千个目标,我们需要模型具有更大的学习能力。然而,目标识别任务的巨大复杂性意味着问题不能通过跟 ImageNet 一样大的数据集完善描述,因此我们的模型需要更多先验知识来补偿那些未知数据。卷积神经网络就是这样一种模型。其容量可用深度与宽度控制,同时它能对原始图像做更强且准确的假设,通常称为图片的局部像素依赖和统计不变性。因此,与同等规模的前向神经网络相比,CNNs 的连接数与参数更少,更容易训练,同时其理论最优性能只会变差一点。

尽管 CNNs 具有高质量与局部结构高效性,它们在大规模高清图片上的训练花费同样让人望而却步。幸运的是,当前 GPU 可以高效处理 2-D 卷积运算,足以支撑大型 CNNs 的训练。同时,最新数据集 ImageNet 包含足够的带标签训练样本,不会导致严重过拟合。

本文特殊贡献如下:在 ImageNet 上训练了最大的卷积神经网络,该模型在相关比赛中取得了最佳成绩。编写高度优化的 GPU 2-D 卷积计算代码,使模型的训练更快。该模型包含许多新的不寻常的特征,可提升性能与减少训练时间。该模型的规模导致过拟合成了问题,即使有 120 万标签训练样本,因此我们使用一些技术来避免过拟合。最终模型包含 5 个卷积层和 3 个全连接层,这个深度似乎很重要:移除任何一个卷积层(每个卷积层只占全模型参数的 1% 不到)都会导致性能急剧下降。

最终,模型大小受限于 GPU 显存和我们能容忍的训练时间。模型在 GTX 580 3GB GPU 上训练花费了五六天。通过实践证明了模型结果可以通过更快的 GPU 和更大的数据集来提升。

数据集

ImageNet Large Scale Visual Recognition Challenge,ILSVRC。

ImageNet 包含多种分辨率图片,然而本文的模型需要固定常数的输入维度。因此我们将图片下采样 down-sample 到 256 x 256 的固定分辨率。对于长方形图片,首先按照短边对图片缩放到 256 像素,再从图片中心切出 256 x 256 的最终图片。

模型架构

模型架构如图所示,包含 8 个需要学习的层,5 个卷积层和 3 个全连接层。下面,我们介绍模型架构中的一些新的或不寻常的特征。按重要性从高到低介绍。

pic2.png

ReLU 非线性函数

神经元的常规输出方式是 tanh 或 sigmoid 。在梯度下降耗时方面,这些挤压激活函数比非挤压激活函数 ReLU 更慢。使用 ReLU 的深度卷积网络比同规模同结构的使用 tanh 的网络快几倍。以下图中的实验说明,使用传统挤压激活函数的模型可能不足以完成大规模数据上的训练。

pic1.png

我们不是第一个想到替换 CNNs 模型传统神经元的。例如,Jarrett 等人提出 |tanh|在对比实验后效果更好。然而,在他们的实验里,最重要的是预防过拟合,其观测到的效果与 ReLU 在加速训练方面的效果不同。更快的训练对于在大规模数据集上训练大模型的性能有重大影响。

在多 GPU 上训练

单 GTX 580 GPU 只有 3GB 显存,限制可训练的网络规模。结果表明 120 训练样本足以训练该 GPU 支持不了的模型。因此,我们将模型拆分到两个 GPU 上,当前 GPU 非常适合跨 GPU 并行训练,它们能直接读写对方的显存,不需要通过机器内存中转。我们采用的并行模式主要是在每个 GPU 上放一半参数。额外的小技巧是,GPU 只在特定的层之间交互,这意味着第 3 层卷积核接收所有第 2 层的特征图,而第 4 层的卷积核只接收相同 GPU 上的第 3 层特征图。选择该连接模式导致交叉验证方面会出问题,但能使我们精确调整通信次数,直到某个可接受的计算量比例。

局部响应归一化

ReLUs 具有令人满意的特性:不需输入被挤压归一化。即使只有一些训练样本给 ReLU 产生了正输入,学习也会在该神经元上发生。然而,我们也发现局部归一化模式能提升泛化性。用 ax,yia_{x,y}^i 表示卷积核 i 在位置 (x,y)上的激活神经元,将其做 ReLU 非线性处理,响应归一化计算公式如下。

bx,yi=ax,yi/(k+αj=max(0,in/2)min(N1,i+n/2)(ax,yi)2)βb_{x,y}^i=a_{x,y}^i/(k+\alpha \sum_{j=\max (0, i-n/2)}^{\min (N-1, i+n/2)}(a_{x,y}^i)^2)^\beta

其中,对 n 个相邻特征图的同一位置的多个像素点求和,N 是当前层卷积核数量。特征图的顺序可在训练开始时直接设定。这种响应归一化实现了某种侧向抑制效果,灵感来自真实神经元行为,在不同卷积核的神经元输出之间创建某种竞争。常量 k=2,n=5,α=104,β=0.75k=2,n=5,\alpha=10^{-4},\beta=0.75 是超参数,可用验证集决定。我们在特定层 RuLU 非线性处理后使用这种归一化。

重叠池化

CNNs 的池化层总结了同一卷积核的输出神经元中每个相邻组的特征。传统方法里,邻居总结信息通过不重叠池化单元得到。为了更精确,池化层可被认为由一系列池化单元构成,每个单元 s 个像素宽,每个邻居总结 z x z 个像素。如果设置 s=z ,我们得到传统局部池化。如果设置 s < z ,我们得到重叠池化。这种重叠池化在我们整个网络中使用。

整体架构

现在开始介绍我们 CNN 的整体架构。网络包含 8 个带权层,前 5 层为卷积层,后 3 层为全连接层。最后一层全连接的输出接到 1000 路 softmax 层,产生对应 1000 个分类的概率。我们的模型最大化多项式逻辑回归目标函数,等同于最大化平均整个训练样本的预测值与正确标签的对数概率。

第 2、4、5 层卷积层的卷积核只和同 GPU 的同层特征图连接。第 3 层卷积层的卷积核与该层全部特征图连接。全连接层神经元与上一个全连接层所有神经元连接。响应归一化层跟在第 1、2 卷积层后。最大池化层,上一节介绍的那种,跟在每个响应归一化层后,还在第 5 个卷积层后。ReLU 非线性层跟在每个卷积层和全连接层后。

第一个卷积层接受 224 x 224 x 3 的输入图片,通过 96 个 11 x 11 x 3 卷积核,步长 4 像素,生成对应的 96 个特征图。第二个卷积层接收上一层输出,该输出已经过响应归一化和最大池化处理。本层具有 256 个 5 x 5 x 48 的卷积核。第 3、4、5 个卷积层之间的连接没有响应归一化和最大池化。第 3 个卷积层有 384 个 3 x 3 x 256 个卷积核。第 4 个卷积层有 384 个 3 x 3 x 192 个卷积核。第 5 个卷积层有 256 个 3 x 3 x 192 个卷积核。全连接层每个都有 4096 个神经元。

减少过拟合

该神经网络有 6 千万参数。尽管每个训练样本带来 10 bit 由图到标签的映射约束,这也不足以训练如此多参数,使模型不会过拟合。下边介绍两种我们使用的主要减少过拟合的方法。

数据增强

最简单常用的减少过拟合方法是人工扩大数据集,使用保留标签的转换方法。我们使用两种截然不同的数据增强方法,都能以非常小计算代价生成转换图。因此转换图不需要存在硬盘上。

第一种方法是通过平移与反转的组合生成转换图。我们从 256 x 256 的原始图像中抽取 224 x 224 的训练图像。该方法使原始图像的规模扩大 2048 倍,且生成的训练图高度不相关。没有该处理,我们的模型就受过拟合折磨,强迫我们使用更小规模的网络。

第二种方法是修改 RGB 通道的强度。特别地,我们对 RGB 像素值的集合使用 PCA 方法,对每个训练图片,将找到的主分量乘以对应的特征值和单位高斯分布中的随机数的乘积。因此,对每个图片像素 Ixy=[IxyR,IxyG,IxyB]TI_{xy}=[I_{xy}^R,I_{xy}^G,I_{xy}^B]^T,都添加以下强度。

[p1,p2,p3][α1λ1,α2λ2,α3λ3]T[p_1,p_2,p_3][\alpha_1\lambda_1,\alpha_2\lambda_2,\alpha_3\lambda_3]^T

其中 pi,λip_i,\lambda_i 是第 i 个特征向量和特征值,来自 RGB 像素值矩阵的 3 x 3 相关性矩阵。αi\alpha_i 是上述随机值。在每次训练中,每个图片值抽样一次随机值,用在所有像素上。这种方法捕获了图像的某种属性:目标识别与像素强度和颜色亮度改变无关。

Dropout

组合不同预测模型是一种非常优秀的减少测试误差的方法。但用在大规模神经网络上过于耗时,需要花好几天来训练。然而,有一种非常高效模型结合版本,仅需多花两成训练时间。这个最近发明的技术叫 Dropout,通过随机将隐藏层输出设置为 0 ,来提升模型泛化能力。被 Dropout 的神经元不参与计算和反向传播。因此,每次接收一个输入时,模型的结构都是不同的,但这些不同的结构共享参数。该技术减少神经元的合作适应性,每个神经元再也不能只靠特定几个神经元来决策。因此,强迫模型学习更健壮的特征,适应各种神经元的组合。

我们在前两层全连接层使用 Dropout。没有 Dropout ,我们的模型将会过拟合。Dropout 直接使模型收敛所需的迭代次数翻倍。

学习过程的细节

使用 SGD 训练模型,每批次 128 个样本,动量 0.9,权重衰退 0.0005。我们发现这样小的权重衰退是很重要的。换句话说,此处权重衰退不仅仅是某种正则化,它显著减少训练误差。

我们使用平均值为 0 方差为 0.01 的高斯分布初始化权重值。使用常量 1 初始化第 2、4、5 个卷积层和全连接隐藏层的偏置项。这种初始化加速学习早期阶段,通过给 ReLU 提供正输出。其他层的偏置项初始化为 0 。

我们在所有层使用相同的学习率,该学习率在训练过程中可调整。我们使用启发式方法调整学习率,将学习率分为10分,在验证误差不再优化时,调整为更小的学习率。

实验结果

总结与讨论