经典论文解读之AlexNet——ILSVRC-2012挑战赛冠军

1 概述

AlexNet是2012年 ImageNet Large-Scale Visual Recognition Challenge(ILSVRC)大赛冠军使用的模型,论文全名为ImageNet Classification with Deep Convolutional Neural Networks。作者是Alex Krizhevsky,Ilya Sutskever 和 Geoffrey E. Hinton。 Hinton 就是大名鼎鼎的深度学习三巨头之一,Alex是Hinton的学生,也是本文AlexNet的一作,Ilya是OpenAI的创始人。
AlexNet在ILSVRC-2010的数据集上跑出了37.5%的top-1 error和17.0%的top-5 error。参赛网络是AlexNet的一个变种,以15.3%的 top-5 error 夺冠,大幅领先当年第二名的26.2%。

top-n error:ImageNet比赛用的数据集一共有一千个分类,假设模型对一张图片预测一千个类别的概率分别为 p(1), p(2)…p(1000), 先按概率从高到底排序,图片的真实类目在概率最高的前n个类,那么被视为预测成功,否在计入top-n error.

2 背景

论文首先介绍了AlexNet出现的背景,一是越来越多的标注数据集的出现,从开始的NORB, MNIST,Caltech-101/256 和CIFAR-10/100 这种几百几千的经典数据集,到ImageNet这种超大型数据库,让CNN有了用武之地。二是计算机硬件的发展,GPU对CNN训练的提速让训练大型数据集成为了现实。本文作者使用两块3GB的GTX 580显卡进行训练。

3 ImageNet数据集

ImageNet是一个有1.5亿张图片,涵盖22000多个类的超大型高像素图片数据库。从2010年开始,ImageNet使用其中的一个子集作为ILSVRC挑战赛的数据,这部分图片被分为1000个类,每个类都超过1000个样本,120万作为训练数据,5000作为验证数据。

4 网络结构

alexnet
这个网络看起来有点奇怪是因为网络画出了在两张GPU上训练的结构。网络一共包含8层,五个卷积层和三个全连接层,结构上延续了LeNet-5的经典结构,即在一个或多个cnn层后面接一个池化层,最后使用全连接层。值得一提的是AlexNet弃用了LetNet-5的平均池化(AvgPooling)而使用最大池化(MaxPooling)代替
AlexNet采用的多GPU训练方式是将每一层的神经元分别部署在两个GPU上进行计算,最后将结果组合,可以这样做的原因是因为多个GPU之间可以互相访问对方的内存。下面是一些AlexNet使用的一些特性。

4.1 非线性 ReLU

ReLU的全称为Rectified Linear Units, 中文名为线性修正单元。之前深度学习网络中通常使用sigmoid和tanh来增强网络的非线性表达能力。ReLu是Hinton和Nair在之前就提出过的,不过直到AlexNet才开始大放异彩。Relu的表达式和函数图像为

Relu(x)=max(0,x)Relu(x) = max(0, x)

relu
因为ReLU的计算很简单,而且不会有sigmoid和tanh在远离0的地方梯度消失的问题,引入Relu加速了网络推理速度和收敛速度。下图是在相同的网络结构下,仅将tanh替换为ReLU,在CIFAR-10数据集上达到25%的错误率需要的epochs对比,实线为ReLU,虚线为tanh。作者还提到他不是第一个在非线性表达能力上做手脚的人, Jarrett曾将f(x)=tanh(x)f(x) = tanh(x)替换成f(x)=tanh(x)f(x) = |tanh(x)|

4.2 多GPU训练

单个GPU训练太慢了,所以用多GPU来加速。

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

由于网络采用了ReLu,只对正值敏感,所以不必要对输入进行归一化。但我们仍然发现使用以下公式进行局部响应归一化能增强泛化能力。N表示当前网络层的节点(kernel)数,至于k, n, α, β是通过验证集计算出来的。 使用该特性使我们的top-1 error 和top-5 error 分别降低了 1.4% 和 1.2%。

这个归一化方式现在几乎很少被提到了。

4.3 Overlapping Pooling

通常CNN层后面都会接一个池化层来进行下采样,一般池化层的size和stride是相等的,所以每次采样没有重合部分,我们使用了stride < size 的池化层。这项改动使top-1 error 和 top-5 error 分别降低了0.4%和0.3%

5 减少过拟合

AlexNet网络包含了6000万个参数,尽管比赛的数据集很庞大,但还是发生了过拟合。

5.1 数据增强

我们使用源图片数据做一些简单的计算,所以不需要保存在硬盘上。因为GPU用于训练,所以我们在GPU训练的同时使用CPU做数据增强。我们采用了以下数据增强的方法:

  • 随机裁剪和水平翻转:先将图片 resize成 256x256 大小,再随机裁剪成226x226大小,以保留图片的大部分信息,然后加上水平翻转,在使用这个数据增强方式之前,我们的算法饱受过拟合的困扰。
  • 改变RGB通道强度:使用以下公式 IxyI_xy表示图片的每个像素,R、G、B表示图片的三个通道,PiP_iλiλ_i表示3×3 RGB像素值的协方差矩阵(3×3 covariance matrix of RGB pixel values不太懂)的第ii个特征向量和特征值αiα_i是一个符合均值为0,标准差为0.1的高斯分布的随机值。

Ixy=[IxyR,IxyG,IxyB]T+[p1,p2,p3][α1λ1,α2λ2,α3λ3]TI_{xy} = [I^R_{xy}, I^G_{xy}, I^B_{xy}]^T + [p_1, p_2, p_3][α_1λ_1, α_2λ_2, α_3λ_3]^T

5.2 Dropout

联合多个模型的输出可以非常有效地减小错误率,但是对于大型CNN网络来说代价太高了(需要花时间训练多个模型)。所以我们在前两个全连接层使用了Dropout

6 训练相关

  1. 参数初始化:每一层都使用均值为0,标准差为0.01的高斯分布初始化参数。在第2、4、5和全连接层使用1作为初始化bias,其余使用0作为初始化bias
  2. 超参数:batch设置为128, 优化器为SGD,momentum为0.9,权值衰减为0.0005.我们发现这个衰减对模型学习很重要。权重参数更新公式为
  1. 学习率初始为0.01,在终止前学习率会衰减三倍。整个训练过程使用2张3G GTX580显卡在1200万张图片的训练集上一共跑了90个epochs,耗时6天。
阅读(91)
评论(0)
updated@2021-07-26
评论区
目录