CNN经典模型汇总
本⽂主要对CNN领域的经典模型进⾏汇总,算是对近期的学习做⼀个⼩总结。
基础知识
takeashower作为深度学习的基础,神经⽹络这个算法是必须要有深⼊的了解的,这⾥不介绍太多,简单介绍⼀下原理和单个神经元的结构:
⼀、BP神经⽹络的概念
BP神经⽹络是⼀种多层的前馈神经⽹络,其主要的特点是:信号是前向传播的,⽽误差是反向传播的。具体来说,对于如下的只含⼀个隐层的神经⽹络模型:
BP神经⽹络的过程主要分为两个阶段,第⼀阶段是信号的前向传播,从输⼊层经过隐含层,最后到达输出层;第⼆阶段是误差的反向传播,从输出层到隐含层,最后到输⼊层,依次调节隐含层到输出层的权重和偏置,输⼊层到隐含层的权重和偏置。
⼆、单个神经元的结构
主要是通过对输⼊信号的加权求和加偏置(加权求和对应的w,偏置对应的b),然后通过通过激活函数引⼊⾮线性元素并将结果映射⾄0——1之间的数值(⽐如sigmoid函数)。具体见下图:
图⽚来源于台⼤ 李宏毅 300页 PPT
(记得FQ)
个⼈觉得这个PPT⾮常不错,从浅到深,讲的也⼗分具体,有时间可以仔细看看。
CNN模型汇总
⼀、LeNet5 模型
LeNet5 诞⽣于 1994 年,是最早的卷积神经⽹络之⼀,并且推动了深度学习领域的发展。⾃从 1988 年开始,在许多次成功的迭代后,这项由 Yann LeCun 完成的开拓性成果被命名为 LeNet5(参见:Gradient-Bad Learning Applied to Document Recognition)。
LeNet5 的架构基于这样的观点:(尤其是)图像的特征分布在整张图像上,以及带有可学习参数的卷积是⼀种⽤少量参数在多个位置上提取相似特征的有效⽅式。在那时候,没有 GPU 帮助训练,甚⾄
CPU 的速度也很慢。因此,能够保存参数以及计算过程是⼀个关键进展。这和将每个像素⽤作⼀个⼤型多层神经⽹络的单独输⼊相反。LeNet5 阐述了那些像素不应该被使⽤在第⼀层,因为图像具有很强的空间相关性,⽽使⽤图像中独⽴的像素作为不同的输⼊特征则利⽤不到这些相关性。
LeNet5特征能够总结为如下⼏点:
1)卷积神经⽹络使⽤三个层作为⼀个系列: 卷积,池化,⾮线性
2) 使⽤卷积提取空间特征
unenthusiastic3)使⽤映射到空间均值下采样(subsample)
4)双曲线(tanh)或S型(sigmoid)形式的⾮线性
getout
5)多层神经⽹络(MLP)作为最后的分类器
6)层与层之间的稀疏连接矩阵避免⼤的计算成本
总体看来,这个⽹络是最近⼤量神经⽹络架构的起点,并且也给这个领域带来了许多灵感。
从 1998 年到 2010 年神经⽹络处于孵化阶段。⼤多数⼈没有意识到它们不断增长的⼒量,与此同时
其他研究者则进展缓慢。由于⼿机相机以及便宜的数字相机的出现,越来越多的数据可被利⽤。并且计算能⼒也在成长,CPU 变得更快,GPU 变成了多种⽤途的计算⼯具。这些趋势使得神经⽹络有所进展,虽然速度很慢。数据和计算能⼒使得神经⽹络能完成的任务越来越有趣。之后⼀切变得清晰起来……
⼆、AlexNet 模型
cet全国网上报名系统>英文歌曲推荐
2012年,Hinton的学⽣Alex Krizhevsky提出了深度卷积神经⽹络模型AlexNet,它可以算是LeNet的⼀种更深更宽的版本。AlexNet中包含了⼏个⽐较新的技术点,也⾸次在CNN中成功应⽤了ReLU、Dropout和LRN等Trick。同时AlexNet也使⽤了GPU进⾏运算加速,作者开源了他们在GPU上训练卷积神经⽹络的CUDA代码。AlexNet包含了6亿3000万个连接,6000万个参数和65万个神经元,拥有5个卷积层,其中3个卷积层后⾯连接了最⼤池化层,最后还有3个全连接层。
AlexNet以显著的优势赢得了竞争激烈的ILSVRC 2012⽐赛,top-5的错误率降低⾄了16.4%,相⽐第⼆名的成绩26.2%错误率有了巨⼤的提升。AlexNet可以说是神经⽹络在低⾕期后的第⼀次发声,确⽴了深度学习(深度卷积⽹络)在计算机视觉的统治地位,同时也推动了深度学习在语⾳识别、⾃然语⾔处理、强化学习等领域的拓展。
AlexNet将LeNet的思想发扬光⼤,把CNN的基本原理应⽤到了很深很宽的⽹络中。AlexNet主要使⽤
到的新技术点如下:
(1)成功使⽤ReLU作为CNN的激活函数,并验证其效果在较深的⽹络超过了Sigmoid,成功解决了Sigmoid在⽹络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光⼤。
(2)训练时使⽤Dropout随机忽略⼀部分神经元,以避免模型过拟合。Dropout虽有单独的论⽂论述,但是AlexNet将其实⽤化,通过实践证实了它的效果。在AlexNet中主要是最后⼏个全连接层使⽤了Dropout。化妆师学习
(3)在CNN中使⽤重叠的最⼤池化。此前CNN中普遍使⽤平均池化,AlexNet全部使⽤最⼤池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长⽐池化核的尺⼨⼩,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
(4)提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应⽐较⼤的值变得相对更⼤,并抑制其他反馈较⼩的神经元,增强了模型的泛化能⼒。
(5)使⽤CUDA加速深度卷积⽹络的训练,利⽤GPU强⼤的并⾏计算能⼒,处理神经⽹络训练时⼤量的矩阵运算。AlexNet使⽤了两块GTX 580 GPU进⾏训练,单个GTX 580只有3GB显存,这限制
了可训练的⽹络的最⼤规模。因此作者将AlexNet分布在两个GPU上,在每个GPU的显存中储存⼀半的神经元的参数。因为GPU之间通信⽅便,可以互相访问显存,⽽不需要通过主机内存,所以同时使⽤多块GPU也是⾮常⾼效的。同时,AlexNet的设计让GPU之间的通信只在⽹络的某些层进⾏,控制了通信的性能损耗。
(6)数据增强,随机地从256´256的原始图像中截取224´224⼤⼩的区域(以及⽔平翻转的镜像),相当于增加了(256-224)2
´2=2048倍的数据量。如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷⼊过拟合中,使⽤了数据增强后可以⼤⼤减轻过拟合,提升泛化能⼒。进⾏预测时,则是取图⽚的四个⾓加中间共5个位置,并进⾏左右翻转,⼀共获得10张图⽚,对他们进⾏预测并对10次结果求均值。同时,AlexNet论⽂中提到了会对图像的RGB数据进⾏PCA处理,并对主成分做⼀个标准差为0.1的⾼斯扰动,增加⼀些噪声,这个Trick可以让错误率再下降1%。
整个AlexNet有8个需要训练参数的层(不包括池化层和LRN层),前5层为卷积层,后3层为全连接层,如图4所⽰。AlexNet最后⼀层是有1000类输出的Softmax层⽤作分类。 LRN层出现在第1个及第2个卷积层后,⽽最⼤池化层出现在两个LRN层及最后⼀个卷积层后。ReLU激活函数则应⽤在这8层每⼀层的后⾯。因为AlexNet训练时使⽤了两块GPU,因此这个结构图中不少组件都被拆为了两部分。现在我们GPU的显存可以放下全部模型参数,因此只考虑⼀块GPU的情况即可。
整个⽹络呈⼀个⾦字塔结构,具体来说:
1. 输⼊图⽚是224*224像素的三通道图⽚;
phra2. 第⼀层使⽤11*11的卷积核,滑动步长为4个像素,输出为96个特征图并进⾏最⼤值池化;
3. 第⼆层使⽤5*5卷积核,卷积产⽣256个特征图,并进⾏最⼤池化;
4. 第三层,第四层均使⽤3*3卷积核,输出384个特征图;
5. 第五层使⽤3*3卷积层,输出256个特征图,并进⾏池化;
6. 第六层,第七层为全连接层,分别包含4096个隐层,也就是说,到全连接层时只剩4096个特征值;
7. 最终,第⼋层为softmax层,得到最终的分类结果。
三、VGG 模型
英语文章网站来⾃⽜津⼤学的 VGG ⽹络(参见:Very Deep Convolutional Networks for Large-Scale Image Recognition)是第⼀个在各个卷积层使⽤更⼩的 3×3 过滤器(filter),并把它们组合作为⼀个卷积序列进⾏处理的⽹络。
chartered bank这看来和 LeNet 的原理相反,其中是⼤的卷积被⽤来获取⼀张图像中相似特征。和 AlexNet 的 9×9 或 11×11 过滤器不同,过滤器开始变得更⼩,离 LeNet 竭⼒所要避免的臭名昭著的 1×1 卷积异常接近——⾄少在该⽹络的第⼀层是这样。但是 VGG 巨⼤的进展是通过依次采⽤多个 3×3 卷积,能够模仿出更⼤的感受野(receptive field)的效果,例如 5×5 与 7×7。这些思想也被⽤在了最近更多的⽹络架构中,如 Inception 与 ResNet。
VGGNet论⽂中全部使⽤了3´3的卷积核和2´2的池化核,通过不断加深⽹络结构来提升性能。图6所⽰为VGGNet各级别的⽹络结构图,图7所⽰为每⼀级别的参数量,从11层的⽹络⼀直到19层的⽹络都有
详尽的性能测试。虽然从A到E每⼀级⽹络逐渐变深,但是⽹络的参数量并没有增长很多,这是因为参数量主要都消耗在最后3个全连接层。前⾯的卷积部分虽然很深,但是消耗的参数量不⼤,不过训练⽐较耗时的部分依然是卷积,因其计算量⽐较⼤。这其中的D、E也就是我们常说的VGGNet-16和VGGNet-19。C很有意思,相⽐B多了⼏个1´1的卷积层,1´1卷积的意义主要在于线性变换,⽽输⼊通道数和输出通道数不变,没有发⽣降维。
VGGNet拥有5段卷积,每⼀段内有2~3个卷积层,同时每段尾部会连接⼀个最⼤池化层⽤来缩⼩图⽚尺⼨。每段内的卷积核数量⼀样,越靠后的段的卷积核数量越多:64 – 128 – 256 – 512 – 512。其中经常出现多个完全⼀样的3´3的卷积层堆叠在⼀起的情况,这其实是⾮常有⽤的设计。如图8所⽰,两个3´3的卷积层串联相当于1个5´5的卷积层,即⼀个像素会跟周围5´5的像素产⽣关联,可以说感受野⼤⼩为5´5。⽽3个3´3的卷积层串联的效果则相当于1个7´7的卷积层。除此之外,3个串联的3´3的卷积层,拥有⽐1个7´7的卷积层更少的参数量,只有后者的。最重要的是,3个3´3的卷积层拥有⽐1个7´7的卷积层更多的⾮线性变换(前者可以使⽤三次ReLU激活函数,⽽后者只有⼀次),使得CNN对特征的学习能⼒更强。
同时,作者在对⽐各级⽹络时总结出了以下⼏个观点。
(1)LRN层作⽤不⼤。
ntence是什么意思(2)越深的⽹络效果越好。
(3)1´1的卷积也是很有效的,但是没有3´3的卷积好,⼤⼀些的卷积核可以学习更⼤的空间特征。
总的来说,在⽹络设计思路上,VGGNet是继承了AlexNet的思路,以AlexNet为基础,尝试建⽴⼀个层次更多,深度更深的⽹络。其⽹络结构⼀样可以由8个层次所构成,也是5组卷积层,3层全连接层。最主要的区别在于,VGGNet的每个卷积层并不是只做⼀次卷积操作,⽽是连续卷积2~4次。具体结构上的差别见下表(包括其它⽹络结构和VGG16与VGG19):