天天看点

CNN基础论文 精读+复现----AlexNet(一)

文章目录

  • ​​前言​​
  • ​​1-2页​​
  • ​​摘要与引言​​
  • ​​数据集​​
  • ​​3-5页​​
  • ​​Relu函数(ReLU Nonlinearity)​​
  • ​​多GPU并行(Training on Multiple GPUs)​​
  • ​​局部响应归一化( Local Response Normalization)​​
  • ​​重叠池化(Overlapping Pooling)​​
  • ​​整体结构(Overall Architecture)​​
  • ​​5-6页​​
  • ​​减少过拟合(Reducing Overfitting)​​
  • ​​数据增强​​
  • ​​Dropout​​

前言

上个礼拜复现了 LeNet-5,没看过的可以去看一下,CNN基础论文复现----LeNet5 (一). 这几天弄另一篇比较知名的论文AlexNet。

论文原版和中英文对照版放GitHub上了:​​https://github.com/shitbro6/paper​​

这篇论文和上一篇有很多相同的知识点,建议大概过一下LeNet,再看这个会轻松一些。

还好这篇文章比较短,只有9页。

1-2页

摘要与引言

这篇文章的结构比上一篇LeNet-5要清晰的多。

首先摘要说了一下背景,就是有个团队他们发明了一种新的网络模型,用它跑了一下2010年的竞赛数据集,取得了很好的效果,然后又改进了一下这个网络模型,并拿他去参加了2012年的竞赛,取得了第一名的好成绩,并且比第二名的正确率好很多。

摘要中有一句话 ​

​we achieved top-1 and top- 5 error rates of 37.5% and 17.0%​

​ 简单的说一下这里提到的 top-1 和 top-5错误率,

top-1:通俗的讲 假如模型预测只有一张狗的图片,且只能输出一个预测结果,如果预测的结果刚好为狗,则叫top-1正确率,反之,预测错误就叫top-1错误率。

top-5:同理top-1 ,这里输出的为五个预测结果,五个预测结果中错误的概率,就是top-5错误率。

之后的引言部分介绍了一下当前训练模型的弊端,就是在机器上训练的很好,然后放到现实生活中就不太行了,所以为了尽量改善这个情况,需要更好的模型和更大的数据(也就是防止过拟合导致现实情况表现变差),整篇文章似乎都在围绕如果防止过拟合这个主要问题展开的讨论。

这两部分提到的一些概念:

  • 卷积层、池化层、全连接层这种就不说了,上一篇文章中也说过了,可以看下面的链接。卷积神经网络基础
  • softmax:这个函数一般用于分类中的问题,就是将输出的值通过softmax映射到【0,1】上,用于表示概率问题,我觉得知道有这个作用就行了。​​深究softmax​​
  • 非饱和神经元(non-saturating neurons): 相对于饱和神经元来讲,饱和神经元最后的值会被挤压到一个特定的区间,比如sigmoid函数的[0,1] tanh函数的[-1,1],而这个文章中的非饱和函数使用的是relu 函数,他没有限制到特定的区间,所以没有最大值限制。
  • 过拟合,dropout:在我前一篇的文章介绍过了,这里就简单说一下,过拟合就是防止过分拟合训练集,把噪声也训练上了,dropout就是训练的时候故意扔掉一些特征,目的也是防止过拟合。

引言最后作者说了一下,网络共有8个学习层 其中,5个卷积层, 3个全连接层。

引言的最后作者说 ,使用 当年的 GTX580 上训练了五六天~好家伙,一会我就扔谷歌云上看看训练多久,也不知道谷歌云能不能在线下载这么大的数据集,我可不想下我电脑上。。。

数据集

第二页中间介绍了一下论文使用的数据集–ImageNet ,就是作者提到的竞赛中使用的数据集。

刚看了一下网上的简介,ImageNet数据集有1400W+的图片,2W多个类别??离谱啊,据说有1T的大小,我硬盘才512G。我感觉这个数据集如果云上下不下来的话我就用CIFAR10了。。。。

这里面的分辨率有很多种不同的像素分辨率,然后论文中说通过采样固定到统一的 256 * 256分辨率。

3-5页

