摘要
作者训练了一个深度卷积神经网络用来对ImageNet LSVRC-2010比赛中的120万张的图片进行分类,类别数为1000个。该网络在测试数据上获得了top-1和top-5的错误率分别为37.5%和17.0%。
LSVRC是ImageNet每年举办的一个比赛,全称为Large Scale Visual Recognition Challenge。一般使用的评分标准被称为top-1和top-5的错误率,top-1指的是模型认为的最有可能的类别和真实标签不同,而top-5指的是最有可能的5个类别中不包括了真实标签。
AlexNet有5个卷积层,有的之后跟着max-pooling层,最后有3个全连接层加上一个1000类的softmax。在AlexNet中使用了dropout的正则化方法来防止过拟合。
1 引言
首先介绍了一下用的数据集——ImageNet,ImageNet有超过1500万的带标签的高分辨率图片,包含了22000个类别。
对于这样一个数据量及其大的数据集,使用普通的全连接网络会导致参数量过多,所以作者认为选择卷积神经网络是一个好的选择。当然,CNN的训练还是比较昂贵的,但是当时的GPU优化了2维卷积操作,所以可以用来训练CNN这样的模型,同时Imagenet的大数据量使得过拟合不这么严重。
这篇文章的贡献包括了:
- 训练了一个在比赛中获得了最好的成绩的卷积神经网络
- 优化了GPU对二维卷积的支持
- 在网络中用了一些新的方法
- 使用了一些降低过拟合的方法
2 数据集
之前提到了,本文使用的数据集是从ImageNet中来的,实际上比赛中使用的是ImageNet的子集,包括了1000个类别,每个类别有大概1000张图片。
ImageNet的图片不都是同样分辨率的,所以作者他们的做法是将图片下采样到256×256的大小,具体来说,首先把图片缩放,使得短边是256的大小,然后将图片中心的256×256的大小裁剪出来,同时训练的时候还做了中心化的处理,把每张图片的像素值都减去训练集所有图片的均值。
3 网络的架构
网络包括了8个带权重的层——5个卷积层和3个全连接层,具体的在后面说到了。
作者之前提到了在这个网络中使用了一些新的特征,包括了以下4个:
3.1 ReLU的非线性激活函数
ReLU叫做非线性整流单元,简单来说实际上就是一个f(x)=max(0,x)
,或者说当
x
≥
0
x\ge0
x≥0的时候就是
x
x
x,
x
<
0
x<0
x<0的时候就是0。
之所以采用了这样一个非线性激活,是因为这个函数的特性,可以发现,这个函数在正轴的梯度为1,所以可以避免梯度消失的问题,因为一般梯度是一个比较小的值,那么当反向传播的时候,链式法则就会使得多个梯度连乘,导致梯度越来越小,对于深的网络这样的问题更加明显。同时,论文中也提出,使用这样的激活函数使得收敛更加快,这里是拿tanh
函数作为对比的。
可以看到在训练误差相等,都是0.25的时候,使用ReLU(实线)只用了差不多5个epoch,比tanh(虚线)使用了大概35个epoch要快很多。
3.2 在多个GPU上训练
由于当时作者使用的是GTX580去训练,这个显卡只有3GB的显存,对于这样一个大的任务而言是不够用的,所以实际上使用了2块GPU进行训练,这里对于现在而言意义不大,所以不赘述了。
3.3 局部响应归一化LRN(Local Response Normalization)
这个技术现在使用的也不是很多,可以参考https://blog.csdn.net/yangdashi888/article/details/77918311这篇博客。
3.4 重叠的池化
在CNN中,我们如果使用池化,会让池化的步长等于核的大小,比如核大小为2,那么我们的步长也会是2,这样的话就没有重叠的区域,而AlexNet中使用了重叠的步长,作者在实验中发现,使用核大小为3×3,步长为2的池化能够降低错误率(比起使用核大小为2,步长也为2而言)。
3.5 总体的架构
网络如下图所示:
这张图稍微有点复杂,原因是作者使用了2块GPU,把一半的通道在一块GPU上训练,另一半的在另一块上,比如左手边第二个看上去通道数是48,但由于有上下两个,所以实际上是96个通道,也就是用了96个卷积核,实际上就是下面这张图:
4 减少过拟合
4.1 数据增强
在处理数据的时候,使用了数据增强的方式来减少过拟合,所谓数据增强,就是让有限的数据产生更多的等价数据,这样就可以提高模型的鲁棒性。
文章中提到的做法是:随机从256×256的图片中裁224×224的块,把这个224×224的图片作为输入,同时还包括了裁出来图片的水平镜像,于是就相当于数据的数量变成了(256-224)×(256-224)×2=2048倍。
在测试的时候也使用这种方式,裁出左上、左下、右上、右下加上中间的5个224×224的块,加上它们的水平镜像作为输入,所以相当于是10个输入,然后取一个平均的预测结果。
文章还对图片的RGB通道做了一些调整,使用的是PCA的方法。
4.2 Dropout
Dropout是一种防止过拟合的方法,用一定的概率去抑制神经元的输出,一半说概率是0.5,也就是有一半的神经元会输出0。在AlexNet里是在前2个全连接层之后加上了Dropout层(卷积层不加Dropout)。
5 学习的细节
在训练模型的时候,用了以下的超参数:
- 使用批量大小为128的随机梯度下降
- 使用动量为0.9的动量梯度下降
- 使用0.0005的权重衰减(L2正则化)
其中, v v v就是要更新的量, w w w是模型的权重。
对于学习率而言,初始化为0.01,然后作者他们是采用手动调参的方式,在模型学不动的时候把学习率除以10。
6 结果
在结果里有这样一张很有意思的图,其中每一行可以看的到都是比较相似的图片,这些相似的图片是怎么来的呢,实际上是把最后一个隐藏层的输出拿出来,然后找和这个输出向量在欧式距离上相似的那些样本,可以看到,这样做也增加了整个卷积网络的一个可解释性,因为网络真的可以找到在语义上相似的图片,同时它们的输出也是相似的。