ImageNet Classification with Deep Convolutional Neural Networks

这篇文章提出了很多卷积神经网络的先驱——AlexNet。

和其他的很多前馈神经网络相比,由于CNN的卷积层不是全相联的,所以CNN的参数会少很多,而且训练起来会更加地容易。

作者在训练AlexNet的时候,为了加快速度,使用了两块GTX 580 3GB GPU,并且对网络的结构进行了一定的改造以更好地适应GPU的性质。

1 总体框架

AlexNet的网络基本结构为:输入层——5层卷积层——三层fully connected。

详细可见:https://github.com/BVLC/caffe/blob/master/models/bvlc_alexnet/deploy.prototxt

Layer Filter Size Stride Normalization Single GPU Dropout Activation Function

Conv1

11*11*3 4 1    

ReLU

Max Pooling 3*3 2        
Conv2 5*5*48 1 1 1   ReLU
Max Pooling 3*3 2        
Conv3 3*3*256 1       ReLU
Conv4 3*3*192 1   1   ReLU
Conv5 3*3*192 1   1   ReLU
Max Pooling 3*3 2        
Fc6 4096       1 ReLU
Fc7 4096       1 ReLU
Fc8 4096         Softmax

1.1 ReLu Nonlinearity

使用ReLU function而不是Sigmoid function或者tanh的原因是ReLU的导数计算会更加的方便,因此在训练速度上有明显的优势。

同时ReLU也不要求输入标准化来防止饱和。

1.2 Local Response Normalization

继续使用标准化的原因是local normalization可以帮助提升泛化能力,这一点是有生物学基础——侧抑制,使得相邻的有大活跃度的神经元彼此之间产生竞争。(具体原因我也不是很清楚Orz...)

文中采用的方式为

1.3 在多GPU上的训练

作者采用了两块GPU进行训练,在上面表格中Single GPU一栏为1的layer,GPU只使用上一层存储在该GPU上的输出作为下一层的输入,禁止了在这一步两个GPU的connection。(第一幅途中,如果层与层之间的虚线是交叉的,就说明GPU是可以相互connect的)

1.4 超参数

作者使用了SGD(sochastic gradient descent)进行梯度下降,具体选用的参数如下

其中0.9是惯性,0.0005是weight decay,ε是learning rate。learning rate初始化为0.01,但是如果validation error rate停止改进的时候会将learning rate除以10.

2 Reducing overfitting

2.1 data augmentation

作者使用了两个data augmentation的方式。

第一个方法是image translation & horizontal reflection:对一张256*256的原始图片上随机提取224*224的patch和他们的horizontal reflection作为输入。

第二个方法是改变RGB通道的intensity,采用了PCA的方法。这一方式降低了1%的error rate。

2.2 Dropout

在fully connected layer的前两层,作者使用0.5的drop rate的dropout方法。

猜你喜欢

转载自blog.csdn.net/holmosaint/article/details/82220563