标题:将深度卷积神经网络用于ImageNet数据集分类(AlexNet)
Abstract
作者团队训练了一个大型的深度卷积网络,用于给ImageNet LSVRC-2010的数据集分类(1.2万张高分辨率的图片,包含1000个类别)。ALexNet中包含5个卷积层(后面都跟着一个最大池化层)和3个全连接层,最后是1000条通道的softmax。为了提高训练速度,采用非饱和神经元和高效率的GPU实现;为了降低全连接层的过拟合,作者使用了“dropout”正则化。最终在ImageNet LSVRC 2012实现了top-5错误率15.3%(top-n错误率指预测出来概率最大的前n个类中不包含正确类的结果的所占比例)。
1 Introduction
目前对象识别方法在机器学习方法中占据重要地位。为了提高对象识别方法的性能,可以收集更多的数据,学习更强大的模型,并使用更好的技术来防止过拟合。要学习数百万张图像的特性,需要一个具备大量学习能力的模型,并且需要具备随时补充先验知识的功能,卷积神经网络(CNN)就是这样一个模型。CNN的容量可以通过改变深度和广度来调整,并能对图像的特征作出强有力的假设。相比于标准的前馈神经网络,CNN具有更少的连接数和参数,更容易训练,而理论上性能相差不大。虽然CNN的训练是expensive的,但通过将GPU与2D卷积的高度优化实现相结合,足以完成大型CNN的训练工作。
文中的主要内容(贡献)如下:迄今为止作者团队在ILSVRC-2010和ILSVRC-2012竞赛中使用ImageNet数据集训练出了至今最大之一的神经网络,并在这个数据集上取得了迄今为止最好的预测结果;文中还编写了2D卷积的高度优化GPU实现和所有的其他关于训练CNN的操作;Section 3介绍了神经网络中的许多新特性,这些特性能提高性能和减少训练时间;Section 4介绍了如何预防过拟合。
文中的CNN由5个卷积层和3个全连接层组成,作者通过实验证明了这样的结构的性能最好。文中的CNN在两个GTX 580 3GB GPUs上进行5到6天的训练。实验表明更快的GPUs和更大的数据集能使实验结果更好。
2 The Dataset
本文使用的数据集是ILSVRC-2010和ILSVRC-2012,ILSVRC是ImageNet的一个子集,包括1.2M的训练图片,50000张验证图片,150000张测试图片,一共包含1000个类。由于ILSVRC中只有2010年版本能获得测试数据,所以ILSVRC-2010在实验中使用最多。图片在预处理时会压缩成256 x 256px的大小(对所有输入的矩形图片,将其最短边为缩放成256px,在较长边维度上,在中心截取长度为256px的区域,最后形成256 x 256px的图片)。除此之外,不对图片作其他处理,图片采用原RGB的值。
3 The Architecture
3.1 ReLU Nonlinearity
AlexNet的使用的神经元激活函数是ReLU激活函数,相比于饱和非线性函数(saturating nonlinearities),如双曲正切函数和Sigmoid函数,不饱和非线性函数(non-saturating nonlinearities),如ReLU,在梯度下降时具有更快的收敛速度,更快的学习对于在大型网络中训练大量数据具有非常好的效果。作者通过在CIFAR-10数据集上做的实验证明了此论点。如下图,实线表示使用ReLUs的CNN,虚线表示使用tanh函数的CNN,可以看出使用ReLUs的CNN能更快地把训练错误率降低到25%(迭代次数比tanh的CNN快约5倍)。
3.2 Training on Multiple GPUs
使用GPU训练网络。文中使用cross-GPU parallelization技术,从而将一半的网络给每个GPU计算。GPU只在特定的层进行通信,例如layer 3会直接从layer 2的输入中获取全部的kernel maps,但layer 4只从layer 3中处在相同GPU的kernel maps中获取输入。选择连接模式可以通过交叉验证来完成,这样也能调整通信量的大小,使得计算量在可接受的范围内。
3.3 Local Response Normalization
ReLU激活函数的一个好处是,不需要在输入时进行归一化来避免饱和现象,但是,仍然需要局部正则化来保证一般化(更好的泛化能力)。将记作在位置(x,y)处利用核i计算出神经元的激活值,然后再利用ReLU nonlinearity,响应正则化项
的表达式为:
n表示相邻空间位置中相邻kernel maps的个数,N表示当前层kernels的总数。k,n,α,β均为超参数,需要通过验证集得到,文中的值为k=2,n=5,α=10e-4,β=0.75。kernel maps的顺序是任意的,在训练开始前已经确定。这种响应正则化(response normalization),通过在不同kernels间的竞争机制,使得具有更鲜明特性的kernels脱颖而出,其他kernels的输出值减少,实现横向输出抑制。作者通过再次在CIFAR-10数据集上训练4层CNN,证明LRN能降低2%的测试误差。
3.4 Overlapping Pooling
传统的pooling层是不重叠的(步长s=2,窗口z=2),AlexNet中采用重叠池化(步长s=2,窗口z=3),能够有效防止过拟合,提高top-1和top-5错误率。
3.5 Overall Architecture
AlexNet的整体结构:五个卷积层和三个全连接层,结构如下图,一些细节如下:
① 最后一个全连接层后面连接1000个输出的softmax层,从而产生1000个类标签的分布;
② 目标函数使用多f分类logistic回归;
③ 第2,4,5层的kernels只接收同一GPU的前一层kernels输入,第2层则接收两个GPU的kernels;
④ 全连接层均与前一层的所有kernels连接;
⑤ LRN层连接在第1层和第2层的卷积层后面;
⑥ max-pooling层连接在第1层和第2层LRN层后面,以及最后一个卷积层(第5个)后面;
⑦ ReLU激活函数应用在每一个的卷积层和全连接层的输出结果中;
⑧ 具体的每一层kernels个数、大小如图所示。
4 Reducing Overfitting
AlexNet的参数非常多(多达60 million),容易造成过拟合。本文主要提供两种主要方法处理过拟合,人工增加数据量和dropout。
4.1 Data Augmentation
应对过拟合最简单也是最常用的方法就是保持标签不变的情况下装换图像(label-preserving tranformations),文中使用了两种data augmentation,每一种的计算量都很小,所以装换后的图像不需要存储到硬盘中,足够在CPU中进行处理,所以也不会影响到GPU的训练速度。
第一种数据扩充,让每一张图片做translations and horizontal reflections。做法就是从256x256的图像中提取随机的224x224大小的patch(以及它们的水平翻转后的图像),然后基于这些提取的patches来训练网络。这使得训练集增大了2048倍(),尽管产生的这些训练样本显然是高度相互依赖的。在测试时,网络通过提取5个224x224 patches(四个从边角取和一个从中心取)以及它们的水平翻转(因此共十个patches)做预测,然后网络的softmax层对这十个patches做出的预测取均值即为预测结果。这也是为什么网络第一层的input images是224x224大小的。
第二种数据扩充,改变每张训练图片的RGB通道的强度。对于每一张训练图像的RGB值,都执行PCA操作。即对每张图像的RGB值,都加上
,其中
和
分别是RGB值对应的3x3协方差矩阵的特征向量和特征值,
为均值为0,标准差为0.1的高斯随机分布里的随机变量。每一个
的值对一幅特定的训练图像的所有像素是不变的,直到这幅图像再次用于训练,此时才又赋予
新的值。这一方案表明yifu一张图片,在不同的光照的强度和颜色,图片的特征是不变的。
4.2 Dropout
文中采用dropout技术,在每次训练网络时,每个神经元都会以0.5的概率“丢失”,即该神经元不参与前向传播和反向传播,但是神经元的权值在每次训练时都是共享的。这个技术降低了神经元之间的联合适应性,从而学习更具鲁棒性的特征。在测试阶段,神经网络会使用所有的神经元,但每个神经元的输出会乘以0.5。dropout技术用在前两个全连接层中。(这个技术有个缺点,就是会使最终网络收敛所需要的迭代次数翻倍)(待补充)
5 Details of learning
训练过程:使用动量随机梯度下降训练,每个batch有128个样本,动量0.9,权重衰减是0.005,权重衰减不仅能个正则化,还能降低训练误差。更新规则如下:
其中i表示第i此迭代,表示第i次迭代中的动量,
表示第i次迭代中的权重,
是学习率,
表示对于第i次迭代使用的批次Di,求得的损失函数L对权重w的平均梯度(128个样本所获得的128个梯度的平均值)。
参数初始化:每一层的权重都使用均值为0,标准差为0.01的高斯分布随机数,第2、4、5个卷积层,以及所有的全连接层的偏置初始化为常数1(这样可以通过给ReLUs提供正例输入来使得在迭代初期加快网络训练的进度),其余层的偏置初始化为常数0。
学习率:学习率初始为0.01,当某次迭代时使用当前学习率验证误差不再减小时,学习率会调整为原来的10分之1,在训练结束之间会调整3次。
作者一共跑了越90次循环,在双NVIDIA GTX 580 3GB GPUs中跑了5到6天(那么慢的吗),一共训练1.2 million张图片。
注:随机梯度下降加动量的好处有两点:
1. 加速收敛
2. 提高精度(减少收敛过程中的振荡)
6 Results
本文的网络在ILSVRC-2010上的结果及对比如下表所示(Tabel 1)。第一行的算法是ILSVRC-2010比赛中的第一名,用的方法是训练六个稀疏编码,然后求这六个模型的预测平均值作为最终结果;第二行的算法是在FVs上训练两个分类器,并求其预测的平均值;第三行即是本文的算法。
接着,在ILSVRC-2012上的结果如下表所示(Table 2)。由于当时未公布2012的测试集,所以作者将验证误差当作测试误差,实际上这样的结果并不会差多少,如下表从右边数第一列,就是真正的测试误差,前两列是作者的验证误差。
第一行跟前面的一样是作为对比的算法;
第二行使用的就是文中的AlexNet结构的CNN(5个卷积层,3个全连接层),结果top-5是18.2%;
第三行是作者用5个类似的AlexNet做预测,然后取它们的平均值,top-5是16.4%(这得花多长时间......);
第四行使用的是在ImageNet Fall 2011数据集上训练一个CNN(结构跟AlexNet类似,但在卷积层的最后新加了一个卷积层,一共6个卷积层,3个全连接层),然后再ILSVRC-2012上fine-tuning,得到的top-5是16.6%(吃力不讨好);
第五行是使用7个CNN(挖槽),其中两个是在ImageNet Fall 2011数据集上预训练然后fine-tuning的CNN(就是第四行的CNN),另外5个是原本的AlexNet(就是第三行的CNN),将这7个CNN用于预测,然后取其平均值,最终top-5结果是15.4%。
最后,作者将AlexNet用于ImageNet Fall 2009 version的预测。一半数据集用于训练,一半用于测试。最后结果top-1是67.4%,top-5是40.9%,比发布的最好的结果还要好。
定量评估
下图展示了第一层卷积层中卷积核学习到的内容,前48个上GPU 1中的卷积核,后48个是GPU 2中的,可以看出GPU 1中的卷积核表征的特征与颜色无关(可能学到的更多的是条纹吧),GPU 2中的卷积核学到的特征基本与颜色相关,这也是由3.5节中使用受限连接方式所产生的。这种表征差异现象在每次运行时都有,而且与权重的初始化值无关。
在下图中,左边部分,作者展示了8张图片的预测结果来说明网络在预测top-5时都从测试图片中学到了什么。右边部分则对比了测试集中的五张图片和在训练集中与之最相似的6张图片,如果两张图片产生的特征激活向量(即CNN的输出结果)的欧几里得距离小,就认为这两张图片相似。但是对于4096维向量的欧几里得距离的计算效率低,所以作者又提出可以训练一个自动编码器来压缩这些向量成二进制编码。
7 Discussion
本文证明了通过使用大量的数据集,训练一个大型深层的卷积网络能获得一个打破记录(当时)的预测结果,而且使用的是纯有监督学习。作者还证明了文中的网络每一层都不能减少,这个深度是有必要的。由于计算能力的限制,作者没有使用更大的网络。
参考文献:
1、https://blog.csdn.net/qq_30091945/article/details/83930056