前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[高大上的DL]经典网络模型总结之GoogLeNet篇

[高大上的DL]经典网络模型总结之GoogLeNet篇

作者头像
用户1622570
发布2018-04-11 15:47:00
1.4K0
发布2018-04-11 15:47:00
举报

勘误:开始之前说一下,昨天介绍的环境搭建的那篇,里面我忘记写cudnn的安装说明了,只贴了在哪下载,我在word版里面已经更新了,欢迎需要的童鞋下载查看。还有一个是,里面的sudo和后面的命令连在一起了,sudo的意思是相当于Windows里面的获取管理员权限,输入之后,它会让你输入一个密码,就是安装的时候,你设置的密码,但是你输入之后是不显示的,这是Linux的安全性的体现,别以为你没输进去哈。好了就这么多,抱歉!

**************分割线**************

前面介绍了Alexnet,比较经典的模型,还差好几个,但是我这些理解的也不深,最关键的是有很多人比我讲的好。囧。但是基于对大神们的敬仰和如此优秀的架构崇拜之情,让更多人知道世界上优秀的思想,我觉得是新世纪大学生(以及勤劳勇敢的Chinese)义不容辞的责任。今天我把GoogLeNet介绍给各位看官,各位会不会介绍给你的伙伴呢?(./奸笑)

GoogLeNet之所以叫做GoogLeNet,而不是googleNet,是因为Google的科学家们对LeNet的崇拜,以此来纪念LeNet的伟大发明。LeNet的发明是当初为了解决支票上手写数字的识别问题,可想而知,当时的准确率已经很高了。LeNet也比较简单,只要你理解了卷积,再去看那个应该就不难了。

好,下面开始今天的猪脚,GoogLeNet,主要介绍一下其中我认为比较重要的点。

论文地址:https://arxiv.org/abs/1409.4842

贴图的目的只想说,这孩子名字取得真好!Going deeper with Convolutions,更深的卷积。GoogLeNet告诉我们,卷积神经网络没有最深,只有更深。因为理论上来说,越深的网络可以学习到的特征越多,这样就有利于分类。插一张神图,哈哈哈。

GoogLeNet是2014年ImageNet比赛的冠军,第二名是VGG。ImageNet是一个计算机视觉领域的比赛,主要有分类和检测两个任务。而我们反复说的这几个模型都是ImageNet比赛上的第一名,或者第二名。对于分类任务来说,一般会选择top5,top1错误率来说明。一般的介绍,会直接给出每种模型的top5,top1错误率的值是多少,但是你清楚top5,top1是怎么算出来的吗?

这里我来解释一下什么是top5,top1。ImageNet的分类任务中,一般会给1000个类别,比如飞机,人,车,动物,树等等等等。要求是把每一种类别都正确区分,这样最后提交的结果中,就会有1000个概率值,然后比如从大到小排序一下,就是这样的:

0.98,0.95,0.93,0.89,0.86,0.81。。。

然后

tpo5=1-(0.98+0.95+0.93+0.89+0.86)/5=0.077999=7.8%

top1= 1-0.98=0.02=2%

这就是top5,top1的意思。下面是论文中的一张历年的top-5错误率的对比。

Inception Module

GoogLeNet的那张图巨长无比,这里我找了一个稍微短一点的图,先大概浏览一下,注意左下角的说明,不同的颜色代表不同的结构。GoogLeNet主要包括卷积,池化,concat(级联),Dropout,全连接,最后是softmax。

然后我们看一下绿色框里面的那部分,拿出来看看就是下面这个样子。这个东西叫做Inception,也叫Inception V1,因为发展到今天已经有了V2,V3,V4了。

这里注意箭头的方向,最下面的是输入层,由下往上的输出。卷积核的大小由1x1,3x3到5x5。使用Inception结构的作用是为了提取更多的特征,GoogLeNet中一共使用了9个Inception,这样下来模型一共达到了100个layer。太机智了!这种network in network(网中网)的结构可以非常好的提取到像素的细节特征,其中5x5的卷积可以覆盖输入中较大的输入区域。但是这样带来的问题是参数量的增加和容易过拟合,而机智的作者怎么会没想到这个问题呢,所以他们在每个Inception结构结束之后加了一个max pooling。Pooling的作用是减小模型的大小,降低过拟合的风险。Inception结构在Pooling之前还加了Relu激活函数,这个可以提高网络的非线性。做了这么多工作其实主要就是为了在增加模型深度的前提下,尽量减小模型的计算量,也就是说,你不能一味的追求网络的深度而不考虑内存,GPU的限制吧!

最后要说一下,里面1x1的卷积核的作用,1x1的卷积核可以降低模型维度,那为什么不用3x3,或者5x5的卷积核呢?这是因为3x3和5x5的卷积核做不到(臣妾做不到呀!)下面这个图是上图的一个naïve版本。

然后我找了张比较形象的图来说明一下具体的细节。直接看图,应该能看懂。

下面我们划一下重点:

1. 使用9个Inception结构,达到了使用100层的效果。

2. 使用average pooling均值池化,代替全连接,这样由7x7x1024变到了1x1x1024,这样做可以大大减少参数量。

3. GoogLeNet的参数量大约是AlexNet的1/12.

4. 在检测任务中,GoogLeNet使用了R-CNN的思想。 R-CNN后面我可能会另外介绍一下。

5. Inception结构有很大的改进空间,目前貌似到了V6,v7了。

6. GoogLeNet的训练时间在普通的GPU上仅用了一周的时间,这里大概可以体会一下GoogLeNet的牛逼的地方,不要觉得一周的时间很久,像这么深的网络结构,能做到一周很不错了。一般随便跑个模型不得一两天的。

最后发散一下,贴几个Inception发展到现在比较先进的结构,体会一下大神的思想。(仅仅是体会一下就好)

[参考文献]

1.https://adeshpande3.github.io/The-9-Deep-Learning-Papers-You-Need-To-KnowAbout.html

2.https://leonardoaraujosantos.gitbooks.io/artificialinteligence/content/googlenet.html

3.http://www.cnblogs.com/52machinelearning/p/5821591.html

本文为作者原创,如有雷同,必然是别人抄我的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习和数学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档