卷积神经网络GoogLenet的分析与总结

      GoogLenet主要是提出了一种叫做Inception的结构,该结构提高了网络内部计算资源的利用率,在增加网络的深度和宽度的同时保证计算预算不变。

      一般的卷积神经网络都是堆叠卷积层、BN层、池化层还有一些全连接层,而GoogLenet真正摈弃了这些传统的结构。

      如果想要提高神经网络的性能,最直接的办法就是增加网络的深度和宽度,深度是指网络的层数,宽度指网络中每一层的单元数量。那么这样就会导致训练参数增加,同时在训练样本有限的情况下就容易出现过拟合的问题。增加网络模型复杂度,导致的另外一个问题是增加了计算资源的使用量。解决这两个问题的根本方法就是即使在卷积层内,也要把全连接的转向稀疏连接结构。

1 Inception

       Inception结构体系的主要想法是在卷积视觉网络中找到一个最优的局部稀疏结构,该结构能够用容易获得的密集部件实现。我们看下Inception的最初结构图:


      Inception最初的框架如a所示,由1*1卷积、3*3卷积、5*5卷积、3*3最大池化四个基本结构构成,它的问题在于:Filter concatenation的通道数和Previous layer的通道数是相当的,所以就会需要更多的计算资源。然后提出了如b的这种结构,把1*1卷积放到3*3、5*5卷积的前面,放到池化层的后面,其作用是降维、1*1卷积后使用Relu增加模型的复杂度。

Inception的优点就是在增加模型每层神经元的个数的同时不会在计算复杂性方面造成无法控制的爆炸。

2 GoogLenet

      结构图如图所示,输入的244*244大小的RGB图像,注意到一部分的type对应的depth为0,说明GoogLenet里面没有把这种type算作层数,GoogLenet有22层,#1×1、#3×3、#5×5分别代表1*1、3*3、5*5大小的卷积核,#3×3 reduce和 #5×5 reduce代表在3*3、5*5卷积核前面增加一个1*1卷积核。


       Google的分类损失综合了inception(4a)、inception(4d)、inception(5b)的损失。通过添加中间层的辅助分类器,希望在分类器的低层获得判别性的特征,原因是增加传播回来的梯度信号并提供额外的正则化。(By adding auxiliary classifiers connectedtothese intermediate layers, we wouldexpect to encourage discrimination in the lower stages in the classifier, increase the gradient signal that gets propagatedback, and provide additional regularization.)

        包括辅助分类器在内的附加网络的确切结构如下:

1)5*5大小、步长为3的平均池化层,其作用在inception(4a)产生4*4*512大小的特征图,作用在inception(4d)产生4*4*528大小的特征图;

2)1*1卷积核的通道数为128用于降维,并且后边接线性整流激活函数(Relu);

3)全连接层具有1024个单元,并且后接Relu;

4)dropout层的dropped单元的比率为0.7;

5)具有softmax损失的线性层作为分类器;(训练的时候使用多损失,测试的时候只是用最后一层损失,不使用中间层损失)


3 总结

1.为什么1*1的卷积核有降维作用?

       假设输入的特征图为64*64*128,如果想直接使用5*5*256的卷积核,其参数为5*5*128*256;如果先使用1*1卷积核降维为64*64*32,然后再5*5*256卷积,参数为1*1*128*32+5*5*32*256,降维后的参数大概是没有降维的0.255倍,可见用1*1的卷积核减少了很多的训练参数。

2.Inception的作用?

       Inception包含1*1卷积核、3*3卷积核、5*5卷积核、池化层。不同大小的卷积核能够提取不同大小的特征,因此能够提取其细节信息;池化层有助于降低空间维度并避免过拟合。在每个卷积层后面都有Relu函数,增强了模型的非线性能力,网络在执行这些操作的同时保证了计算资源上的有效性。






版权声明:本文为Jadelyw原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。