本文是对《ImageNet Classification with Deep Convolutional Neural Networks》的论文解读和总结。该论文发表于 NIPS2012,作者 Alex Krizhevsky 属于神经网络之父 Hinton 组,自2012年发表至今,已有3万多的引用,实属经典。AlexNet 在 ISVRC2012(ImageNet Large Scale Visual Recognition Competition) 中获得了第一名,top5测试错误率为 15.3%,远超第二名,与传统方法相比,AlexNet 体现出了其极大的优势,也正是 AlexNet 的诞生,让深度学习又一次被推上风口浪尖。
本文不是对原论文的翻译,而是将其中的要点做一个总结,论文中提出的许多观点和方法一直沿用至今,也对后续各个经典的神经网络的诞生提供了思路。
1. 网络结构
这张网络图现在可谓是随处可见了。5层 Conv+pool ,2层 fc,1层 softmax。
1.1 ReLU
AlexNet 使用 ReLU 代替了传统的激活函数,而现在 ReLU 已经广泛地使用在了各种 CNN 结构中,可谓遍地开花,关于激活函数的相关概念和对比,可参看博主另外一篇博文:常用的激活函数对比。
1.2 多GPU并行训练
GPU 内存限制了网络的大小,所以将网络扩展在两个 GPU 上,并行训练。当年 AlexNet 使用的显卡内存只有3G,所以使用了这种策略(当然,两块GPU的并行完全隔离开来,在特定阶段需要相互通信)。现在随着硬件的发展,模型训练得到了较好的改善。
1.3 局部响应标准化
ReLU有个好的特点,就是它不要求输入标准化以防止饱和。因为只要神经元产生正输入,这个神经元就能起到学习的作用。但是有一点,局部标准化是有助于泛化的。具体的标准化公式在论文中给出了,此处不作重点阐述。作者在论文中提到,使用这种标准化,top-1和top-5的错误率都有所降低。
1.4 重叠池化
一般的Pooling是不重叠的,而AlexNet使用的Pooling是可重叠的,也就是说,在池化的时候,每次移动的步长小于池化的边长。AlexNet池化的大小为3*3的正方形,每次池化移动步长为2,这样就会出现重叠。这个方案同样降低了top-1和top-5的错误率,同时有效缓解了过拟合。
2. 减少过拟合
AlexNet 的参数数量有6000万,需要减少过拟合的问题
2.1 数据提升
Alex 使用了两种数据提升的方式,一种是对图片进行裁剪和水平镜像处理,通过从256x256的图片中随机抽取224x224的区块及其水平镜像来增加数据集的多样性。由于对图片的抽取使得其大小变成了224x224,所以需要对测试数据也稍作变动,抽取测试集图像的四个角以及中间的224×224部分,还包括镜像共有10个部分(Patch)结果,再对这10个输入的测试结果做平均作为对该测试集图片的最终测试结果。
第二种数据提升的方式为改变训练图片RGB通道的强度,在所有 ImageNet 训练图像的RGB像素值上执行PCA。对每一张训练图像,以一定比例添加多个找到的主成分。Alex 提到,这种方法有效降低了top-1错误率。
2.2 Dropout
对于 DropOut,现在已经广泛应用于各个 CNN 网络,确实经典,它是有效的模型集成方法。dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。关于 Dropout 比例的选取以及 dropout 为什么有效的解释,有论文有专门的研究,博主会在以后的博文中单独更新,敬请关注!
关于 AlexNet,还有一些其他的训练细节和特点,但在目前看来也已比较常见,此处不再赘述。Alex 也曾在论文中指出,深度很重要,去掉 AlexNet 的任一层,性能都会降低。所以,在 AlexNet 之后诞生的若干个有名的网络结构,都在网络深度上下了功夫,更多的网络解读,敬请关注!