AlexNet:ImageNet Classification with Deep Convolutional Neural Networks

参考:

https://blog.csdn.net/sun_28/article/details/52134584

Alexnet网络架构于2012年提出,并获得2012年ILSVRC冠军,极大推进CNN在图像分类领域的应用。

一、概述

ImageNet是一个包含2.2万个类别,超过1500万张带标签的高分辨率图像的数据集。ImageNet ILSVRC-2010数据集包括约1000个类别,每个类别大概1000张图,总共大概有120万张训练图片,5万张是验证集,还有15万张是测试集。

ImageNet有个评价惯例是top-1和top-5,其中top-5可以理解为真实类别在网络预测类别排行榜的前五的情况。

二、网络架构

AlexNet有5个卷积层和3个全连接层,最终softmax输出是1000类。拥有 6 千万的参数和 65 万个神经元,网络结构如图:


关于softmax,虽然我不想做详细介绍,但我想用知乎上的一段话来总结一下它的作用。“看名字就知道了,就是如果某一个zj大过其他z,那这个映射的分量就逼近于1,其他就逼近于0,主要应用就是多分类,sigmoid函数只能分两类,而softmax能分多类,softmax是sigmoid的扩展”,这里z指的是所有全连接的结果。还有一句“softmax模型是logistic模型在多分类问题上的推广, logistic 回归是针对二分类问题的”。也就是说,由于前面提到过的sigmoid函数对于每个神经元是一个二值饱和函数,在多分类问题上其实挺容易遇到两类的得分很高也接近的情况,这时输出容易模糊(Fuzzy)。而softmax是一个类别的得分的分布情况,要么一起低,要不就有高有低,所以在多分类的时候,容易落实。详细可参考http://www.zhihu.com/question/23765351.

第一个卷积层的输入是 224 × 224 × 3的图像,用 96 个11× 11× 3的步长为4的卷积核。第二个卷积层将第一个卷积层的输出作为输入(响应归一化并池化),然后用 256 个5×5×48大小的卷积核。第三、四、五层卷积层前后相连,之间没有池化层和归一化层。第三个卷积层有384个3×3×256 的卷积核,连接着第二个卷积层的输出(归一化+池化)。第四个卷积层有384个3×3×192的卷积核,第五个卷积层有256个3×3×192的卷积核。每个全连接层各有4096个神经元。

1、ReLU

一般的的神经元模型输出会用或者作为输入x激活函数。然而,这些非线性饱和函数在梯度下降的训练时间上,往往比即ReLU非线性不饱和函数慢很多。实验数据结果要将深度网络训练至training error rate达到25%的话,ReLU只需5个epochs的迭代,但tanh单元需要35个epochs的迭代。 

那是不就暗示着ReLU一定比其他非线性饱和函数在寻找全局最优点上绝对优势呢?其实不是,Alex表示他不是第一个考虑调整CNN的传统神经元模型的。此前,Jarrett等人的研究表明,用他们的对比度标准化方法结合的非线性,再做局部均值Pooling的效果在Caltech-101数据集上也有突出表现。不过,Alex认为Caltech-101数据集的规模不够大,需要担心过拟合的问题,网络学习效率在大规模训练起着重要的影响作用。所以如果在样本规模不是特别大的时候,引入非线性饱和函数来加强网络的泛化能力。但是,在样本数量规模巨大的情况下,采用不饱和非线性函数(其实就是线性函数的局部选择性)才是主流。


2、Multiple GPU

作者之所以设计这个双GPU方案,是因为一个GTX 580 GPU只有3G内存,限制了网络规模的大小,ImageNet的1.2百万数据在这不好搞。再之,现在GPU都很适合做相互并行,因此他将网络拓展到两个GPU里面。如上图所示,他的并行方案是网络中的一半卷积核放到每个GPU上运行,这其实是利用了“GPU只与相应的某些卷积核交互”的一个trick。例如,图中第三层的卷积核会用第二层的所有卷积的映射结果作为输入,但第四层的卷积核只用到同一个GPU上的第三层卷积映射结果作为输入。尽管这种连接模式仍是交叉验证上的一个问题,但我们至少还能以这种分布式/并行计算方式,计算这个大规模数据。另外作者的实验数据表示,two-GPU方案会比只用one-GPU跑半个上面大小网络的方案,在准确度上提高了1.7%的top-1和1.2%的top-5。值得注意的是,虽然one-GPU网络规模只有two-GPU的一半,但其实这两个网络其实并非等价的。

