前不久读了Alexnet的文章,做了一点笔记,分享给大家,仅供参考。
第一次写博客,不到之处,请见谅。
1、数据集:
- ImageNet数据集包含有大概22000种类别共150多万带标签的高分辨率图像
- ImageNet大规模视觉识别挑战(ImageNet Large-Scale Visual Recognition Challenge,ILSVRC),比赛采用ImageNet的子集,共包含一千个类别,每个类别包含大约1000幅图像。总的来说,大约有120万张训练图像,5万张验证图像以及15万张测试图像。
- 数据预处理:
- ImageNet包含不同分辨率的图像,但是本文的模型要求固定的输入维度。
- 将这些图像下采样为256x256 。
- 给定一幅矩形图像,本文采用的方法是首先重新调整图像使得短边长度为256
- 然后裁剪出中央256x256 的区域
- 除了将图像减去训练集的均值图像(训练集和测试集都减去训练集的均值图像),本文不做任何其他图像预处理
- 因此本文直接在每个像素的原始RGB值上进行训练
2、网络结构:
- ReLU非线性函数(ReLU Nonlinearity)
![](https://i-blog.csdnimg.cn/blog_migrate/093e954c7a9163251f487a1623f57304.png)
-
-
- ReLU的有效性体现在两个方面:
- 1. 克服梯度消失的问题
- 2. 提高训练速度
-
而这两个方面是相辅相成的,因为克服了梯度消失问题,所以训练才会快。
- 使用ReLUs的深度卷积神经网络训练速度比同样情况下使用tanh单元的速度快好几倍
-
上图表示使用特定的四层卷积网络在数据集CIFAR-10上达到25%错误率所需的迭代次数。
这个图表明如果使用传统的饱和神经元模型我们不可能利用这么大规模的神经网络对本文工作进行试验。
- 多GPU训练(Training on Multiple GPUs)
- 两块GTX580,共6G内存
- 两块GPU进行交叉GPU并行,因为它们可以直接相互读写内存,而不用经过主机内存
- 技巧
- 每一个GPU上放二分之一的核(或者神经元)
- 只有某些层才能进行GPU之间的通信,
例如第三层的输入为第二层的所有特征图。但是,第四层的输入仅仅是第三层在同一GPU上的特征图
- 这种结构降低了错误率,top-1和top-5错误率分别下降了1.7%和1.2%;
两块GPU网络训练时间比一个GPU的时间都要略少
- 局部响应归一化(Local Response Normalization)
- a表示使用核i作用于(x,y)然后再采用ReLU非线性函数计算得到的活跃度,那么响应标准化活跃b
- 局部标准化方案有助于增加泛化性能
- 重叠池化(Overlapping Pooling)
- s=2(间隔),z=3(滤波器大小).与无重叠的s=z=2相比,这一模式在产生相同维度的输出时分别将TOP1和TOP5降低了0.4%和0.3%
- 采用有重叠的池化能稍稍让模型更难过拟合
- 整体结构(Overall Architecture)
- 八个有权值的层:前五层是卷积层,剩下的三层是全连接层。最后一个全连接层的输出传递给一个1000路的softmax层,这个softmax产生一个对1000类标签的分布
![](https://i-blog.csdnimg.cn/blog_migrate/820222864a22f7357c9accdce86620c9.png)
- 第二、四、五层卷积层的核只和同一个GPU上的前层的核特征图相连。
- 第三层卷积层和第二层所有的核特征图相连接。
- 全连接层中的神经元和前一层中的所有神经元相连接。
- 响应归一化层跟着第一和第二层卷积层。
- 最大池化层(max-pooling),既跟着响应归一化层也跟着第五层卷积层。
- ReLU非线性变换应用于每一个卷积和全连接层的输出。
- 第一层卷积层使用96个大小为11x11x3的卷积核对224x224x3的输入图像以4个像素为步长(这是核特征图中相邻神经元感受域中心之间的距离)进行滤波。
- 第二层卷积层将第一层卷积层的输出(经过响应归一化和池化)作为输入,并使用256个大小为5x5x48的核对它进行滤波。
- 第三层、第四层和第五层的卷积层在没有任何池化或者归一化层介于其中的情况下相互连接。
- 第三层卷积层有384个大小为3x3x256的核与第二层卷积层的输出(已归一化和池化)相连。
- 第四层卷积层有384个大小为3x3x192的核,第五层卷积层有256个大小为3 × 3 × 192 的核。
- 每个全连接层有4096个神经元。
3、降低过拟合
- 数据增强
- 目的:减少过拟合
- 本文中利用GPU训练先前一批图像的同时,使用CPU运行Python代码生成转换图像。因此这些数据增强方法实际上是不用消耗计算资源的
- 第一种数据增强的形式包括生成平移图像和水平翻转图像。做法就是从256x256的图像中提取随机的224x224大小的块(以及它们的水平翻转),然后基于这些提取的块训练网络。这个让我们的训练集增大了2048倍((256-224)2*2=2048)
- 第二种数据增强的形式包括改变训练图像的RGB通道的强度。这个方案得到了自然图像的一个重要的性质,也就是,改变光照的颜色和强度,目标的特性是不变的。
- Dropout
- 它将每一个隐藏神经元的输出以50%的概率设为0
- 在图2中的前两个全连接层使用dropout。
- Dropout大致地使达到收敛的迭代次数增加了一倍。
4、学习细节
- 本文使用随机梯度下降来训练模型,同时设置batch size大小为128,0.9倍动量以及0.0005的权值衰减
- 本文对每一层的权值使用均值为0、标准差为0.01的高斯分布进行初始化。对第二层、第四层、第五层卷积层以及全连接的隐藏层使用常数1初始化神经元偏置项。这个初始化通过给ReLUs提供正输入加快了学习的初始阶段。本文对剩余的层使用常数0初始化神经元偏置项。
-
值得注意的是
BatchNorm
的出现,很大程度上替代了LRN
和
dropout,现代网络结构中,已经很少采用
LRN
和
dropout了,
VGGNet
中的
LRN并没有提高性能,所以
VGGNet
并没有采用
LRN,而
ResNet
中由于在每个卷积层后面添加了
Batch Norm
层,所以也没有采dropout
。
本文参考:
https://blog.csdn.net/qianqing13579/article/details/71381016?locationNum=15&fps=1
https://blog.csdn.net/chaipp0607/article/details/72847422
对两位表示感谢