文献精读——(第二篇)AlexNet

 

本文参考文献下载(谢谢作者)

ImageNet Classification with Deep Convolutional Neural Networks

Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton

一、论文梳理

摘要

正文翻译笔记

我们训练了一个大型的深度卷积神经网络,来将在ImageNet LSVRC-2010大赛中的120万张高清图像分为1000个不同的类别。对测试数据,我们得到了top-1误差率37.5%,以及top-5误差率17.0%,这个效果比之前最顶尖的都要好得多。该神经网络有6000万个参数和650,000个神经元,由五个卷积层,以及某些卷积层后跟着的max-pooling层,和三个全连接层,还有排在最后的1000-way的softmax层组成。为了使训练速度更快,我们使用了非饱和的神经元和一个非常高效的GPU关于卷积运算的工具。为了减少全连接层的过拟合,我们采用了最新开发的正则化方法,称为“dropout”,它已被证明是非常有效的。在ILSVRC-2012大赛中,我们又输入了该模型的一个变体,并依靠top-5测试误差率15.3%取得了胜利,相比较下,次优项的错误率是26.2%。

网络结构:五个卷积层,三个全连层,softmax作为分类器。结合了全新的正则化技术,使用GPU。

注:特征提取是不会出现过拟的,过拟合都是针对分类器或机器学习说的说的。

注:top1-----就是你预测的label取最后概率向量里面最大的那一个作为预测结果,如过你的预测结果中概率最大的那个分类正确,则预测正确。否则预测错误

top5-----就是最后概率向量最大的前五名中只要出现了正确概率即为预测正确。否则预测错误。

 

补充:

1)什么是正则化?

正则化:许多策略被显示地设计来减少测试误差,这些策略统称正则化。(感觉还是不懂,哈哈)

2)从正则化的功能出发理解正则化:

正则化的功能是修改学习算法,提高算法的性能。控制算法性能的方法:一是允许使用的函数种类,二是这些函数的数量。所以,个人觉得正则化方法就是使用一些方法,使得网络或分类器所表达的函数族出现变化,增加或减少网络的约束。(具体例子见花书5.2容量、过拟合和欠拟合)

3)解释drop为什么是正则化技术:每次训练减少神经元的个数,降低了分类器的容量,进而缓解了过拟合。(容量什么的,看花书)

1、引言

正文翻译笔记

当前物体识别的方法基本上都使用了机器学习方法。为了改善这些方法的性能,我们可以收集更大的数据集,学习更强有力的模型,并使用更好的技术,以防止过拟合。直到最近,标记图像的数据集都相当小——大约数万张图像(例如,NORB [16],Caltech-101/256 [8, 9],以及CIFAR-10/100 [12])。简单的识别任务可以用这种规模的数据集解决得相当好,特别是当它们用标签-保留转换增强了的时候。例如,在MNIST数字识别任务中当前最好的误差率(<0.3%)接近于人类的表现[4]。但是现实环境中的物体表现出相当大的变化,因此要学习它们以对它们进行识别就必须使用更大的训练集。事实上,小规模图像数据集的缺陷已被广泛认同(例如,Pinto等人[21]),但是直到最近,收集有着上百万张图像的带标签数据集才成为可能。更大型的新数据集包括LabelMe [23],它由几十万张完全分割图组成,还有ImageNet [6],它由多于22,000个种类中超过1500万张带标签的高分辨率图像组成。 

为了从几百万张图像中学习数以千计的物体,我们需要一个学习能力更强的模型。然而,物体识别任务的极大复杂性意味着这个问题不能被指定,即使是通过与ImageNet一样大的数据集,所以我们的模型中也应该有大量的先验知识,以补偿我们所没有的全部数据。卷积神经网络(CNN)构成了一个这种类型的模型[16, 11, 13, 18, 15, 22, 26]。它们的能力可以通过改变其深度与广度得到控制,它们也可作出有关图像性质的强壮且多半正确的假设(即,统计数据的稳定性和像素依赖关系的局部性)。因此,与层次规模相同的标准前馈神经网络相比,CNN的连接关系和参数更少,所以更易于训练,而其理论上的最佳性能可能只略差一点。 

