GoogLeNet是google提出的基于Inception模块的串并联网络架构,并获得了2014年ILSVRC比赛的分类任务的冠军(同年该项亚军为VGG)。Inception模块及其迭代改进的版本可以提升模型的泛化能力、降低模型参数。

Part 1 : GooLeNet

论文:Going Deeper with Convolutions

Abstract & Introduction

GoogLeNet在ILSVRC14的分类和检测比赛中达到了新高度。这种网络结构提高了网络内计算资源的利用率,在保持计算量不变的同时增加网络的宽度和深度。GoogLeNet的网络架构思想基于Hebbian原则和多尺度处理的直觉,并且提出的Inception模块可以增加网络的深度。

Motivation and High Level Considerations

要提高深度神经网络的性能,最直接的方法就是增大规模。增大网络规模的方式有两种:

  • 增加网络深度(网络层数量)
  • 增加网络宽度(每层的神经元数量)

但直接增大网络规模的这种方法存在两个主要缺点:

  • 更大的规模意味着更多的参数,这会使得规模大的网络会更容易过拟合;
  • 更大的规模会造成计算资源的急剧增加,如果增加的部分的效率并不高,那么大量的计算资源都因此被浪费了。

解决这两个问题的最根本的方法就是将网络结构(包括卷积层内部)彻底从全连接(fully connected)变为稀疏连接(sparsely connected),对此有生物系统模拟和Arora等人的研究可佐证。但在实际应用中,将全连接变为稀疏连接后计算量并没有很大提升,这是因为现有硬件是针对密集矩阵进行计算优化的。由此提出Inception模块,在使用现有的计算稠密稀疏矩阵的硬件设备的条件下,利用稀疏连接提高网络的性能。

Architectural Details

Inception module

inception module a

Inception v1模块,将1x1,3x3,5x5 conv和3x3 pooling组成并联网络。一方面增加了网络的宽度,另一方面增加了网络对不同尺度的适应性(不同大小的卷积核支路所对应的感受野不同)。

Inception module with dimension reductions

对于最初设计的Inception模块,虽然5x5的卷积核较少,但当网络达到一定规模后,仍然会产生巨大的计算量。为了解决这个问题,作者引入1x1的卷积核进行降维。对Inception v1的改进如下图所示:

inception module b

改动后的结构有两个优点:

  • 通过降维,可以减少模型参数量;
  • 新增1x1卷积后可以带来更多的非线性变换,提高模型表达能力。

GoogLeNet

GoogLeNet的网络细节如下表所示:

GoogLeNet incarnation of the Inception architecture

网络的一些特点如下:

  • 网络采用了模块化的结构,使用Inception mudule,便于修改网络结构。
  • 包括Inception在内的所有卷积都使用修正线性激活(ReLU)。
  • 网络使用average pooling代替了全连接层,但仍需要保留dropout。
  • 梯度回传:为了避免梯度消失,网络中额外增加了2个辅助分类器(softmax)用于向前传播梯度。(辅助分类器只在训练时使用)

Conclusions

将最佳稀疏结构稠密化是提高计算机视觉神经网络的有效方法。相比于浅且窄的网络,这种方法的优点在于只需适度增加计算量,性能就显著提升。

Part 2 : Inception系列

论文:

Rethinking the Inception Architecture for Computer Vision

Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

Inception V2

4条设计原则

文章提出了4条设计原则,并依据这4条原则对Inception进行改进:

  1. 网络浅层慎用bottleneck
  2. 高维特征更适合在网络局部处理
  3. 网络聚合可以通过低维嵌入
  4. 平衡网络的深度和宽度

Inception V2 结构

Inception v2

Inception v2相对于v1做的改进是使用多个小卷积核代替一个大卷积核(如使用2个3x3的卷积代替原来的1个5x5卷积),这样可以有效减少模型的参数量,增加模型的深度。

此外,Inception v2还引入了BN,加速网络训练,解决梯度消失。

Inception v2

在此基础上,作者提出可以使用多个非对称的小尺寸卷积核堆叠,代替一个大卷积核(比如用1xn和nx1代替nxn)。需要注意的是,这种结构在前几层的效果并不好,当特征图的尺寸在12到20之间时使用的效果会更好一些。

Inception v2

结合对称卷积和非对称卷积,增加网络宽度。

Inception V3

Inception v3中作者将7x7卷积分解成了3个3x3卷积,v3中使用的Aug loss里使用了BN进行regularization。

降低特征图大小

传统下采样

传统的两种下采样方式如上图所示,要么先pooling再Inception(这种方法的缺点是池化会造成信息的丢失),要么先Inception再Pooling(这种方法的缺点是计算量增大)。故两种方法都不可取。作者提出了一种新的降低特征图大小的方法,如下图所示:

inception下采样

让池化和卷积并行执行(stride=2),最后再将特征图进行组合。

Inception V4

整体网络结构

相比于v2/v3,Inception v4的网络结构更加简介同意,并使用了更多的Inception模块。下图为Inception v4的网络结构。

inception v4整体网络结构

下图为Inception v4的stem模块。

inception v4 stem module

Inception ResNet

Inception ResNet将Inception模块与残差连接思想结合,该系列有Inception-ResNet-v1和Inception-ResNet-v2,经验证,残差连接能够显著加速Inception的训练。