(AlexNet)ImageNet Classification with Deep Convolutional Neural Networks阅读笔记

本文详细解读了AlexNet如何利用深度卷积神经网络实现ImageNet大规模图像分类,包括ReLU激活函数、Dropout正则化、局部响应归一化等创新点。AlexNet在ImageNet数据集上取得了优异成绩,推动了深度学习在图像识别领域的进展。
摘要由CSDN通过智能技术生成

基于深度卷积神经网络的ImageNet分类

论文地址:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks
代码地址:https://github.com/BVLC/caffe/blob/master/models/bvlc_reference_caffenet/train_val.prototxt

论文主要贡献

AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中。AlexNet主要使用到的新技术点如下。
(1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光大。
(2)训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。
(3)在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
(4)提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
  接下来先介绍LRN,一般是在激活、池化后进行的一中处理方法
  首先要引入一个神经生物学的概念:侧抑制(lateral inhibitio),即指被激活的神经元抑制相邻的神经元。归一化(normaliazation)的目的就是“抑制”,LRN就是借鉴这种侧抑制来实现局部抑制,尤其是我们使用RELU的时候,这种“侧抑制”很有效 ,因而在alexnet里使用有较好的效果。

归一化好处

1.归一化有助于快速收敛;
2.对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
  神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。
  深度网络的训练是复杂的过程,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。
在这里插入图片描述
a表示卷积层(包括卷积操作和池化操作)后的输出结果,这个输出结果的结构是一个四维数组[batch,height,width,channel],
【batch:批次数(每一批为一张图片)
height:图片高度,
width:图片宽度,
channel:通道数可以理解成一批图片中的某一个图片经过卷积操作后输出的神经元个数(或是理解成处理后的图片深度)。】
ai(x,y)表示在这个输出结构中的一个位置[a,b,c,d],可以理解成在某一张图中的某一个通道下的某个高度和某个宽度位置的点,即第a张图的第d个通道下的高度为b宽度为c的点。
a,n/2,k,α,β分别表示函数中的input,depth_radius,bias,alpha,beta,其中n/2,k,α,β都是自定义的,特别注意一下∑叠加的方向是沿着通道方向的,即每个点值的平方和是沿着a中的第3维channel方向的,也就是一个点同方向的前面n/2个通道(最小为第0个通道)和后n/2个通道(最大为第d-1个通道)的点的平方和(共n+1个点)。而函数的英文注解中也说明了把input当成是d个3维的矩阵,说白了就是把input的通道数当作3维矩阵的个数,叠加的方向也是在通道方向。
i表示第i个核在位置(x,y)运用激活函数ReLU后的输出,n是同一位置上临近的kernal map的数目,N是kernal的总数。
参数K,n,alpha,belta都是超参数
在这里插入图片描述
  原作者训练了一个大型的深度卷积神经网络,将ImageNet lsvprc -2010竞赛中的120万张高分辨率图像分类到1000个不同的类中。在测试数据上,获得了前1名和前5名的错误率,分别为37.5%和17.0%,大大优于之前的水平。该神经网络有6000万个参数和65万个神经元,由5个卷积层和3个全连接层组成,其中一些卷积层后面是max-pooling层,最后是1000路softmax层。为了使训练更快,使用了非饱和神经元和一个非常高效的GPU实现卷积运算。为了减少全连通层的过拟合,采用了“dropout”的正则化方法,该方法被证明是非常有效的。作者还在ilsvrc -2012竞赛中输入了该模型的一个变体,并获得了15.3%的前5名测试者的测试率,相比之下,第二名的测试者获得了26.2%的测试率。

译文

1、introduction

  目前的目标识别方法主要使用机器学习方法。为了提高它们的性能,我们可以收集更大的数据集,学习更强大的模型,并使用更好的技术来防止过度拟合。直到最近,带标签的图像数据集还相对较小——大约是数万个图像的数量级(例如,NORB[16]、Caltech-101/256[8,9]和CIFAR-10/100[12])。使用这种大小的数据集可以很好地解决简单的识别任务,特别是如果用保存标签的转换来扩展它们。例如,MNIST数字识别任务的当前最佳错误率(0.3%)已经接近人类表现[4]。但是,在现实环境中,物体表现出相当大的可变性,因此,为了学会识别它们,有必要使用更大的训练集。事实上,小型图像数据集的缺点已经得到了广泛的认识(例如,Pintoetal.[21]),但它只是最近才开始能够收集具有数百万张图像的标记数据集。新的更大的数据集包括LabelMe[23],它由数十万张完全分割的图像组成,和ImageNet[6],它由超过22000个类别的超过1500万张标记的高分辨率图像组成。
  要从数以百万计的图像中了解成千上万的物体,我们需要一个具有巨大学习能力的模型。然而,对象识别任务过于复杂性,即使使用像ImageNet这样大的数据集也无法解决这个问题。因此,为了补偿我们的数据欠缺,我们的模型还应该具有大量的先验知识。卷积神经网络就是具有先验知识的模型之一[16,11,13,18,15,22,26]。它们的能力可以通过改变网络的深度和宽度来控制,它们还对图像的本质(即统计的平稳性和breadth像素依赖性)做出了强有力且基本正确的假设。因此,与同样大小层的标准前馈神经网络相比,卷积神经网络具有更少的连接和参数,因此更容易训练,且性能只会稍逊色一些。
  尽管CNNs具有诱人的性能,尽管其局部架构效率很高,但将其大规模应用于高分辨率图像的成本仍然高得令人望而却步。幸运的是,目前的GPU加上高度优化的二维卷积实现,已经足够强大,可以促进大型CNNs的训练,而且最近的数据集(如ImageNet)包含了足够多的标记示例,可以训练不会出现严重过拟合问题的模型。
  本文的具体贡献如下:我们对在ILSVRC-2010和ILSVRC-2012比赛[2]中使用的ImageNet的子集数据训练了迄今为止最大的卷积神经网络之一,并取得了迄今为止在这些数据集上报道过的最好的结果。我们编写了一个高度优化的2D卷积的GPU实现和所有其他的训练卷积神经网络的固有操作,我们已经把这些公开1。我们的网络包含了许多新的、特殊的的特征,提高了网络性能,减少了训练时间,这些将在第3节详细讲述。即使有着120万个训练数据,我们的网络规模还是过大,这使我们不得不重视过拟合问题,所以我们使用了一些有效的技术来防止过度拟合,这将在第4节中描述。我们最终的网络包含5个卷积层和3个全连接层,这个深度似乎很重要:我们发现去掉任何卷积层(每个层都包含超过1%的模型参数)都会导致性能下降。
  最后,网络的规模主要由当前GPU的可用内存和我们愿意花费的训练时间的限制。我们的网络在两个GTX 580 3GB GPU上需要训练5到6天的时间。我们所有的实验都表明,更快的GPU和更大的可用数据集都可以改善结果。

2、The dataset

  ImageNet是一个拥有超过1500万张带标签的高分辨率图像的数据库,大致可分成22,000个类别。这些图片是从网上收集的,并使用 Amazon’s Mechanical Turk crowd-sourcing 工具标记进行人工标记。从2010年开始,作为Pascal视觉对象挑战赛的一部分,每年都会举办一场名为ImageNet大型视觉识别挑战赛(ILSVRC)的竞赛。ILSVRC使用ImageNet的一个子集,共1000个类别,每个类别中大约有1000个图像。总共大约有120万张训练图像、5万张交叉验证图像和15万张测试图像。
  ILSVRC-2010是测试集标签可用的唯一ILSVRC版本,因此这是我们进行大多数实验的版本。因为我们也在ILSVRC-2012竞赛中加入了我们的模型,所以在第6节中,我们也报告了这个版本的数据集的结果,这个版本的测试集标签是不可用的。在ImageNet上,通常报告两个错误率:top 1和top 5,其中top 5错误率是测试图像的一部分,其中正确的标签不在模型认为最可能的五个标签中。
  ImageNet由可变分辨率的图像组成,而我们的系统需要一个恒定的输入维数。因此,我们将图像采样到256×256的固定分辨率:对于给定的矩形图像,我们首先对图像进行重新排序,使其短边长度为256,然后从生成的图像中裁剪出中心256×256的patch。除了从每个像素减去训练集上的平均活动,我们没有以任何其他方式对图像进行预处理。所以我们在像素的原始RGB值(居中)训练我们的网络。

3、The Architecture

  我们的网络架构如图所示。它包含八个学习层——五个卷积层和三个全连接层。下面,我们将描述我们的网络架构的一些新颖或不寻常的特性。章节3.1-3.4根据我们对其重要性的估计进行排序,最重要的放在第一位。
图2

  • 3.1 ReLU Nonlinearity
      把神经元的输出f作为输入x的函数进行建模的标准方法是f(x) = tanh(x)或f(x) = sigmoid(x)。在梯度下降的训练时间方面,这些饱和非线性比非饱和非线性f(x) = max(0,x)慢得多。继Nair和Hinton[20]之后,我们将具有f(x) = max(0,x)这种非线性的神经元称为修正线性单元(ReLUs)。使用ReLUs的深度卷积神经网络的训练速度比使用tanh单元的训练速度快几倍。下图展示了在一个特定的四层卷积网络中,在CIFAR-10数据集上达到25%的训练误差所需的迭代次数。这张图表明,如果我们使用传统的饱和神经元模型,我们就无法用这么大的神经网络进行实验。
    在这里插入图片描述
      在我们之前已经有人在CNNs中考虑替代传统神经元模型。例如,Jarrett etal.[11]声称非线性f(x) = |tanh(x)|和他们的类型的对比归一化,使用局部平均值池化后,在Caltech-101数据集上效果特别好。然而,在这个数据集上,主要关注的是防止过度拟合,因此他们观察到的效果与我们在使用relus时报告的加速适应训练集的能力不同。在大型数据集上训练的大型模型的性能会受到更大的影响。
  • 3.2 Training on Multiple GPUs(在多个GPU上训练)
      GTX 580 GPU只有3GB的内存,这限制了可以在其上训练的网络大小。事实证明,GPU无法容纳120万个训练样本训练出的网络。因此,我们将网络分布在两个gpu上。现在的GPU可以很好地跨GPU并行,因为它们不需经过主机内存就可以直接读写彼此的内存。
      我们采用的并行方案实际上是将一半的内核(或神经元)放在每个GPU上,还有一个额外的技巧:GPU只在特定的层中通信。这意味着,例如,第3层的内核从第2层的所有内核映射中获取输入。然而,第4层的内核只从位于同一GPU的第3层内核映射中获取输入。选择连接模式对于交叉验证来说是一个问题,但是这允许我们精确地调整通信量,直到它是计算量中可接受的一部分。由此产生的结构有点类似于Cires an etal使用的“柱状”CNN[5],只是我们的列不是独立的(参见图1)。与在一个GPU上训练每个卷积层一半内核的网络相比,该方案将我们的前1和前5级错误率分别降低了1.7%和1.2%。双gpu网络的训练时间比单gpu网络略短。
  • 3.3 Local Response Normalization
      ReLUs有一个理想的特性,即不需要对输入进行标准化,以防止其饱和。如果至少有一些训练的例子对ReLU产生了积极的输入,学习就会发生在那个神经元上。但是,我们仍然发现遵循局部正规化方案有助于泛化。用 a x , y i a^{i}_{x,y} ax,yi表示在位置(x,y)应用核i计算得到的神经元活性,再应用ReLU非线性,得到响应归一化的 b x , y i b^{i}_{x,y} bx,yi表达式:
    在这里插入图片描述
      其中,在相同的空间位置上n个“相邻”内核映射上求和,N是层内的总核数。内核映射的顺序当然是任意的,在训练开始之前就已经确定了。这种响应归一化实现了一种形式的横向抑制,其灵感来自于真实神经元的类型,在使用不同核计算的神经元输出之间创造了对大型活动的竞争。常数k, n、α和β超参数的值是决定使用一套验证;我们使用k = 2 n = 5α= 10−4,β= 0.75。在对某些层应用ReLU非线性之后,我们应用了这种归一化(参见3.5节)
      该方案与Jarrettetal的局部对比归一化方案有一些相似之处。但是我们的更准确的说法是“亮度标准化”,因为我们没有减去平均活动。响应规范化使我们的前1名和前5名错误率分别降低了1.4%和1.2%。我们还在CIFAR-10数据集上验证了该方案的有效性:四层CNN在未归一化的情况下测试错误率为13%,在归一化的情况下测试错误率为11%。
  • 3.4 Overlapping Pooling
      CNNs中的池化层总结了同一内核映射中相邻神经元组的输出。一般的,相邻的池化层的邻区不重叠(如[17,11,4])。更确切地说,一个池化层可以看作是由一个间隔为s像素的池单元网格组成,每个网格汇总一个以池单元位置为中心的大小为z×z的邻域。如果我们设s = z,我们可以得到CNNs中常用的传统局部池。如果我们设置s <z,我们得到重叠池。这是我们在整个网络中使用的,s = 2 z = 3。与不重叠方案s = 2、z = 2相比,该方案top1和top5的错误率分别降低了0.4%和0.3%,产生了等维度的输出。我们在训练过程中观察到,具有重叠池的模型更不容易过拟合
  • 3.5 Overall Architecture
    图2
      如图,该网络包含8个带有权重的层;前5个是卷积的,其余3个是完全连接的。最后一个全连接层的输出被馈送到一个1000路softmax,产生一个分布超过1000类标签。我们的网络最大化了多项式逻辑回归目标,这等价于最大化了预测分布下正确标签的对数概率的训练情形的平均值。
      第二层、第四层和第五层卷积层的内核只与前一层驻留在同一GPU上的内核映射连接。第三个卷积层的内核与第二层的所有内核映射连接。全连接层的神经元连接到前一层的所有神经元。第一和第二卷积层之后是响应标准化层。如3.4节所述的最大池化层既遵循响应标准化层,也遵循第五个卷积层。每个卷积和全连接层的输出都采用ReLU非线性。
    每一层的网络结构如下图所示:
    1、convolutional 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值