此文章是vip文章,如何查看?  

1,点击链接获取密钥 http://nicethemes.cn/product/view29882.html

2,在下方输入文章查看密钥即可立即查看当前vip文章


【深度学习论文阅读】GoogLeNet ILSVRC-2014冠军

  • 时间:
  • 浏览:
  • 来源:互联网

GoogLeNet和VGG分别是ILSVRC-2014的冠亚军,其中GoogLeNet也称Inception V1。之所以叫GoogLeNet而不叫GoogleNet是为了致敬LeCun的LeNet.

一、GoogLeNet

Szegedy等人重点研究一种高效的计算机视觉深度神经网络体系结构。其中深度意味着增加网络的深度和宽度,但是这势必会造成巨额的计算开销,而随着移动和嵌入式计算的不断发展,算法的效率特别是是其能耗和内存使用变得越来越重要。对于大多数实验而言,15亿次的加法或乘法运算已是极限。所以Szegedy等人提出一种名为‘Inception’的结构,旨在解决过大的网络结构造成的过拟合问题,以及使用必要的策略,减少整个网络的计算量。

1.main question

  • 增加网络规模意味着更多参数,这使得在有限的标注样本下容易导致模型过拟合。
  • 规模更大的网络其计算量势必会增加,对计算资源的要求更高。

2.main idea

  • 文中提到,解决上述问题的根本方式是将全连接结构甚至是卷积层转化为稀疏连接。问题在于需要找出既能保证网络结构的稀疏性,又能利用密集矩阵的高计算性能

3.explore

将全连接和卷积层转化为稀疏连接。一方面现实中生物神经系统的连接是稀疏的。但是在当时非均匀的稀疏网络计算效率不高,所以需要将多个稀疏矩阵合成为稠密的子矩阵。

早年对大规模稀疏的神经网络,一般通过分析激活值的统计特征和对高度相关的输出进行聚类来逐层构件最优网络。
而当时最常用的利用数据洗属性的方法是通过卷积对局部patch进行计算(CNN就是这样);另外一种是在特征维度利用,(如ConvNets)使用特征连接来决定哪些卷积的输出才累加到一起。(普通的结构使用一个卷积核对所有输入特征做卷积,再将所有结果累加到一起,输出一个特征)。但是这个方法在当时也很少使用了。因为只有在特征维度上进行全连接才能高效的利用GPU的并行计算能力。

文章中提出另外一种方法—能够在特征维度上利用稀疏性:将相关性强的特征汇聚到一起(在多个尺度上卷积后聚合)

GAP
Min Lin最早在NIN中提出用Global Average Pooling(GAP)平均池化层来代替全连接层的方法。具体的:对每一个feature上的所有点做平均,有n个feature就输出n个平均值作为做后的softmax的输入。
其优点有:

  • 在数据的全部feature上 作正则化,防止过拟合
  • 不再需要全连接层,减少了整个网络的参数数目(一般而言,全连接层的参数最多),也避免过拟合。
  • 不再需要关注输入图像的尺寸,因为不管输入是什么,总会取平均。

4.solution

4.1 Navie Inception

navie Inception
由上图可知:

  1. 采用不同的卷积核做卷积,最后融合不同尺寸的特征
  2. 随着网络深度的增加,特征愈发抽象,使用的卷积核也更大,感受域也更大。(33和55的卷积核比例在增加)

PS:

  1. 采用11,33,5*5的卷积核主要是方便对齐,设定卷积步长stride=1之后,分别设定pad=0、1、2。此后卷积可得到相同的特征维度。
  2. 在Inception中加入了Pooling。
    以inception3a为例
    以上述的Inception 3a为例,其中#3x3 reduce和#5x5 reduce分别表示3x3和5x5的卷积前缩减层中1x1滤波器的个数;pool proj表示嵌入的max-pooling之后的投影层中1x1滤波器的个数来看一看上述卷积过程的计算量:
    假设previous layer的为28*28*256,分别考虑三个卷积过程:
  • 1*1卷积feature map=128,输出(28-1+0*2)/1+1 = 28,输出大小为28*28*128,计算量为28*28*128*1*1*256
  • 3*3卷积feature map=192,输出(28-3+2*1)/2+1=28,输出大小为28*28*192,计算量为28*28*256*3*3*192
  • 5*5卷积feature map=96,输出(28-5+2*2)/2+1=28,输出大小为28*28*96,计算量为28*28*256*5*5*96
    上述计算量总计:854Mops

