AlexNet
paper: 《ImageNet Classification with Deep Convolutional Neural Networks》
亮点
- 使用``ReLU`激活函数
- 使用
LRN
局部响应归一化 - 使用重叠的池化操作
- 使用
Dropout
减少过拟合 - 在
ImageNet LSVRC-2010
比赛上达到top-1 errors rate 37.5%; top-5 errors rate 17.0%。
网络结构
ReLU
相比于传统的(tanh(x))和(frac{1}{1+e^{-x}})激活函数,ReLU
缓解了梯度消失的问题,训练速度也更快。
ReLU
:(f(x) = x, (x>0); f(x)=0,(other))
LRN
(Local Response Normalization
)
(a^i_{x,y})是经过ReLU
后的值,N
是kernel
的数量,(alpha、eta、k、n)均为超参数。公式的含义为将相邻的n
个kernel
的对应位置的值进行计算,起到局部抑制的作用(有人说这并没有什么用)。
Overlapping Pooling
传统的池化操作类似于按照网格一个个处理,相邻的网格彼此不重叠。本文中的池化操作网格部分有重叠。
完整的网络结构
这个部分论文中对细节说的并不是很清楚(padding等信息)
接下来逐层说明具体的网络结构:
input
: [3, 224, 224]
``conv1`:
- kernels: 96(分成了图中上下两个部分,在两块GPU上训练的。)
- kernel_size: 11
- padding: [1, 2]
- stride: 4
- output: [96, 55, 55]
``LRN`
Maxpooling1
:
- kernel_size: 3
- padding: 0
- stride: 2
- output: [96, 27, 27]
``conv2`:
- kernels: 256
- kernel_size: 5
- padding: [2, 2]
- stride: 1
- output: [256, 27, 27]
LRN
Maxpooling
:
- kernel_size: 3
- padding: 0
- stride: 2
- output: [256, 13, 13]
conv3
:
- kernels: 384
- kernel_size: 3
- padding: [1, 1]
- stride: 1
- output: [384, 13, 13]
- 连接上一层的两个部分
conv4
- kernels: 384
- kernel_size: 3
- padding: [1, 1]
- stride: 1
- output: [384, 13, 13]
conv5
- kernels: 256
- kernel_size: 3
- padding: [1, 1]
- stride: 1
- output: [256, 13, 13]
Maxpooling
:
- kernel_size: 3
- padding: 0
- stride: 2
- output: [256, 6, 6]
全连接层都是会连接上一层的所有kernel,最后一层全连接层的大小取决于分类的数量,前两层全连接网络使用了Dropout操作。
减少过拟合
数据增强
随机裁剪224*224大小的图像块,并做水平映射。
修改RGB通道的强度,通过主成分分析在三个通道上加一个数。
Dropout
随机使50%的神经元失活,这样就得到了很多不同结构的网络,减少了过拟合。
实验
数据集ImageNet LSVRC-2010
- 15,000,000张图片
- 22,000个类别
设备:GTX 580 3GB GPUs*2
训练时间:5~6天
预处理:下采样到256*256。对于长方形的图片,将短边采样到256,然后沿中心裁剪256 * 256部分的图片。训练集中的图片减去对应图片平均像素值。
优化器:SGD,batch = 128,momentum =0.9,weight decay = 0.0005,lr = 0.01
每层的权重通过高斯分布随机初始化,2、4、5和全连接层的bias初始化为1,其余部分bias初始化为0.