AlexNet的并行架构设计实际上只是一个单GPU网络的切割分离,核心技巧是“空间换时间”,它的美妙之处是Alex是刚刚好让卷积网络的分离并行流程做了两次而已,前面介绍的第1、2、3层是一次,第4、5、6层又是一次。而且分离合并的时机也很恰当,假设第2和3层之间不做数据交互合并的话,估计与单GPU模型有着很大的差别,因为非线性因素引入太多了,核也很难再切了。另外通过对比分析这俩个模型,他只用了一半AlexNet的kernels来做实验,就暗示单GPU的精度没有双GPU高的结论,我觉得有些欠妥。实际上,单GPU的kernels在其中两层的数目是应比AlexNet的对应的一半要多的,所以这里应该补充一组实验数据。

3、Local Response Normalization

ReLU单元本身其实是不对输入做归一化,从而避免函数出现饱和现象。如果训练样本经过卷积网络产生正响应输入到ReLu单元的话,该单元的相应参数就能够在这次进行学习。不过,Alex他们发现ReLu后面如果跟上一个局部相应归一化部分,会让网络达到更好的泛化效果。 


实际上,这个局部响应归一化是模拟生物神经元的侧抑制作用,当前神经元的作用受附近神经元作用的抑制,这样就理解公式中在归一化阶段仅仅除以相同位置附近前后几次的神经元响应的平方,而不是N次结果响应的平方。

4、Overlap Pooling

CNNs的Pooling层是对相同卷积核的映射结果里面的邻近的几组输出做总结,从而提取特征。或也可以理解成以s大小为步长对前面卷积层的结果进行分块,对块大小为z*z的卷积映射结果做总结,这时有s=z。然而,Alex说还有s<z的情况,也就是带交叠的Pooling,顾名思义这指Pooling单元在总结提取特征的时候,其输入会受到相邻pooling单元的输入影响,也就是提取出来的结果可能是有重复的(对max pooling而言)。而且,实验表示使用s=2,z=3带交叠的Pooling的效果比s=2,z=2的传统要好,在top-1和top-5上分别提高了0.4%和0.3%,在训练阶段有避免过拟合的作用。

总体而言,AlexNet网络的结构如下: 


三、减小过拟合

AlexNet有6000万个参数,需要考虑过拟合的问题。

1、数据增强

