结构
AlexNet用了五个卷积层和三个全连接层,论文的原图是这样的,因为分了两个GPU训练,我们也可以把这个结构拼在一起都是一样的。
最后的softmax输出了1000个概率分布(极大似然分布)
第一层: 96个 11x11x3的卷积核 步长为4 输出为55x55x96
第二层:256个 5x5x48的卷积核
第三层:384个 3x3x256的卷积核
第四层:384个3x3x192的卷积核
第五层:256个3x3x192的卷积核
全连接层:每层4096个神经元
卷积核的通道数要和输入的通道数一致
tricks
- Relu非线性激活函数,Relu函数的作用是当x小于0直接变成0,大于0则直接等于x。对于sigmoid激活函数,因为我们的神经网络较大,如果使用其sigmoid或者tanh,这样会导致结果饱和,会出现梯度消失,使用Relu在反向就不会出现梯度消失,而且速度很快(如下图)。
- 多GPU并行(当时算力不太行) 论文用了两个GPU,每个GPU拥有一半的参数。而且两个GPU只在某些层进行通信,如果layer3根layer2全部连接(通过k折交叉验证来设置超参)。
- Local Response Normalization LRN 局部对比归一化(relu激活后进行LRN,relu不需要对输入normalize来避免输入信号陷入饱和)
主要思想就是一个大的神经元,会对旁边小的通道或者神经元会产生抑制作用,然后就有了LRN来防止抑制。
- overlapping pooling 重叠池化
步长==池化窗口,就是传统池化,步长小于池化窗口就是重叠池化,论文说着提升了在top1和top5的准确率,还能减少过拟合。
-
解决过拟合
5.1 平移水平反转 裁剪
Alexnet使用数据增强来解决过拟合,比如随机裁剪图片、平移水平翻转,让网络学到更多的特征。这样扩充了数据集,裁剪出来是高度相关的,这样可以减少过拟合。在测试的时候依然这么做,一张图片分10个patch然后取10个patch融合的结果。
5.2 PCA主成分降维
对训练集进行降维,找个一个方向,对图片进行颜色、光度变换。用pca的原因是让图片更加自然,如果随机找一个方向效果应该不太好,所以通过主成分分析找到特征向量进行反转求出最好的方向。
5.3 Dropout随机失活——减少过拟合
就是在训练阶段,每个神经元都有百分之50的几率被干掉,意思就是说把神经元的输出设置为0阻断其神经元的前向-方向传播。这样减少了神经元的依赖,因为我掐死一半的话,神经元本来连着其他的神经元,现在要跟别的神经元建立联系,那么这样就可以减少神经元的相互依赖,达到模型集成的效果。
代价:需要两倍的训练时间
- 学习细节
使用随机梯度下降(mini-batch),batch_size =128,weigth-decay=0.0005,momentum=0.9,weigth-decay起到正则化作用。
Result
两个GPU训练出来的结果,有些跟水平边缘相关,有些跟颜色相关(不需要过于关注)。当时分类用的图片的预测结果。
网络的深度是非常重要的,减掉了一层掉了2%的loss。