《ImageNet Classification with Deep Convolutional Neural Networks》论文解读
本文出自NIPS2012,作者是大神Alex Krizhevsky,属于多伦多大学Hinton组。
概述
本文提出的神经网络结构被成为AlexNet,在我最近的研究学习中发现,这一结构及其变种在很多任务中都有使用,回过头来重温一下这篇论文仍然是有必要的。归根到底,本文网络结构相对较浅,而且能够提取到比较丰富的特征,而很多任务的数据集无法达到ImageNet的规模,使用AlexNet是比较好的特征提取方法。本文相对较“老”,其中的很多技术早已耳熟能详,有兴趣的可以去阅读相关资料。
结构
AlexNet有5个卷积层和3个全连接层,作者发现移除任意一层都会降低最终的效果。网络结构如图:
这个网络前面5层是卷积层,后面三层是全连接层,最终softmax输出是1000类。具体分析第一层:
输入图片为224*224*3,卷积核大小为11*11*3,步长为4,输出为55*55*96。
ReLU
AlexNet使用ReLU代替了传统的激活函数,而现在ReLU已经广泛地使用在了各种CNN结构中。关于ReLU这里已经没必要讲了,在2012年算是新颖的技术,到今天已经是遍地开花了。
Multiple GPU
AlexNet使用两块GTX580显卡进行训练,两块显卡只需要在特定的层进行通信,当今的深度学习已经基本都是在显卡上完成的。两块GPU各训练网络的一部分,在第二个卷积层和全连接层才需要互相通信。
在卷积层之间还需要加上Local Response Normalization和Overlap Pooling。
Local Response Normalization
ReLU本来是不需要对输入进行标准化,但本文发现进行局部标准化能提高性能。
其中aix,y代表在feature map中第i个卷积核(x,y)坐标处经过了ReLU激活函数的输出,这个式子的含义就是一个值和它前后的n个值做标准化。k,n,α,β都是超参数,本文由验证集确定为k=2,n=5,α=10−4,β=0.75。求和发生在feature map中,相同位置(x,y)的n个相邻kernel map上。其中N是卷积核的总数,符号max和min是为了表示边缘几层的标准化方式。
Overlap Pooling
一般的Pooling是不重叠的,而AlexNet使用的Pooling是可重叠的,也就是说,在池化的时候,每次移动的步长小于池化的边长。AlexNet池化的大小为3*3的正方形,每次池化移动步长为2,这样就会出现重叠。
总体而言,AlexNet网络的结构如下:
减小过拟合
AlexNet有6000万个参数,需要考虑过拟合的问题。
数据增强
对图片进行一些变换可以增大数据集。第一种方法是:原始图片大小为256*256,在图片上随机选取224*224的小块进行训练,还可以这些小块进行水平翻转进一步增加数据量。另一种方法是使用PCA改变训练图像RGB通道的像素值。
Dropout
这个方法现在也是大量使用。Dropout将隐层输出以一定的概率置0,这个神经元就不参与前向和后向传播,就如同在网络中删除了一样。Dropout也可以看成是一种模型组合,每个样本都是不一样的网络结构。Dropout减少了神经元之间的共适应关系(co-adaptation),一个神经元不再依赖另一个神经元,强迫网络学习到更加鲁棒的特征表示。
训练
使用SGD进行训练,batch大小为128,momentum为0.9,weight decay为0.0005。迭代公式:
在两块GTX580上花费了6天时间。
结果
在ILSVRC-2010上,top-1错误率为37.5%,top-5错误率为17.0%。比较有趣的是对96个11*11*3的卷积和进行可视化:
可以看到这些卷积核学习到了很多和频率、方向相关的特征,而且在第一个GPU上大多是没有颜色,而第二个是有颜色的,这样的结果和初始化值无关。神经网络最后一层4096维的向量可以作为图像的高级特征,这样的特征可以用于其他的任务中。