论文阅读:ImageNet Classification with Deep Convolutional Neural Networks

论文题目:ImageNet Classification with Deep Convolutional Neural Networks

作者:Alex Krizhevsky、Ilya Sutskever、Geoffrey E. Hinton

论文要点

  1. 论文简述
  2. 论文要点
  3. 网络架构
  4. 学习细节
  5. 实验结果
  6. 结果讨论

1 论文简述

本文主要使用深度学习技术,讲述了一种可实现的神经网络架构,在ImageNet LSVRC-2010比赛中将120万张高分辨率图像分为1000个类别,获得的top-1和top-5错误率的分别是37.5%和17.0%。并在ILSVRC-2012挑战赛中表现突出,top-5 错误率达到15.4%,远远超过第二名26.2%,证实了CNN网络结构的可实现性及高优越性。此外,文章中还提到了许多现在仍在使用的技术,如dropout,数据扩增,ReLU**函数等。

2 论文要点

本文介绍使用了众多现在还在沿用的方法,例如:ReLU非饱和神经元、局部响应归一化、重叠池、数据扩增、dropout等。

2.1 CNN优势

CNN网络结构的容量可以通过改变深度和广度来控制,它们还可以对图像的性质(即统计的平稳性和像素依赖的局部性)作出强有力且最正确的假设,相比于全连接神经网络, CNN具有更少的连接和参数,因此它们更易于训练,而理论上它们的最佳性能可能只差一点点。 CNN主要特征是局部感受野和权值共享。

2.2 ReLU-非饱和神经元

non-saturating neurons = 没有被挤压(到一个特定的区间)处理过的值

  • relu:input neurons的值,要么变0, 要么保持原值(无挤压,无最大最小值限制)
  • leaky_relu:input neurons的值, 要么按照某比例缩小,要么保持原值(无挤压,无最大最小值限制)

saturating neurons = 被挤压(到一个特定的区间)过的值

  • sigmoid: input neurons的值会被挤压到[0,1]的区间

  • tanh:input neurons的值会被挤压到[-1,1]的区间

为什么要用relu这样的能生成non-saturating neurons的non-linear activations, 而不用生成saturating neurons的sigmoid或tanh?
规避vanishing, exploding of gradients (梯度消失和梯度爆炸)带来的gradient值过大过小,导致训练效率低下。
如上图所示,使用了RELU后,训练效率大幅提升(但论文中似乎没有提及规避vanishing, exploding of gradients的问题)。
最后,回头问一句,什么是saturation? 为什么要叫saturating, non-saturating?
因为有一个数学计算叫做saturation arithmetic,个算法就是要求将input的值全部变成在某个最大值和最小值之间的值。

解答来源:https://www.zhihu.com/question/264163033/answer/277481519

使用relu这样的能生成non-saturating neurons的non-linear activations的作用是:规避梯度消失和梯度爆炸带来的梯度值过大过小的问题,导致不能继续进行后向传播,训练效率低下。论文中提到,使用了ReLU后,训练效率大幅提升。
论文阅读:ImageNet Classification with Deep Convolutional Neural Networks
论文提出像ReLU这样的非饱神经元的非线性**函数比饱和神经元的非线性**函数训练效率有大幅度提升。
常见**函数介绍:https://blog.csdn.net/weixin_41417982/article/details/81437088

梯度消失产生原因:
1.隐藏层的层数过多(几十层或上百层的深度神经网络)
2.采用了不适合的**函数(如sigmoid函数)
当神经网络有很多层,每个隐藏层都使用Sigmoid函数作为激励函数时,很容易引起梯度消失的问题,Sigmoid函数有一个缺点:当x较大或较小时,导数接近0;并且Sigmoid函数导数的最大值是0.25。
如果使用标准方法来初始化网络中的权重,那么会使用一个均值为0标准差为1的高斯分布。因此所有的权重通常会满足|wj|<1,而s‘是小于0.25的值,那么当神经网络特别深的时候,梯度呈指数级衰减,导数在每一层至少会被压缩为原来的1/4,当z值绝对值特别大时,导数趋于0,正是因为这两个原因,从输出层不断向输入层反向传播训练时,导数很容易逐渐变为0,使得权重和偏差参数无法被更新,导致神经网络无法被优化,训练永远不会收敛到良好的解决方案。 这被称为梯度消失问题。
梯度爆炸产生原因:
1.隐藏层的层数过多
2.权值初始化过大
当我们将w初始化为一个较大的值时,例如>10的值,那么从输出层到输入层每一层都会有一个s‘(zn)*wn的增倍,当s‘(zn)为0.25时s‘(zn)*wn>2.5,同梯度消失类似,当神经网络很深时,梯度呈指数级增长,最后到输入时,梯度将会非常大,我们会得到一个非常大的权重更新,这就是梯度爆炸的问题,在循环神经网络中最为常见。

梯度消失和梯度爆炸的解决方法:
(1)用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函数。(几种**函数的比较见我的博客)
(2)用Batch Normalization。(对于Batch Normalization的理解可以见我的博客)
(3)LSTM的结构设计也可以改善RNN中的梯度消失问题。

梯度消失和梯度爆炸最新解决方法论文
ReZeroisAllYouNeed: FastConvergenceatLargeDepth
论文地址:https://arxiv.org/abs/2003.04887v1
代码地址:https://github.com/majumderb/rezero

