ImageNet Classification with Deep Convolutional Neural Networks
NIPS 2012
Alex Krizhevsky , Ilya Sutskever , Geoffrey E. Hinton
这篇文章比较“老”,但是很多文章经常提及,回顾一下经典也是有必要的。
这篇文章是2012年的ImageNet比赛冠军模型,ImageNet这个数据集是一个比较大的数据集,当时的模型都是比较小的模型,大多数用到了机器学习的方法,学习能力有限。为了学习这个比较大的数据集,就需要一个有更强学习能力的模型,文章就提出了这样一个比较深的CNN。
文章提出了的网络有8层结构——5层卷积层和三层全连接层,再加上一个1000-way的分类器softmax,
结构有如下几点特点:
总的来说,这篇文章的主要贡献有4点:
可以看到,它总共有8层结构:5层卷积层加上三层全连接层,最后加上一个1000-way的softmax分类器。
受当时显存的限制,AlexNet是分成两部分放在两个GPU上跑的。
所以每个GPU有一半的kernel;且只在一些特定的层,GPU之间才进行通信,即
另外,响应归一化作者只在第1、2层卷积后使用,跟在max-pooling后面,第5层卷积后也有一层pooling。
上述结构还涉及到一些细节,可以具体讨论一下。
这个我的理解是,它在输出的通道维度上,对第i个通道的点(x,y)的前后n/2个通道做归一化。
这样的做法对局部神经元的活动创造了竞争机制,产生了一种侧抑制的效果,我的理解即是这样会使得输出的神经元中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,作者也通过实验发现这样做能增强模型的泛化能力。
3. 重叠Pooling
不同于传统的pooling,作者通过设置步长小于size的边长z,来达到重叠的目的。
这样做池化层的输出之间会有重叠和覆盖,个人认为,这样保留了更多的位置信息,即文章前面提到的先验知识,同时也提升了特征的丰富性,有助于模型提高泛化能力。
作者也通过实验证明了,使用这种方案确实能降低top-1和top5的错误率以及减少过拟合。
AlexNet虽然只有8层结构,但是参数却达到了6000万,是一个非常大的网络了,如果不采取一些措施,模型很容易会过拟合。在本文中,作者提出了两种方法来解决过拟合的问题:数据增强和dropout。
文章提出了两种比较有效的数据增强方法;
至于为什么要这样做数据增强,我认为,这样做网络能学习到了更加鲁棒性的特征,它能适应不同亮度,不同颜色,甚至不同位置的识别,提高了模型的泛化能力,同时作者的实验结果也说明了这个方法的有效性:错误率降低了1%。
文章是以0.5的概率将每个隐层神经元的输出设置为零。
dropout在现在是一个耳熟能详的正则化方法了,它减少了神经元互适应性的复杂度,因为神经元无法依赖于其他特定的神经元而存在,因为隐层中任何一个神经元都可能会以0.5的概率被丢弃;因此这会迫使网络学习更为健壮、鲁棒的特征。
为了验证AlexNet结构的有效性,作者进行了使用SGD进行训练,达到了top1和top5分别为37.5%和17.0%的错误率,而当时最好的成绩是45.7%和25.7%的成绩;有效地提升了模型的性能,提高了识别精度。
文章最后对网络的效果做了一个定性的评价:
以上三点实验结果,都可以说明网络有很好的鲁棒性,即体现了前面提到的适应不同亮度,不同颜色,甚至不同位置的识别,体现了模型很强的泛化能力。
总的来说,AlexNet提供了一个具有很强的学习能力的模型,但是由于结构的“庞大”,不得不采取一些方法来加速和减少过拟合。即使用了ReLU和多个GPU并行的方法来加速,使训练时间在可接受的范围内;同时使用了局部响应归一化、重叠池化、数据增强、dropout的方法来达到提高泛化能力的目的。