机器学习如果想要有更好的识别效果需要更大的数据集。如果标记图像的数据集都相当小——大约数万张图像,简单的识别任务可以用这种规模的数据集解决得相当好,但大规模的就不行。AlexNet的能力更强,有更好的识别效果。

 

不论CNN的性质多有吸引力,也不论它们局部结构的相对效率有多高,将它们大规模地应用到高分辨率图像中仍然是极其昂贵的。幸运的是,目前的GPU搭配了一个高度优化的2D卷积工具,强大到足以促进大规模CNN的训练,而且最近的数据集像ImageNet包含足够的带标签的样例来训练这样的模型,还不会有严重的过拟合。 

本文的具体贡献如下:我们在ILSVRC-2010和ILSVRC-2012大赛中使用过的ImageNet的子集上[2],训练了迄今为止最大型的卷积神经网络之一,并取得了迄今为止在这些数据集上报告过的最好结果。我们写了一个高度优化的GPU二维卷积工具以及训练卷积神经网络过程中的所有其他操作,这些我们都提供了公开地址。我们的网络中包含一些既新鲜而又不同寻常的特征,它们提高了网络的性能,并减少了网络的训练时间,这些详见第3节。我们的网络中甚至有120万个带标签的训练样本,这么大的规模使得过拟合成为一个显著的问题,所以我们使用了几种有效的方法来防止过拟合,这些在第4节中给以描述。我们最终的网络包含五个卷积层和三个全连接层,且这种层次深度似乎是重要的:我们发现,移去任何卷积层(其中每一个包含的模型参数都不超过1%)都会导致性能变差。 

另一项创新:使用两块GPU训练网络。

证明深层的重要性:我们发现,移去任何卷积层(其中每一个包含的模型参数都不超过1%)都会导致性能变差。 

最后,网络的规模主要受限于当前GPU的可用内存和我们愿意容忍的训练时间。我们的网络在两块GTX 580 3GB GPU上训练需要五到六天。我们所有的实验表明,等更快的GPU和更大的数据集可用以后,我们的结果就可以轻而易举地得到改进。

 

2、数据集

ImageNet是一个拥有超过1500万张带标签的高分辨率图像的数据集,这些图像分属于大概22,000个类别。这些图像是从网上收集,并使用Amazon Mechanical Turk群众外包工具来人工贴标签的。作为PASCAL视觉目标挑战赛的一部分,一年一度的ImageNet大型视觉识别挑战赛(ILSVRC)从2010年开始就已经在举办了。ILSVRC使用ImageNet的一个子集,分为1000种类别,每种类别中都有大约1000张图像。总之,大约有120万张训练图像,50,000张验证图像和150,000张测试图像。 

ILSVRC-2010是ILSVRC中能获得测试集标签的唯一版本,因此这也就是我们完成大部分实验的版本。由于我们也在ILSVRC-2012上输入了模型,在第6节中我们也会报告这个数据集版本上的结果,该版本上的测试集标签难以获取。在ImageNet上,习惯性地报告两个误差率:top-1和top-5,其中top-5误差率是指测试图像上正确标签不属于被模型认为是最有可能的五个标签的百分比。 

ImageNet由各种分辨率的图像组成,而我们的系统需要一个恒定的输入维数。因此,我们下采样这些图像到固定的分辨率256×256。给定一张矩形图像,我们首先重新缩放图像,使得短边长度为256,然后从得到的图像中裁剪出中央256×256的一片。除了遍历训练集从每个像素中减去平均活跃度外,我们没有以任何其他方式预处理图像(归一化?为啥除平均,没除255)。所以我们用这些像素(中央那一片的)原始RGB值训练网络。

补充:这里可知此网络的输入都是相同的,这也是网络的缺陷之一

3、网络结构

3.1 ReLU非线性

这个大家都熟,也都明白为啥比tanh快吧!结果:如图1所示,它显示出对于特定的四层卷积网络,在CIFAR-10数据集上达到25%的训练误差所需的迭代次数。此图显示,如果我们使用了传统的饱和神经元模型,就不能用如此大的神经网络来对该工作完成实验。

3.2 在多个GPU上训练

