CNN发展史+论文+代码

您所在的位置:网站首页 cnn网络模型 CNN发展史+论文+代码

CNN发展史+论文+代码

#CNN发展史+论文+代码| 来源: 网络整理| 查看: 265

一、简述

最近一直在看深度学习相关的东西,而CNN是深度学习中的核心算法之一,也是2012年以来将人工智能推向风口浪尖的推手。今天我来与大家一起分享一下CNN的发展历史,看看各路大牛是如何克服难题,并造就了现在CNN网络结构百花齐放的景象。

1、卷积神经网络

首先来简单说一下,什么是CNN,卷积神经网络,它是一种人工神经网络的结构,是从猫的视觉神经结构中得到了灵感,进而模拟其结构设计出来的一种人工神经网络结构。至于什么是人工神经网络,我默认大家都是知道的,在这里就不解释了。(要了解CNN,需要先了解什么是人工神经网络算法,可以参考我的另一篇文章:《【神经网络算法入门】详细推导全连接神经网络算法及反向传播算法+Python实现代码》)

这种结构通过卷积核来获取“感受野”范围内数据之间的关系特征。一张图片里,相邻的像素显然是有更强的相关性,相比于全连接神经网络,CNN突出了这种相邻的关系特征,因而更加准确的获取了图片内的有用信息。

具体卷积核是怎么工作的我找了几张图,大家感受一下:

卷积核的工作原理

卷积核工作原理动图

多通道多卷积核的工作原理

 

多通道卷积的具体计算方法

所以说,CNN的原理就是通过卷积核获取图像的空间关系特征,并使用BP(反向传播)算法调整卷积核的参数,最终得到一个可以有效获取图片内有用信息的模型。

下面我们就从CNN的发展历史角度,来了解CNN是如何一步一步发展,在这过程中解决了什么问题。

 

2、比赛

讲历史就必须有一个主线,而我要说的这个历史主线就是ILSVRC,一个想了解CNN必须要了解的计算机视觉领域最权威的学术竞赛。

ILSVRC(ImageNet Large Scale Visual Recognition Challenge)竞赛(2010-2017),这个竞赛所使用的数据集,是由斯坦福大学李飞飞教授主导,包含了超过1400万张全尺寸的有标记图片。ILSVRC比赛会每年从ImageNet数据集中抽出部分样本用于比赛,以2012年为例,比赛的训练集包含1281167张图片,验证集包含50000张图片,测试集为100000张图片。竞赛的项目主要包括图像的分类和定位(CLS-LOC)、目标检测(DET)、视频目标检测(VID)和场景分类(Scene)。

我下面讲的,主要是在最基本的分类问题上,历届表现优异的模型。不过ILSVRC从2017之后就停办了,另外一个计算机视觉领域的赛事,就成为了该领域权威的竞赛,它就是从2014年开始由微软举办的MS COCO竞赛。

MS COCO(Microsoft COCO: Common Objects in Context)竞赛(2014-) 物体检测、全景分割、人体关键点、姿态估计(DensePose);2018年开始又新增了,街景检测、街景全景分割。在这里就不详细介绍了,感兴趣的可以自己研究研究,如果能在这个比赛中获得不错的名次,百万年薪不是梦!

 

二、CNN发展史

先偷一张图给大家看看,就是一系列里程碑式的模型,分别在ImageNet数据集图像分类的准确率表现:

这里面除了LeNet以外,其他都是在ILSVRC竞赛里表现优异的模型,为什么把LeNet放在这里面呢,我想来作者的想法一是做个对比,另外一个就是对LeNet表示一下尊重,因为LeNet是其他所有CNN网络模型的鼻祖,它的作者就是CNN之父、2018年图灵奖得主、深度学习三主神之一的Yann Lecun扬·莱坎。

下面我们来捋一捋各个模型之间的关系,于是我又偷了一张图:

2012年AlexNet的发布使人工智能算法迎来了历史性的突破,才造就了之后的舆论关注和CNN的研究爆发式的增长。之后一系列著名的CNN模型都是在AlexNet的基础上演变出来的,它门主要分为两个流派,一个是以加深网络为主的VGG流派,另一个是以增强卷积模块功能为主的NIN流派。之后两个流派相结合产生了Inception ResNet。

如果说AlexNet是之后所有CNN模型的爸爸,那么LeNet就是所有这些模型的爷爷。下面我们就从LeNet开始一一介绍各个经典模型都做了哪些工作,解决了什么问题。

下面的介绍中会提到一些经典的论文,这些论文可以从这里获取:

[email protected]:cuiyuan605/deep_learning.git

供大家参考,另外,这里还包含了以下所述网络模型的部分实现代码。

 

1、LeNet(1998)--开山鼻祖

首先是LeNet,它是由CNN之父Lecun在1998年提出,用于解决手写数字识别任务的,著名的Tensorflow入门学习数据集MNIST,就是那时候做出来的。LeNet对应的论文是《Gradient-Based Learning Applied to Document Recognition》。

LeNet又叫LeNet-5,这个5是指它的网络结构中有5个表示层,具体结构如下图所示:

LeNet5包含Input、卷积层1、池化层1、卷积层2、池化层2、全连接层、输出层。

1998年的LeNet5模型的发布标注着CNN的真正面世,但是这个模型在后来的一段时间并未能火起来,主要原因是当时的计算力跟不上,而且其他的算法(比如SVM)也能达到类似的效果甚至超过。不过LeNet最大的贡献是:定义了CNN卷积层、池化层、全连接层的基本结构,是CNN的鼻祖。

 LeNet5当时的特性有如下几点:

(1)每个卷积层包含三个部分:卷积、池化和非线性激活函数

(2)使用卷积提取空间特征(起初被称为感受野,未提“卷积”二字)

(3)降采样(Subsample)的平均池化层(Average Pooling)

(4)双曲正切(Tanh)的激活函数

(5)MLP作为最后的分类器

(6)使用卷积令层与层之间稀疏连接,减少了计算复杂性

不过,一般认为CNN的开山之作是Lecun 1989发表的另一篇论文《Backpropagation Applied to Handwritten Zip Code Recognition》。这篇论文写的比较短,通篇没有找到CNN模型相关的原理解释说明。当时也没有提到“卷积”二字,而是被称为“感受野”。

但是从它的参考文献中,我们可以找到一篇重要的文章《1980-Fukushima-Neocognitron A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position》。这是日本学者福岛邦彦,通过研究猫的视觉神经得到的启发,阐述了卷积和池化两个思想(当时还不叫卷积和池化)。

福岛邦彦的团队当时也开发了仿真模型Neocognitron(神经认知机),不过Neocognitron为什么没有发扬光大呢,感觉和CNN相比主要还是差在BP算法上,直到1998年Lecun提出了LeNet-5,把CNN推上了一个小高潮,之后Neocognitron也基本上放弃治疗了。

但是,受限于当时计算力的不足,LeNet训练较慢,且还有一些其他算法(比如SVM)能达到类似或者更好的效果,LeNet并没有真正的火起来。

1998年到2012年世界在不断发生着巨大的变化,CNN也在默默的发展,其中有一篇论文要提一下,就是2006年MIT脑科学研究中心的论文《Notes on Convolutional Neural Networks》,里面给了详细的CNN权值更新的公式。

 

2、AlexNet(2012)--王者归来

AlexNet在2012年ImageNet竞赛中以超过第二名10.9个百分点的绝对优势一举夺冠,这一突破是具有重大历史意义,因为它使计算机视觉模型跨过了从学术demo到商业化产品的门槛,从而将深度学习和CNN的名声突破学术界,在产业界一鸣惊人。AlexNet的出现可谓是卷积神经网络的王者归来。

