本文主要是介绍ImageNet Classification with Deep Convolutional Neural Network解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文是Alex和Hinton参加ILSVRC2012比赛的卷积网络论文,本网络结构也是开启Imagenet数据集更大,更深CNN的开山之作,本文对CNN的一些改进成为以后CNN网络通用的结构;在一些报告中被称为Alex-net,之后在Imagenet上取得更好结果的ZF-net,SPP-net,VGG等网络,都是在其基础上修改得到。
摘要:
本文训练了一个大的,深的CNN,去分类高像素的图片。在ILSVRC2010中,top-1和top-5的成绩分别为37.5%和17.0%;这个大的网络包含6千万个参数和65万的神经元;由5个卷基层,3个全连接层和最终分类器构成。利用了RELU,dropout,data augmentation等多种防止过拟合的技术。在ILSVRC-2012中获得了top-5分类准确率为15.3%。
一,介绍
直到最近,有标记的图片数据集还是比较小,例如NORB,MNIST,CIFAR,Caltech等,由于小数据集上物体变化相对较少,一些的识别方法可以得到不错的结果,尤其是是使用数据增益技术的时候,可以提高识别率。但是现实世界中的物体具有很大的变化,所以想要识别他么需要更大的数据集。ImageNet数据集包含了1500万张高像素图片,大约2万2千类。
……大数据,更多类别,需要更大“容量“的网络;卷积网络就是一个好的选择,局部连接,权值共享等特征,使其参数少,训练容易;而且还可以通过长度,和宽度来控制”容量“。
尽管CNN有很多优势,但是对于高像素图像的分类问题,计算仍然是一个主要的瓶颈。幸运的是,高性能GPU,并行计算,高度优化的2D卷积计算是的训练成为可能。
本文在两个GTX580上训练了5到6天。
二,数据集
ILSVRC使用ImageNet的一个子集,一共1000个类别,每个类别包含大约1000张图片;训练集120万张,验证集5万张,15万张测试集。
三,结构
作者首先描述一些新奇和不一样的结构特征,描述顺序按照估计重要性排列。
3.1 ReLU非线性
模拟神经元输出的标准函数一般是:tanh(x)或者sigmoid(x)函数,由于此类函数在x非常大或者非常小时,函数输出基本不变,所以此类函数成为饱和函数;f(x)=max(0,x),扭曲线性函数,是一种非线性的非饱和函数。在训练时间上,非饱和函数比饱和函数训练更快。而且这种扭曲线性函数,不但保留了非线性的表达能力,而且由于其具有线性性质(正值部分),相比tanh和sigmoid函数在误差反向传递时,不会有由于非线性引起的梯度弥散形象(顶层误差较大,由于逐层递减误差传递,引起低层误差很小,导致深度网络地层权值更新量很小,导致深度网络局部最优)。ReLU的这些性质可以让我们训练更深的网络。
3.2在多个GPU上计算
一个GTX580的内存只有3GB,有限的内存限制了可以在GPU上训练的最大网络。作者把网络一分为二,分配到2个GPU上,通过并行计算来解决。不用通过主机的缓存,当前GPU相互间可以很好进行读写操作。
这里作者有一个小技巧,GPU相互“沟通”;例如,网络中layer-3的filter把layer-2的所有特征图作为输入,而其它卷积层,只从同一个GPU内的上一层特征图作为输入。为什么layer-3把layer-2的全部特征图作为输入而且它层却不这样,这个作者并没有解释理论依据,通过交叉验证实验得来的。最终的结构有点类似Cresian提出的多列卷积网络,但是本文的网络不是完全独立的;这种方式可以提高1.2%的准确率。
3.3局部归一化
ReLU函数,不需要归一化来防止饱和现象,如果没有神经元产生一个正的激活值,学习就会在这个神经元发生;然而,作者发现局部归一化帮助泛化。
局部归一化公式:
具体方式:
选取临近的n个特征图,在特征图的同一个空间位置(x,y),依次平方,然后求和,在乘以alpha,在加上K。这个局部归一化方式“what is the best multi-stage architecture for Object Recognition”中的局部归一化方法不同;本文的归一化只是多个特征图同一个位置上的归一化,属于特征图之间的局部归一化(属于纵向归一化),作者命名为亮度归一化;“what……”论文中在特征图之间基础上还有同一特征图内邻域位置像素的归一化(横向,纵向归一化结合);“what……”归一化方法计算复杂,但是没有本文中alpha,k,n等参数,本文通过交叉验证来确定这三个参数;此外,本文的归一化方法没有减去均值,感觉是因为ReLU只对正值部分产生学习,如果减去均值会丢失掉很多信息。
这种归一化方式对结果有1%左右的提升。
3.4重叠Pooling
本文pooling区域为z*z=3*3,间隔距离为s=2.对比z=2,s=2的无重叠方式,提升0.4%的结果(感觉有点小);此外作者还发现使用重叠pooling,不容易过拟合。
3.5全局结构如图
连接方式:layer-3连接上一层的所有特征图,其他卷基层只连接同一个GPU内的特征图;网络既有全连接又有局部连接,可以看做两个大部分“独立”,局部互联的网络。
局部归一化LRN:第一,和第二层后使用
Max_pooling:第1,2卷积层后使用
ReLU:应用在每个卷基层和最后的fc层。
3.1 整体结构
本文的网络结构Alex-net:
Input(224,224,3)→96F1(11,11,3,s=4)→LRN→max-P1(3,3,2)→256F2(3,3,96)→LRN→max-P2(3,3,2)→384F3(3,3,192)→384F4(3,3,192) →256F5(3,3,192)→max-P3(3,3,2)→4096fc1→4096fc2→Classifer1000
上一篇博文“Flexible,high performance convolutional neural networks for image classification”中对CIFAR-10分类的网络结构,Dan-net(个人命名):
Input(32,32,3) →100F1(3,3,0) →max-P1(3,33) →100F2(3,3,0) →max-P2(2,2,2) → 100F3(3,3,0) →max-P3(2,2,2)→300fc1 →100fc2 →Classifer10
在网络结构对比可以看出,本文的Alex-net(或者叫做Krizhevsky-net)就是Dan-net的放大版本,由于ImageNet数据集比CIFAR数据集图片更大,种类更多所以需要增加网络的深度和宽度,来增加网络的容量。
网络具体配置方案,两篇论文的作者并没有给出具体的说明,因为深度网络结构并理论基础并不完善,什么数据集,需要匹配多深多宽的网络,并没有理论依据;感觉这个需要经验和反复的实验来最终确定网络结构。所以在网络结构上两篇网络并不是最优解,但都是可行的,可以说算是满意解吧。卷积阶段的详细结构,filter尺寸,filter个数,间隔距离S这里暂时先不探讨,后面的论文会有探讨。
四,减少过拟合
4.1数据增益
数据增益是最简单的减少过拟合的方法。
方法一:生产平移图像,水平翻转
原始图像为一个大图a,想把一短边缩小到256维得到b,然后在b的中心取256*256的正方形图片得到c,然后在c上随机提取224*224的小图片作为训练样本,然后在结合图像水平反转来增加样本达到数据增益。这种增益方法是样本增加了2048倍,允许我们运行更大的网络。
具体操作过程是四部并行:GPU正在训练第n批次数据,同时正在把第n+1批次数据复制到GPU中,同时CPU正在增益第n+2批次数据(此处用python实现),同时正在从硬盘上加载地n+3批次数据。
增溢方法二:调整RGB像素值
这个没有太看明白,貌似是先对一个图片进行主成分分析,然后给RGB分别加上一个量。
RGB像素的3*3相关系数矩阵M,对M求特征值lamda(i)和特征向量p(i),alpha(i)是服从高斯分布,标准差为0.1的随机变量。
这种数据增益技术,捕捉了自然图像一个重要的性质,即改变颜色和像素值,物体是不变的。
这种增益技术使得结果有1%的提升。
4.2 Dropout
在fc层应用dropout,fropout是一种通过丢掉神经元的模型平均技术,具体参看前面的博文。
4.3 测试方法
在256*256图片的四角和中心提取5个224*224片段,在水平翻转后形成10个样本,输入网络结果求平均。
5 训练细节
本文使用带动量项的梯度下降法SGD。
批量D=128;动量项v=0.9,权值削减weightdecay wd=0.0005, W服从均值为0,标准差为0.01的高斯分布。、
偏置项:第2,4,5卷基层和两个全连接层的b=1(促进最初阶段ReLU的学习);其它层b=0。
学习率:初始为0.01,当验证集停止提高时,手动缩减学习率(除以10)
6 结果
在ILSVRC2012上,单个模型的top-5结果为18.2%;5个模型求平均结果为16.4%。
在本文网络基础上,作者又添加了第6个卷基层,并在整个ImageNet(150万张,22K个类别)上训练这个新的网络,然后再在ILSVR2012上finetuning“训练”这个网络,最后获得了16.6%的准确率,两个模型结果为15.3%。
在一个大的数据集训练网络,然后在另一现对较小的数据上finetuning网络的方式,类似transfer learning,在以后的论文中经常出现。
6.1 “性质”评价
从第一个卷基层卷积核可视图可以看出,卷积核具有方向,“频率”选择性,还有一些圆点状的(也有许多死的卷积核后面文章在叙述,训练不完全导致);无论在什么初始值下,值得注意的是两个GPU学习到的卷积核不一样,GPU1学习到的特征不具有没有设么颜色,GPU2学习到的特征大部分制定了颜色,这个比较有意思;相同的结构,学习的卷积核却很不同。
另一个值得注意的地方就是在最后的一个具有4096个神经元的全连接层,通过计算欧氏距离,欧氏距离比较近的图片具有相似的图片对象。说明网络确实提取到了有用的特征,此外作者还介绍可以通过在4096处,通过一个Autoencoder算法,来生产一个维数较少的二元向量,这样就可以通过比较这个维数较小的向量来进行图像检索了。
7 讨论
网络深度很重要,移除任何一个层,都会导致结果下降2%左右。
8一些理解和困惑
首先是佩服三位大牛作者,经验上暂时不说,就是网络结构中的各种交叉验证就够恼人的了,验证LRN阶段的参数,验证两个GPU的互联方式,在验证网络结构;各种验证需要很多的实验;真是佩服大牛的精神。
感觉本文结构上并不是本文最大的创新,感觉最大的贡献在于整合各种技巧;例如ReLU是本文作者hinton10年提出来的改善RBM性能的,把ReLU引入深度CNN中,使得ReLU成为以后深度网络普遍使用的非线性函数,从而在这个领域替代经典的sigmoid,tanh函数。Dropout是hinton12年提出改善深度网络泛化能力;LRN是“what……”论文使用的方法,本该简化改进了该归一化方法;而通过纯监督方法学习深度CNN在上一篇论文中已经证明是有效的;最终通过作者的整合得到一个标准的深度CNN网络,在ILSVR2013和2014的很多论文都是在结构上修改这个网络,从而获得更好的结果。
这篇关于ImageNet Classification with Deep Convolutional Neural Network解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!