【DL笔记7】他山之玉——窥探CNN经典模型

他山之玉——窥探CNN经典模型

上一篇文章介绍了CNN的基础知识以及它的优势,今天这篇文章主要来看一看一些著名的卷积神经网络的结构特点,以便我们对CNN有更加直观地认识。

一、LeNet-5

论文:http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf

这个可以说是CNN的开山之作,由Yann LeCun在1998年提出,可以实现对手写数字、字母的识别。结构如下:


LeNet-5

图中的 subsampling,即“亚采样”,就是我们前面说的pooling,因为pooling其实就是对原图像进行采样的一个过程。它总共7层,分别有2个CONV层,2个POOL层,3个FC层。当然,它的输入规模很小,是32×32大小的单通道图片。

我们可以用下面的式子,来表示上面的网络结构:

Input(32×32)-->CONV(6 filters)-->AvgPOOL-->CONV(16 filters)-->AvgPOOL-->FC(120)-->FC(84)-->FC(10)

细节没什么好说的。后面我们可以试着用TensorFlow或者Keras来复现一下。

二、AlexNet

论文:http://vision.stanford.edu/teaching/cs231b_spring1415/slides/alexnet_tugce_kyunghee.pdf

AlexNet于2012年由Alex Krizhevsky, Ilya Sutskever 和 Geoffrey Hinton等人提出,并在2012 ILSVRC (ImageNet Large-Scale Visual Recognition Challenge)中取得了最佳的成绩。这也是第一次CNN取得这么好的成绩,并且把第二名远远地甩在了后面,因此震惊了整个领域,从此CNNs才开始被大众所熟知。

这里简单地说一下这个ILSVRC,它是一个ImageNet发起的挑战,是计算机视觉领域的奥运会。全世界的团队带着他们的模型来对ImageNet中的数以千万的共1000个类别的图片进行分类、定位、识别。这个是一个相当有难度的工作,1000个类别啊。

那我们来看看这个AlexNet的结构把:

图片来源:https://www.learnopencv.com/understanding-alexnet/

输入的图片是256×256,然后进行随机的裁剪得到227×227大小,然后输入进网络中。可见,这个输入比LeNet的要大得多,这种大小,在当年已经是图片的主流大小了。

AlexNet共有8层其中5个CONV层和3个FC层,这里没有算上POOL层,因为严格意义上它不算层,因为没有可训练的参数。

关于AlexNet有如下要点:

  1. 用ImageNet的1500万张来自2万2千个类别的图片进行训练,在两个GTX 580 GPU上训练了5,6天;
  2. 使用ReLU激活函数,而之前的神经网络,包括LeNet,都是使用sigmoid或者tanh激活函数,AlexNet证明了ReLU函数在效率效果上更佳,速度提高很多倍;
  3. 使用了很多的数据扩增技术(Dada Augmentation),比如图片反转、剪切、平移等等,来扩充训练集,使得训练的模型鲁棒性更强;
  4. 第一次使用dropout正则化技术;
  5. 使用mini-batch SGD(也成随机梯度下降)来加快训练。

总之,AlexNet让人们认识到CNN的强大和巨大的潜能,并为之后的研究提供了很多有用的经验和技术。

三、VGG Net

论文:https://arxiv.org/pdf/1409.1556.pdf

这个网络于2014年被牛津大学的Karen Simonyan 和Andrew Zisserman提出,主要特点是 “简洁,深度”
深, 是因为VGG有19层,远远超过了它的前辈;
而简洁,则是在于它的结构上,一律采用stride为1的3×3filter,以及stride为2的2×2MaxPooling。所以虽然深,但是结构大家一眼就可以记住。

这个图来自于VGG的论文,每一列是他们研究的不同的结构,我们直接看E的那个结构,不难发现,若干个CONV叠加,然后配一个MaxPooling,再若干个CONV,再加一个MaxPooling,最后三个FC。而且,每个MaxPooling之后,CONV的filter的个数都翻倍,分别是64,128,256,512,结构十分规则有规律。

VGG刷新了CNN的深度,其简明的结构更是让人印象深刻。

四、Inception Net(GoogleNet)

论文:https://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf

看了前面的网络结构之后,我们会发现,他们越来越深,filter越来越多,参数越来越多。
似乎提高CNN的表现的方法就是堆叠更多的CONV、POOL层排成一列(我们称之为sequential model,熟悉keras的同学应该知道)就行了。确实那个时候大家都在想方设法增加网络的层数,让我们的CNN更加庞大。

