ImageNet Classification with Deep Convolutional Neural Networks[1]
这篇文章主要是针对阅读AlexNet论文后的论文笔记,方便自己日后复习。在文中很多是作者较先尝试并且取得了很好效果的技术,而现在已经普遍使用了,如ReLU、overlapping pooling、dropout等等,对于这些技术,在这篇中也不做过多赘述。
网络结构
模型的主要结构如上图所示,经过考证,作者在文章中应该是写错了,输入的图片大小应为。
Multi GPU training
首先要说明一下,上面这个网络长得奇怪的原因是因为作者使用了两个GPU进行训练,由于在每一层里参数过多,不能把每一层的全部参数都放在同一个GPU上,所以才分出两部分,每一部分的参数放在一个GPU上。同时,从上图中可以看到,在每个GPU上的结果,并不是在所有阶段都会传输给下一层的两个GPU上的。只有Conv Stage 2和Conv Stage 5以及全连接层之后的结果会传输给两个GPU。
Local Response Normalization
虽然ReLU不太需要做输入的normalization来方式防止梯度饱和,但是作者提出了一种Local Response Normalization的方式,仍可以对结果有一定的提升。
假设表示使用第个kernel在上计算的结果,并且已经使用了ReLU**,则normalize之后的结果为
表示与相邻的个kernel,表示kernel的总数。在公式中都是超参数,通过在验证集上进行测试之后选定。最终设定。
网络结构
网络一共由5层conv和三层fully connection组成。输入的图片大小为。
第一层卷积
输入:
卷积: 个 的卷积核(48个kernel/GPU)
**:ReLU
归一化: [2]
池化: 的 [3]
输出:( / GPU)
conv输出结果:,feature map的大小为。
max pooling输出结果:,feature map的大小为。
第二层卷积
输入:( / GPU)
卷积: 个 的卷积核(128个kernel/GPU)
**:ReLU
归一化: [2]
池化: 的 [3]
输出:( / GPU)
conv输出结果:,feature map的大小为。
max pooling输出结果:,feature map的大小为。
第三层卷积
输入:( / GPU)
卷积: 个 的卷积核(192个kernel/GPU)
**:ReLU
输出:( / GPU)
conv输出结果:,feature map的大小为。
第四层卷积
输入: / GPU
卷积: 个 的卷积核(192个kernel/GPU)
**:ReLU
输出:( / GPU)
conv输出结果:,feature map的大小为。
第五层卷积
输入: / GPU
卷积: 个 的卷积核(128个kernel/GPU)
**:ReLU
池化: 的 [3]
输出:( / GPU)
conv输出结果:,feature map的大小为。
max pooling输出结果:,feature map的大小为。
第六层全连接
输入:
输出:(2048/GPU)
**:ReLU
第七层全连接
输入:
输出:(2048/GPU)
**:ReLU
第八层全连接(softmax)
输入:
输出:
Reducing Overfitting
为了避免过拟合,文中采取了两种应对方式
data augmentation
在图像处理中一个比较常用的方式就是数据增强。作者在训练AlexNet时使用了两种数据增强的方式。
第一种方式是从原图()中随机裁切出若干大小的子图以及子图的水平翻转。这种方式使得训练集扩充了2048倍。在测试时,使用5张(四个角以及中心)裁切出来的图片(及他们的翻转)作为测试输入,最后的结果模型为对10个子图预测结果的平均值(average of softmax)。
第二种方式是改变原图中RGB通道的强度[4]。方法是,先对整个训练集中的RGB的像素值组成的集合做了一个PCA,得到其主成分。对于某张图片,我们在其原有的RGB像素值得基础上加上其主成分的若干倍(该倍数为一个随机变量,从一个的高斯分布中采样得到)。因此,对于一个RGB通道的像素值,为其加上一个值,得到。其中和是又三通道的值算出的一个的协方差矩阵的特征向量和特征值。是一个随机生成的数,在一次训练中,对于一张图片,只生成一次(训练过程中再遇到该图片时则重新生成)。这样的处理方式在某种程度上降低了光照和颜色和灯光对结果的影响。
dropout
训练时使用dropout技术避免过拟合,在训练时,以0.5的概率将隐藏层的输出置0。在测试时,使用所有的输出(即不进行置零操作),但是需要将输出乘0.5。
训练细节
使用训练,
权重迭代规则为:
其中是学习率,是第个batch 对偏导的均值。
初始化时,参数从一个的高斯分布中采样得到。在卷积的第二层、第四层、第五层以及全连接层(隐藏层)中初始化bias为。剩下层中bias初始化为。
学习率初始化为,并且当val error不降时,将学习率除以10。在120万张图片上使用两个NVIDIA GTX 580 3GB GPU训练了90个cycles,在训练的过程中,学习率总共降了三次。
[1] ImageNet Classification with Deep Convolutional Neural Networks
[2] [3] 我在很多博客或者source code中看到,都是先做pooling后做normalization。如[A]或是[B]。但是,论文中叙述为
Max-pooling layers, of the kind described in Section 3.4, follow both response-normalization layers as well as the fifth convolutional layer.
对此甚是不解,希望大神能够帮忙解答。
[4] AlexNet中data augmentation是如何实现的?