GooleNet -Incepetion V1 学习笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38437505/article/details/78473595

   GoogLeNet-V1首次出现是在ILSVER 2014 的比赛中(与上篇文章VGG-NET是同一年的参赛作品),当时以比较大的优势取得了第一名.在随后的几年中谷歌有在此基础中相继推出了其进阶版模型,例如我们现在所熟知及运用极广的BN 是在V2中提出的,以及其他优化算法,后续再说.
   GoogLeNet 这一大家族如下:
   [[v1] Going Deeper with Convolutions, 6.67% test error ]
     (http://arxiv.org/abs/1409.4842)
   [[v2] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift, 4.8% test error ]
     (http://arxiv.org/abs/1502.03167) 
   [[v3] Rethinking the Inception Architecture for Computer Vision, 3.5% test error ]
     (http://arxiv.org/abs/1512.00567) 
   [[v4] Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning, 3.08% test error ]
     (http://arxiv.org/abs/1602.07261)
   先放一张CNN的发展图吧,也算是CNN各种不用模型间的一种关系图:
  
   这里写图片描述  

一.概述

  由AlecNet到VGG-NET,我们可以看出,人们在对卷积神经网络模型的改进上,采用最直接的办法就是  更深 更宽 ,但是这样的模型也就意味着巨量的学习参数,且对高质量的数据集需求也更大;过大的参数不仅容易产生过拟合问题而且在模型训练过程中需要更多的计算资源,这无疑给模型的设计带来很大的麻烦.
  作者基于上述问题的考虑且根据相关文献得知:对于大规模稀疏的神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类来逐层构建出一个最优网络,另外大量的文献(论文参考文献中提到,不过我没有去读)表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,据此论文作者提出了名为 Inception  的结构来实现此目的。
  模型结构如下:
        这里写图片描述 
  该模型只是应用在卷机神经网络中的一种特征提取手段,利用不同尺寸的卷积核对输入的不同空间结构中的特征进行提取,然后在第三维度(通道)上合并,达到组合不同复杂程度的特征来保留更加具有说服力的高阶特征,增加模型的表示能力. 

二.网络结构

2.1 总体结构

 这里先放一张论文中给出的完全体的GoogLeNet-V1的结构图.
 这里写图片描述  
 现在我们来看这结构图,首先是输入图片,然后是一连串的卷积层类似于VGG-NET卷积层,紧接着是本文中的核心部分Inception model  有很多个不同尺寸的Inception model连接在一起,其中在某些节点处,会将结果进行输出并通过soft max 进行分类得到一组结果,最后通过一层全局平均化取代了原来的全连接层(很大的一处进步,虽然是借鉴NIN),最后一层还是一如既往的分类层soft max .和往常的模型结构相比,确实有了很大的改变,不过基础没变,还是在直线型卷积模型上进行更好的特征提取来得到更好的分类结果.

2.2 结构特性分析

2.2.1 基础卷积层

          这里写图片描述
  在使用Inception model 之前,模型依旧是先通过普通卷积来进行底层特征提取,并且是采用比较小的卷积核.我刚开始时在思考,既然作者费了很大的功夫提出的Inception model 稀疏模型,为何不直接对输入图片使用,那样效果不会更好么?后来又仔细的想了一下,想到稀疏模型的提出是为了对不同尺寸的空间内的信息提取来丰富特征信息或者说是将相关性高的特征聚类,但是底层图片(特征)空间特征信息太少,或者说是信息混杂在一起,根本不利于稀疏模型的应用.但是卷积层(卷积核)存在的意义就是为了进行空间特征提取(不同的卷积核提取不同的特征信息),所以首先应用卷积层对图片进行特征提取,简化空间结构(尺寸),将底层信息转化成复杂的高阶特征.然后再利用稀疏模型进行不同尺寸的特征的提取来丰富特征,达到更好的效果.

2.2.2 Inception model

      这里写图片描述
  该结构是本文也是整个Inception model的核心,其作用已经在上面都说过了;论文中提到它的稀疏结构是依托于Hebbian原理的(虽然我还不是很懂这个原理,不过在这里还是先把他介绍一下,可能在以后的学习实践中慢慢会明白的,到时候真正明白了再回来修正,如果理解的不对,希望各路朋友留言纠正):神经反射活动的持续与重复会导致神经元连接稳定性的持久提升,当两个神经元AB相聚很近时,若A参与了B的持续兴奋,那么某些变化会导致A的兴奋能使B也兴奋,总结一下就是一起发射的神经元会连在一起.

那么他的各个结构又起了什么作用呢?

  • 用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合,大大丰富了特征信息;并且对于图片来说距离越近其相关性也就越高,利用卷积核将其连接,本身就能提高其相关性,儿不同尺寸的卷积核,增加了多样性.

  • 之所以卷积核大小采用1、3和5,主要是为了方便对齐;设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度(长与管)的特征,然后这些特征就可以在第三维度上直接拼接在一起了;

  • 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了,毕竟池化是不同于卷积的一种特征提取吧;

  • 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加,这样就能对信息更加全面的提取.

  • 采用1x1卷积核来进行降维;使用5x5的卷积核仍然会带来巨大的计算量,所以文章借鉴NIN,利用1*1小卷积核的特性来降维,1*1卷积核的部分特性在上篇笔记中已经介绍了,不过看过这篇论文后,我发现原来1*1卷积核的作用远远不止那些,其还有一个很大的作用:图片中,经过多个卷积核后,在同一个空间位置但在不同通道的输出结果的相关性很高,因此,当我们采用1*1的卷积核对其进行变换后,就可以很自然地将这些相关性很高的信连接在一起,这也是为什么现在越来越多的模型中使用1*1的卷积核了.
      例如:上一层的输出为100x100x128,经过具有256个输出的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256。其中,卷积层的参数为128x5x5x256。假如上一层输出先经过具有32个输出的1x1卷积层,再经过具有256个输出的5x5卷积层,那么最终的输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256,大约减少了4倍。

上面给出的结构中是开始提出的结构还没有使用小卷积核,下面才是后来提出的相对完善的结构,改进后的Inception Module如下图:
      这里写图片描述

2.2.3 全局平均池化

  传统的卷积神经网络卷积运算一般是出现在低层网络。对于分类问题,最后一个卷积层的特征图通过量化然后与全连接层连接,最后在接一个softmax逻辑回归分类层。这种网络结构,使得卷积层和传统的神经网络层连接在一起。我们可以把卷积层看做是特征提取器,然后得到的特征再用传统的神经网络进行分类.然而,全连接层因为参数个数太多,往往容易出现过拟合的现象,导致网络的泛化能力不尽人意.这也是为射门提出Dropout的方法,来提高网络的泛化能力。
  本文提出采用全局均值池化的方法,替代传统CNN中的全连接层。与传统的全连接层不同,我们对每个特征图(一整张图片)进行全局均值池化,这样每张特征图都可以得到一个输出。这样采用均值池化,连参数都省了,可以大大减小网络,避免过拟合.另一方面它有一个特点,每张特征图相当于一个输出特征,然后这个特征就表示了我们输出类的特征。这样如果我们在做1000个分类任务的时候,我们网络在设计的时候,最后一层的特征图个数就要选择1000,然后同样连接到Softmax层进行最后的我分类.
  全局均值池化这个作用很大的创新点来自于《Network In Network》,有兴趣的同学可以去拜读一下,毕竟这篇paper提出的网络结构,是对传统CNN网络的一种改进(这种文献少之又少,所以感觉很有必要学习).关于这篇论文的学习也可以参考Network In Network学习笔记

2.2.4 辅助节点

  我们可以看出GoogLenet的网络其实也是非常深的,如果梯度从最后一层传递到第一层,同样会出现所有 深 网络会出现的问题-梯度弥散,所以GoogLenet在网络的中间加了softmax层,通过这些层获取额外的训练loss,然后根据这个loss计算对应的梯度,最后把梯度加到整个网络的梯度中,进行梯度传播,这样可以有效缓解梯度消失的问题。其实这种训练方式可以看作将几个不同深度的子网络合并到一块进行训练,由于网络的卷积核共享,因此计算的梯度也可以累加,这样最终的梯度也不会很小。关于这一点做的最彻底的应该就ResNet关于ResNet的结构和特点将在另一篇文章里总结。

参考资料

1.Network In Network学习笔记-ICLR 2014
2.http://blog.csdn.net/buyi_shizi/article/details/53409536
3. GoogLeNet系列解读

猜你喜欢

转载自blog.csdn.net/qq_38437505/article/details/78473595