现在好多框架都能在多个GPU上运算,不说了

 1 next_img, next_label = iterator.get_next()
 2 image_splits = tf.split(next_img, num_gpus)
 3 label_splits = tf.split(next_label, num_gpus)
 4 tower_grads = []
 5 tower_loss = []
 6 counter = 0
 7 for d in self.gpu_id:
 8     with tf.device('/gpu:%s' % d):
 9         with tf.name_scope('%s_%s' % ('tower', d)):
10             cross_entropy = build_train_model(image_splits[counter], label_splits[counter], for_training=True)
11             counter += 1
12             with tf.variable_scope("loss"):
13                 grads = opt.compute_gradients(cross_entropy)
14                 tower_grads.append(grads)
15                 tower_loss.append(cross_entropy)
16                 tf.get_variable_scope().reuse_variables()
17 
18 mean_loss = tf.stack(axis=0, values=tower_loss)
19 mean_loss = tf.reduce_mean(mean_loss, 0)
20 mean_grads = util.average_gradients(tower_grads)
21 update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
22 with tf.control_dependencies(update_ops):
23     train_op = opt.apply_gradients(mean_grads, global_step=global_step)

3.3 局部响应归一化(重点来了)

正文翻译笔记

ReLU具有所希望的特性,它们不需要输入归一化来防止它们达到饱和。如果至少有一些训练样例对ReLU产生了正输入,学习就将发生在那个神经元。可是,我们仍然发现下列局部归一化方案有助于一般化。

归一化防止激活函数达到饱和。

b是归一化后输出,a是激活函数输出

这里写图片描述

注意这个公式:它是局部的,它是同一位置上不同卷积核上的得到的特征值的局部求和,是对特征图的操作。(最开始都没注意到,惭愧惭愧)

该方案与Jarrett等人的局部对比度归一化方案具有一些相似之处[11],但我们的方案更正确的命名为“亮度归一化”,因为我们不减去平均活跃度。亮度归一化将我们的top-1与top-5误差率分别减少了1.4%与1.2%。我们也验证了该方案在CIFAR-10数据集上的有效性:四层CNN不带归一化时的测试误差率是13%,带归一化时是11%(由于版面有限我们不能详细描述该网络,但这里提供的代码和参数文件对其有精确详细的说明:http://code.google.com/p/cuda-convnet/

为什么没有减去平均值呢?对比度归一化与亮度归一化有什么区别?

 

补充:

1)什么是对比度的归一化?作用是什么?

在深度学习中,对比度通常指的是图像或图像区域中像素的标准差。对比度归一化包括全局对比度归一化和局部对比度归一化,是深度学习中常用的一种数据预处理方法,作用是减少数据中的变化量从而减少泛化误差和拟合训练集所需模型的大小。(个人理解,数据变化量小了,模型所需映射的范围也小了,模型的复杂程度较低,从而减少泛化误差和拟合训练集所需模型的大小)(更简单的任务可以通过更小的模型来解决,而更简单的解决方案泛化能力一般更好。这种类型的预处理通常被设计为去除输入数据中的某种可变性,这对于人工设计者来说是容易描述的,并且人工设计者能够保证不受到任务影响。)

2)两个归一化区别?

首先,公式不同,亮度那个没减平均值,所以叫亮度归一化。功能不同,亮度归一化为了实现了一种侧向抑制,在使用不同核计算神经元输出的过程中创造对大激活度的竞争(差异越大越好),如果减去平均值,差异反而不明显。因此就不需要减去平均值。

3.4 池化重叠

正文翻译笔记

CNN中的汇聚层总结在相同核图中的相邻神经元组的输出。 传统上,由相邻池单元概括的邻域不重叠(例如,[17,11,4])。 更准确地说,池层可以被认为是由间隔为s个像素的池单元网格组成,每个池汇总了以池单元的位置为中心的大小为z×z的邻域。如果我们设置s = z,我们获得在CNN中常用的传统的局部合并。 如果我们设置s <z,我们获得重叠池。 这是我们在整个网络中使用的,其中s = 2和z = 3。与非重叠方案相比,该方案分别将前1和前5错误率降低0.4%和0.3%s = 2,z = 2,产生等效尺寸的输出。 我们通常在训练期间观察到具有重叠池的模型发现它稍微更难以过度拟合

