AlexNet论文阅读报告

  • 作者:sdau20171754
  • 分类: 深度学习
  • 发表日期:2020-07-30 22:30:07
  • 阅读:(179)
  • 评论(0)

ImageNet Classification with Deep Convolutional
Neural Networks
阅读报告

一、内容总结:

这篇文章主要介绍了Alexnet的相关内容,并将它用于ImageNet LSVRC-2010的分类。AlexNet 是一种深度的卷积神经网络,有650000个神经元,6000万参数。模型包括5个卷积层,卷积层后跟一些池化层和3个全连接层,最后使用了一个1000路的softmax。为了减少过拟合,模型采用了dropout正则化方法。下面,我详细介绍论文主要内容。

Introduction

要进行自然图像的识别,我们需要一个巨大的有标签的数据集,比如ImageNet,由超过1500万张有标签的高分辨率图像组成,包含22000个类别。

要从这么大的图像数据集中学习,我们需要一个学习能力很强的模型,模型还要有大量的先验知识来补充我们没有的数据。卷积神经网络的能力可以通过改变深度和宽度来控制,它们还可以对图像的性质做出强有力的、基本正确的假设。所以与标准的前馈神经网络相比,CNN的联系和参数更少,更加容易训练,也能达到差不多效果。在这里,作者使用了训练了一个巨大的卷积神经网络AlexNet,并在ImageNet上取得了很好的结果。

2 The Dataset

ImageNet数据集有1500万张高分辨率图片,属于22000个类别。这些图片从网络上搜集并被人工标记。每年都会举办一个ImageNet的挑战赛(ILSVRC),使用了ImageNet的一个子集,有1000个类别,每个类别约有1000张图像。总体上来说,大约有120万训练图片,5000张有效图片,和15000张测试图片。ILSVRC-2010是ILSVRC中唯一可以得到测试标签的版本,文章中的实验大部分在这上面进行。同时,文章中的模型也在ISVRC-2012上进行实验,这个数据集不能得到测试集标签。在ImageNet中。通常使用的误差率有两个:top1错误率和top5错误率,top-5错误率是模型认为最可能出现的5个标签中没有正确标签的测试图像的比例。ImageNet需要一个固定的输入维度,所以我们需要下采样到固定的256*256的分辨率。除了给每个像素减去平均激活值外我们不做其他的预处理,我们根据像素的原始RGB值训练我们的网络。

3 The Architecture

AlexNet一共8个学习层,5个卷积层3个全连接层,这里介绍模型的一些特点(越靠前的特点越重要)。

3.1 ReLU Nonlinearity

之前,我们一般使用tanh函数或者sigmoid函数来做激活函数,这样梯度可能减小到0,造成梯度下降缓慢。这里,我们采用非线性激活函数relu,公式为, ,可以加快模型的效率。

3.2 Training on Multiple GPUs

这篇文章发布时,主要使用的GTX 580 GPU,不足以支持训练,所以一般把网络分不到两个GPU上。我们采用的并行化方案本质上是将一半的内核(或神经元)放在每个GPU上,还有一个额外的技巧:GPU只在特定的层上通信。选择连接模式是交叉验证的一个问题,但这允许我们精确地调整通信量,直到它成为计算量的一个可接受的部分。双GPU训练可以大大提高运行训练速度。

3.3 Local Response Normalization

ReLUs具有理想的属性,即它们不需要输入规范化来防止它们饱和。然而,我们发现下面的局部响应归一化方案有助于泛化。定义r响应归一化激活值公式为:,其中a代表在位置(x,y)应用内核i在经过relu函数得到的激活值,这个加和在相同空间位置的n个“相邻”核映射上运行。这种响应归一化实现了一种形式的侧向抑制,在使用不同内核计算的神经元输出之间产生对大激活值的竞争。常量定义为k=2,n=6, α=10-4, β=0.75。这种响应式归一化使top-1误差率和top-5误差率分别减少了1.4%和1.2%。局部响应归一层现在其实并不常用,后续的研究发现这种方法其实并不太管用。

3.4 Overlapping Pooling

卷积神经网络的池化层总结了同一内核映射中相邻神经元组的输出。一个池化层可以被认为由一个间隔s为像素的池化单元网格组成,每个池化单元可以总结一个大小为z×z的以池化单元位置为中心的邻域。如果s<z,我们说池化层重叠,在这个模型中s=2,z=3,这样可以让top-1误差和top-5误差分别减少0.4%和0.3%。

3.5 Overall Architecture

最后,我们来看一下模型的总体结构。模型一共有8个带权重的层,前5层是卷积层,最后3层是全连接层。最后一个全连接层的输出加入一个1000路的softmax中,产生了对1000个类的概率分布。我们的网络最大化了多项logistic回归的目标。

