1. 数据集ImageNet
- 数据特征:15 million张,22000类,分辨率高且多样
- 预处理:降采样到256 × 256固定分辨率,对矩形边框的图像,先让短边缩小到256,然后剪裁出中心的256 × 256的部分。使用中心化的原始RGB像素,即每张图片剪掉训练集中所有像素点的均值。
2. 结构
1. ReLU 非线性
tanh
和logistic
函数都是饱和非线性激活函数,梯度下降的速度明显慢于ReLU
非饱和非线性激活函数。
2. 多GPU并行
- 多个GPU可以不用经过主机的内存而直接相互读取对方的内存。
- 在两个GPU上各放置一半的神经元,并且只在特定的层进行通信。相对于MCDNN来说,两个GPU上的网络并不是独立的。
3. 局部响应归一化
- ReLU不需要将输入归一化来防止激活函数饱和
- 如果一个训练样本产生了一个正值输入到ReLU,对应的神经元就进行了学习。
- 在特定的层使用局部归一化的方法帮助泛化。将某个滤波器在一个位置上对特征图卷积的结果,除以上下相邻的几个滤波器在同一个位置上卷积结果之和。归一化作用为,在使用不同滤波器卷积结果中,较大的卷积结果会产生竞争。
4. 重叠池化
池化窗口为3 × 3,步长为2,重叠了一行或一列。这样可以略微减少过拟合。
5. 总体结构
- 8层 ⟶ 5个卷积层,3个全连接层。
- 2,4,5卷积层只连接同一GPU中之前层的特征图,3卷积层连接2卷积层2个GPU中所有特征图。全连接层也是连接2个GPU中所有神经元。
- 局部归一化只在1、2两个卷积层。
- 重叠最大池化只在1、2两个卷积层归一化之后和在5卷积层之后。
- 卷积层和全连接层所有激活函数都使用ReLU。
操作 | 结果 |
---|---|
输入训练集 | (batchSize,3,224,224) |
卷积层(96,3,11,11)stride(4,4)无pad | (batchSize,96,54,54) |
归一化和最大池化(3,3)stride(2,2) | (batchSize,96,27,27) |
卷积层(256,96,5,5)stride(1,1)无pad | (batchSize,256,23,23) |
归一化最大池化(3,3)stride(2,2) | (batchSize,256,11,11) |
卷积层(384,256,3,3)stride(1,1)pad(1,1) | (batchSize,384,11,11) |
卷积层(384,384,3,3)stride(1,1)pad(1,1) | (batchSize,384,11,11) |
卷积层(256,384,3,3)stride(1,1)pad(1,1) | (batchSize,256,11,11) |
最大池化(3,3)stride(2,2) | (batchSize,1024,5,5) |
展开 | (batchSize,1024 × 5 × 5 = 25600) |
全连接层(25600,4096) | (batchSize,4096) |
全连接层(4096,4096) | (batchSize,4096) |
softmax层(4096,1000) | (batchSize,1000) |
3. 减少过拟合
1. 数据集人工扩充
使用保留标签的变换方法,使用计算量小的方法可以不用将变换后的数据保存在磁盘上。
- 图片平移和水平翻转,提取 256 × 256图片中的224 × 224的区域和其水平翻转,可以将数据集增大32 × 32 × 2 = 2048倍。测试的时候选用4个角落和中心的5个区域以及水平翻转对应的区域,一共10个区域,在softmax层对10个预测结果取平均。
- 改变训练图片RGB通道的强度,对训练集中所有图片每个像素位置上的RGB三个通道值构成的N × 3维矩阵做PCA,即得到3 × 3协方差矩阵的主特征值,在每张训练图片该像素位置上RGB通道分别加上大小正比于特征值乘以 N(0,0.1) 高斯随机数的值。随机数只在数据集重新使用的时候再次生成。这样做保证了物体对于光强和颜色的不变性。
2. Dropout模型组合
将不同的模型的预测进行组合的代价太高。使用dropout模型组合,就是把隐层神经元输出以0.5概率置零,该神经元不参与前向和反向传播。每次输入数据模型都会有不同的结构,而所有的权重都是共享的。测试的时候使用所有的神经元但是把它们的输出乘以0.5。
这样减少了神经元复杂的互适应关系,能够学习到更鲁棒的特征。
在前两个全连接层使用dropout 0.5
3. 细节
- batch size=128
- momentum=0.9
- weight decay=0.0005
- 全部权重初始化为0均值0.01标准差高斯分布,2、4、5卷积层和全连接层偏置为1,1和3卷积层偏置为0。
- 学习率在验证误差停止降低的时候除以10,除以3次之后停止训练。