2.3 局部响应归一化

局部响应归一化(Local Response Normalization,LRN)实现的是一种侧抑制(被**的神经元抑制相邻的神经元)的形式,这种侧抑制的灵感受真实神经元启发得来。优势在于对局部神经元的活动创建竞争机制,使得响应较大的值相对更大,提高模型的泛化能力。
论文阅读:ImageNet Classification with Deep Convolutional Neural Networks
公式中的????_(????,????)^???? 表示第i个kernel(通道)的(x,y)处,也就是说是在同一位置的不同kernel之间进行抑制,公式即为当前kernel中的特征除以相邻位置的特征平方和,从而抑制小的响应,扩张大的响应。

**侧抑制:**局部响应归一化(Local Response Normalization,LRN)实现了一种侧抑制(被**的神经元抑制相邻的神经元)的形式,这种侧抑制的灵感受真实神经元启发得来。优势在于对局部神经元的活动创建竞争机制,使得响应较大的值相对更大,提高模型的泛化能力。需要注意的是,公式中的a_(x,y)^i 表示第i个kernel(通道)的(x,y)处,也就是说是在同一位置的不同kernel之间进行抑制,公式即为当前kernel中的特征除以相邻位置的特征平方和,从而抑制小的响应,扩张大的响应。
**超参数:**在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数。相反,其他参数的值通过训练得出。

2.4 重叠池

池化时,池化步长为s(隔s选定一个池化单元),池化核大小为z(每个单元汇总一个以池单元位置为中心的z×z大小的邻域),文章提出使步长小于池化核(s=2 , z=3),这样池化层的输出之间会有重叠和覆盖,与产生等效尺寸输出的非重叠方案(s=2,z=2)相比,降低了错误率,提升了特征的丰富性,更不容易出现过拟合。此外,本文还采用了最大池化,避免平均池化的模糊化效果。

2.5 数据扩增

1.图像平移和水平反射
随机从256×256的图像中截取224×224大小的图像,并进行水平反射(以*铅垂线为中心形成原图案的镜像),使训练集变成原来的2048倍,且训练样本之间是高度相互依赖的。训练时截取了五个这样的图像(一个中心图像和四个角落图像)以及他们的水平反射(因此总共十个色块)进行预测,最后在softmax层将预测结果进行求均值。
2.改变图像RGB通道的强度
将通过PCA找到的主分量(特征向量)乘以相对应倍数后加起来,其倍数大小与相应的特征值乘以从平均值为0和标准偏差为0.1的高斯分布中提取的随机变量的结果成正比。向每个RGB图像像素????_????????=[????_(????????,)^???? ????_(????????,)^???? ????_????????????]????添加以下数量:
[????_1,????_2,????_3 ][????_1 ????_1,????_2 ????_2,????_3 ????_3]^????
其中每个αi仅生成一次,直到再次使用该图像进行训练时,将再次获取。

数据扩充既增加了训练数据的量级,又使网络学习到物体统一性对位置尺寸、光照强度及颜色变化具有不变性。

2.6 Dropout

Dropout可以作为训练深度神经网络的一种方法供选择。在本文中作者使每个隐藏神经元的输出以0.5的概率设置为0,被drop掉的神经元前向传播和后向传播都不参与,每次神经网络的结构都不相同,所以也可以看做是另一种的模型融合。此外,也降低了神经元之间的相互作用,一些神经元也不可以依赖其他神经元的活跃来发挥作用,增加了网络结构的鲁棒性,避免了网络出现过拟合现象。

3 网络架构

论文阅读:ImageNet Classification with Deep Convolutional Neural Networks
第二、四、五层的卷积层只与处在同一GPU上的前一层网络的卷积核相连接,第三层的卷积层与第二层全部的卷积核相连接,局部响应层跟在第一和第二个卷积层后,最大池化层跟在响应归一化以及第五个卷积层后边,ReLU**函数应用在所有卷积层及全连接层后面。

网络结构详细介绍参考:https://blog.csdn.net/langb2014/article/details/48286501

4 学习细节

  • 使用随机梯度下降
  • 权重衰减为0.0005(可以降低训练误差)
  • 偏置项:第2,4,5卷积层和两个全连接层的b=1(促进最初阶段ReLU函数的学习),其它层b=0
  • 初始学习率为0.01,当验证集错误率不再随当前学习率提高而提高时,采用手动缩减的方法将学习率除以10
  • 采用双GPU并行处理训练

5 实验结果

在ILSVRC-2010上的结果。我们的网络实现了top-1和top-5测试集错误率分别为37.5%和17.0%,相比于其他模型错误率有明显下降。
论文阅读:ImageNet Classification with Deep Convolutional Neural Networks

由于ILSVRC-2012测试集标签不是公开可用的,因此我们无法报告所有尝试过的模型的测试错误率。平均五个相似CNN的预测得出的错误率为16.4%。
论文阅读:ImageNet Classification with Deep Convolutional Neural Networks

6 结果讨论

结果表明,大型的深度卷积神经网络能够使用纯监督学习在具有高度挑战性的数据集上实现创纪录的结果。值得注意的是,如果移除单个卷积层,我们的网络性能就会下降。例如,删除任何中间层都会导致网络的top-1性能损失约2%,因此神经网络的深度对于结果的表现是非常重要。