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

前言

上个礼拜复现了 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)

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

给出了一张图:
在这里插入图片描述
这张图相比较LeNet-5的图,看上去乱的多,原因就是因为作者将多路GPU并行的情况描述在了图中,所以看上去会没那么简洁。

在网上找到下面一个多路GPU简化版:
在这里插入图片描述
由于我们现在使用单GPU运行,所以找了一个单GPU版本:
在这里插入图片描述
这个图看上去就清晰多了。

5-6页

减少过拟合(Reducing Overfitting)

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

数据增强

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

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

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

Dropout

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

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

像下面这样:

在这里插入图片描述

使用dropout的目的也是防止过拟合,所以将dropout应用在了全连接的隐层,因为全连接的隐层有较多数据,数据越多越容易发生过拟合现象。 更加详细的解读 移步 什么是dropout

第一部分差不多到这吧,这篇论文的开头以及主要的思想基本分析完了。后面开始就是使用代码复现网络模型了。

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

深度不学习!!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值