但我们也应该清楚,一味地增加层数、增加通道数(filters越多,输出图像的通道数就越多),会让我们的计算量急剧增加,模型变得过于复杂,从而更容易过拟合,这样反而会让模型的性能下降。

Inception Net不再是使用Sequential model,在结构上有了重大创新。

在sequential model中,所有操作,无论是CONV还是POOL,都是排成一些序列。但是Google他们就想,为什么不可以同时进行各种操作呢?于是论文的作者有一个大胆的想法,假如我们有3个CONV和一个MaxPOOL,何不让它们平行地运算,然后再整合在一起?:

这样做有一个问题,就是,整合在一起之后,channels这个维度会过大

于是作者想出了一个好办法,那就是使用filter为1×1的CONV来进行降维:

前面学过了卷积的操作,我们知道,一个1×1的filter去卷积,图像的长和宽都不会变化,同时,输出图像的channels数等于filters的个数,所以对于图中的192个channels的图像,我们用32个filter,就可以把维度降低到32维。

于是,我们可以利用1×1CONV的这个特点,来改造上面的整合过程:


inception module

可见,通过使用1×1CONV,输出的通道数大大减少,这样,整个模型的参数也会大大减少。

上面这个部分,称为“Inception Module”,而Inception Network,就是由一个个的inception module组成的:

【图片来源:https://adeshpande3.github.io/The-9-Deep-Learning-Papers-You-Need-To-Know-About.html

通过inception module,GoogleNet成功地把CNN的层数增加到了超过100层!(如果把一个module当做一层的话,则是22层)。

这个GoogleNet就牛逼了,名副其实地“深”,而且参数的数量也比我们前面介绍的AlexNet要少很多倍!所以训练出的模型不仅效果好,而且更快。

五、ResNet (残差网络)

论文:https://arxiv.org/pdf/1512.03385.pdf

最后要介绍的就是ResNet,于2015年由微软亚洲研究院的学者们提出。

前面讲了,CNN面临的一个问题就是,随着层数的增加,CNN的效果会遇到瓶颈,甚至会不增反降。这往往是梯度爆炸或者梯度消失引起的。

ResNet就是为了解决这个问题而提出的,因而帮助我们训练更深的网络。
它引入了一个residual block(残差块)

这个图来自原论文。
可以很直观地看出,这个残差块把某一层的激活值,直接一把抓到了后面的某一层之前,这个过程称之为“skip connection(跳跃连接)”
这个做法,相当于把前面的信息提取出来,加入到当前的计算中,论文作者认为,这样的做法,可以使神经网络更容易优化。事实上却是是这样。

通过这种residual block,他们成功地搭建了一个拥有152层的CNN!深不见底!
我从论文中截取网络的一部分如下:

关于具体的细节以及为什么residual block有效,可以查阅原论文或者网上的其他教程。


以上就是今天要介绍的主要的CNN模型了。当然,经典的CNN模型还有更多,就留给读者自己去探索了,日后有时间也许我也会介绍其他的CNN。
有时候我们了解这些模型之后,会觉得压力山大,因为觉得这些模型一个比一个复杂,这让人怎么去实现啊?而且,这么深的网络,让我们去训练,简直要命。人家研究机构是用当时最先进的GPU,用海量的数据,训练几天乃至几周才训练好,我们平民老百姓岂不是没法玩?
事实上,我们应该高兴,因为“他山之石,可以攻玉”,这些著名的网络,一般都是开源的,而且很多已经被一些深度学习框架给封装成接口了,我们都直接拿来用。而且,我们还可以用“迁移学习(Transfer Learning)”的方法,仅仅用少量的训练样本,借助这些著名的模型,就可以构建属于我们自己的CNN架构。这些内容,将会在下一篇文章中讲解。

如果喜欢我的教程,欢迎关注我的专栏
【DeepLearning学习笔记】
和我一起一步步学习深度学习。
文章同步发布于知乎专栏:
https://zhuanlan.zhihu.com/deeplearningnotes
专栏其他文章:
【DL笔记1】Logistic回归:最基础的神经网络
【DL笔记2】神经网络编程原则&Logistic Regression的算法解析
【DL笔记3】一步步亲手用python实现Logistic Regression
【DL笔记4】神经网络详解,正向传播和反向传播
【DL笔记5】用TensorFlow搭建神经网络——手写数字识别
【DL笔记6】从此明白了卷积神经网络(CNN)
【DL碎片1】神经网络参数初始化的学问
【DL碎片2】神经网络中的优化算法
【DL碎片3】神经网络中的激活(Activation)函数及其对比
【DL碎片4】深度学习中的的超参数调节
【DL碎片5】深度学习中的正则化(Regularization))

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容