4.2 Inception V1

Inceptopn V1
上述的Inception结构中,卷积核大小为3*35*5操作前,加入了一层大小为1*1feature map=64的卷积操作,此时计算整个网络的计算量,从左往右,自下而上计算:
1*1卷积,feature map=128,输出(28-1+0*2)/2+1=28,输出大小为28*28*128,计算量:28*28*256*1*1*128
1*1卷积,feature map=128,输出(28-1+0*2)/2+1=28,输出大小为28*28*128,计算量:28*28*256*1*1*128
3*3卷积,feature=192,输出为(28-3+1*2)/1=1=28,输出大小为28*28*192,计算量:
28*28*128*3*3*192
1*1卷积,feature map=32,输出为(28-1+0*2)/1+1=28,输出大小为28*28*32,计算量:
28*28*256*1*1*32
5*5卷积,feature map=96,输出为(28-5+2*2)/2+1=28,输出大小为28*28*96,计算量:
28*28*32*5*5*96
3*3池化,feature map=64,这里不知道怎么算!!!

好像看上去有些复杂,那我们这样看,比较直接使用5* 5卷积和先经过1*1卷积然后经过5 *5卷积,它的计算量大小:

  • 5*5卷积feature map=96,输出(28-5+2*2)/2+1=28,输出大小为28*28*96,计算量为28*28*256*5*5*96
  • 1*1卷积,feature map=32,输出为(28-1+0*2)/1+1=28,输出大小为28*28*32,计算量:
    28*28*256*1*1*32
    5*5卷积,feature map=96,输出为(28-5+2*2)/2+1=28,输出大小为28*28*96,计算量:
    28*28*32*5*5*96
    计算量比较
    很直观的是减少了7倍的计算量(这里的M代表的是百万此操作)

4.3 整体构架

GoogLeNet整体构架

4.4 总结

  • GoogLeNet参考了NIN,采用1×1 conv 来保持空间维度的同时,降低深度,也就是降低通道数量,同时1×1 conv还可以为你的网络增强非线性。
  • 横向的卷积核排列设计,使得多个不同size的卷积核能够得到图像当中不同cluster的信息,这样能融合了不同尺度的卷积以及池化,一个模块一层就可以得到多个尺度的信息,下一阶段也可以同时从不同尺度中提取的特征,可以进行多维度特征的融合,所以效果更好。把计算力拓宽,也避免了太深训练梯度弥散的问题。
  • 对深度相对较大的网络来说,梯度反向传播能够通过所有层的能力就会降低。文中指出:“在这个任务上,更浅网络的强大性能表明网络中部层产生的特征应该是非常有识别力的”。通过将辅助分类器添加到这些中间层,可以提高较低阶段分类器的判别力,这是在提供正则化的同时克服梯度消失问题。后面的实验表明辅助网络的影响相对较小(约0.5),只需要其中一个辅助分类器就能取得同样的效果。
  • 较高层会捕获较高的抽象特征,其空间集中度会减少。这表明随着网络转移到更高层,Inception架构中3×3和5×5卷积的比例应该会增加。而到最后一个卷积层出来的全连接,由全局平均池化替代了,减少了参数,节约了计算量。
  • 整个网络中最后使用average pooling替代了全连接层,将TOP1 的accuracy提高了0.6%,实际上在最后一层还是加了一个全连接层。
  • 虽然移除了全连接层,但是网络中仍然使用了Dropout。

后续发展

  • InceptionV2 : 模仿VGG,将55的卷积核改为两个33的卷积核;加入BN层,使得每层的输出服从高斯分布N(0,1)[22的卷积核也试过,但是效果没有33的好]
  • InceptionV3:将将7x7分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1)。既可以加速计算(多余的计算能力可以用来加深网络),又可以将1个conv拆成2个conv,使得网络深度进一步增加,增加了网络的非线性。
  • Inception V4。结合resNet加速计算。

参考文章:
1.GoogLeNet学习心得
2.深入理解GoogLeNet结构(原创)
3.GoogLeNet的个人理解
4.GoogLeNet系列解读

本文链接http://element-ui.cn/news/show-577401.aspx