ImageNet classification with deep convolutional neural networks这篇论文是神经网络的开创性工作,它提出了一个称为Alexnet的卷积神经网络,在Imagenet数据集中进行视觉任务得到的效果比当时的SOTA更好,因此掀起了深度学习浪潮。虽然这篇论文相当经典,里面有很多的创新性的想法与工作,但不可否认的是,并不是所有的观点仍然适用在当下,下面将进行一些重要的笔记整理,保留出最精华的、对目前依然有启发意义的部分。
1.Imagenet数据集:
Imagenet中每一张图片的分辨率都不一样。AlexNet选择直接在图片像素层面下功夫,把图片统一裁剪成256*256的高度,剩余的维度扩展到第三第四维,这样的直接在像素上面的工作,能够不需要提前提取特征,也可以做出来结果。这是深度学习的一大亮点,也被叫做端到端学习(end to end)。除此之外,需要注意的是,Imagenet的图片数量远不止120万,其实完整的数据集有870万不止。
2.分布式训练:
AlexNet通过切割模型为两部分,然后分别交给两张GPU,以实现分布式训练。在第三层卷积层,上层网络能够查看下层网络的输入,反之亦然,这样的情况也存在于后面的全连接层,这样能够实现两个训练之间的通讯。
3.避免过拟合:
避免过拟合,采用了一些方法:
一、数据增强,即通过裁剪,旋转,增加噪声等方法增加数据量来避免过拟合。
二、PCA主成分分析。
三、Dropout。
4.实验细节:
一、momentum:避免训练曲线因为局部不平滑进入局部最优解。
二、随机初始化权重:用均值为0,标准差为0.01的高斯随机变量来初始化。这个网络不算很深。比较简单,因此使用0.01标准差去初始化是一个依据大量实验经验总结出来的结果。像一些现在的比较大、比较深的网络,如Bert,就用0.02,0.03之类的。
三、随机初始化偏置量:一般初始化bias为0,论文给某些层初始化为1,其实也没有必要性,初始化为0就差不多。
四、学习率衰减:AlexNet的学习率衰减与目前一些主流的学习率衰减不同,它一开始保持一个很高的学习率不变,当训练过程中,误差损失不往下降了就手动再把学习率降低10倍。有一种主流的做法,像Resnet都是每几十轮,学习率降低十倍或多少倍,这是规则性的学习率衰减。这主要是因为AlexNet的年代,显卡吃紧,计算量需求大于算力供应,所以当时很仔细去看学习过程的损失如何变化,调一次参,又要重新训练个几天或几十天。甚至,现在的学习率衰减的处理,不再采用规则性衰减,而是采用更加平滑的衰减处理手段。比如,训练初始,从学习率为0(或者一个比较小的数)开始线性递增,然后到达某个值后以cos函数或者其他什么函数进行平滑衰减。
(红色是当前主流的学习率衰减,蓝色是AlexNet的学习率衰减)
5.查看每个卷积层、全连接层的输出在干什么:
这可能是为数不多的,能够让卷积神经网络这种黑箱,赋予一定的解释性的方法了。