Inception v1-v4 论文解读

Inception V1

论文地址:Going deeper with convolutions

动机与深层思考

直接提升神经网络性能的方法是提升网络的深度和宽度。然而,更深的网络意味着其参数的大幅增加,从而导致计算量爆炸。因此,作者希望能在计算资源消耗恒定不变的条件下,提升网络性能。

降低计算资源消耗的一个方法是使用稀疏连接结构,但不均匀的稀疏数值运算在当前适合密集运算的硬件条件下运行十分低效。作者希望将稀疏连接结构运用于卷积层,并以此解决稀疏连接在密集运算条件下效率低下的问题。于是Inception便应运而生。

架构细节

uDtGDI.png

作者希望“找到最优的局部结构,并在空间上重复它”,如上的Inception模块便是作者找到的最优局部结构。该结构有四个通道,同时使用了1×1、3×3、5×5的卷积核。作者表示“卷积核的大小并没有什么特殊含义,其便利性大于必要性”,在padding=0,1,2的时候特征图大小相同,方便对齐

随着网路层数的加深,其特征图的抽象程度变高,空间集中程度下降。这意味着5×5卷积核占比应逐渐增加。然而在具有大量滤波器的卷积层,5×5卷积核运算量太大。这催生了对Inception的第二个改进:在计算量要求较多的地方使用1×1卷积核进行降维。于是便诞生了完整版的Inception V1模块:

uDB4kn.png

GoogLeNet

GoogLeNet是一个大量使用了Inception模块堆叠的一个神经网络,其结构如下(图太大了,这里就不放完整图片了):

#uDrWin.png

值得一提的是,考虑到深层网络的梯度消失问题(当时还没出现批归一化和残差结构),GoogLeNet使用了在网络的中间隐藏层使用了辅助分类器(auxiliary classifiers),其训练时给出的分类结果的损失的以0.3的权重加到总损失上,以在一定程度上解决梯度消失问题。

后记

  • 很多文章中都有提到,Inception结构使用不同大小的卷积核能够适应不同尺度的特征。虽然并没有在原论文中看见相关阐述,但我觉得有点道理。论文中提到Inception在目标检测任务中有更出色的效果,这很可能与其能适应不同尺度特征有关。

    如图,图中三只狗狗所占图片区域大小不同

  • 作者并没有在原论文中提到Inception结构起作用的原因,但我认为Inception结构和ResNet的残差结构有异曲同工之妙(虽然ResNet的诞生在GoogLeNet之后)。残差结构能让神经网络自己通过调整参数来选择是否趋近于恒等映射,而Inception能让神经网络自己选择卷积核大小(3×3、5×5 convolutions),或是将这层作为全连接(1×1 convolutions,Inception结构最左边的那个1×1卷积核作用相当于全连接),抑或是池化(3×3 Max Pooling)。

Inception V2&V3

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

通用设计准则

该论文提出了4个神经网络的设计准则,并根据这些准则改进Inception。以下列出关键的两条:

  • 避免一次性大幅压缩(大尺寸卷积、池化等)特征图的尺寸,否则会造成表征性瓶颈,特征图中的信息会大量损失。
  • 高维度的特征更容易局部处理,解耦更多的特征,加速网络训练。

分解(Factorization)大尺寸卷积

作者提出,大尺寸卷积的计算量和它的尺寸是不成比例的。于是将原来的5×5卷积改成了两个3×3卷积

uRSdMD.png

然后减少了28%的计算量。

分解为不对称的卷积

然后作者想把3×3分解成更小的卷积……尝试了分解成两个2×2,节省了11%的计算量。然后尝试了分解成1×3和3×1,节省了33%计算量。于是便多出了如下两类不对称分解的Inception模块:

uRCVIA.png

左图模块特性:

  • 在网络的浅层表现不佳,但在网络的中层有较好的效果。
  • 由于比原版模块增加了一层非线性层,提高了模型的表达能力。

右图模块特性:

  • 能够维持特征的高维度,符合上述通用设计准则的第二条。

减少特征图尺寸

当网络需要将一个尺寸为 2d×2d、维度为 k 的特征图转换为一个尺寸为 d×d、维度为 2k 的特征图时,问题就来了:如果先减小尺寸,那么将会损失大量信息,造成准则第一条中的表征性瓶颈;如果先增大维度,那么计算量将翻3倍。如何高效地减小特征图尺寸呢?作者提出了以下结构:

uRkv3n.png

该结构在增加特征维度、减少特征图尺寸的同时避免了表征性瓶颈和计算量过大的问题。

Inception-v2

uRVxgA.png

其中使用了三种Inception模块(图中红框处),包括3个普通分解模块和5个不对称分解堆叠模块以及2个不对称分解扩展模块。值得一提的是原网络中的7×7卷积被分解成了3个3×3卷积。

Inception-v3

在论文的后续中,作者对Inception v2进行了如下改进:

  • 使用RMSProp优化器
  • 辅助分类器使用了BatchNorm
  • 标签平滑(正则化)

Inception V4 & Inception-Resnet

论文地址:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

概述

随着 ResNet 网络的出现及其在主流数据集上的良好表现,作者想将残差结构引入到 Inception 网络中,看看网络是否会有更好的表现;同时注意到Inception-v3的部分结构有不必要的复杂性,于是尝试在不引入残差结构的情况下改进原本的Inception结构,并将改进后的Inception结构命名为Inception-v4。

我感觉这篇论文的知识量不大,整篇论文一半都是图,看看了解下就行。

Inception-v4

uhaJjs.png

图中是v4使用的三个Inception模块。分别命名为Inception-A、Inception-B、Inception-C。除了所有的池化层都使用了Avg Pooling以外,没有什么特别的变动。另外网络整体结构也发生了一些改变,这里直接用网图了:

Inception-Resnet

uhwGmn.md.png

上图是 Inception-Resnet-v1 的模块和结构, Inception-Resnet-v2只是在v1的基础上使用了Inception-v4的stem结构。

相关面试题

Q:GoogLeNet中为什么采用小的卷积核?

A:多个小卷积核的叠加能起到和大卷积核一样的效果,并且运算量更小。

Q:3×3 卷积核 与 5×5 卷积核相比的优点

A:速度更快,性能更好

Q:InceptionV1~V4系列介绍,以及每一版的改进,优缺点介绍

A:v1提出Inception模块,提供四个通道,方便模型自己在全连接、小卷积、大卷积、池化之间做出选择;v2提出分解卷积和不对称分解卷积,降低了运算量,以及提出了解决表征性瓶颈的结构;v3在v2的基础上修改了优化器、添加了辅助分类器的BN和标签平滑;v4提出了几种新的Inception模块,取得了更好的性能。

Q:1×1 卷积有什么作用?

A:跨通道信息整合(参考Inception模块和Res模块);降维减少计算量(参考Inception模块)

参考文献

[1]一文概览Inception家族的「奋斗史」

[2]【深度学习】GoogLeNet系列解读 —— Inception v4

[3]inception-v1,v2,v3,v4——论文笔记

以及文中所述的论文链接。

-------------本文结束感谢您的阅读-------------