CNN卷积神经网络架构的发展(下)

阅读文本大概需要 7 分钟。

前言

上一节我们说到了NIN架构,这节课柠檬会给大家介绍其余的几个卷积神经网络架构。顺便说一下,柠檬最近也是在第二次跑我们上节课提到过的AlexNet架构,下次可以给大家发下代码和介绍。

CNN卷积神经网络架构的发展

首先柠檬还是先把自己作出的思维导图放出来

上一节我们学习到NiN,所以现在我们从VGG架构开始介绍。

VGG - 2014

来自牛津大学的VGG网络是第一个在每个卷积层使用更小的3×3卷积核对图像进行卷积,并把这些小的卷积核排列起来作为一个卷积序列。通俗点来讲就是对原始图像进行3×3卷积,然后再进行3×3卷积,连续使用小的卷积核对图像进行多次卷积。

或许很多人看到这里也很困惑为什么使用那么小的卷积核对图像进行卷积,并且还是使用连续的小卷积核?VGG一开始提出的时候刚好与LeNet的设计原则相违背,因为LeNet相信大的卷积核能够捕获图像当中相似的特征(权值共享)。AlexNet在浅层网络开始的时候也是使用9×9、11×11卷积核,并且尽量在浅层网络的时候避免使用1×1的卷积核。但是VGG的神奇之处就是在于使用多个3×3卷积核可以模仿较大卷积核那样对图像进行局部感知。后来多个小的卷积核串联这一思想被GoogleNet和ResNet等吸收。

其实我们应该也能感受到,后期的新架构都在往小卷积核方向发展,其实就算是现在比较新的架构如SqueezeNet等,也都是遵循这个思想在走。

VGG相信如果使用大的卷积核将会造成很大的时间浪费,减少的卷积核能够减少参数,节省运算开销。虽然训练的时间变长了,但是总体来说预测的时间和参数都是减少的了。

GoogLeNet - 2014

还是2014年,在google工作的Christian Szegedy为了找到一个深度神经网络结构能够有效地减少计算资源,于是有了这个GoogleNet了(也叫做Inception V1,现已发展到V4)。

从2014年尾到现在,深度学习模型在图像内容分类方面和视频分类方面有了极大的应用。在这之前,很多一开始对深度学习和神经网络都保持怀疑态度的人,现在都涌入深度学习的这个领域,理由很简单,因为深度学习不再是海市蜃楼,而是变得越来越接地气。就连google等互联网巨头都已经在深度学习领域布局,成立了各种各样的额人工智能实验室。

Christian在思考如何才能够减少深度神经网络的计算量,同时获得比较好的性能的框架。即使不能两全其美,退而求其次能够保持在相同的计算成本下,能够有更好的性能提升这样的框架也行。于是后面Christian和他的team在google想出了这个模型:

其实柠檬个人感觉GoogleNet也就是Inception V1很大程度上借鉴了NiN,利用大量的1×1极大程度的减少了计算量,算是在NiN的基础上创新吧。

ResNet - 2015

在2015年12月,ResNet发布了,它的核心思想用一句话来说就是:输出的是两个连续的卷积层,并且输入时绕到下一层去。如下图。

为什么要这样做?柠檬还是想尽量通俗的给大家解释:1.可以超大量的提升网络的层数,甚至可以提升到1000层,这是什么概念呢?我们上节课介绍的AlexNet也就从5层上升到7层。。。2.尽管层数提升了好几个量级,但ResNet还能做到保留大部分重要的特征细节,这就是它的牛之所在。

该层首先使用1x1卷积然后输出原来特征数的1/4,然后使用3×3的卷积核,然后再次使用1x1的卷积核但是这次输出的特征数为原来输入的大小。如果原来输入的是256个特征,输出的也是256个特征,但是这样就像Bottleneck Layer那样说的大量地减少了计算量,但是却保留了丰富的高维特征信息。

ResNet一开始的时候是使用一个7x7大小的卷积核,然后跟一个pooling层。当然啦,最后的分类器跟GoogleNet一样是一个pooling层加上一个softmax作为分类器。下图左边是VGG19拥有190万个参数,右图是34层的ResNet只需要36万个参数:

简单总结下,ResNet的两个特征是:1.ResNet可以被看作并行和串行多个模块的结合,2.ResNet上部分的输入和输出一样,所以看上去有点像RNN,因此可以看做是一个更好的生物神经网络的模型。

SqueezeNet - 2016

我们可以看到,SqueezeNet已经算是很新 的架构了,其实包括现在也使用的比较频繁,它的论文标题也很爆炸。

CNN模型参数降低50倍,压缩461倍!

SqueezeNet设计目标不是为了得到最佳的CNN识别精度,而是希望简化网络复杂度,同时达到public网络的识别精度。所以SqueezeNet主要是为了降低CNN模型参数数量而设计的。

设计原则:

(1)替换3x3的卷积kernel为1x1的卷积kernel

卷积模板的选择,从12年的AlexNet模型一路发展到2015年底Deep Residual Learning模型,基本上卷积大小都选择在3x3了,因为其有效性,以及设计简洁性。本文替换3x3的卷积kernel为1x1的卷积kernel可以让参数缩小9X。但是为了不影响识别精度,并不是全部替换,而是一部分用3x3,一部分用1x1。具体可以看后面的模块结构图。

(2)减少输入3x3卷积的input feature map数量

如果是conv1-conv2这样的直连,那么实际上是没有办法减少conv2的input feature map数量的。所以作者巧妙地把原本一层conv分解为两层,并且封装为一个Fire Module。

(3)减少pooling

这个观点在很多其他工作中都已经有体现了,比如GoogleNet以及Deep Residual Learning。

简单说下就是SqueezeNet印证了小得多的网络也可以到达很好的CNN识别精度。相信以后会出现更多小网络,做到state-of-the-art的精度。

总结

一开始专家们把注意力放在加深架构的层次上,比如AlexNet从5层到7层等,到之后专家们发现不对劲了,每增加一层可能会增加很多参数或者计算量,所以之后就把注意力集中在小的卷积核上,但比较里程碑的也就lecun大神的开山作LeNet和AlexNet,因为AlexNet定下的特性我们现在都一直在用,柠檬现在也在跑AlexNet,到时再跟大家分享,今天的内容稍微有点多,希望大家能养成只字不差阅读的习惯,下期再见。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180822G080GQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券