深度学习网络基础—GoogLeNet 学习笔记

深度学习网络基础—GoogLeNet 学习笔记

介绍

在过去的三年里(2014年),主要由于深度学习的进步,更具体地说是卷积网络的发展,图像识别和目标检测的质量以惊人的速度发展。这些进展不仅仅是更强大的硬件、更大的数据集和更大的模型的结果,而且主要是新想法、算法和改进的网络架构的结果。

主要贡献
对深度学习算法在移动设备上的实用性的前瞻性关注

  • 提出 Inception 结构,人为构建稀疏连接,引入多尺度感受野和多尺度融合
  • 使用1%2A1卷积层进行降维,减少计算量
  • 使用均值池化代替全连接层,大大减少参数数量和计算量,一定程度上引入正则化,同时使网络输入的大小可变

灵感的源泉

原版的:

The most straightforward way of improving the performance of deep neural networks is by increasing their size.

提高深度神经网络性能的最直接的办法就是增加网络的尺寸。它包括增加网络的深度和宽度两个方面。深度层面,就是增加网络的层数,而宽度方面,就是增加每层的filter bank尺寸。
但是,这种方法有两个缺点:

  • 更大的尺寸通常意味着更多的参数,并且更容易导致网络的过度拟合,尤其是在样本不足的情况下
  • 即使增加网络每一层的大小也会显着(指数)增加总计算负载。而当网络容量未得到充分利用时,会浪费大量的操作。
    解决这一问题的根本方法在于,最终将 dense 连接转换为为稀疏连接。

结构体

原版的:

The main idea of the Inception architecture is based on finding out how an optimal local sparse
structure in a convolutional vision network can be approximated and covered by readily available
dense components.
All we need is to find the optimal local construction and to repeat it spatially

Inception架构的主要思想是基于如何发现卷积视觉网络中用密集成分来近似最优的局部稀疏结构。我们所需要的就是找到最优的局部构造,并在空间上重复它。
原始Inception
图1
深度学习网络基础—GoogLeNet 学习笔记

  • 1、采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合。
  • 2、之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了
  • 3、文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了。
  • 4、网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3×3和5×5卷积的比例也要增加
  • 5、在所有卷积核运算结束之后,通过 concatenate 运算(在 depth 维度上进行),将结果进行组合。整个 GoogLeNet 网络通过大量 Inception 模块堆叠而成

在上面的 Inception 模块中,存在一定的问题 —— 卷积运算运算量过大。当上一层的输出通道数较大时,当前 Inception 模块的运算量将很大,且由于多组卷积核并联运算,因此这是随着层数的堆叠而爆炸式增长的!

针对这一问题,我们使用1 x 1卷积作为 reduction 层,来缩减通道数,从而减少计算量。具体做法为:在每一个3 x 3和5 x 5的卷积层之前,加上1 x 1的卷积层。其在减少计算量的同时,还引入了非线性,进一步增加了网络的表达能力。

如何理解非线性的引入

使用1 x 1卷积核,实现降维和升维的操作其实就是通道间信息的线性组合变化,3 x 3,64 channels的卷积核前面添加一个1 x 1,28 channels的卷积核,就变成了3 x 3,28 channels的卷积核,原来的64个channels就可以理解为跨通道线性组合变成了28个channels,这就是通道间的信息交互。因为1 x 1卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很深,增加非线性特性

这种设计的优点是:

  • 它可以显着增加网络每一层中的神经元数量,而不会导致无法控制的计算量增加
  • 降维的设计是为了在网络层之间传递大量的特征层
  • 间接引入多尺度处理,使网络可以同时综合考虑不同尺度的信息
    这种计算方式的改进使得可以在不增加计算量的情况下,加宽每一层的宽度,增加网络的深度。

图2
深度学习网络基础—GoogLeNet 学习笔记

关键点分析

图中有多个黄色的1×1卷积模块的作用:

  • 1、在相同尺寸的感受野中叠加更多的卷积,能提取到更丰富的特征
  • 2、使用1×1卷积进行降维,降低了计算复杂度。图中间3×3卷积和5×5卷积前的1×1卷积都起到了这个作用。当某个卷积层输入的特征数较多,对这个输入进行卷积运算将产生巨大的计算量;如果对输入先进行降维,减少特征数后再做卷积计算量就会显著减少。

跨多个维度的卷积重新聚合

参考地址https://zhuanlan.zhihu.com/p/32702031

图2可以看到对输入做了4个分支,分别用不同尺寸的filter进行卷积或池化,最后再在特征维度上拼接到一起.

  • 1、在直观感觉上在多个尺度上同时进行卷积,能提取到不同尺度的特征。特征更为丰富也意味着最后分类判断时更加准确。
  • 2、利用稀疏矩阵分解成密集矩阵计算的原理来加快收敛速度。举个例子下图左侧是个稀疏矩阵(很多元素都为0,不均匀分布在矩阵中),和一个2×2的矩阵进行卷积,需要对稀疏矩阵中的每一个元素进行计算;如果像右图那样把稀疏矩阵分解成2个子密集矩阵,再和2×2矩阵进行卷积,稀疏矩阵中0较多的区域就可以不用计算,计算量就大大降低。这个原理应用到inception上就是要在特征维度上进行分解!传统的卷积层的输入数据只和一种尺度(比如3×3)的卷积核进行卷积,输出固定维度(比如256个特征)的数据,所有256个输出特征基本上是均匀分布在3×3尺度范围上,这可以理解成输出了一个稀疏分布的特征集;而inception模块在多个尺度上提取特征(比如1×1,3×3,5×5),输出的256个特征就不再是均匀分布,而是相关性强的特征聚集在一起(比如1×1的的96个特征聚集在一起,3×3的96个特征聚集在一起,5×5的64个特征聚集在一起),这可以理解成多个密集分布的子特征集。这样的特征集中因为相关性较强的特征聚集在了一起,不相关的非关键特征就被弱化,同样是输出256个特征,inception方法输出的特征“冗余”的信息较少。用这样的“纯”的特征集层层传递最后作为反向计算的输入,自然收敛的速度更快。
    深度学习网络基础—GoogLeNet 学习笔记
  • 3、解释3:Hebbin赫布原理。Hebbin原理是神经科学上的一个理论,解释了在学习的过程中脑中的神经元所发生的变化,用一句话概括就是fire togethter, wire together。赫布认为“两个神经元或者神经元系统,如果总是同时兴奋,就会形成一种‘组合’,其中一个神经元的兴奋会促进另一个的兴奋”。比如狗看到肉会流口水,反复刺激后,脑中识别肉的神经元会和掌管唾液分泌的神经元会相互促进,“缠绕”在一起,以后再看到肉就会更快流出口水。用在inception结构中就是要把相关性强的特征汇聚到一起。这有点类似上面的解释2,把1×1,3×3,5×5的特征分开。因为训练收敛的最终目的就是要提取出独立的特征,所以预先把相关性强的特征汇聚,就能起到加速收敛的作用。

在inception模块中有一个分支使用了max pooling,作者认为pooling也能起到提取特征的作用,所以也加入模块中。注意这个pooling的stride=1,pooling后没有减少数据的尺寸

版权声明:本文为博主FlyDremever原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_33728095/article/details/123166587

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年3月4日 下午5:28
下一篇 2022年3月4日 下午5:48

相关推荐