近期开始阅读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—摘要:

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

Discussion—讨论

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

Figure and Table—重要的图和表

Alexnet论文介绍(超详细)——ImageNet Classification with Deep Convolutional Neural Networks

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

 Alexnet论文介绍(超详细)——ImageNet Classification with Deep Convolutional Neural Networks

 Alexnet论文介绍(超详细)——ImageNet Classification with Deep Convolutional Neural Networks

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

 Alexnet论文介绍(超详细)——ImageNet Classification with Deep Convolutional Neural Networks

 第二遍阅读:

Introduce—介绍

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

The Dataset—数据集

The Architecture—网络结构

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

ReLU Nonlinearity—非线性激活函数ReLU

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

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

Alexnet论文介绍(超详细)——ImageNet Classification with Deep Convolutional Neural Networks

Training on Multiple GPUs—用多个GPU训练

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

Local Response Normalization——局部归一化

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

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

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

Alexnet论文介绍(超详细)——ImageNet Classification with Deep Convolutional Neural Networks

Overlapping Pooling—重叠池化

采用了重叠pooling

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

Overall Architecture—整体网络架构

Alexnet论文介绍(超详细)——ImageNet Classification with Deep Convolutional Neural Networks

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

  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—学习的细节

Alexnet论文介绍(超详细)——ImageNet Classification with Deep Convolutional Neural Networks

Alexnet论文介绍(超详细)——ImageNet Classification with Deep Convolutional Neural Networks

 Results—实验结果

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

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

Qualitative Evaluations—定性评估

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

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

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

第三遍阅读

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

发表回复