第二、第四和第五卷积层的内核只与位于同一GPU上的前一层的内核映射相连接。第三个卷积层连接第二层的所有内核映射。全连接层的神经元连接前一层的所有神经元。响应正则化层跟在第一个卷积层和第二个卷积层后面。重叠的池化层跟在响应归一化层和第五个卷积层后面。Relu激活用在每一个卷积层和全连接层后面。

输入是224*224*3(吴恩达的课程中用的是227*227*3,效果更好)。第一个卷积层使用96个11*11*3的卷积核,步长为4,第二个卷积层使用256个5*5*48的核,第三个卷积层使用384个3*3*256的核,第四个卷积层使用384个3*3*192的核,第五个卷积层使用256个3*3*192的核,全连接层使用4096个神经单元。总体结构图如下所示:

4 Reducing Overfitting

这里介绍了两种方式来减少过拟合,分别为数据扩增和DropOut。

4.1 Data Augmentation

最有效的避免过拟合的方式就是数据扩增,这里介绍两种方法。第一种形式的数据增强包括生成图像平移和水平映像。我们首先从256*256的图像中随机提取出224*224的块,然后在这些块上训练网络。这样可以扩大我们的训练集。测试时,我们取出5个224*224的块和它们的水平映像进行预测,然后再对预测出的概率进行平均。

第二种形式的数据增强包括改变训练图像中RGB通道的强度。我们可以在训练集上的RBG值像素值的集合上进行PCA。对于每个训练图像,我们添加找到的主成分的倍数,其大小与用相应的特征值乘以从平均值为零,标准偏差为0.1的高斯分布中取得的随机变量的结果成正比,公式如下

4.2 Dropout

随机失活技术,每个隐藏神经元的输出都有0.5的概率失活(被设置为0)。被设为0的单元不对前向传播有贡献也不参与后向传播。每次输入时,神经网络产生一个不同的结构,但是这些结构共享相同的权重。神经元被迫学习更健壮的特征,以便与其他神经元的许多不同的随机子集结合使用。训练是,我们使用所有的神经元,但是把它们的输出乘0.5,。我们在模型的前两个全连接层使用drop out。

5 Details of learning

模型训练采用随机梯度下降法,batchsize为128,动量是0.9,权重衰减是0.0005,这可以让训练效果更好。我们从一个标准偏差为0.01的零均值高斯分布初始化每一层的权重。我们用常量1初始化第二层,第四层,第五层卷积层以及所有的全连接层的神经元偏置。剩下的偏置用常量0初始化。每一层都使用相同的学习率,并在训练过程中手动调整它。我们采用的启发式方法是,当验证错误率随着当前学习率停止提高时,将学习率除以10。学习率初始化为0.01。

6 Results

这部分主要介绍了AlexNet在实验中的表现。其中在ILSVRC-2010中最好结果为37.5%的top-1 错误率和17%的top5错误率。在ILSVRC-2012中单个模型可以达到40.7%的top-1错误率和18.2%的top-5错误率。

在这一部分中,作者还展示出了对一些图片用学习出的top-5错误率进行预测的结果,可以看到取得了不错的效果。甚至包括偏离中心的一些图像的,都能得到很好的识别。还有一种探测网络的视觉知识的方法是考虑考虑图像在最后的4096维隐藏层中引起的特征激活。如果两个图像产生的特征激活之间的欧几里得距离很小,我们说神经网络的高层次认为它们相似。不过通过计算欧几里得距离计算相似度效率不高,我们可以训练一个自编码器把这些向量压缩成短的二进制编码。

二、模型实现:

这里我使用pytorch实现AlexNet模型,然后用Fashion-MNIST进行演示。实现借鉴了动手学习深度学习(pytorch版)。

模型结构

 

 

训练和测试:

 

 

 

三、总结感悟

这是自己第一次系统的学习AlexNet,之前只是在吴恩达的深度课程中简单的学习过。通过论文,学习到了很多更细节的内容,包括一些超参数的设置等。不过,感觉论文中的结构说的还不是特别详细,比如没有详细说明池化层的参数和训练的过程。而且,双GPU训练,局部响应归一层等方法现在已经不再使用。这些内容可以结合吴恩达的课程和其他教程进一步补充。模型实现时,自己重新学习了一下pytorch,了解了基本的建模流程,也找到了适合自己的写法(继承module和sequential相结合)。在运行时,遇到一些问题,包括内存分配不够,require_grad默认为false等等,最终通过查阅资料成功解决。


提交评论区域

您尚未登录登录后方可评论 登录 or 注册

评论列表

暂无评论
div>