网络结构
网络包括5个卷积层和3个全连接层。
第一个卷积层的输入是224 × 224 × 3的图像。用96个11 × 11 × 3的,步长为4像素的内核去过滤(步长是相邻神经元感知区域中心之间的距离)。结果是 (224-11)/4+1=54.25,近似成55;实际得到555596的图,但因为论文作者用了2个GPU,故每个GPU分得555548。
剩余的同理:
第二层的padding是指在原图外面再补充两层像素。
论文亮点
使用Relu
以往的激活函数通常用sigmod或者tanh,他们的问题是由于函数形状,当输入到了一定值的时候斜率下降速度会很慢。因此作者使用了ReLU函数,即Rectified Linear Units,使用ReLU作为深度神经网络的激活函数是训练速度是远远快于tanh的。
在两个GPU上训练
限于时代,当时的GPU运算速度很慢,作者在两块GPU上运行网络,大大加快了速度。
局部响应归一化
现在用的很少。基本思想就是将某一个像素点用其对应的其他通道的值来重新计算下。
数据扩充
AlexNet在训练时,在数据扩充(data augmentation)这样处理:
(1)随机裁剪,对256×256的图片进行随机裁剪到224×224,然后进行水平翻转,相当于将样本数量增加了((256-224)^2)×2=2048倍;
(2)测试的时候,对左上、右上、左下、右下、中间分别做了5次裁剪,然后翻转,共10个裁剪,之后对结果求平均。作者说,如果不做随机裁剪,大网络基本上都过拟合;
(3)对RGB空间做PCA(主成分分析),然后对主成分做一个(0, 0.1)的高斯扰动,也就是对颜色、光照作变换,结果使错误率又下降了1%。
重叠池化和最大池化
一般的池化(Pooling)是不重叠的,池化区域的窗口大小与步长相同。而AlexNet中的池化却是可重叠的。所谓池化可以理解为将原本的图片进行压缩。重叠池化让特征信息有更大的机率被学习到。
同时,AlexNet使用最大池化,这让图片的特征更加突出(偏大值更大,偏小值更小)。
用Dropout来防止过拟合
引入Dropout是为了防止过拟合。在神经网络中Dropout通过修改神经网络本身结构来实现。
对于某一层的神经元,按照一定的概率将神经元置零(现在在TensorFlow中这个操作很容易完成),这个神经元就不参与前向和后向传播,就如同在网络中被删除了一样,同时保持输入层与输出层神经元的个数不变,然后按照神经网络的学习方法进行参数更新。在下一次迭代中,又重新随机删除一些神经元(置为0),直至训练结束。