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

勘误:开始之前说一下,昨天介绍的环境搭建的那篇,里面我忘记写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

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

原文发布于微信公众号 - 机器学习和数学(ML_And_Maths)

原文发表时间:2017-05-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一心无二用,本人只专注于基础图像算法的实现与优化。

水下图像增强相关算法的一个简单小结。

最近一直没有找到感兴趣的研究课题,下了几个最新的去雾的论文,随便看了下,觉得都是为了写论文而做的论文,没有什么创新性,也就没有想法去实现他们。偶尔看到了一些关...

73170
来自专栏磐创AI技术团队的专栏

一个完整的机器学习项目在Python中的演练(二)

24970
来自专栏机器之心

资源 | 你需要的Scikit-learn中文文档:步入机器学习的完美实践教程

机器之心整理 参与:思源 Scikit-learn 中文文档已经由 ApacheCN 完成校对,这对于国内机器学习用户有非常大的帮助。该文档自 2017 年 1...

37580
来自专栏IT技术精选文摘

MILABOT:基于深度强化学习打造聊天机器人

21030
来自专栏AI研习社

一文带你读懂 OCR

OCR,或光学字符识别,是最早的计算机视觉任务之一,因为在某些方面它不需要用到深度学习。因此,早在2012年深度学习热潮之前,OCR就有了各种不同的应用,有些甚...

39720
来自专栏PPV课数据科学社区

进阶篇:从 0 到 1 掌握 Python 机器学习(附资源)

进阶篇 ? 机器学习算法 本篇是使用 Python 掌握机器学习的 7 个步骤系列文章的下篇,如果你已经学习了该系列的上篇基础篇:从 0 到 1 掌握 Pyth...

41870
来自专栏人工智能

从卷积神经网络的角度看世界

原文地址:https://blog.keras.io/how-convolutional-neural-networks-see-the-world.html

42060
来自专栏机器之心

ECCV 2018 | 给Cycle-GAN加上时间约束,CMU等提出新型视频转换方法Recycle-GAN

作者:Aayush Bansal、Shugao Ma、Deva Ramanan、Yaser Sheikh

15910
来自专栏机器之心

AAAI 2018 | 阿尔伯塔大学提出新型多步强化学习方法,结合已有TD算法实现更好性能

375110
来自专栏机器之心

学界 | Jeff Dean等人提出ENAS:通过参数共享实现高效的神经架构搜索

30460

扫码关注云+社区

领取腾讯云代金券