论文解析四:AlexNet 使用深度卷积神经网络进行 ImageNet 分类

第一遍阅读:

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的可用内存影响,把网络分为两部分训练。

第二章: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上运行,所以网络结构被一切为二,上下两部分各自训练各自的,各有各的参数核,结构都是一样的;这种把模型切开训练的方法称为 model parallel 现在多用于自然语言处理的大模型当中
  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—减少过拟合

避免过拟合采用了两种方法:Data Augmentation (数据增强)和Dropout(正则化)

Data Augmentation—数据增强

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

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

Dropout—正则化

​ 随机的将隐藏层的输出以50%的概率设为0,相当于一个L2的正则化,只不过用了这种方式实现了L2正则化的功能。在这篇文章中,作者把Dropout放到两个全连接层,如果没有Dropout的话,就会造成**overfitting(过拟合)**非常严重,但是有这个Dropout会比其他的训练速度慢两倍,所以针对AlexNet来说,用了三个全连接层是该网络的一大瓶颈,所以导致模型特别大,放不进当初的GPU中。

​ 现在来说,CNN一般不会使用这么多全连接层,所以导致Dropout也不是那么重要,而且GPU内存也足够。
但是Dropout在RNN和Attension这两块领域应用非常广泛

第五章:Details of learning—学习的细节

SGD:我们使用随机梯度下降法(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维的向量,可以在一定程度证明神经网络内部的特征到底是一个什么东西。

Qualitative Evaluations—定性评估

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unknown To Known

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值