池化重叠:就是重叠了,不解释

好处:错误率降低,稍微更难以过度拟合

摸着良心说:这么做参数不就多了吗?

3.5 总体结构(这个跟论文写得不太一样,原文在tensorflow上好像会报错)

AlexNet共有八层网络,其结构如下:

卷积层1:输入224*224*3    卷积核11*11*3*96 步长为4  然后是ReLU 、局部归一化 、3*3步长为2的最大值池化

卷积层2:输入28*28*96    卷积核5*5*96*256  然后是ReLU、局部归一化、3*3步长为2的最大值池化

卷积层3:输入14*14*256    卷积核3*3*256*384  然后是ReLU

卷积层4:输入14*14*384    卷积 核3*3*384*384  然后是ReLU

卷积层5:输入14*14*384    卷积核3*3*384*256  然后是ReLU、3*3步长为2的最大值池化

全连接层1:输入7*7*256    输出4096  然后是ReLU、DropOut

全连接层2:输入4096    输出4096  然后是ReLU、DropOut

全连接层3:输入4096    输出1000
原文:参考链接

4  减少过拟合

我们的神经网络结构有6000万个参数。虽然ILSVRC的1000个类别使得每个训练样本强加10比特约束到从图像到标签的映射上,这显示出要学习如此多的参数而不带相当大的过拟合,这些类别(的数据?)是不够的。下面,我们描述减少过拟合的两种主要方法。

4.1 数据增强

减少图像数据过拟合最简单最常用的方法,是使用标签-保留转换,人为地扩大数据(例如,[25,4,5])。我们使用数据增强的两种不同形式,这两种形式都允许转换图像用很少的计算量从原始图像中产生,所以转换图像不需要存储在磁盘上。在我们的实现中,转换图像是由CPU上的Python代码生成的。 

数据增强的第一种形式由生成图像转化和水平反射组成:我们从256×256的图像中提取随机的224×224的碎片(还有它们的水平反射),并在这些提取的碎片上训练我们的网络(这就是图2中输入图像是224×224×3维的原因)。这使得我们的训练集规模扩大了2048倍,但是由此产生的训练样例一定高度地相互依赖。如果没有这个方案,我们的网络会有大量的过拟合,这将迫使我们使用小得多的网络。在测试时,该网络通过提取五个224×224的碎片(四个边角碎片和中心碎片)连同它们的水平反射(因此总共是十个碎片)做出了预测,并在这十个碎片上来平均该网络的softmax层做出的预测。(训练用一堆碎片,测试用十个碎片)

数据增强的第二种形式包含改变训练图像中RGB通道的强度:具体来说,我们在遍及整个ImageNet训练集的RGB像素值集合中执行PCA。对于每个训练图像,我们成倍增加已有主成分(就有多个数据了),比例大小为对应特征值乘以一个从均值为0,标准差为0.1的高斯分布中提取的随机变量。

4.2 Dropout(这个都熟,简单说说)

原理:

以这种方式“dropped out”的神经元既不利于前向传播,也不参与反向传播。所以每次提出一个输入,该神经网络就尝试一个不同的结构,但是所有这些结构之间共享权重。因为神经元不能依赖于其他特定神经元而存在,所以这种技术降低了神经元复杂的互适应关系。正因如此,要被迫学习更为鲁棒的特征,这些特征在结合其他神经元的一些不同随机子集时有用。

 

 

5、训练过程

我们使用随机梯度下降法和一批大小为128、动力为0.9、权重衰减为0.0005的样例来训练我们的网络。我们发现,这少量的权重衰减对于模型学习是重要的。换句话说,这里的权重衰减不仅仅是一个正则化矩阵:它减少了模型的训练误差。

我们用一个均值为0、标准差为0.01的高斯分布初始化了每一层的权重。我们用常数1初始化了第二、第四和第五个卷积层以及全连接隐层的神经元偏差。该初始化通过提供带正输入的ReLU来加速学习的初级阶段(如此初始化的原因)

补充:注意训练方式,不要与批量产生误解