上来第一段介绍了一下网络 它包含八个学习层–5 个卷积层和 3 个全连接层。

Relu函数(ReLU Nonlinearity)

作者提到使用Relu函数,可以提高训练速度,比tanh等快了6倍,并且还能防止梯度消失的现象。

前面介绍非饱和函数的时候也提到了,Relu函数通俗讲就是要么取0要么取本身 , 通常情况下 ​

​f(x) = max(0,x)​

​。

如果网络参数设置的不合理,很有可能导致激活函数的计算一直在0区间内,造成输出的梯度一直是0区间,最后导致模型崩溃(训练速度大幅增加)。

Relu函数也有一定缺点,这里就不叙述了,记得设置较小的学习率。

对于Relu函数过多的原理我认为没必要深究,对比LeNet-5中的sigmoid和tanh ,只知道为啥要用以及优缺点就行了。

多GPU并行(Training on Multiple GPUs)

这是第三章第二小节提到的概念,由于当时GPU不是很好,作者使用的 GTX580进行训练,GPU发展到现在,又有云服务器,如果想在现在用多路GPU,也只是Pytorch调用API的问题,所以我觉得这一章大概看一下就行了,知道有这么个事就OK。

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

Local Response Normalization 简称 LRN。

第三章第三小节,文章上来说了一堆公式,LRN实际上就是起 ‘抑制’ Relu函数的作用,刚才上面已经提到了非饱和神经元,就是说Relu函数并没有将结果挤压到一个特定的范围中,所以要对Relu得到的结果进行归一化,使用局部归一化的方案有助于增加泛化能力。

泛化能力:

指算法模型对于未知数据的预测能力。

若算法学习到了数据模型背后的规律,则当换一组数据模型时,算法依旧能够给出合理的输出,则表明该算法具有不错的泛化能力。

重叠池化(Overlapping Pooling)

之前在LeNet-5中的那个池化,是池化卷积核k=X 则步长也就为X,所以在卷积窗口移动的过程中是没有元素重叠的(就是没有元素被重复使用)。在这里作者将使用 卷积核尺寸 > 移动步长 的情况,这样的话就有元素被使用多次,发生重叠。

经过作者的测试,发现这样使用池化层,降低了错误率,且不易发生过拟合现象。

整体结构(Overall Architecture)

这一节作者描述了一下他的网络结构。

给出了一张图:

CNN基础论文 精读+复现----AlexNet(一)

这张图相比较LeNet-5的图,看上去乱的多,原因就是因为作者将多路GPU并行的情况描述在了图中,所以看上去会没那么简洁。在网上找到下面一个多路GPU简化版:

CNN基础论文 精读+复现----AlexNet(一)

由于我们现在使用单GPU运行,所以找了一个单GPU版本:

CNN基础论文 精读+复现----AlexNet(一)

这个图看上去就清晰多了。

5-6页

减少过拟合(Reducing Overfitting)

前面一直在提,使用重叠池化,使用dropout,使用Relu函数,都是为了减少过拟合,因为训练集数据量很大,拟合过度会导致结果出现严重偏差。

数据增强

文章中提到使用了两种方式进行数据增强,这两种方式都是通过很少的计算量进行图像的变换。在代码中使用CPU进行图像变换生成,而训练模型使用GPU所以不占计算量,

第一种方法,作者将输入的 256*256尺寸的图片 ,随机扣一个224 * 224尺寸的图片,这样就导致每次输入的和原始的有稍微的区别,作者测试将 一个图片取四个角和中间,然后水平旋转,得到十个样本,通过softmax进行平均。

第二种方法,就是 改变RGB通道的强度,实际上就是对RGB通道进行某种运算,怎么算的没必要深究(我没看懂),导致颜色和明暗发生变化,即对图像加噪。然后说这个方案降低了 top-1 1%以上的错误率。

Dropout

前面在LeNet-5中已经出现了类似dropout的算法,这里算是正式提出了?

前面已经说了很多次这个算法了,简单理解就是在正常的网络训练中,每一个部分,或者说每一个特征都参与了运算。而在dropout中,故意的丢掉一部分特征。比如进行人物识别的时候,故意只给半边脸。

像下面这样:

CNN基础论文 精读+复现----AlexNet(一)

继续阅读