数据集上减少过拟合的最简单的方法就是增加数据集的多样性。Alex介绍了一种标记保留变换(label-preserving transformation。因为对原数据这种处理的计算量很小,没必要把变换后的结果存放到磁盘(disk)上,所以Alex就把这些计算放在CPU,让CPU独立处理这些数据。如此一来,数据增强就能供得上CNN的训练。再说明一下,CPU是不参与网络训练的,因为整个CNN都放到了两个GPU里面,由GPU负责训练。

标记保留变换的方式又分两种,一种是图像的平移和水平镜像,另一种RGB通道的亮度改变

图像的平移和水平镜像:在原大小256*256的样本(及其水平镜像的结果)中随机抽取224*224的部分作为训练样本,从而是样本数目激增至原来的2048(即)倍。Alex觉着如果不这么做,网络就会收到本身过拟合的影响,从而只好将网络变小。然而,最近一篇16年CVPR的文章,关于行人检测的综述——“How Far are We from Solving Pedestrian Detection”,表示AlexNet这种CNN深度学习分类器容易导致行人局部误检的出现。因此即便该方法能处理过拟合,但我认为在某些情况还是不太应该用这种样本局部抽取的方式来增加多样性。回到原文,由于我们的抽取使得我网络的输入变成了224*224,需要对网络测试方法稍作变动,我们先抽取测试集图像的四个角以及中间的224*224部分,还包括镜像共有10个部分(Patch)结果,再对对这10个输入的测试结果做平均作为我们对该测试集图片的最终测试结果。

改变RGB通道亮度:对训练集中的每张图片都做PCA,得到对应的特征向量[p1,p2,p3]和特征值在训练过程中,每当这张样本被重复一次,我们就对张样本的每一个像素按照公式:

进行变换,得到一张“新”样本做下一轮的训练。其中每次到这样样本时,都需要用均值为0,标准差为0.1的高斯随机数发生器产生一个新的值,从而获得富有多样性的样本。Alex在文中表示这个方法能使Top-1误差率减少1%。

2、正则化方法-Dropout

Dropout以 50%的概率将每个隐藏层神经元置零,被置零的神经元不再参与前馈和 BP过程。Dropout也可以看成是一种模型组合,每次训练一个样本时,神经网络都会置于不同的结构,减少了神经节点间的共适应(co-adaptation)的复杂度,因为一个神经元都不可能依赖其他特定某个神经元的作用。因此模型强迫网络学习到更加鲁棒的特征。测试时,对每个参与dropout节点的输出乘上0.5,合理地逼近预测输出分布的几何均值,Alex主要在前两个全连接层(FC)使用了这种训练机制。

四、训练

采用随机梯度下降进行训练,每个训练batch128个样本。batch处理技术其实是一种分组处理方式,只是多了一个机会均等的随机抽取机制。而且,适合的batch size不仅有利于充分利用内存资源,还能优化训练时长,减缓过拟合的影响。这是因为batch采样机制的随机引入了均匀分布的采样噪声,那些被重复采样多次的样本过拟合得到的参数,会被首次采样的样本破坏而影响其过拟合效应,某种层面上看,这也有利于拟合找到全局最优点,所以同时也优化了训练时长。

继续回到AlexNet训练参数的介绍,学习冲量(momentum)更新率为0.9,权值衰退(weight decay)学习率为0.0005。小的学习率对模型学习很重要,它能够减少训练引入的误差,是一个正则化因子。权值w的更新迭代公式为: 



其中i是迭代次数,v是更新冲量,是学习率,训练(第i个batch时),目标函数关于w的方向导数在wi时的值。

将每层网络的权值(weights)利用均值为0标准差为0.01的高斯分布随机初始化,用1初始化第2、4、5卷积层和全连接隐藏层的偏置(biases),将其它层的偏置神经元初始化为0。这种初始化方式起着一定的训练加速作用。

在整个学习过程中所有网络层都采用相等的学习速率,学习率是一个经验值。采用的启发式方法是每次都对当前的学习率除以10,直到交叉验证的误差不再降低。学习率初始化为0.01,验证了3次就停止。

对ImageNet的120万张图片迭代训练90次,在NVIDIA GTX 580 3G GPUs上跑了5到6天。

五、实验结果



Table1是ILSVRC-2010的测试结果,Table2是ILSVRC-2012的测试结果。Table2中的“1 CNN*”表示的是在原来第五层的pooling后面添加了一个第六卷积层,并对ImageNet 2011 Fall的数据做pre-training。

Figure4右研究可视化网络的方法是考虑全连接层最后一个 4096维隐含层所激活的特征向量。如果两张图的向量欧氏距离很小,可以说很大程度上神经网络认为它们是相似的。图 4展示了五张测试集中的图片,以及按照上述方法找出的分别与这五张图最相似的 6 张训练集图片。通过两个 4096 维的实数向量之间的欧氏距离来计算相似度显然效率很低,但可以通过训练一个自编码器把这些向量压缩为二进制编码来提高效率。这能产生一种比对原始像素进行自编码更好的图像检索,因为(对原始像素进行自编码)用不到标签,它倾向于找出具有同样边缘模式的图片,而不是语义上相似的图。

非常好的见解参考:

https://blog.csdn.net/zyqdragon/article/details/72353420

https://www.zhihu.com/collection/127509154

https://blog.csdn.net/cyh_24/article/details/51440344


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值