在这里我们先八卦一下人工智能大神之间的关系。2018年图灵奖获得者是号称深度学习三巨头的Yann Lecun(扬·莱坎),Geoffrey Hinton(杰弗里·欣顿),和Yoshua Bengio(约舒亚·本希奥),我把他们称作深度学习三主神,就是下面这三位,我们先来一起瞻仰一下:

由于他们早年都在加拿大的大学工作过,是非常亲密的朋友和合作者,所以AI领域的人戏称他们“深度学习加拿大黑手党”。他们是上世纪七八十年代,深度学习的“寒冬”里,为数不多坚持研究神经网络的“顽固派”,是神经网络的坚定信仰者,也是他们一手把深度学习带出了“寒冬”。

其中Hinton年纪较大,1986年完成著名论文《Experiments on Learning by Back Propagation》第一个证明了广义反向传播算法可用于训练多层神经网络。

Lecun曾在多伦多大学跟随Hinton做博士后研究,期间完成了LeNet的雏形思想。

Bengio和Lecun年纪相仿,曾一起在AT&T贝尔实验室的共事,与Lecun一起完成了LeNet。

而AlexNet的作者Alex Krizhevsky,是Hinton的博士生,所以说AlexNet和LeNet可谓是一脉相承的。关系如下所示:

我们言归正传,AlexNet为8层深度的CNN网络,其中包括5个卷积层和3个全连接层(不包括LRN层和池化层),如下图所示:

AlexNet的特点和贡献:

(1)使用ReLU作为激活函数,由于ReLU是非饱和函数,也就是说它的导数在大于0时,一直是1,因此解决了Sigmoid激活函数在网络比较深时的梯度消失问题,提高SGD(随机梯度下降)的收敛速度。

(2)使用Dropout方法避免模型过拟合,该方法通过让全连接层的神经元(该模型在前两个全连接层引入Dropout)以一定的概率失去活性(比如0.5),失活的神经元不再参与前向和反向传播,相当于约有一半的神经元不再起作用。在预测的时候,让所有神经元的输出乘Dropout值(比如0.5)。这一机制有效缓解了模型的过拟合。

(3)重叠的最大池化,之前的CNN中普遍使用平均池化,而AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且,池化的步长小于核尺寸,这样使得池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。

(4)提出LRN(局部响应归一化)层,对局部神经元的活动创建竞争机制,使得响应较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。

(5)使用GPU加速,加快了模型的训练速度,同时也意味着可以训练更大规模的神经网络模型。

(6)数据增强,随机从256*256的原始图像中截取224*224大小的区域(以及水平翻转的镜像),相当于增强了(256-224)*(256-224)*2=2048倍的数据量。使用了数据增强后,减轻过拟合,提升泛化能力。避免因为原始数据量的大小使得参数众多的CNN陷入过拟合中。

 

3、ZFNet(2013)--稳步前行

ZFNet是2013ImageNet分类任务的冠军,其网络结构没什么改进,只是调了调参,性能较Alex提升了不少。ZF-Net只是将AlexNet第一层卷积核由11变成7,步长由4变为2,第3,4,5卷积层转变为384,384,256。这一年的ImageNet还是比较平静的一届,其冠军ZF-Net的名堂也没其他届的经典网络架构响亮。

其论文是《Visualizing and Understanding Convolutional Networks》,网络结构如下:

 

4、VGG(2014 2rd)--越走越深

VGG-Nets是由牛津大学VGG(Visual Geometry Group)提出,是2014年ImageNet竞赛定位任务的第一名和分类任务的第二名的中的基础网络。VGG可以看成是加深版本的AlexNet. 都是卷积层+全连接层,在当时看来这是一个非常深的网络了,因为层数高达十多层,我们从其论文名字就知道了(《Very Deep Convolutional Networks for Large-Scale Visual Recognition》),当然以现在的目光看来VGG真的称不上是一个very deep的网络。

