简介
上一篇文章中介绍的LeNet是几乎第一个典型的CNN,但后来经过一段时间沉寂,这些年真正再次流行起CNN还是从2012年的AlexNet开始。作者是著名的Hinton与他的学生Alex Krizhevsky,夺得了2012年的ImageNet竞赛冠军,效果远远领先于第二名。
AlexNet提出的很多CNN思路至今都非常常用,很多网络也都是从它的设计不断改进的。
论文:《ImageNet Classification with Deep Convolutional Neural Networks》
结构
相比于LeNet,AlexNet网络规模大大增加,其中3*3的卷积核也是深度CNN发展的一个重要标志。其结构从图中可以看出,但原论文的图表示效果可能不是特别好,也可以参考下面这张图:
由于结构上没有特别复杂的地方这里也不过多介绍。不过注意并不是所有的卷积层后都有池化,有的是两个卷积层串联然后再池化。这样设计的原因我也没太想明白。
思考
AlexNet作为一个比较典型的深度卷积神经网络,除了增大了网络的规模以为还用到了很多当时的新技术可以借鉴与联系,这里总结一下:
- 应用ReLU:现在的CNN激活函数一般还是用ReLU及其衍生
- Dropout:Dropout主要在FC中使用,还是很常用的技术
- 使用最大池化:AlexNet里用的是覆盖的池化操作,即pool size大于stride。
- 数据增强:数据增强仍然比较广泛使用,是很有效的技术
- LRN:现在用的好像不太多了
- GPU加速计算:这个不用说了,不用GPU模型训练实在太慢
最后说说池化的问题,虽然还是要秉持着具体问题具体分析的原则,但就一般的图像分类maxpool好像比avgpool一般略好一些,也可以两者结合。另外stride选择上如果最终能获得更大的feature map一般准确率会高,比如同样的stride为2,但是3×3得到的就比较小,如果加了padding那又会比2×2好一些,因为feature map更大。就池化核本身,变大以后虽然增大了感受野但也会存在信息损失更大的情况,所以没有说越大越好或者越小越好,都是需要权衡的。