DL学习笔记-AlexNet论文学习

论文地址:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
1、图像处理

将图像下采样到256*256的固定分辨率。对一个矩形图像,首先安装原先的比例,把短边缩短到256,然后从中心截取256*256大小的图像,并进行pixel 归一化。
2、ReLU 激活函数

之前使用的标准的激活函数是f(x)=tanh(x)或f(x) = (1+ exp(-x))-1.这种饱和非线性函数比非饱和非线性函数f(x) = max(0, x)慢很多。ReLU相比于它们在训练时间上有梯度下降。成功解决了sigmoid在网络较深时的梯度弥散问题。
3、GPU

使用CUDA加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算。AlexNet分布在两个GPU上,每个GPU的显存中存储一半的神经元的参数。GPU可以读取和写入彼此的显存,而不经过主机内存,所以同时使用多快GPU也是非常高效。一个技巧:让GPU仅在特定层通信,例如,第三层的内核输入从第二层中的所有内核映射中获得,然而,第四层中的内核输入可以仅从位于同一GPU上的第三层中的内核映射中获得。这点有点绕,我的理解是可以把第二层的两个GPU全部输出做为第三层的输入,然后第三层的单个GPU的输出作为在这个GPU上第四层的输入。不知道理解的对不对、、、
4、局部响应归一化

提出了LRN层,对局部神经元的活动创建了竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈比较小的神经元,增强了模型的泛化能力。
This sort of response normalization implements a form of lateral inhibitioninspired by the type found in real neurons, creating competition for big activities amongst neuronoutputs computed using different kernels.

这个和local contrast normalization 局部对比归一化不同,因为我们不减去平均值,而是让响应大的更大,作者给出更准确的叫法“brightness normalization”。

扫描二维码关注公众号,回复: 1647966 查看本文章
他们经过试验得到最好的数据是The constants k, n, α, and β are hyper-parameters whosevalues are determined using a validation set; we used k = 2, n = 5, α = 10−4, and β = 0.75.
5、重叠的最大池化

此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免了平均池化的模糊效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
 We generally observe during training that models with overlapping pooling find it slightly more difficult to overfit.他们还发现这个可以防止过拟合。

6、网络结构
整个AlexNet有8个需要训练参数的层(不包括池化层和LRN层),前5层为卷积层,后3层为全连接层。最后一层是有1000类输出的Softmax层用作分类。我们的网络最大化了多项逻辑回归目标,这相当于通过训练案例最大化正确标签在预测分布中的对数概率。LRN层出现在第一个和第二个卷积层后,最大池化层出现在两个LRN层和最后一个卷积层后面。ReLU激活函数作用在这八层每一层后面。
输出图片的尺寸为224x224,
第一个卷积层的卷积核大小为11*11*3,步长为4,有96个卷积核,分成两个GPU训练,每个GPU上有48个卷积核,输出图像大小为55*55*48;紧接着一个LRN层,然后是一个3*3,步长为2 的最大池化层;
第二个卷积层的卷积核大小为5*5,步长为1,每个GPU上的卷积核个数为128, 两个GPU合起来为256,输出图像大小为27*27*256,然后经过一个LRN层和最大池化层;
第三个卷积层的卷积核大小为3*3,步长为1, 连接第二层的全部输出,每个GPU上的卷积核个数为192,两个GPU合起来是384,输出图像大小为13*13*384;
第四个卷积层的卷积核大小为3*3,步长为1,在各自的GPU上训练,每个GPU的卷积核个数为192,两个GPU的合起来卷积核数量为384,输出图像大小为13*13*384;
第五个卷积层的卷积核大小为3*3,步长为1,在各自的GPU上训练,每个GPU上的卷积核个数为128,两个GPU合起来是256,经过一个池化层;
全连接层有4096个神经元。

7、减少过拟合的两个方法
1.人为的增加数据,用两种不同形式的数据增强,变换后的图片不需要存储在磁盘上。我们在CPU上变换数据,GPU上正在训练着一批数据,所以这些数据增强方案实际上不会增加计算时间。

第一种方法是图像的翻转和水平反射,随机地从256*256的原始图像中截取224*224大小的区域(以及水平翻转的镜像),相当于增加了(256-224)^2 *2 = 2048倍的数据量。尽管产生的数据高度依赖,但是如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷入过拟合中,使用了数据增强后可以大大减轻过拟合,提高泛化能力。进行测试时,取图片的四个角加上中间的五个位置,并进行左右翻转,一共获得10张图片,对它们进行预测并对10次结果求平均值。

第二个方法是改变训练图像RGB通道的值。在整个ImageNet训练集的RGB像素值集上执行PCA。对于每个训练数据,我们添加多个找到的主成分,大小和相应的特征值成比例,乘以均值为0,标准差为0.1的高斯分布。 因此,对于每个RGB图像像素 Ixy= ,我们添加以下数量:
其中pi和λi分别是RGB像素值的3×3协方差矩阵的第i个特征向量和特征值,并且αi是上述随机变量。 每个αi对于特定训练图像的所有像素仅被绘制一次,直到该图像被再次用于训练,此时它被重新绘制。 该方案大致捕捉了自然图像的重要属性,即对象身份对于变化是不变的。为什么这一点也没有听人提过。

8、Dropout

训练时使用dropout随机忽略一部分神经元,以避免过拟合。神经网络训练的时长很长,如果再采用交叉验证什么的,花费太大,使用dropout,随机丢弃一些,作者设置的阈值是0.5,就能达到每次训练数据都不同,提高学习能力。AlexNet中主要是最后几个全连接层使用了dropout。
9、优化器

使用随机梯度下降法来优化损失函数,一个batch 128个样本,动量为0.9, 衰减率为0.0005。使用均值为0,标准差为0.01的高斯分布初始化权重。学习率初始化为0.01,如果当前学习率下,验证错误率不在变化,就将学习率除以10,在训练完成前作者进行了三次。

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/80670565