网络学习系列(三)Inception系列

Inception v1

论文链接:Going deeper with convolutions

要解决的问题:

对于深度学习来说,目前的共识是更深的网络的性能要优于较浅的网络,所以论文中所做的就是在充分利用计算机资源的基础上,精心设计网络的结构,使网络更深。

相关信息:

1、目前普遍的较为高效的神经网络,是由一系列堆积的卷积层,后面跟有池化层跟全连接层,如果出现过拟合,可以采用dropout进行处理。

2、由network-in-network这篇paper的启发,1*1的卷积可以用来进行降维打破计算的瓶颈,同时也能增加网络的宽度,保持网络较高的性能。

3、一般来说,如果直接增加网络的深度,会带来两个比较严重的问题:第一个是网络规模太大,参数太多容易过拟合,第二个是计算资源会急剧的增加,即便只有两个卷积层连在一起,其计算量也会以幂级增加。解决这个问题的方法是使用较为稀疏的结构,不仅在全连接层进行这种操作,甚至卷积层也需要这么做。Arora等人的研究表明,如果数据集的概率分布可以用一个稀疏的网络进行表示,那么可以通过分析每一层的激活值的相关性,将相关的神经元进行聚类,进而将网络搭建起来。这也符合赫布原则(赫布原则是神经学的理论,没搞懂跟这地方是怎么联系起来的,有待后续的学习)。然而,目前的计算机手段处理稀疏的数据结构是非常低效的,所以采取了一种折中的办法,即将稀疏的矩阵聚类到相对密集的子矩阵,当进行稀疏矩阵相乘的操作时就能达到较高的效率。关键是如何做到这点,首先,卷积肯定是密集型操作,这个无法改变,而且也有利于计算,关键是在其他方面下功夫,可以理解成以下几点,空间上的稀疏性,采用卷积本身就是一种稀疏,其对图像的局部进行操作,而且采用了不同大小的卷积核,3*3的卷积核可以理解成5*5的稀疏表示,这也是一种稀疏;特征上的稀疏性,根据赫布原则(一起激活一起连接,即相关性强的特征聚集在一起),特征图可以由强相关性的特征图群聚而成,因此使用了不同级别的特征图,例如3*3,5*5等,其内部特征高度相关,这其实也就是多尺度。

网络的实现:

1、原始结构:

网络实现的关键是找到某些密集成分,来拟合网络的局部稀疏结构,为了做到这点,网络去除了全连接层,同时构造了上述的结构,体现了聚类的思维,这样做增加了网络的宽度,同时增加了网络对多尺度的适应性。这个地方卷积核的尺寸不具有特殊的含义,仅仅是为了方便最终组合特征图。然而,这样的结构也有一个较大的缺点,那就是5*5卷积的存在,会极大的增加运算量,同时又有池化层的存在,进行特征图的融合增加输出的数量,使得网络在计算上并不高效。

2、改进结构:

为了减小运算量,在进行卷积之前加入了1*1的卷积进行降维,使得这种结构的高效成为可能。

3、整个结构:

网络的前端还是普通的卷积网络结构,在后面使用了inception网络的堆砌,同时,在网络的下面,还延伸出了几个分支,这是用来进行辅助分类。

Inception v2

论文链接:Batch Normalization

要解决的问题:

当对深层的网络进行训练时,由于模型的参数不断的改变,每一层输入的概率分布都在不断的变化,这就要求使用非常小的学习率,同时需要非常谨慎的设置参数。而且由于非线性饱和的存在,会使得网络非常难以训练,这个现象被称之为internal covariate shif。

相关信息:

1、Experience Covariate Shift现象,即系统输入的分布发生了改变,解决方法是领域适应与迁移学习,作者发现,如果输入的分布更有利于训练。

2、非线性饱和问题:网络越深,越容易出现梯度的弥散,而数据的分布不一致,使这种情况出现的概率增加。

3、internal covariate shif问题,即网络训练过程中网络参数不断变化,导致各层的输入分布变化,使得网络不易训练。

解决方法:

1、由经验可知,对输入进行白化处理,可以加快收敛,因此,为了解决每层的输入不一致的问题,考虑对每一层的输入进行归一化,使其分布一致。