VGGNet探索了CNN的深度及其性能之间的关系,通过反复堆叠3*3的小型卷积核和2*2的最大池化层,VGGNet成功的构筑了16-19层深的CNN。VGGNet有A-E六种结构,从A-E网络逐步变深,但是参数量并没有增长很多,如下图所示,原因为:参数量主要消耗在最后3个全连接层,而前面的卷积层虽然层数多,但消耗的参数量不大。不过,卷积层的训练比较耗时,因为其计算量大。

其中,D和E是常说的VGGNet-16和VGGNet-19。C很有意思,相比于B多了几个1*1的卷积层,1*1卷积的意义在于增加非线性变换,而输入的通道数和输出的通道数不变,没有发生降维。

VGG的性能:

VGG的特点:

(1)VGGNet拥有5段卷积,每段卷积内有2-3个卷积层,同时每段尾部都会连接一个最大池化层(用来缩小图片)。

(2)每段内的卷积核数量一样,越后边的段内卷积核数量越多,依次为:64-128-256-512-512。

(3)越深的网络效果越好。

(4)LRN层作用不大(作者结论)。

(5)1x1的卷积也是很有效的,但是没有3*3的卷积好,大一些的卷积核可以学习更大的空间特征。不过1x1的卷积核可以用于增加模型的非线性变化,并可用于升维和降维。

VGG的突出贡献在于,证明了使用小的卷积核,增加网络深度可以有效的提高模型效果,而且VGGNet对其他数据集具有很好的泛化能力。到目前为止,VGGNet依然经常被用来提取图像特征。

为什么说小的卷积核堆积能够提高模型效果呢?比如3x3的卷积核堆叠两层,则“感受野”就会变为5x5,堆叠三层,“感受野”就会变成7x7,而多层小的卷积核参数更少(3*3*3=27Conv(1×1)−>AveragePooling(2×2)组成。

需要明确一点,dense connectivity 仅仅是在一个dense block里的,不同dense block 之间是没有dense connectivity的,比如下图所示:

那么问题来了,密集连接不会带来冗余吗?不会!密集连接这个词给人的第一感觉就是极大的增加了网络的参数量和计算量。但实际上 DenseNet 比其他网络效率更高,其关键就在于网络每层计算量的减少以及特征的重复利用。DenseNet则是让i层的输入直接影响到之后的所有层,它的输出为:xi=Hi([x0,x1,…,xi−1]),其中[x0,x1,...,xi−1]就是将之前的feature map以通道的维度进行合并。并且由于每一层都包含之前所有层的输出信息,因此其只需要很少的特征图就够了,这也是为什么DenseNet的参数量较其他模型大大减少的原因。这种dense connection相当于每一层都直接连接input和loss,因此就可以减轻梯度消失现象,这样更深网络不是问题。

天底下没有免费的午餐,网络自然也不例外。在同层深度下获得更好的收敛率,自然是有额外代价的。其代价之一,就是其恐怖如斯的内存占用。

 

三、参考资料

1、【卷积神经网络发展历程】从LeNet、AlexNet到ResNet、SENet: https://blog.csdn.net/u012679707/article/details/80870625

2、CNN网络架构演进:从LeNet到DenseNet: https://www.cnblogs.com/skyfsm/p/8451834.html

3、ILSVRC竞赛详细介绍(ImageNet Large Scale Visual Recognition Challenge): https://blog.csdn.net/sophia_11/article/details/84570177

4、CNN(卷积神经网络)最早是哪一年提出,是如何发展的?: https://www.zhihu.com/question/47705441?sort=created

5、图灵奖颁给熬过寒冬的人: http://tech.hexun.com/2019-03-28/196640717.html

6、刚刚!AI界的“加拿大黑手党”荣获 2018 年度图灵奖:https://baijiahao.baidu.com/s?id=1629174737290254826&wfr=spider&for=pc



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3