1)批量梯度下降:批量梯度下降法是最原始的形式,它是指在每一次迭代时使用所有样本来进行梯度的更新。

2)随机梯度下降法:随机梯度下降是每次迭代使用一个样本来对参数进行更新。使得训练速度加快。

3)小批量梯度下降:是对批量梯度下降以及随机梯度下降的一个折中办法。其思想是:每次迭代 使用 batch_size个样本来对参数进行更新。

参考链接

6、结果

比较算法准确率时用的是:top1与top5

6.1 定性评价

GPU1上的核大多数颜色不明确,而GPU2上的核大多数颜色明确。这种特性在每一次运行中都会出现,且独立于所有特定的随机权重初始化(与初始值无关)

在图4左边面板上,通过计算该网络在八个测试图像上的top-5预测,我们定性地判断它学到了什么。注意到即使是偏离中心的物体,比如左上角的一小块,也可以被网络识别。大多数的top-5标签似乎合情合理。例如,只有其他类型的猫科动物被认为是对豹貌似合理的标签。在某些情况下(铁栅、樱桃),对于图片意图的焦点存在歧义。

分析全连接层:

探测网络的视觉知识有另一种方法,就是考虑由位于最后的4096维隐层上的图像引起的特征激活。如果两个图像用小欧氏分离产生了特征激活向量,我们可以说,在神经网络的更高级别上认为它们是相似的。图4显示了测试集中的五个图像,以及训练集中根据这一标准与其中每一个最相似的六个图像。注意,在像素级别,检索到的训练图像一般不会接近第一列中的查询图像。例如,检索到的狗和大象表现出各种各样的姿势。我们会在补充材料里给出更多测试图像的结果。 ???????

通过使用两个4096维实值向量之间的欧氏距离来计算相似性是低效的,但它可以通过训练一个自动编码器将这些向量压缩为短的二进制代码来变得高效。这应该会产生一个比应用自动编码器到原始像素要好得多的图像检索方法[14],它不利用图像标签,此后还有一种用相似边缘图案来检索图像的倾向,而不论它们在语义上是否相似。

7、结论

正文翻译笔记

我们的研究结果表明,大型深度卷积神经网络在一个非常具有挑战性的数据集上使用纯粹的监督学习,能够达到破纪录的结果。值得注意的是,如果有一个卷积层被移除,我们的网络性能就会降低。例如,除去任何中间层都将导致该网络的top-1性能有2%的损失。所以该层次深度对于达到我们的结果确实是重要的。 

深层卷积很重要

为了简化实验,我们没有使用任何无监督的预训练,即使我们预计它将带来帮助,特别是我们可以获得足够的计算能力来显著地扩大网络规模,而不带来标记数据量的相应增加。

简化了实验,没有无监督预训练

 

到目前为止,我们的结果有所改善,因为我们已经让网络更大,训练时间更久,但是为了匹配人类视觉系统的infero-temporal路径,我们仍然有更高的数量级要去达到。最终我们想要在视频序列上使用非常大型的深度卷积网络,其中的瞬时结构会提供非常有用的信息,这些信息在静态图像中丢失了或极不明显。

以后的网络会随着数据量变得越来越深

二、重点讲解

1)ImageNet:它一种人文数据集(船,狗),是泛化的,不具备商业价值。base line:基础模型,其他数据集:CoCo

2)top1:对应一个小类,top5:五个最大的P中含有准确类即为分类正确。

3)batchsize一般用64,epoch一般控制在1000以内,交叉熵loss不会出现0。验证集用于确定模型超参数并找到early-stop点。

4)tf.device('./gpu'):底部加结构代码,GPU并联方法。

5)矩阵稀疏化:特征图变得较为稀疏哦,说明规律简单,好拟合。(ReLu好处)

6)s型函数适合二分类

7)局部响应归一化:对特征图中同一位置不同通道的激活值进行归一化,即对卷积输出的邻域通道(因此具有空间性)中的部分像素点进行归一化。

8)vaild是去除不能整除的部分,same是补全不够的位置,但他是在卷积计算之前就补(补的量Ksize-side)。padding计算公式

9)ALexNet输入是224*224

10)sys.exit(0)终止程序,人为终止。 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值