Imagenet classification with deep convolutional neural networks.
AlexNet这篇论文读取来严格意义上比较偏向于技术报告而非论文,很多地方其实写的不那么像论文,但是没关系,因为它即work又有启发意义
引入
如果说LeNet是第一个经典的CNN架构,那么AlexNet就是第一个大放光彩的CNN架构
AlexNet是一个用于图像识别的卷积神经网络,使用了8层卷积神经网络,并以很大的优势赢得了2012年ImageNet图像识别挑战赛冠军
在这以前,在绝大多数时候当时的人们会认为机器学习(SVM为主)的图形识别会远远优于深度学习
当时的机器学习流程大致如下:
- 根据人们的先验知识,手工对特征数据集进行预处理
- 抽图形的SIFT/SURF等特征
- 然后分类器巴拉巴拉的
与这截然相反的,AlexNet是端到端的(直接在原始像素上做),它首次证明了学习到的特征可以超越手工设计的特征
架构
基础的CNN概念就不再赘述了,这里主要讲和最经典的CNN(LeNet)的一些区别
激活函数
与LeNet不同,AlexNet使用ReLU而非sigmod
值得一提的是论文中使用ReLU的原因是为了提高速度,但这一点从现在的角度来看不一定准确
目前不使用sigmod时主要是为了避免sigmod的梯度消失
ReLU如今被大量的使用,但最大的原因应该是简单好记好实现
局部响应归一化层
在激活层后套了LRN,不过LRN现在用的似乎很少了
池化层
与LeNet不同,这是用的是最大池化,减低对噪声的敏感
同时这里令池化窗口大于步长(重叠池化),有助于提高网络的性能
模型并行
值得一提的是论文也花费了许多笔墨在与将模型切开并行训练(当时作者只有两块3GB的GTX580)
这其实是比较工程的东西,所以在较长的一段时间没有很多的关注
但是随着近几年的bert等NLP模型,模型并行在自然语言处理方面逐渐成为了一大需求
降低过拟合
- data augmentation
- 镜像与旋转
- 随机剪裁
- 变化颜色通道(用了个PCA)
- dropout
值得一提的是当时我们认为dropout类似于模型融合的操作,所以能增强泛用性,不过现在我们更多认为dropout会等价于一个L2正则(尽管不能实际表达出公式)
当然现在CNN的设计通常不会使用那么大的全连接层,所以dropout也不那么重要,不过RNN和注意力这块用的还是比较多的
训练细节
使用SGD(随机梯度下降)
在此之前因为SGD参数调整比较麻烦,使用的比较少
后来发现其对噪声表现比较好
动量法
病态曲率会影响SGD的最优寻找
我们对与非常不平滑的优化表面保存一定旧有的动量(保留旧的梯度并取梯度步长的指数平均),避免陷入局部最优干扰梯度的正常下降
学习率
AlexNet采用手动利用验证集降10倍调整
现在我们一般不怎么做,现在比较主流的做法是先做学习率预热然后平滑函数下降学习率