精华内容
下载资源
问答
  • alexnet论文原文
    千次阅读
    2017-11-24 20:18:43

    最近几个月来一直在研究卷积神经网络,主要是应用开源框架TensorFlow对网络进行训练,训练时是根据自己对卷积神经网络的理解,自己构建的网络结构,一直没有想过应用那些在ImageNet数据竞赛中,获得冠军的网络,这几天突然想自己写下AlexNet网络的代码,在网上找到了Alex Krizhevsky的论文原文,在这里分享一下,网盘链接:http://pan.baidu.com/s/1boSo0wB 密码:pd6u

    关于AlexNet网上有很多,在这里也说一下自己对AlexNet的见解:

    1. 不得不承认,AlexNet掀起了深度学习热。

    在2012年之前众多学者都对深度学习抱以迟疑的态度,感觉就只是理论上说的很好,但对其效果不敢恭维,Hinton为了回应网上的质疑,让其学生Alex应用卷积神经网络参加ImageNet数据大赛,结果大获全胜,从此开创了深度神经网络空前的高潮。

    2. AlexNet并不是第一个应用最成功的卷积神经网络。

    在AlexNet之前还有LeCun大牛在1989年提出的LeNet-5,其在当时也相当成功,被用在当时手写支票数字的识别上。时隔20多年,经过Hinton等人的不懈努力,才成就了当前深度学习算法的巨大成功。

    3. 关于AlexNet

    AlexNet较20多年前的LeNet-5有众多新思想,包括数据增强、局部归一化、激活函数采用ReLU、DropOut方法等。当时在斯坦福大学CS231n课程上,李飞飞的得意门生讲到数据增强很简单,也很好用,所以要常用,感兴趣的可以在查看课程(链接:http://study.163.com/course/courseLearn.htm?courseId=1003223001#/learn/video?lessonId=1004255298&courseId=1003223001)。其它比如网络深度增加、训练算法采用逐层预训练算法等也就不多说了。

    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

    注:上述各个层图片的大小是我编程计算出来的,可能和笔算的不太一样,在程序输入里图片大小采用的是224*224*3,TensorFlow的padding方式 均为'SAME'。

    另外,资料都说,卷积层1输入应为227*227*3,不然算不对;在最大值池化上,有的资料采用的是2*2的最大值池化。

    更多相关内容
  • 最近一直比较忙,总算才有时间看点深度学习的论文。这篇论文是大神Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton三人提出的AlexNet深度卷积神经网络,摘得了2010年ILSVRC比赛的桂冠。AlexNet在现在也经常会...

    前言

    最近一直比较忙,总算才有时间看点深度学习的论文。这篇论文是大神Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton三人提出的AlexNet深度卷积神经网络,摘得了2010年ILSVRC比赛的桂冠。AlexNet在现在也经常会用到,可以说是很经典的一个CNN框架了。出于学习的目的,一方面可以做笔记,一方面也可以督促自己的学习,我才打算翻译下这篇论文。由于个人水平有限,翻译仅供参考,如有错误,欢迎交流指正。
    下面是一些可能有用的参考资料:
    论文原文:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
    基于caffe的实现:http://caffe.berkeleyvision.org/gathered/examples/imagenet.html

    翻译正文

    ImageNet Classification with Deep Convolutional Neural Networks

    摘要

    我们训练了一个庞大的深层卷积神经网络,将ImageNet LSVRC-2010比赛中的120万张高分辨率图像分为1000个不同的类别。在测试数据上,我们取得了37.5%和17.0%的前1和前5的错误率,这比以前的先进水平要好得多。具有6000万个参数和650,000个神经元的神经网络由五个卷积层组成,其中一些随后是最大池化层,三个全连接层以及最后的1000个softmax输出。为了加快训练速度,我们使用非饱和神经元和能高效进行卷积运算的GPU实现。为了减少全连接层中的过拟合,我们采用了最近开发的称为“dropout”的正则化方法,该方法证明是非常有效的。我们还在ILSVRC-2012比赛中使用了这种模式的一个变种,取得了15.3%的前五名测试失误率,而第二名的成绩是26.2%。

    1、介绍

    目前,机器学习方法对物体识别非常重要。为了改善他们的表现,我们可以收集更大的数据集,训练更强大的模型,并使用更好的技术来防止过拟合。直到最近,标记好图像的数据集相对还较小——大约上万的数量级(例如,NORB [16],Caltech-101/256 [8,9]和CIFAR-10/100 [12])。使用这种规模的数据集可以很好地解决简单的识别任务,特别是如果他们增加了保留标签转换(label-preserving transformations)。例如,目前MNIST数字识别任务的最低错误率(<0.3%)基本达到了人类的识别水平[4]。但是物体在现实环境中可能表现出相当大的变化性,所以要学会识别它们,就必须使用更大的训练集。事实上,小图像数据集的缺点已是众所周知(例如,Pinto[21]),但直到最近才可以收集到数百万的标记数据集。新的大型数据集包括LabelMe [23],其中包含数十万个完全分割的图像,以及ImageNet [6],其中包含超过15,000万个超过22,000个类别的高分辨率图像。
    要从数百万图像中学习数千个类别,我们需要一个具有强大学习能力的模型。然而,物体识别任务的巨大复杂性意味着即使是像ImageNet这样大的数据集也不能完美地解决这个问题,所以我们的模型也需要使用很多先验知识来弥补我们数据集不足的问题。卷积神经网络(CNN)就构成了一类这样的模型[16,11,13,18,15,22,26]。它们的容量可以通过改变它们的深度和宽度来控制,并且它们也对图像的性质(即统计量的定态假设以及像素局部依赖性假设)做出准确而且全面的假设。因此,与具有相同大小的层的标准前馈神经网络相比,CNN具有更少的连接和参数,因此它们更容易训练,而其理论最优性能可能稍微弱一些。
    尽管CNN具有很好的质量,并且尽管其局部结构的效率相对较高,但将它们大规模应用于高分辨率图像时仍然显得非常昂贵。幸运的是,当前的GPU可以用于高度优化的二维卷积,能够加速许多大型CNN的训练,并且最近的数据集(如ImageNet)包含足够多的标记样本来训练此类模型,而不会出现严重的过度拟合。
    本文的具体贡献如下:我们在ILSVRC-2010和ILSVRC-2012比赛中使用的ImageNet子集上训练了迄今为止最大的卷积神经网络之一[2],并在这些数据集上取得了迄今为止最好的结果。我们编写了一个高度优化的2D卷积的GPU实现以及其他训练卷积神经网络的固有操作,并将其公开。我们的网络包含许多新的和不同寻常的功能,这些功能可以提高网络的性能并缩短训练时间,详情请参阅第3节。我们的网络规模较大,即使有120万个带标签的训练样本,仍然存在过拟合的问题,所以我们采用了几个有效的技巧来阻止过拟合,在第4节中有详细的描述。我们最终的网络包含五个卷积层和三个全连接层,并且这个深度似乎很重要:我们发现去除任何卷积层(每个卷积层只包含不超过整个模型参数的1%的参数)都会使网络的性能变差。
    最后,网络的规模主要受限于目前GPU上可用的内存量以及我们可接受的训练时间。我们的网络需要在两块GTX 580 3GB GPU上花费五到六天的时间来训练。我们所有的实验都表明,通过等待更快的GPU和更大的数据集出现,我们的结果可以进一步完善。

    2、数据集

    ImageNet是一个拥有超过1500万个已标记高分辨率图像的数据集,大概有22,000个类别。图像都是从网上收集,并使用Amazon-Mechanical Turk群智工具人工标记。从2010年起,作为Pascal视觉对象挑战赛的一部分,这是每年举办一次的名为ImageNet大型视觉识别挑战赛(ILSVRC)的比赛。 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的图片。除了将每个像素中减去训练集的像素均值之外,我们没有以任何其他方式对图像进行预处理。所以我们在像素的(中心)原始RGB值上训练了我们的网络。

    3、结构

    图2概括了我们所提出网络的结构。它包含八个学习层——五个卷积层和三个全连接层。下面,我们将描述一些所提出网络框架中新颖或不寻常的地方。 3.1-3.4节按照我们对它们重要性的估计进行排序,其中最重要的是第一个。

    3.1、ReLU非线性单元

    对一个神经元模型的输出的常规套路是,给他接上一个激活函数: f(x)=tanh(x) f ( x ) = t a n h ⁡ ( x ) 或者 f(x)=(1+ex)1 f ( x ) = ( 1 + e − x ) − 1 。就梯度下降法的训练时间而言,这些饱和非线性函数比非饱和非线性函数如 f(x)=max(0,x) f ( x ) = m a x ⁡ ( 0 , x ) 慢得多。根据Nair和Hinton的说法[20],我们将这种非线性单元称为——修正非线性单元(Rectified Linear Units (ReLUs))。使用ReLUs做为激活函数的卷积神经网络比起使用tanh单元作为激活函数的训练起来快了好几倍。这个结果从图1中可以看出来,该图展示了对于一个特定的四层CNN,CIFAR-10数据集训练中的误差率达到25%所需要的迭代次数。从这张图的结果可以看出,如果我们使用传统的饱和神经元模型来训练CNN,那么我们将无法为这项工作训练如此大型的神经网络。
    png
    我们并不是第一个考虑在CNN中替换掉传统神经元模型的。例如,Jarrett等人[11]声称,非线性函数 f(x)=|tanh(x)| f ( x ) = | t a n h ⁡ ( x ) | 在他们的对比度归一化问题上,再接上局部均值池化单元,在Caltech-101数据集上表现的非常好。然而,在这个数据集中,主要担心的还是防止过拟合,所以他们观察到的效果与我们在使用ReLU时观察到的训练集的加速能力还是不一样。加快训练速度对大型数据集上训练的大型模型的性能有很大的影响。

    3.2、在多个GPU上训练

    单个GTX 580 GPU只有3GB内存,这限制了可以在其上训练的网络的最大尺寸。事实证明,120万个训练样本足以训练那些因规模太大而不适合使用一个GPU训练的网络。因此,我们将网络分布在两个GPU上。目前的GPU很适合于跨GPU并行化操作,因为它们能够直接读写对方的内存,而无需通过主机内存。我们采用的并行化方案基本上将半个内核(或神经元)放在各个GPU上,另外还有一个技巧:GPU只在某些层间进行通信。这意味着,例如,第3层的内核从第2层的所有内核映射(kernel maps)中获取输入。然而,第4层中的内核又仅从位于同一GPU上的第3层中的那些内核映射获取输入。选择连接模式对于交叉验证是一个不小的问题,但这使得我们能够精确调整通信量,直到它的计算量的达到可接受的程度。
    由此产生的架构有点类似于Cire¸san等人使用的“柱状”CNN[5],除了我们的每列不是独立的之外(见图2)。与一个GPU上训练的每个卷积层只有一半的内核数量的网络相比,该方案分别将我们的top-1和top-5错误率分别降低了1.7%和1.2%。双GPU网络的训练时间比单GPU网络更少。

    3.3、局部响应归一化(Local Response Normalization)

    ReLU具有理想的属性,它们不需要对输入进行归一化来防止它们饱和。如果至少有一些训练实例为ReLU产生了正的输入,那么这个神经元就会学习。然而,我们还是发现下面的这种归一化方法有助于泛化。设 aix,y a x , y i 表示第 i i 个内核计算(x,y)位置的ReLU非线性单元的输出,而响应归一化(Local Response Normalization)的输出值定义为 bix,y b x , y i

    bix,y=aix,y(k+αmin(N1,i+n/2)j=max(0,in/2)(ajx,y)2)β b x , y i = a x , y i ( k + α ∑ j = max ( 0 , i − n / 2 ) m i n ( N − 1 , i + n / 2 ) ( a x , y j ) 2 ) β

    其中,求和部分公式中的 n n 表示同一个位置下与该位置相邻的内核映射的数量,而N表示这一层所有的内核数(即通道数)。内核映射的顺序当然是任意的,并且在训练之前就已经定好了。这种响应归一化实现了一种模仿真实神经元的横向抑制,从而在使用不同内核计算的神经元输出之间产生较大的竞争。常数 k k n α α β都是超参数(hyper-parameters),它们的值都由验证集决定。我们取 k=2 k = 2 n=5 n = 5 α=104 α = 10 − 4 β=0.75 β = 0.75 。我们在某些层的应用ReLU后再使用这种归一化方法(参见第3.5节)。
    这个方案与Jarrett等人[11]的局部对比归一化方案有些相似之处,但我们的被更准确地称为“亮度归一化”,因为我们没有减去均值。响应归一化将我们的top-1和top-5的错误率分别降低了1.4%和1.2%。我们还验证了这种方案在CIFAR-10数据集上的有效性:没有进行归一化的四层CNN实现了13%的测试错误率,而进行了归一化的则为11%。

    3.4、重叠池化

    CNN中的池化层汇集了相同内核映射中相邻神经元组的输出。在传统方法中,相邻池化单元之间互不重叠(例如[17,11,4])。更准确地说,一个池化层可以被认为是由一些间隔为s个像素的池化单元组成的网格,每个都表示了一个以池化单元的位置为中心的大小为z×z的邻域。如果我们令s = z,我们就可以得到CNN中常用的传统的局部池化。如果我们令s

    3.5、整体结构

    现在我们已经准备好描述CNN的整体架构了。如图2所示,这个网络包含了八层权重;前五个是卷积层,其余三个为全连接层。最后的全连接层的输出被送到1000维的softmax函数,其产生1000个类的预测。我们的网络最大化多项逻辑回归目标,这相当于在预测的分布下最大化训练样本中正确标签对数概率的平均值。
    第二,第四和第五个卷积层的内核仅与上一层存放在同一GPU上的内核映射相连(见图2)。第三个卷积层的内核连接到第二层中的所有内核映射。全连接层中的神经元连接到前一层中的所有神经元。响应归一化层紧接着第一个和第二个卷积层。 在3.4节中介绍的最大池化层,后面连接响应归一化层以及第五个卷积层。将ReLU应用于每个卷积层和全连接层的输出。
    png
    第一个卷积层的输入为224×224×3的图像,对其使用96个大小为11×11×3、步长为4(步长表示内核映射中相邻神经元感受野中心之间的距离)的内核来处理输入图像。第二个卷积层将第一个卷积层的输出(响应归一化以及池化)作为输入,并使用256个内核处理图像,每个内核大小为5×5×48。第三个、第四个和第五个卷积层彼此连接而中间没有任何池化或归一化层。第三个卷积层有384个内核,每个的大小为3×3×256,其输入为第二个卷积层的输出。第四个卷积层有384个内核,每个内核大小为3×3×192。第五个卷积层有256个内核,每个内核大小为3×3×192。全连接层各有4096个神经元。

    4、减少过拟合

    我们的神经网络架构拥有6000万个参数。尽管ILSVRC的1000个类别使得每个训练样本从图像到标签的映射被限制在了10 bit之内,但这不足以保证训练这么多参数而不出现过拟合。下面,我们将介绍对付过度拟合的两个方法。

    4.1、数据增强(Data Augmentation)

    减小过拟合的最简单且最常用的方法就是,使用标签保留转换(label-preserving transformations,例如[25,4,5]),人为地放大数据集。我们采用两种不同形式的数据增强方法,它们都允许通过很少的计算就能从原始图像中生成转换图像,所以转换后的图像不需要存储在硬盘上。在我们实现过程中,转换后的图像是使用CPU上的Python代码生成的,在生成这些转换图像的同时,GPU还在训练上一批图像数据。所以这些数据增强方案实际上是很高效的。
    数据增强的第一种形式包括平移图像和水平映射。我们通过从256×256图像中随机提取224×224的图像块(及其水平映射)并在这些提取的图像块上训练我们的网络来做到这一点。这使我们的训练集的规模增加了2048倍,尽管由此产生的训练样本当然还是高度相互依赖的。如果没有这个方案,我们的网络就可能会遭受大量的的过拟合,可能会迫使我们不得不使用更小的网络。在测试时,网络通过提取5个224×224的图像块(四个角块和中心块)以及它们的水平映射(因此总共包括10个块)来进行预测,并求网络的softmax层的上的十个预测结果的均值。
    第二种形式的数据增强包括改变训练图像中RGB通道的灰度。具体而言,我们在整个ImageNet训练集的图像的RGB像素值上使用PCA。对于每个训练图像,我们添加多个通过PCA找到的主成分,大小与相应的特征值成比例,乘以一个随机值,该随机值属于均值为0、标准差为0.1的高斯分布。因此,对于每个图像的RGB像素有: Ixy=[IRxyIGxyIBxy]T I x y = [ I x y R I x y G I x y B ] T ,我们加入如下的值:

    [p1p2p3][α1λ1α2λ2α3λ3]T [ p 1 p 2 p 3 ] [ α 1 λ 1 α 2 λ 2 α 3 λ 3 ] T

    其中, pi p i λi λ i 分别是3x3的RGB协方差矩阵的第 i i 个特征向量和第i个的特征值,而 αi α i 是前面所说的随机值。对于一张特定图像中的所有像素,每个 αi α i 只会被抽取一次,知道这张图片再次用于训练时,才会重新提取随机变量。这个方案近似地捕捉原始图像的一些重要属性,对象的身份不受光照的强度和颜色变化影响。这个方案将top-1错误率降低了1%以上。

    4.2、Dropout

    结合许多不同模型的预测结果是减少测试错误率的一种非常成功的方法[1,3],但对于已经花费数天时间训练的大型神经网络来说,它似乎成本太高了。然而,有一种非常有效的模型组合方法,在训练期间,只需要消耗1/2的参数。这个新发现的技术叫做“Dropout”[10],它会以50%的概率将隐含层的神经元输出置为0。以这种方法被置0的神经元不参与网络的前馈和反向传播。因此,每次给网络提供了输入后,神经网络都会采用一个不同的结构,但是这些结构都共享权重。这种技术减少了神经元的复杂适应性,因为神经元无法依赖于其他特定的神经元而存在。因此,它被迫学习更强大更鲁棒的功能,使得这些神经元可以与其他神经元的许多不同的随机子集结合使用。在测试时,我们试着使用了所有的神经元,并将它们的输出乘以0.5。这与采用大量dropout的网络产生的预测结果分布的几何均值近似。
    我们在图2中的前两个全连接层上使用了dropout。没有dropout,我们的网络会出现严重的过拟合。Dropout大概会使达到收敛的迭代次数翻倍。

    5、训练细节

    我们使用随机梯度下降法来训练我们的模型,每个batch有128个样本,动量(momentum)为0.9,权重衰减(weight decay)为0.0005。我们发现这种较小的权重衰减对于模型的训练很重要。换句话说,权重衰减在这里不仅仅是一个正则化方法:它减少了模型的训练误差。权重ω的更新法则是:

    vi+1:=0.9vi0.0005ϵωiϵLω|ωiDiωi+1:=ωi+vi+1 v i + 1 := 0.9 ⋅ v i − 0.0005 ⋅ ϵ ⋅ ω i − ϵ ⋅ ⟨ ∂ L ∂ ω | ω i ⟩ D i ω i + 1 := ω i + v i + 1

    其中, i i 表示当前的迭代次数,v表示动量(momentum), ε ε 表示学习率, Lω|ωiDi是第 i i 批次的目标函数关于w的导数( wi w i 的偏导数) Di D i 的平均值。
    我们使用标准差为0.01、均值为0的高斯分布来初始化各层的权重。我们使用常数1来初始化了网络中的第二个、第四个和第五个卷积层以及全连接层中的隐含层中的所有偏置参数。这种初始化权重的方法通过向ReLU提供了正的输入,来加速前期的训练。我们使用常数0来初始化剩余层中的偏置参数。
    我们对所有层都使用相同的学习率,在训练过程中又手动进行了调整。我们遵循的启发式方法是:以当前的学习速率训练,验证集上的错误率停止降低时,将学习速率除以10.学习率初始时设为0.01,并且在终止前减少3次。我们使用120万张图像的训练集对网络进行了大约90次迭代的训练,这在两块NVIDIA GTX 580 3GB GPU上花费了大约5到6天的时间。

    6、结果

    我们在ILSVRC-2010上取得的结果如表1所示。我们的网络的top-1和top-5测试集错误率分别为37.5%和17.0%。在ILSVRC-2010比赛期间取得的最佳成绩是47.1%和28.2%,其方法是对六种不同的稀疏编码模型所产生的预测结果求平均[2]。此后公布的最佳结果为45.7%、25.7%,其方法是对两种经过密集采样的特征[24]计算出来的Fisher向量(FV)训练的两个分类器取平均值。
    我们的网络实现了37.5%和17.0%的前1和前5个测试集错误率5。在ILSVRC-2010比赛期间取得的最佳成绩是47.1%和28.2%,其中一种方法是对六种针对不同特征进行训练的稀疏编码模型所产生的预测进行平均[2],此后最佳公布结果为45.7%, 25.7%,其中一种方法是:对两个在不同取样密度的Fisher向量上训练的分类器取平均。
    png
    我们还在ILSVRC-2012竞赛中使用了我们的模型,并在表2中给出了我们的结果。由于ILSVRC-2012测试集标签未公开,因此我们无法给出我们测试过的所有模型在测试集上的错误率。在本节的其余部分中,我们将验证集和测试集的错误率互换,因为根据我们的经验,它们之间的差值不超过0.1%(见表2)。本文描述的CNN的top-5错误率达到了18.2%。对五个相似CNN的预测结果计算均值,得到的错误率为16.4%。单独一个CNN,在最后一个池化层之后,额外添加第六个卷积层,对整个ImageNet Fall 2011 release(15M images, 22K categories)进行分类,然后在ILSVRC-2012上“微调”(fine-tuning)网络,得到的错误率为16.6%。对整个ImageNet Fall 2011版本的数据集下预训练的两个CNN,求他们输出的预测值与前面提到的5个不同的CNN输出的预测值的均值,得到的错误率为15.3%。比赛的第二名达到了26.2%的top-5错误率,他们的方法是:对几个在特征取样密度不同的Fisher向量上训练的分类器的预测结果取平均的方法[7]。
    png
    最后,我们还在ImageNet Fall 2009版本的数据集上提交了错误率,总共有10,184个类别和890万张图像。在这个数据集中,我们遵循文献中的使用一半图像用于训练,一半图像用于测试的惯例。由于没有建立测试集,所以我们的拆分方法有必要与先前作者使用的拆分方法不同,但这并不会对结果产生显著的影响。我们在这个数据集上的top-1和top-5错误率分别是67.4%和40.9%,是通过前面描述的网络获得的,但是在最后的池化层上还有额外的第6个卷积层。该数据集此前公布的最佳结果是78.1%和60.9%[19]。

    6.1、定性评估(Qualitative Evaluations)

    png
    图3显示了由网络的两个数据连接层学习得到的卷积内核。该网络已经学习到许多频率和方向提取的内核,以及各种色块。请注意两个GPU所展现的不同特性,这也是3.5节中介绍的限制互连的结果。GPU1上的内核在很大程度上与颜色无关,然而GPU2上的内核在很大程度上都于颜色有关。这种特异性在每次迭代期间都会发生,并且独立于任何特定的随机权重初始化过程(以GPU的重新编号为模)。
    png
    在图4的左边,我们通过计算8张测试图像的top-5预测来定性评估网络的训练结果。请注意,即使是偏离中心的物体,如左上角的螨虫,也可以被网络识别出来。大多数top-5的标签都显得比较合理。例如,只有其他类型的猫才被认为是豹子的可能标签。在某些情况下(栅栏、樱桃),照片的关注点存在模糊性,不知道到底该关注哪个。
    另一个研究可视化的网络的方法是,考虑由最后一个4096维隐含层中的图像的特征的激活函数输出值。如果两幅图像产生有的欧氏距离,我们可以认为高层次的神经网络认为它们是相似的。图4显示了测试集中的5个图像和来袭训练集的6个图像,这些图像根据这种度量方法来比较它们中的哪一个与其最相似。请注意,在像素层次上,待检测的训练图像通常不会与第一列中的查询图像有较小的L2距离。例如,检索到的狗和大象有各种不同的姿势。我们在补充材料中提供了更多测试图像的结果。
    通过使用欧式距离来计算两个4096维实值向量的相似性,效率不高,但是通过训练自编码器可以将这些向量压缩为较短的二进制码,能够使其更高效。与应用自编码器到原始像素[14]相比,这应该是更好的图像检索方法。它不使用图像标签,因此更秦翔宇检索具有相似图案边缘的图像,不管它们的图像语义是否相似。

    7、讨论

    我们的研究结果表明,一个大的深层卷积神经网络能够在纯粹使用监督学习的情况下,在极具挑战性的数据集上实现破纪录的结果。值得注意的是,如果移除任何一个卷积层,网络的性能就会下降。例如,删除任何中间层的结果会导致网络性能的top-1错误率下降2%。因此网络的深度对于实现我们的结果真的很重要。
    为了简化我们的实验,我们没有使用任何无监督的预训练方法,尽管这样可能会有所帮助,特别是如果我们获得了足够的计算能力来显著地增加网络的大小而不会相应地增加已标记数据的数量。到目前为止,我们的结果已经获得了足够的进步,因为我们已经使网络更大,并且训练了更长时间。但我们仍然有很大的空间去优化网络,使之能够像人类的视觉系统一样感知。最后,我们希望对视频序列使用非常大的深度卷积神经网路,其中时间结构提供了非常有用的信息,这些信息往往在静态图像中丢失了,或者说不太明显。

    参考文献

    [1] R.M. Bell and Y. Koren. Lessons from the netflix prize challenge. ACM SIGKDD Explorations Newsletter,9(2):75–79, 2007.
    [2] A. Berg, J. Deng, and L. Fei-Fei. Large scale visual recognition challenge 2010. www.imagenet.org/challenges. 2010.
    [3] L. Breiman. Random forests. Machine learning, 45(1):5–32, 2001.
    [4] D. Cire¸san, U. Meier, and J. Schmidhuber. Multi-column deep neural networks for image classification. Arxiv preprint arXiv:1202.2745, 2012.
    [5] D.C. Cire¸san, U. Meier, J. Masci, L.M. Gambardella, and J. Schmidhuber. High-performance neural networks for visual object classification. Arxiv preprint arXiv:1102.0183, 2011.
    [6] J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. Fei-Fei. ImageNet: A Large-Scale Hierarchical Image Database. In CVPR09, 2009.
    [7] J. Deng, A. Berg, S. Satheesh, H. Su, A. Khosla, and L. Fei-Fei. ILSVRC-2012, 2012. URL http://www.image-net.org/challenges/LSVRC/2012/.
    [8] L. Fei-Fei, R. Fergus, and P. Perona. Learning generative visual models from few training examples: An incremental bayesian approach tested on 101 object categories. Computer Vision and Image Understanding, 106(1):59–70, 2007.
    [9] G. Griffin, A. Holub, and P. Perona. Caltech-256 object category dataset. Technical Report 7694, California Institute of Technology, 2007. URL ttp://authors.library.caltech.edu/7694.
    [10] G.E. Hinton, N. Srivastava, A. Krizhevsky, I. Sutskever, and R.R. Salakhutdinov. Improving neural networks by preventing co-adaptation of feature detectors. arXiv preprint arXiv:1207.0580, 2012.
    [11] K. Jarrett, K. Kavukcuoglu, M. A. Ranzato, and Y. LeCun. What is the best multi-stage architecture for object recognition? In International Conference on Computer Vision, pages 2146–2153. IEEE, 2009.
    [12] A. Krizhevsky. Learning multiple layers of features from tiny images. Master’s thesis, Department of Computer Science, University of Toronto, 2009.
    [13] A. Krizhevsky. Convolutional deep belief networks on cifar-10. Unpublished manuscript, 2010.
    [14] A. Krizhevsky and G.E. Hinton. Using very deep autoencoders for content-based image retrieval. In ESANN, 2011.
    [15] Y. Le Cun, B. Boser, J.S. Denker, D. Henderson, R.E. Howard, W. Hubbard, L.D. Jackel, et al. Handwritten digit recognition with a back-propagation network. In Advances in neural information processing systems, 1990.
    [16] Y. LeCun, F.J. Huang, and L. Bottou. Learning methods for generic object recognition with invariance to pose and lighting. In Computer Vision and Pattern Recognition, 2004. CVPR 2004. Proceedings of the 2004 IEEE Computer Society Conference on, volume 2, pages II–97. IEEE, 2004.
    [17] Y. LeCun, K. Kavukcuoglu, and C. Farabet. Convolutional networks and applications in vision. In Circuits and Systems (ISCAS), Proceedings of 2010 IEEE International Symposium on, pages 253–256. IEEE, 2010.
    [18] H. Lee, R. Grosse, R. Ranganath, and A.Y. Ng. Convolutional deep belief networks for scalable unsupervised learning of hierarchical representations. In Proceedings of the 26th Annual International Conference on Machine Learning, pages 609–616. ACM, 2009.
    [19] T. Mensink, J. Verbeek, F. Perronnin, and G. Csurka. Metric Learning for Large Scale Image Classification: Generalizing to New Classes at Near-Zero Cost. In ECCV - European Conference on Computer Vision, Florence, Italy, October 2012.
    [20] V. Nair and G. E. Hinton. Rectified linear units improve restricted boltzmann machines. In Proc. 27th International Conference on Machine Learning, 2010.
    [21] N. Pinto, D.D. Cox, and J.J. DiCarlo. Why is real-world visual object recognition hard? PLoS computational biology, 4(1):e27, 2008.
    [22] N. Pinto, D. Doukhan, J.J. DiCarlo, and D.D. Cox. A high-throughput screening approach to discovering good forms of biologically inspired visual representation. PLoS computational biology, 5(11):e1000579, 2009.
    [23] B.C. Russell, A. Torralba, K.P. Murphy, and W.T. Freeman. Labelme: a database and web-based tool for image annotation. International journal of computer vision, 77(1):157–173, 2008.
    [24] J. Sánchez and F. Perronnin. High-dimensional signature compression for large-scale image classification. In Computer Vision and Pattern Recognition (CVPR), 2011 IEEE Conference on, pages 1665–1672. IEEE, 2011.
    [25] P.Y. Simard, D. Steinkraus, and J.C. Platt. Best practices for convolutional neural networks applied to visual document analysis. In Proceedings of the Seventh International Conference on Document Analysis and Recognition, volume 2, pages 958–962, 2003.
    [26] S.C. Turaga, J.F. Murray, V. Jain, F. Roth, M. Helmstaedter, K. Briggman, W. Denk, and H.S. Seung. Convolutional networks can learn to generate affinity graphs for image segmentation. Neural Computation, 22(2):511–538, 2010.

    展开全文
  • AlexNet论文解读

    千次阅读 2022-02-19 11:02:03
    AlexNet论文翻译及解读

    AlexNet论文翻译及解读

    摘要

    1、网络结构

    卷积层:5个(其中一些后面跟着最大池化层)

    全连接层:3个(连接着一个最终是1000路的softmax)

    2、tips

    非饱和神经元,使用GPU实现

    Dropout正则化方法:减少全连接层过拟合现象

    3、结果

    15.3%的错误率

    一、介绍

    Imagenet数据集:包含1500万张22000种类别的高分辨率图像

    Alexnet模型还需要有先验知识

    1、本文的特别贡献

    ① 训练了一个很大的CNN

    ② 基于GPU实施2D卷积

    ③ 网络中包含了大量新的、不经常出现的特征(在第三部分出现)

    ④ 有效技巧阻止过拟合(第四部分出现)

    ⑤ 5个卷积层和3个全连接层(这种深度已经使得性能达到最优,若是移去一层卷积层(每个卷积层都包含着不超过总模型的1%的参数)则性能将变差)

    2、some notes

    ① 网络大小的限制因素:GPU的显存、训练时间(人为想去控制的)

    ② 训练时间:5~6天。训练工具:2块GTX 580 GPU(显存3G)

    ③ 将来可以提升性能的限制因素:更快的GPU、更大的数据集

    二、数据集

    ILSVRC挑战赛:用的数据集都是ImageNet的子数据集(训练集:120万张,验证集:5万张,测试集:15万张)

    ImageNet习惯提交两种错误率报告:TOP-1错误率和TOP-5错误率。

    Top-5错误率

    一个图片经过网络,得到预测类别的概率,如果概率前五(top-5)中包含正确答案,即认为正确。top-5错误率就是Top-5 = (正确标记 不在 模型输出的前5个最佳标记中的样本数)/ 总样本数。

    Top-1错误率

    一个图片,如果概率最大的是正确答案,才认为正确。Top-1 = (正确标记 不是 模型输出的最佳标记的样本数)/ 总样本数。
    ————————————————
    版权声明:本文为CSDN博主「JanzeeLiu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_36415932/article/details/83029564

    1、对数据集的处理方法

    下采样图片到256*256(ImageNet图片集分辨率不一)

    下采样方法:给定一个举行图像,首先重新缩放图像使短边的长度为256,然后从结果中裁剪出图像中心的256×256的图片

    下采样(图像插值)上采样(降采样)
    目的1)使得图像符合显示区域的大小 2)生成对应图像的缩略图放大原图,从而使得图像可以显示在更高分辨率的显示设备上
    原理对于一幅图像I尺寸为M×N,对其进行s倍下采样,即得到(M/s)*(N/s)尺寸的得分辨率图像,当然s应该是M和N的公约数才行,如果考虑的是矩阵形式的图像,就是把原始图像s×s窗口内的图像变成一个像素,这个像素点的值就是窗口内所有像素的均值。图像放大几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素。

    对图像的处理:没有进行预处理,只是将输入图像做了去均值操作。在居中的像素的原始RGB值训练网络。

    三、网络结构

    image-20220117115850766

    ​ 网络架构示意图,显示了两个GPU具体的工作划分:一个 GPU 运行顶层部分,而另一个 GPU 运行底层部分。GPU 仅在某些层进行通信。 网络的输入为 150,528 维。

    1、非线性激活函数:ReLU

    用ReLU而不用tanh和softmax原因:深度卷积神经网络中ReLU的训练速度更快。

    image-20220117151146552

    此图表示在CIFAR-10数据集上用ReLu(实线)训练到达25%错误率所需的迭代次数比用tanh要少得多(快至少6倍)

    2、在多个GPU上并行训练

    ①将一半的神经元放置到不同的两块GPU,使用的小trick是GPU只在特定的层中通信

    ②产生的体系结构与“柱状”CNN相似,使得这种结构训练出的模型错误率相较于在一个GPU上训练每个卷积层中内核为一半的网络相比要降低了1.7%(top-1)和1.2(top-5)

    ③双GPU网络比单GPU网络训练速度更快【单GPU网络实际上与最终卷积层中的双GPU网络具有相同数量的内核, 这是因为网络的大部分参数都在第一个全连接层中,该层将最后一个卷积层作为输入。 因此,为了使两个网络拥有大致相同数量的参数,我们没有将最终卷积层的大小减半(也没有将后面的全连接层大小减半)。因此这种类比是相对“偏心”的,更加偏向于单GPU网络,因为它要比减半后的双GPU网络更大】

    3、局部响应归一化(LRN)

    归一化(Normalization 和 Min-Max Scaling)和标准化(Normalization)的原理以及作用

    image-20220117154821135

    ①归一化的意义:1) 提高准确率、收敛速度;2) 消除奇异样本数据影响

    ②两者区别:

    1)归一化:其实是将数据集归属到0-1范围内,从公式可以看出,他的缩放和最大值、最小值有关系

    2)标准化:他的输出范围并不是0-1,而是负无穷到正无穷,他的缩放是和所有点都有关系,并且处理后的特征是符合标准正态分布(均值为0,方差为1)

    特别注意:1)归一化和标准化均不会改变数据分布;2)归一化缩放的比例仅仅和极值有关,而标准化缩放的比例和整体数据集有关

    ③使用场景

    • 输出结果范围有要求,用归一化
    • 存在异常值和较多噪音,用标准化
    • 数据较为稳定,不存在极端的最大最小值,用归一化
      ————————————————
      版权声明:本文为CSDN博主「拼命_小李」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
      原文链接:https://blog.csdn.net/m0_43432638/article/details/92798662

    正则化(Regularization):主要用于避免过拟合的产生和减少网络误差。

    image-20220117160224156

    image-20220117160431411

    image-20220117160444595
    参考:数据预处理:标准化,归一化,正则化

    局部响应归一化处理方法类似于生物神经元的横向抑制机制,可以理解为将局部响应最大的再放大,并抑制其他响应较小的(放大局部显著特征,作用还是提高鲁棒性)。在用ReLU非线性层之后用到局部响应归一化在特定的层。

    作用:用LRN方法后减少了误差分别为1.4%(top-1)和1.2%(top-5)

    4、重叠最大池化层

    ①作用:

    1)相对于传统的no-overlapping pooling,采用Overlapping Pooling不仅可以提升预测精度,同时一定程度上可以减缓过拟合。
    2)相比于正常池化(步长s=2,窗口z=2) 重叠池化(步长s=2,窗口z=3) 可以减少top-1, top-5分别为0.4% 和0.3%;重叠池化可以避免过拟合。

    image-20220117170942122

    ②结果:相较传统池化错误率分别下降0.4%(top-1)和0.3%(top-5)

    5、整个架构

    ①此架构的优点:网络架构最大化了多项式罗杰斯特回归目标,相当于最大化预测分布下的训练样本中正确标签的对数概率的平均值。(此为softmax定义)

    ②架构简述:

    1)第2、4、5个卷积层只与同一GPU上的前一层内核图相连接,第3个卷积层与第二个的所有内核图都有通连。

    2)FC层与之前层的所有神经元均相连

    3)LRN跟在第1、2个卷积层后面

    4)重叠最大池化层跟在LRN层和第5个卷积层之后。

    5)5个卷积层和3个FC层输出均作ReLU处理

    ③AlexNet运作流程

    conv1:输入→卷积→ReLU→局部响应归一化→重叠最大池化层

    conv2:卷积→ReLU→局部响应归一化→重叠最大池化层

    conv3:卷积→ReLU

    conv4:卷积→ReLU

    conv5:卷积→ReLU→重叠最大池化层(经过这层之后还要进行flatten展平操作)

    FC1:全连接→ReLU→Dropout

    FC2:全连接→ReLU→Dropout

    FC3(可看作softmax层):全连接→ReLU→Softmax

    四、减少过拟合

    两种方法:数据增强和Dropout

    1、数据增强

    最简单、常用的方法:保留标签转换

    本文方法优点:不需要过多运算、不需占据很多内存。同时用CPU处理转换操作,用GPU训练模型。

    ①第一种方式:生成图像平移、水平翻转

    ​ 通过随机截取输入中固定大小的图片,并做水平翻转,扩大数据集,减少过拟合情况,数据集可扩大到原来的2048倍 :(256-224)^2 * 2 = 2048。在做预测时,取出测试图片的十张patch(四角+中间,再翻转)作为输入,十张patch在softmax层输出取平均值作为最后的输出结果。

    ②第二种方式:改变训练图片的RGB通道值

    ​ 对ImageNet训练集的RGB像素值做PCA(主成分分析),对每一张训练图片,加上多个找到的主成分,增加的幅度与相应的特征值乘以均值为0标准差为0.1的高斯分布的随机变量成正比。
    作用:经过做PCA分析的处理,减少了模型的过拟合现象。可以得到一个自然图像的性质,改变图像的光照的颜色和强度,目标的特性是不变的,并且这样的处理有利于减少过拟合。

    结果:TOP-1错误率减少了1%

    2、Dropout

    方法:将每个隐藏神经元的输出设置为0的概率为0.5,以这种方式被扔出去的神经元不对网络的前向以及后向传播做出贡献。

    作用:dropout技术减少了神经元之间的耦合,在每一次传播的过程中,hidden层的参与传播的神经元不同,整个模型的网络就不相同了,这样就会强迫网络学习更robust的特征,从而提高了模型的鲁棒性

    注:对采用dropout技术的层,都将输出乘以0.5,这是一个由指数级数量的Dropout网络产生的预测分布下的几何平均的合理近似值。

    应用于AlexNet网络:在前两个FC层都用到了Dropout。Dropout方法使得错误率收敛所需的迭代次数增加了将近一倍,能够很好的防止过拟合。

    五、学习的一些细节

    超参数设定:用随机梯度下降法训练模型,batch size = 128,momentum = 0.9,权重衰减 = 0.0005(当作正则化器使用,可以减少模型的训练误差),学习率=0.01。

    初始化:①从标准差为0.01,均值为0的高斯分布初始化每一层的权重。②将第2、4、5个卷积层和全连接起来的隐藏层的神经元偏置初始化为常数1(这样的初始化通过为ReLU提供正的输入加速了初期阶段网络的学习)③将剩余层的神经元偏置初始化为常数0。

    学习率:所有层均相等,在训练中会人为调整。我们遵循的启发式方法是,当验证集的错误率不再随当前学习率提高时,将学习率除以 10。学习率初始化为0.01并在终止前减少三次。

    六、结果分析

    1、量化评估

    两个GPU表现出的专门性不同, GPU 1 上的内核很大程度上与颜色无关,而 GPU 2 上的内核很大程度上与颜色相关。 这种专门化发生在每次运行期间,并且独立于任何特定的随机权重初始化。

    image-20220117203914559

    ​ 通过计算其对 8 个测试图像的前 5 个预测来定性地评估网络所学到的知识。大部分都是合理的

    七、讨论

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

    ​ 为了简化我们的实验,我们没有使用任何无监督的预训练,即使我们认为它会有所帮助,特别是如果我们获得足够的计算能力来显著增加网络的大小而没有获得相应增加的标记数据量。 到目前为止,我们的结果已经得到了改善,因为我们已经使我们的网络更大并且训练的时间更长,但是为了匹配人类视觉系统的推断时间路径,我们还有很多工作要做。 最终,我们希望在视频序列上使用非常大且深度的卷积网络,其中短时结构提供了非常有用的信息,而这些信息在静态图像中缺失或不太明显。
    果确实很重要。

    ​ 为了简化我们的实验,我们没有使用任何无监督的预训练,即使我们认为它会有所帮助,特别是如果我们获得足够的计算能力来显著增加网络的大小而没有获得相应增加的标记数据量。 到目前为止,我们的结果已经得到了改善,因为我们已经使我们的网络更大并且训练的时间更长,但是为了匹配人类视觉系统的推断时间路径,我们还有很多工作要做。 最终,我们希望在视频序列上使用非常大且深度的卷积网络,其中短时结构提供了非常有用的信息,而这些信息在静态图像中缺失或不太明显。

    谈谈自己的理解和总结

    结论:整体上AlexNet参数计算量大,较臃肿,但是使用的一些小Tips为后面经典网络的提出奠定了基础。

    Tip1→使用LRN层(局部响应归一化):给神经元一个侧向抑制效果,即一个神经元激活之后,其他神经元会受到抑制,这和生物规律有着相似之处。AlexNet论文认为LRN可以很好防止过拟合,但是此Tip在VGG中被抛弃,原因是该操作基本没有作用而会增加计算量。

    Tip2→重叠池化:AlexNet认为此层可以防止过拟合,但是后面的网络也不采取这种操作了。

    Tip3→数据增强:扩充训练集,采用水平翻转、随即裁剪和对RGB通道进行颜色和光照变换(PCA)的方法。

    Tip4→dropout:用在全连接层有效防止过拟合。

    dropout作用角度①:打破神经元之间的联合依赖适应性。

    dropout作用角度②:模型集成。若dropout率采用0.5,而该层神经元有10个神经元,也就是说这10个神经元各有一半的概率存在或不存在,即可以当作把2^10个模型集成在了该层。

    dropout作用角度③:数据增强的作用。

    Tip5→使用ReLU非线性激活函数:使得训练速度更快。

    AlexNet代码实现

    # 值得注意的一点:原图输入224 × 224,实际上进行了随机裁剪,实际大小为227 × 227。
    import torch.nn as nn
    import torch
    # 将双GPU合并为一个,所以每一层的通道数都要翻倍
    class AlexNet(nn.Module):
        def __init__(self, num_classes=1000, init_weights=False):
            super(AlexNet, self).__init__()
            self.features = nn.Sequential(
                nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=0),   # [3, 227, 227] → [96, 55, 55]
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=3, stride=2, padding=0),        # [96, 55, 55] → [96, 27, 27]
                nn.Conv2d(48, 256, kernel_size=5, stride=1, padding=2),  # [96, 27, 27] → [256, 27, 27]
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=3, stride=2),                   # [256, 27, 27] → [256, 13, 13]
                nn.Conv2d(256, 384, kernel_size=3, stride=1, padding=1), # [256, 13, 13] → [384, 13, 13]
                nn.ReLU(inplace=True),
                nn.Conv2d(384, 384, kernel_size=3, stride=1, padding=1), # [384, 13, 13] → [384, 13, 13]
                nn.ReLU(inplace=True),
                nn.Conv2d(384, 256, kernel_size=3, stride=1, padding=1), # [384, 13, 13] → [256, 13, 13]
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=3, stride=2, padding=0),                   # [256, 13, 13] → [256, 6, 6]
            )
            self.classifier = nn.Sequential(
                nn.Dropout(p=0.5),
                nn.Linear(256 * 6 * 6, 2048),
                nn.ReLU(inplace=True),
                nn.Dropout(p=0.5),
                nn.Linear(2048, 2048),
                nn.ReLU(inplace=True),
                nn.Linear(2048, num_classes),
            )
            if init_weights:
                self._initialize_weights()
    
        def forward(self, x):
            x = self.features(x)
            x = torch.flatten(x, start_dim=1)
            x = self.classifier(x)
            return x
    
        def _initialize_weights(self):
            for m in self.modules():
                if isinstance(m, nn.Conv2d):
                    nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
                    if m.bias is not None:
                        nn.init.constant_(m.bias, 0)
                elif isinstance(m, nn.Linear):
                    nn.init.normal_(m.weight, 0, 0.01)
                    nn.init.constant_(m.bias, 0)
    
    展开全文
  • AlexNet论文笔记总结

    2019-04-09 14:53:48
    AlexNet论文笔记总结,比阅读原文要简单一些,加入了自己的思考
  • Alexnet论文+翻译.zip

    2019-09-06 20:30:21
    该资源为论文原文和我自己翻译的alexnet论文。 AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的。也是在那年之后,更多的更深的神经网络被提出,比如优秀的vgg,GoogLeNet。 这对于传统...
  • Alexnet论文介绍(超详细)——ImageNet Classification with Deep Convolutional Neural Networks

    近期开始阅读cv领域的一些经典论文,本文整理计算机视觉的奠基之作——Alexnet

    论文原文:ImageNet Classification with Deep Convolutional Neural Networks(有需要论文原文的可以私信联系我)

    本文的阅读方法是基于李沐老师的B站讲解视频,需要细致去看的小伙伴可以去搜索,链接如下:

    9年后重读深度学习奠基作之一:AlexNet【论文精读】_哔哩哔哩_bilibili

    本文整理用于之后自己能够更快的回忆起这篇论文,所以有些地方记录的可能没那么严谨,有问题的地方欢迎各位指出和讨论,我及时修改,谢谢各位!

    如果该论文笔记对你有所帮助,希望可以点个赞关注一下,之后会继续更新cv领域的一些经典论文的笔记,谢谢大家!

    当我们在阅读一篇论文时,可以分为三遍阅读:

    目录

    第一遍阅读:

    Abstract—摘要:

    Discussion—讨论

    Figure and Table—重要的图和表

     第二遍阅读:

    Introduce—介绍

    The Dataset—数据集

    The Architecture—网络结构

    ReLU Nonlinearity—非线性激活函数ReLU

    Training on Multiple GPUs—用多个GPU训练

    Local Response Normalization——局部归一化

    Overlapping Pooling—重叠池化

    Overall Architecture—整体网络架构

    Reducing Overfitting—减少过拟合

    Data Augmentation—数据增强

    Dropout—正则化

    Details of learning—学习的细节

     Results—实验结果

    Qualitative Evaluations—定性评估

    第三遍阅读


    第一遍阅读:

    Abstract—摘要:

    摘要简单总结来说提出了以下四点

    • 表示了我们用了一个深度卷积神经网络来进行图片分类,取得了一个非常好的效果。
    • 深度卷积网络由60million个参数,65w个神经元,以及五个卷积层三个全连接层组成。
    • 为了加快训练,用到了GPU加速实现。
    • 用了dropout这个正则化方法来减少过拟合。

    Discussion—讨论

    总结来说讨论就是作者的一些吐槽以及后续的一些工作打算,大概分为了以下三点:

    • 我们的研究表明深度很重要,如果去掉一个卷积层,那么准确率会下降2%。(这一点现在看来没那么准确,因为少一层导致准确率下降也有可能是因为参数没找好,找好参数也可以达到之前的准确率的,所以现在来看,深度和宽度都很重要
    • 没有使用无监督进行预训练。这个是有一定历史背景的,在Alexnet网络提出之前有监督学习打不过无监督学习,但是在Alexnet提出之后,引起了有监督学习的热潮,直到最新的语言模型bert的提出,才慢慢的将人们又拉回了无监督学习。
    • 最后提出想将更大更深的神经网络应用到video上,因为video计算量非常大,且有时序信息(时序信息有很多能帮助你理解在空间的图片信息)。时序信息在现在来看发展也是比较慢的。

    Figure and Table—重要的图和表

    • 左侧图:八张ILSVRC-2010测试图像和我们的模型认为最可能的五个标签。正确的标签写在每张图片下面,分配给正确标签的概率也用红色条显示(如果恰好位于前5位)。
    • 右侧图:第一列中有五幅ILSVRC-2010测试图像。剩下的列显示了在最后一个隐藏层中生成特征向量的六个训练图像,这些特征向量与测试图像的特征向量之间的欧氏距离最小(简单来说可以理解为倒数第二层提取出的特征向量最相似的几个图像,也就是说我们的神经网络在最后第二层输出的特征,在语义空间里面表现的非常好)。

     下面两张表格是与之前最好的模型做的对比以及一些数据,这里不做详细解释了:

     

     

     结构流程图非常重要,在第二遍阅读时再详细解释:

     


     第二遍阅读:

    Introduce—介绍

    Introduce部分主要说了以下几点:

    • 引出ImageNet这个数据集很大很好。
    • 对于ImageNet这个很大的模型,我们采用CNN来作为我们的模型。
    • 对于CNN计算成本高(容易overfitting+训练不动),我们利用GPU以及高度优化的2D卷积来实现CNN的训练。
    • 主要贡献:我们训练了一个很大很好的模型,结果特别好。我们是怎么做的?用了一些不寻常的方法以及用了什么方法来避免过拟合,并且说明深度似乎很重要。
    • 网络的大小受到了GPU可用内存以及我们可容忍时间的影响,说了一下他们用的GPU。

    The Dataset—数据集

    • ImageNet数据集包含超过1500万张高分辨率图像的数据集,这些图像属于大约22000个类别ILSVRC的比赛,ILSVRC使用ImageNet的一个子集1000个类别中的每一个都有大约1000个图像。总共大约有120万张培训图像、50000张验证图像和150000张测试图像。
    • 图像处理:ImageNet这个数据集不像其他数据集一样,它没有对数据进行裁剪。所以我们要先对数据集进行裁剪,裁剪为:256*256的尺寸大小。具体裁剪方法:对原始图片进行缩放,将短边变成256的大小,另一个长边在这一步操作中也会根据长宽比进行调整,然后第二步从图片中心对长边进行两侧的裁剪,得到256*256的尺寸大小。
    • 我们没有对图像进行任何的预先处理,比如抽取特征、抽取SIFT特征等等,我们实现了一个end to end 的方式,也就是说直接将原始图片(原始文本)输入到神经网络模型,他就能实现我们想要的功能。

    The Architecture—网络结构

    网络架构分为八个层,其中有五个卷积层和三个全连接层。下面每一小节都介绍了一些新颖的不同寻常的功能:

    ReLU Nonlinearity—非线性激活函数ReLU

    讲述了一下我们采用的激活函数是非线性的ReLU函数。这个非线性激活函数是不饱和的,但是训练速度要比饱和的非线性激活函数tanh和sigmoid要快的多。(但具体为什么快没具体说,现在的视角看来也没快多少,都差不多,但是ReLU函数要简单所以用的多

    下图的实线为采用ReLU的误差下降率,虚线则是tanh的下降率,明显ReLU下降起来要快得多。

    Training on Multiple GPUs—用多个GPU训练

    这一部分偏工程型,不用太注意这些细节,主要是说了图片太多我们无法在一个GPU上训练,所以把网络切开训练,之后的架构图中会说明怎么切的,切完之后用了两个GPU去训练。

    Local Response Normalization——局部归一化

    总结来说,在ReLU层之前我们应用了normalization得到了一个更好的效果。(:这个现在看来不重要了,因为之后没人用过这种normalization技术,而且我们有了更好的normalization方法,下述方法也不用了,所以不重要)

    首先说了ReLU虽然有一个性质是说不需要input normalization来避免饱和,但是用一下normalization效果会更好

    下面复杂的公式可以忽略掉,但是这里我们也放上了:

    Overlapping Pooling—重叠池化

    采用了重叠pooling

    总结一些:一般来说两个pooling是不重叠的,但是这里采用了一种对传统的pooling改进的方式,效果很好。知道这些即可。

    Overall Architecture—整体网络架构

    上图为整体流程图,说明几点:

    1. 因为在两个GPU上运行,所以网络结构被一切为二,上下两部分各自训练各自的,各有各的参数核,结构都是一样的
    2. 整个结构有八层,前五层为卷积层,后三层为全连接层,最后再跟一个1000路的分类激活函数softmax,相当于多个logistic回归来进行多元分类。
    3. 二、四、五层只与自己之前的核有关系,就是只与自己这个GPU前一层训练的输出有关系。第三层卷积层与前一层的两个GPU训练出来的都有关系,在通道维度上做了一个融合。全连接层就与前一层中所有神经元相连。
    4. 之前提到的Response-normalization应用在了第一层和第二层的卷积层。
    5. 上一节提到的Max—pooling应用在了有Response-normalization的层以及第五卷积层。
    6. 八层每一层都应用了ReLU函数。
    7. 这些层的顺序:Response-normalization放在ReLU之前,然后Max—pooling跟在ReLU之后。
    8. 规律:我们输入的图片从一个又高又宽又扁的一个形状,慢慢变为了一个宽和高都很小,但是很长的一个张量,这是说我们的空间信息被压缩了也就是从一开始的224变为了后面的13,也就是13中的一个像素能表示之后一大片像素。通道数变多也就是变长了,通道数可以理解为对于一个模式的识别,例如通道数为192那么说明可以识别图中192个模式,例如猫腿、爪子这种模式。所以说整个过程就是空间信息被压缩,但是语义信息空间慢慢增加。

    总结:整个过程就是一张图片,经过模型处理变为了一个4096维的向量,这个向量可以把中间的语义信息表示出来。机器学习可以认为是一个压缩知识的过程;具体来讲就是我们原始的一个图片,文字或者视频输入到一个模型中,这个模型就会把它压缩为一个向量,这个向量机器可以识别,用来实现别的任务,例如分类等等。

    Reducing Overfitting—减少过拟合

    避免过拟合采用了两种方法:数据增强dropout

    Data Augmentation—数据增强

    减少图像数据过度拟合的最简单也是最常见的方法是使用保留标签的变换人为地放大数据集。这里用了两种方式:

    1. 通过从256×256图像中随机提取224×224的图像,并在这些提取的图像上训练我们的网络来实现这一点。这将使我们的培训集的规模增加了2048倍。但是有个问题也不能说就是2048倍,因为很多图片都是相似的。
    2. 采用PCA的方式对RGB图像的channel进行了一些改变,使图像发生了一些变化,从而扩大了数据集。

    Dropout—正则化

    随机的将隐藏层的输出以50%的概率设为0,相当于一个L2的正则化,只不过用了这种方式实现了L2正则化的功能。

    Details of learning—学习的细节

    • SGD:我们使用随机梯度下降法(SGD)训练我们的模型,批量大小为128,momentum为0.9(对传统SGD增加了动量这个观点,来解决传统SGD的一些问题,例如优化过程非常不平滑或者梯度下降很低效的时候),weight decay为0.0005(可以理解为是一个L2的正则化项,用在优化算法上而不是模型上)。我们发现,这种少量的weight decay对模型的学习很重要。换句话说,这里的weight decay不仅仅是一个正则化器:它减少了模型的训练误差。权重w的更新规则为

    • 初始化参数:用均值为0 ,方差为0.01的高斯随机变量去初始化了权重参数(0.01是一个非常好的数,不大也不小,如果网络过大,例如BERT ,我们才用到0.02)。然后偏置bias也进行了初始化,不过这里不太重要,因为数据平衡的话初始为0最好,但是这里初始1效果更好一些,这个地方也没有继续深入研究。

    • 学习率:我们在所有层上使用相同的学习率,设为0.01。但验证误差不降的时候我们就手动的乘以0.1,也就是降低十倍。也有自动的方法,例如Resnet,训练120轮epoch,初始学习率也是设为0.01,每30轮降低十倍,本文是训练了90个epoch,每一次是120w张图片。当然现在我们都不采用十倍十倍去降低了,我们采用更平滑的降低方式,例如利用cos函数去降低,如下图,蓝色线为本文中的降低方式,十倍十倍去降,红色线是我们现在用的,一开始学习率设的大一些,慢慢下降,这样更高效。

     Results—实验结果

    实验部分就知道效果就可以了,具体怎么实验的不用关心,除非你需要重复他的实验。

    小知识:训练集、验证集、测试集。验证集就是说用来调参的数据集,可以一直用来调参,但是测试集就运行几次用来看这个模型的效果怎么样。

    Qualitative Evaluations—定性评估

    第一遍阅读时讲的图,不作详述了。

    这里记录一点:就是说神经网络一直被人诟病的一个问题,不知道神经网络内部到底训练了一个什么东西,这里右边这个图展示出了最后4096维的向量,可以在一定程度证明神经网络内部的特征到底是一个什么东西。

    总结偏底层的神经元学习的是一些纹理、方向等;偏上的神经元则是学到的是全局点,例如一个手、一个头之类的。


    第三遍阅读

    再看一些第二遍未看懂的细节,例如激活函数的饱和和非饱和,这里不带着读第三遍了。

    展开全文
  • Alexnet 论文笔记

    2022-01-09 20:58:36
    Alexnet论文翻译 - 知乎 1. Alexnet的整体结构 8层神经网络,前五层为卷积层与池化层,最后三层为全连接层 (0)输入图像:224×224×3 (1)经历第一次卷积(C1):55×55×96 C1的基本结构为:卷积–>...
  • ImageNet Classification with Deep Convolutional Neural Networks 文献综述 阅读时间 :2021年10月15日 论文基本信息 作者在当时借助这篇论文...截至2020年,AlexNet论文已被引用超过54,000次。 --
  • 结合论文 《Rectified linear units improve restricted Boltzmann machines.》,我们把这种非线性的神经元称为修正线性单位(Rectified linear units)( ReLUs )。带有ReLUs的深度CNN的训练速度速度是tanh单元的...
  • AlexNet论文详解

    千次阅读 2018-11-18 23:38:10
    原文地址:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf 背景: 2012ILSVRC(Imagenet大规模视觉识别挑战赛)冠军。第一次有模型在lmagenet数据集上出色...
  • AlexNet论文笔记

    千次阅读 2022-03-27 21:24:50
    AlexNet论文笔记 算法概述 AlexNet网络可以被称为卷积神经网络的“开山之作”,精度和参数量相对后面的模型不是很优秀,但是卷积神经网络之所以可以迅速崛起,AlexNet起着至关重要的作用。 深度卷积卷积神经网络 ...
  • 论文原文:ImageNet Classification with Deep Convolutional Neural Networks Pytorch实现:AlexNet pytorch/vision GitHub 目录 一、背景 二、贡献 三、要点拆分 1、ReLU激活函数 2、GPU并行处理 3、局部...
  • 一起来欣赏这篇深度学习在CV领域的开山之作——AlexNet
  • Alexnet论文笔记

    2019-08-12 17:30:13
    文章目录ImageNet Classification with Deep Convolutional介绍主要贡献网络结构细节方法ReLU用 GPU 训练局部响应归一化(LRN: Local ...没有多少看论文的经验,也知道论文笔记非常重要。但是对于如何看和如何记录没...
  • AlexNet原文链接:http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf 文章目录0 摘要 0 摘要 我们训练了一个大型的深度卷积神经网络,将ImageNet lsvprc -2010竞赛中的120万张高分辨率图像分类到1000个不同的类...
  • ALexNet论文阅读

    2022-06-02 15:12:35
    AlexNet的神经网络有60,000,000个参数和650,000个神经元,包含了5个卷基层(其中一些之后连接了最大值池化层)以及3个全连接层,最后是一个1000维的softmax层。当前,机器学习方法在对象识别领域是有效的。...
  • 论文原文:ImageNet Classification with Deep Convolutional Neural Networks AlexNet,CNN的大火之作。 ILSVR2012冠军,自此掀起CNN研究热潮。 论文主要思想为三、四章,主要挑选此部分进行翻译+理解。 3 The ...
  • AlexNet论文总结

    2019-07-20 19:43:08
    原文:https://blog.csdn.net/weixin_38300566/article/details/80418016 AlexNet包含6千万个参数和65万个神经元,包含了5个卷积层,其中有几层后面跟着最大池化(max-pooling)层,以及3个全连接层,最后还有一个...
  • AlexNet论文阅读笔记

    2019-11-11 20:41:56
    目录前言AlexNet论文阅读笔记1 Introduction2 The Dataset3 The Architecture4 Reducing Overfitting5 Details of learning疑问和思考 前言     继续记录网络结构论文的笔记。这篇AlexNet论文展示了卷积神经网络...
  • AlexNet论文翻译(附原文
  • 一、AlexNet网络 资料推荐 PyTorch: 官方文档:https://pytorch.org/docs/stable/index.html PyTorch模型训练实用教程:https://github.com/TingsongYu/PyTorch_Tutorial 代码: paper with code:...
  • alexnet论文学习笔记

    2019-11-11 21:21:16
    (俗话说:大树底下好乘凉,站在大佬的肩膀上我就可以少写一点啦,哈哈) 原作地址:... 参考文章: 1、AlexNet论文(ImageNet Classification with Deep Conv...
  • AlexNet(ImageNet Classification with Deep Convolutional Neural Networks)开山之作 论文原文:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf 基于...
  • ImageNet Classification with Deep ...论文下载链接:https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf 摘要 我们训练了一个大型深度卷积神经网络来将Im...
  •   AlexNet是深度学习领军任务Geoffrey Hinton教授的学生Alex Krizhevsky提出来的。AlexNet在ILSVRC 2012竞赛中以压倒性的成绩获得了冠军。AlexNet是一个具有突破性意义的模型,在他之前,神经网络和深度学习都陷入...
  • 论文原文: 链接: http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf. 作为卷积神经网络的经典之作,AlexNet虽然发表许久但是任然具有阅读的意义,总结一些...
  • 摘要 我们训练了一个大型深度卷积神经网络来将ImageNet LSVRC-2010竞赛的120万高分辨率的图像分到1000不同的类别中。在测试数据上,我们得到了top-1 37.5%, top-5 17.0%的错误率,这个结果比目前的最好结果好很多。...
  • 论文题目和原文地址:ImageNet Classification with Deep Conventional Neural Networks 卷积在三通道上的操作 一般来说有几个卷积核,最终得到的featuremap就有几个。三通道的图片对应的卷积核也是三通道的,三个...
  • Alexnet主要内容 1.使用数据集为ImageNet 2.使用非饱和激活函数Relu比饱和激活函数具有更快的收敛速度 3.使用两个GPU并行训练 4.使用Local Response Normalization进行优化 5.网络结构:5层卷积层,3层全连接层,1,...
  • 目录: ...论文原文百度云资源链接:链接:https://pan.baidu.com/s/1WdZnD6aVzUXvzs9XxshROQ 提取码:hans 一、论文中涉及的“小知识点”汇总: 1、top-1 and top-5 error rates. top-1 and top-5

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,992
精华内容 1,196
关键字:

alexnet论文原文