CNN四大经典框架:AlexNet、VGGNet、Google Inception Net和ResNet总结

CNN四大经典框架:AlexNet、VGGNet、Google Inception Net和ResNet总结

文章目录

  • CNN四大经典框架:AlexNet、VGGNet、Google Inception Net和ResNet总结
  • 前言
  • 一、AlexNet
  • 二、VGGNet
  • 三、Google Inception Net
  • 四、ResNet
  • 总结


前言

AlexNet、VGGNet、Google Inception Net、这4种网络依照出现的先后顺序排列,深度和复杂度也依次递进。它们分别获得了ILSVRC(ImageNet Large Scale Visual Recognition Challenge)比赛分类项目的2012年冠军(top-5错误率16.4%,使用额外数据可达到15.3%,8层神经网络)、2014年亚军(top-5错误率7.3%,19层神经网络),2014年冠军(top-5错误率6.7%,22层神经网络)和2015年的冠军(top-5错误率3.57%,152层神经网络)。这4个经典的网络都在各自的年代率先使用了很多先进的卷积神经网络结构,对卷积网络乃至深度学习有非常大的推动作用,也象征了卷积神经网络在2012—2015这四年间的快速发展。

一、AlexNet

AlexNet在CNN网络中进行几个重大创新:激活函数ReLU,随机失活Dropout,LRN层,最大值池化代替平均池化,数据增强,下面对这几个方面进行详细描述。
(1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光大。
(2)训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。
(3)在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
(4)提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
LRN是什么?LRN:Local Response Normalization局部相应归一化层,一般放在激活函数和池化层后面,为什么要加LRN?为了实现侧抑制,就是被激活的神经元抑制相邻的神经元,同时归一化有助于快速收敛。相当于对局部神经元的创建竞争机制,使其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。那么怎么实现呢?用归一化方程,方程如下:
CNN四大经典框架:AlexNet、VGGNet、Google Inception Net和ResNet总结_第1张图片
a[a,b,c,d]表示在第a张图,第b通道,坐标在[c,d]处的特征,N是自己设的,比如b=10,N=4,就表示用图a,坐标[b,c]第10通道的特征除以8,9,10,11,12五个通道的特征之和。

(5)数据增强,随机地从256x256的原始图像中截取224x224大小的区域(以及水平翻转的镜像),相当于增加了(256-224)*2X2=2048倍的数据量。如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷入过拟合中,使用了数据增强后可以大大减轻过拟合,提升泛化能力。进行预测时,则是取图片的四个角加中间共5个位置,并进行左右翻转,一共获得10张图片,对他们进行预测并对10次结果求均值。同时,AlexNet论文中提到了会对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加一些噪声,这个Trick可以让错误率再下降1%

二、VGGNet

VGGNet探索了卷积神经网络的深度与其性能之间的关系,通过反复堆叠3x3的小型卷积核和2x2的最大池化层,VGGNet成功地构筑了16~19层深的卷积神经网络。
VGGNet最大的创新就是使用3x3的小型卷积核来代替大的卷积核,为什么?两个3x3的卷积层串联相当于1个5x5的卷积层,而3个3x3的卷积层串联的效果则相当于1个7x7的卷积层。除此之外,3个串联的3x3的卷积层,拥有比1个7´7的卷积层更少的参数量,那么模型就会更小,模型就允许做的更深,最重要的是,3个3X3的卷积层拥有比1个7X7的卷积层更多的非线性变换(前者可以使用三次ReLU激活函数,而后者只有一次,同时模型更深,会有更多的ReLU函数),使得CNN对特征的学习能力更强,非线性能力更强。
下图可以看到,两个串联3x3的卷积层功能类似于一个5x5的卷积层
CNN四大经典框架:AlexNet、VGGNet、Google Inception Net和ResNet总结_第2张图片

同时,VGGNet的作者在对比各级网络时总结出了以下几个观点。
(1)LRN层作用不大。
(2)越深的网络效果越好。
(3)1x1的卷积也是很有效的,但是没有3x3的卷积好,大一些的卷积核可以学习更大的空间特征。

三、Google Inception Net

Google Inception Net通过不断的更新和改进,有了四个版本,分别是Inception V1,Inception V2,Inception V3,Inception V4,下面我们分别说一下他们。
Inception V1:它最大的特点是控制了计算量和参数量的同时,获得了非常好的分类性能。Inception V1降低参数量的目的有两点,第一,参数越多模型越庞大,需要供模型学习的数据量就越大,而目前高质量的数据非常昂贵;第二,参数越多,耗费的计算资源也会更大。
那么Inception V1具体是怎么做的呢?
Inception V1参数少但效果好的原因除了模型层数更深、表达能力更强外,还有两点:一是去除了最后的全连接层,用全局平均池化层(一张特征图全局平均池化后变成一个值,即将图片尺寸变为1x1)来取代它。全连接层几乎占据了AlexNet或VGGNet中90%的参数量,而且会引起过拟合,去除全连接层后模型训练更快并且减轻了过拟合。用全局平均池化层取代全连接层的做法借鉴了Network In Network(以下简称NIN)论文。二是Inception V1中精心设计的Inception Module提高了参数的利用效率,其结构如下图所示。
CNN四大经典框架:AlexNet、VGGNet、Google Inception Net和ResNet总结_第3张图片
我们再来看Inception Module的基本结构,其中有4个分支:第一个分支对输入进行1x1的卷积,这其实也是NIN中提出的一个重要结构。1x1的卷积是一个非常优秀的结构,它可以跨通道组织信息,提高网络的表达能力,同时可以对输出通道升维和降维。可以看到Inception Module的4个分支都用到了1x1卷积,来进行低成本(计算量比3x3小很多)的跨通道的特征变换。第二个分支先使用了1x1卷积,然后连接3x3卷积,相当于进行了两次特征变换。第三个分支类似,先是1x1的卷积,然后连接5x5卷积。最后一个分支则是3x3最大池化后直接使用1x1卷积。我们可以发现,有的分支只使用1x1卷积,有的分支使用了其他尺寸的卷积时也会再使用1x1卷积,这是因为1x1卷积的性价比很高,用很小的计算量就能增加一层特征变换和非线性化。Inception Module的4个分支在最后通过一个聚合操作合并(在输出通道数这个维度上聚合)。Inception Module中包含了3种不同尺寸的卷积和1个最大池化,增加了网络对不同尺度的适应性,这一部分和Multi-Scale的思想类似。早期计算机视觉的研究中,受灵长类神经视觉系统的启发,Serre使用不同尺寸的Gabor滤波器处理不同尺寸的图片,Inception V1借鉴了这种思想。Inception V1的论文中指出,Inception Module可以让网络的深度和宽度高效率地扩充,提升准确率且不致于过拟合。
人脑神经元的连接是稀疏的,因此研究者认为大型神经网络的合理的连接方式应该也是稀疏的。稀疏结构是非常适合神经网络的一种结构,尤其是对非常大型、非常深的神经网络,可以减轻过拟合并降低计算量,例如卷积神经网络就是稀疏的连接。Inception Net的主要目标就是找到最优的稀疏结构单元(即Inception Module),论文中提到其稀疏结构基于Hebbian原理,这里简单解释一下Hebbian原理:神经反射活动的持续与重复会导致神经元连接稳定性的持久提升,当两个神经元细胞A和B距离很近,并且A参与了对B重复、持续的兴奋,那么某些代谢变化会导致A将作为能使B兴奋的细胞。总结一下即“一起发射的神经元会连在一起”(Cells that fire together, wire together),学习过程中的刺激会使神经元间的突触强度增加。受Hebbian原理启发,另一篇文章Provable Bounds for Learning Some Deep Representations提出,如果数据集的概率分布可以被一个很大很稀疏的神经网络所表达,那么构筑这个网络的最佳方法是逐层构筑网络:将上一层高度相关(correlated)的节点聚类,并将聚类出来的每一个小簇(cluster)连接到一起,如图11所示。这个相关性高的节点应该被连接在一起的结论,即是从神经网络的角度对Hebbian原理有效性的证明。
因此一个“好”的稀疏结构,应该是符合Hebbian原理的,我们应该把相关性高的一簇神经元节点连接在一起。在普通的数据集中,这可能需要对神经元节点聚类,但是在图片数据中,天然的就是临近区域的数据相关性高,因此相邻的像素点被卷积操作连接在一起。而我们可能有多个卷积核,在同一空间位置但在不同通道的卷积核的输出结果相关性极高。因此,一个1x1的卷积就可以很自然地把这些相关性很高的、在同一个空间位置但是不同通道的特征连接在一起,这就是为什么1x1卷积这么频繁地被应用到Inception Net中的原因。1x1卷积所连接的节点的相关性是最高的,而稍微大一点尺寸的卷积,比如3x3、5x5的卷积所连接的节点相关性也很高,因此也可以适当地使用一些大尺寸的卷积,增加多样性(diversity)。最后Inception Module通过4个分支中不同尺寸的1x1、3x3、5x5等小型卷积将相关性很高的节点连接在一起,就完成了其设计初衷,构建出了很高效的符合Hebbian原理的稀疏结构。
同时,在Inception Module中,可以调整1x1,3x3,5x5卷积核的比例来捕获不同的特征。如果想要捕获更大面积的特征,就增加3x3,5x5卷积核的占比。不过在通常情况下,1x1卷积核的比例(输出通道数占比)最高,3x3卷积核和5x5卷积核稍低。

Inception V2学习了VGGNet,用两个3x3的卷积代替5x5的大卷积(用以降低参数量并减轻过拟合),还提出了著名的Batch Normalization(以下简称BN)方法。(如果不清楚BN看我的上一篇博客批归一化(Batch Normalization)详解)

BN是一个非常有效的正则化方法,可以让大型卷积网络的训练速度加快很多倍,同时收敛后的分类准确率也可以得到大幅提高。BN在用于神经网络某层时,会对每一个mini-batch数据的内部进行标准化(normalization)处理,使输出规范化到N(0,1)的正态分布,减少了Internal Covariate Shift(内部神经元分布的改变)。BN的论文指出,传统的深度神经网络在训练时,每一层的输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习速率解决这个问题。而对每一层使用BN之后,我们就可以有效地解决这个问题,学习速率可以增大很多倍,达到之前的准确率所需要的迭代次数只有1/14,训练时间大大缩短。
当然,只是单纯地使用BN获得的增益还不明显,还需要一些相应的调整:增大学习速率并加快学习衰减速度以适用BN规范化后的数据;去除Dropout并减轻L2正则(因BN已起到正则化的作用);去除LRN;更彻底地对训练样本进行shuffle;减少数据增强过程中对数据的光学畸变(因为BN训练更快,每个样本被训练的次数更少,因此更真实的样本对训练更有帮助)。在使用了这些措施后,Inception V2在训练达到Inception V1的准确率时快了14倍,并且模型在收敛时的准确率上限更高。

而Inception V3网络则主要有两方面的改造:一是引入了Factorization into small convolutions的思想,将一个较大的二维卷积拆成两个较小的一维卷积,比如将7x7卷积拆成1x7卷积和7x1卷积,或者将3x3卷积拆成1x3卷积和3x1卷积,如下图所示。一方面节约了大量参数,加速运算并减轻了过拟合(比将7x7卷积拆成1x7卷积和7x1卷积,比拆成3个3x3卷积更节约参数),同时增加了一层非线性扩展模型表达能力。论文中指出,这种非对称的卷积结构拆分,其结果比对称地拆为几个相同的小卷积核效果更明显,可以处理更多、更丰富的空间特征,增加特征多样性。
CNN四大经典框架:AlexNet、VGGNet、Google Inception Net和ResNet总结_第4张图片
另一方面,Inception V3优化了Inception Module的结构,现在Inception Module有35x35、17x17和8x8三种不同结构,如下图所示。这些Inception Module只在网络的后部出现,前部还是普通的卷积层。并且Inception V3除了在Inception Module中使用分支,还在分支中使用了分支(8x8的结构中),可以说是Network In Network In Network。
CNN四大经典框架:AlexNet、VGGNet、Google Inception Net和ResNet总结_第5张图片
Inception V4:相比V3主要是结合了微软的ResNet,ResNet我们会在下面讲,这里对Inception V4不做过多总结,看完下面的ResNet,你就清楚Inception V4了。

四、ResNet

ResNet是允许原始输入信息直接传输到后面的层中。ResNet最初的灵感出自这个问题:在不断加神经网络的深度时,会出现一个Degradation的问题,即准确率会先上升然后达到饱和,再持续增加深度则会导致准确率下降。这并不是过拟合的问题,因为不光在测试集上误差增大,训练集本身误差也会增大。假设有一个比较浅的网络达到了饱和的准确率,那么后面再加上几个的全等映射层,起码误差不会增加,即更深的网络不应该带来训练集上误差上升。而这里提到的使用全等映射直接将前一层输出传到后面的思想,就是ResNet的灵感来源。
假定某段神经网络的输入是x,期望输出是,如果我们直接把输入x传到输出作为初始结果,那么此时我们需要学习的目标就是。如下图所示,这就是一个ResNet的残差学习单元(Residual Unit),ResNet相当于将学习目标改变了,不再是学习一个完整的输出,只是输出和输入的差别,即残差。

CNN四大经典框架:AlexNet、VGGNet、Google Inception Net和ResNet总结_第6张图片
下图所示:为VGGNet-19,以及一个34层深的普通卷积网络,和34层深的ResNet网络的对比图。可以看到普通直连的卷积神经网络和ResNet的最大区别在于,ResNet有很多旁路的支线将输入直接连到后面的层,使得后面的层可以直接学习残差,这种结构也被称为shortcut或skip connections。
CNN四大经典框架:AlexNet、VGGNet、Google Inception Net和ResNet总结_第7张图片
传统的卷积层或全连接层在信息传递时,或多或少会存在信息丢失、损耗等问题。ResNet在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络则只需要学习输入、输出差别的那一部分,简化学习目标和难度。ResNet的基础结构都是下图提到的两层和三层的残差学习单元的堆叠。在使用了ResNet的结构后,可以发现层数不断加深导致的训练集上误差增大的现象被消除了,ResNet网络的训练误差会随着层数增大而逐渐减小,并且在测试集上的表现也会变好。
CNN四大经典框架:AlexNet、VGGNet、Google Inception Net和ResNet总结_第8张图片

总结

后面Inception V3加入了ResNet的残差结构推出了Inception V4。ResNet加入了Inception V2的批归一化(BN)推出了ResNet V2,后面ResNet V2又融合了Inception Net的Inception Module网络结构推出了Inception ResNet V2 。那么回顾过去,卷积神经网络的发展历史可以用下面一张图进行总结。
CNN四大经典框架:AlexNet、VGGNet、Google Inception Net和ResNet总结_第9张图片
参考文章:深度学习之四大经典CNN技术浅析 | 雷锋网公开课


写的不好,如果有问题请及时指出,我会及时纠正。如果您认可我的文章,希望你能关注我的微信公众号,我会不定期更新工作中学到的东西和一些技术比较前沿的东西。

CNN四大经典框架:AlexNet、VGGNet、Google Inception Net和ResNet总结_第10张图片

你可能感兴趣的:(卷积,网络,神经网络,计算机视觉,机器学习)