2、理论上来说,应该在每一层的非线性激活之后进行归一化操作,然而,在训练初期分界面还在剧烈变化,计算出的参数很不稳定,所以一般讲归一化的操作放在非线性激活之前,这也是现在网络所采用的方式。

3、论文中提出的批量归一化,并非只是简单的白化处理,在计算梯度时就需要考虑归一化的问题。因为网络学习的本质就是学习数据的分布,如果只是简单的归一化会破坏这种分布,论文给出的解决办法是归一化之后要通过均值和方差两个系数还原这种分布。(在别处还看到另一种说法,就是如果只是单纯的归一化,一旦进行反向传播操作,会撤销这种归一化的处理,所以在最后要通过均值和方差两个系数来避免这种情况的出现)

4、通过论文中这种归一化的操作,不仅可以加快训练,而且在一定程度上可以解决过拟合问题。

Inception v3

论文链接:Rethinking the Inception Architecture for Computer Vision

要解决的问题:

相较于AlexNet与VGGNet,googleNet的计算量与参数无疑少了许多,但是,由于网络的复杂性,使得网络不易于向更大规模进行扩展,论文主要是为了解决这个问题。

相关信息:

1、通用的网络设计原则:

1)避免表示瓶颈:前向传播网络可以看作一个有向无环图,从输入到输出,其特征图应该缓慢的减小。我们不能仅仅通过维度来读取图片的信息,因为在维度增加的过程中已经丢掉了许多重要的特征,例如相关结构。维度信息只是对图片信息的粗略估计。对于表示瓶颈的简单理解就是网络中层的池化等操作使得特征图尺寸明显减小。

2)高维度的特征在局部更加容易处理,在网络中增加非线性关系,可以使训练更加快速,另外层宽一些还是有好处的,可以增加其表示能力;

3)在网络的深层,空间的聚合可以在较低维度上进行,这样不会损失表示能力,例如在3*3、5*5卷积之前进行了降维处理。

4)平衡网络的深度与宽度,理论上来说,同时增加网络的深度与宽度都能增加网络的性能,但要考虑计算资源的分配。

2、使用较大的卷积核往往意味着巨大的运算量,理论已经证明,往往可以通过几个较小的卷积核来代替较大的卷积核,从而使得计算量的下降。

网络的实现:

1、

使用3*3卷积代替5*5卷积,且使用了非线性激活。

2、尝试进一步减小网络的计算量,结果发现,非对称的结构要比进一步减小卷积核的尺寸更加高效,即将n*n的卷积分解为1*n与n*1,网络设计如下:

实践证明,在网络的开始应用这种结构效果并没有明显的改善,这种网络适用于中等的网络(特征图的大小为m*m,m介于12到20之间)

在高维特征上,如下的网络结构更好一些:

3、采用了辅助分类结构,实践证明,在初期辅助分类结构并没有加速训练过程,反而在训练将要结束时开始发挥作用,辅助分类结构在这里起到了一个正则化的作用,实验证明,辅助分类结构使用了batch-normalized或dropout时,主分类器效果会更好。

4、一般来说,会使用池化来减小特征图的尺寸,但为了避免表示瓶颈,在池化之前会增加特征图的维数,这会导致计算量的增加,论文提出了一种并行结构,使用步长为2的卷积与池化并行操作,之后将两者的响应结合在一起,这样既能降低维度,又不至于造成信息提取上的损失。

Inception v4

论文链接:Inception-v4, Inception-ResNet

要解决的问题:

ResNet网络取得了较好的效果,所以尝试结合ResNet

相关讨论:

论文提出,残差连接并不是训练较深网络的必要条件,但残差连接的确可以提升训练速度,且不会提高运算量。

网络细节:

1、incetion v4:

其中,Stem的结构如图所示:

inception-A、B、C的结构如下所示:

为了减小运算量,网络加入了reduction结构,如下所示:

整个网络思想与前几个版本并没有太大的不同,这里不再赘述。

2、inception-resnet v1与inception-resnet v2:

两者的框架与inception v4大致相同,其中的改进就是将inception模块变成了inception-resnet模块,如下所示:

另外,引入了残差连接之后,如果一个残差连接的滤波器过多,很可能出现输出都是0的结果,论文中给出的解决方案是在残差函数之后,激活函数之前引入一个尺度变换,如下所示:

你可能感兴趣的:(网络学习系列(三)Inception系列)