论文名称:ImageNet Classification with Deep Convolutional Neural Networks
论文地址:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
AlexNet训练了一个更深的卷积神经网络,一共8层,5个卷积层+3个全连接层,使用ReLU非线性激活单元使得训练速度更快,提出局部响应归一化(Local Response Normalization)提高模型泛化能力,使用数据增强(Data Augmentation)和dropout减少过拟合,在ImageNet大型视觉识别挑战赛(ILSVRC)上取得了更高的精确度。
一、论文解读
1、ImageNet
ImageNet是一个有超过1500万个标记的高分辨率图像的数据集,大约有22000个类别。从2010年开始,每年都会举行一次名为ImageNet大型视觉识别挑战赛(ILSVRC)的比赛。ILSVRC使用ImageNet的一个子集,在1000个类别中,每个类别中大约有1000个图像。总共大约有120万个训练图像、50000个验证图像和150000个测试图像。ImageNet由可变分辨率的图像组成,而我们的系统需要恒定的输入维度。因此,将采样图像降低到256×256的固定分辨率。对于矩形图像,首先对图像进行重新缩放,使较短的一侧长度为256,然后从生成的图像中裁剪出中心256×256patch。除了从每个像素中减去训练集上的平均值之外,没有以任何其他方式对图像进行预处理。
2、ReLU 非线性激活函数
通常使用的激活函数是
和
,这些饱和非线性比非饱和非线性函数
慢得多,而带有非线性修正单元(ReLU)的深度神经网络训练起来比tanh快很多倍,如果使用传统的饱和非线性函数,将无法在这么大的网络中进行训练。ReLU还可以防止过拟合。
3、饱和非线性和非饱和非线性
饱和非线性激活函数会压缩输入值,如sigmoid、tanh,如图:
非饱和非线性则不会压缩输入值,如relu = max(0, x),如图:
4、局部响应归一化(Local Response Normalization)
在训练大量数据的过程中,一旦每批训练数据的分布各不相同,那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。
AlexNet提出LRN,即对一个输入的局部区域进行归一化,用在激活层/池化层之后,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
局部响应归一化原理是仿造生物学上活跃的神经元对相邻神经元的抑制现象(侧抑制),然后根据论文有公式如下 :
简单来说,就是输入值除以一个数(不同通道累加的平方和),使达到归一化的目的。
其中:
表示第i个kernal在(x,y)处的神经元输入(激活函数Relu的输出值),
表示局部响应归一化的结果,i是通道数。k=2、alpha=0.0001、beta=0.75、n=5 都是超参数,N是总的通道数。
5、重叠池化(Overlapping Pooling)
AlexNet提出重叠池化,重叠池化的相邻池化窗口之间会有重叠区域,此时sizeX>stride。不仅可以提升预测精度,同时一定程度上可以减缓过拟合。
6、整体网络结构
网络结构共8层,其中5个卷积层,3个全连接层,如下图所示:
conv2、conv4、conv5的神经单元仅连接位于同一GPU上的前一层的神经单元,conv3连接conv2的全部神经单元,全连接层的神经单元连接前一层全部的神经单元,conv1和conv2使用局部响应正则化,最化池化层用在局部响应正则化层(conv1、conv2)和conv5,ReLU被用在所有的卷积层和全连接层。
conv1输入图像大小为224×224×3,卷积核大小为11×11×3,输出通道数为96,步幅stride为4(这是特征图中相邻神经元的感受野中心之间的距离),conv2将conv1的(响应归一化和池化)输出作为输入,并用256个大小为5×5×48的卷积核进行卷积。conv3、conv4和conv5彼此连接,没有任何池化层或归一化层。conv3具有384个大小为3×3×256的卷积核,连接到conv2的(归一化、池化)输出。conv4有384个3×3×192大小的卷积核,conv5有256个3×3×192大小的卷积核。每个全连接层有4096个神经元。
7、减少过拟合 -- 数据增强(Data Augmentation)
我们的神经网络结构有6000万个参数,容易过拟合,所以采用了两种方式缓解过拟合,第一种就是数据增强。减少图像数据过度拟合,最简单和最常见的方法是,保持标签不变,人为地放大数据集。我们采用了两种截然不同的数据扩充形式,转换后的图像由原始图像生成,而计算量很少。
(1)生成图像翻译和水平反转
从256×256图像中,随机提取224×224个patch(及其水平反射),并在这些提取的patch上训练网络,这使训练规模增加了2048倍。在测试时,网络通过提取5个224×224patch(四角patch和中心patch)及其水平反射(因此总共10个patch)进行预测,并平均网络的SoftMax层对10个patch所做的预测。
(2)改变训练图像中RGB通道的强度
具体来说,我们在整个ImageNet训练集中对一组RGB像素值执行PCA。在每幅训练图像中,找到主成分的倍数,其大小与相应的特征值成比例,乘以从平均零和标准偏差为0.1的高斯中提取的随机变量。对于图像的每个像素
,加上一个
,式中 pi 和 λi 分别是RGB像素值的3×3协方差矩阵的特征向量和特征值,αi 是上述随机变量。
8、减少过拟合 -- Dropout
dropout技术将某些隐藏神经元的输出设置为零,dropout的概率为0.5。被dropout的神经元不参与正向传递,也不参与反向传播。每次输入神经网络都会重新随机采样,神经元不能依赖于特定的其他神经元的存在,因此,它被迫学习更强大的功能。在测试时,我们使用所有的神经元,但将它们的输出乘以0.5。我们在网络中的前两个全连接的层中使用Dropout。
9、训练细节
使用随机梯度下降训练我们的模型,批量大小为128,动量为0.9,权重衰减为0.0005,这种小的权重衰减对模型的学习很重要,它不仅仅是一个正则化器,它减少了模型的训练误差。更新后的权重为:
式中i为迭代指数,v为动量变量,ε为学习速率,
是目标函数对w第i个批次(Di)导数的平均值。
用衰减率为0.01的零平均高斯分布,初始化每层的权重w,用常数1初始化conv2、conv4和conv5以及全连接层的偏置b。这种初始化方法可以激活ReLU,来加速早期阶段的学习,用常数0初始化剩余层中的神经元偏置b。每一层都采用相同的学习率,在训练过程中会手动调整,当验证错误率不再随当前学习率提高而提高时,将学习率除以10,学习率初始化为0.01,并在终止前降低三次。在120万张图片的训练集上,训练了90个epoch。