深度学习之Inception-ResNet

这篇文章由谷歌在17年提出,受启发于何凯明提出的ResNet在深度网络上较好的表现影响,作者将Residual connection加入到Inception结构中形成2个Inception-ResNet版本的网络以及一个纯Inception-v4网络。

参考目录:
①:论文补充版本(主要是补充一些图)
②:从Inception v1到Inception-ResNet,一文概览Inception家族的「奋斗史」
③:论文笔记1
④:论文笔记2

截至这篇文章发表,谷歌提出的关于Inception块组成的GoogleNet经历了如下五个版本:
在这里插入图片描述具体过程详见上述参考文档②。
Note:

  1. 其中v1 → \to v2的过程中滤波器组扩展指的是Inception块内部结构中网络变得更宽而不是更深,从而解决表征性瓶颈问题。
  2. 分解卷积指的是比如说 3 × 3 3\times 3 3×3卷积分解成 1 × 3 1\times 3 1×3 3 × 1 3\times 1 3×1卷积2个过程,作者指出这样会节约资源消耗。

Abstract

GoogleNet凭借着较低的计算资源损耗、通过Inception块中多个不同窗口形状的卷积层获取多尺度特征而闻名,而当时推出的Inception-v3版本和何凯明的Residual网络都取得了很好的表现,因此本文起源于作者的一个问题:如果将残差连接加入到Inception块理会怎么样?作者经过实验得出:

  1. residual connections有利于加速Inception网络的训练速度
  2. 相同计算资源下,拥有残差连接的Inception只比没有残差连接的Inception网络表现出色一点点。这也似乎是谷歌想告诉大家:不是每次遇到深度网络就要想起用残差网络来解决。

本文的贡献如下:

  1. 作者推出了Inception-v4Inception-ResNet-v1Inception-ResNet-v2三种网络结构。
  2. 作者推出了residual scaling来稳定residual-based网络的训练。

1 Introduction

这篇文章中,总体来看作者主要做了2件事:

  1. 使用Residual网络的残差连接取代原本Inception块中池化层部分,使得filter-concatenation变成了求和相加的形式。
  2. Inception-v3进化到Inception-v4(注意:这都是无residual-connection的版本),相比v3,v4拥有更简洁的结构、有更多的Inception块以及在输入和首个Inception块之间引入stem模块。

2 Related Work

以往我们为深度网络的训练而发愁时,都只会想到用Residual Network来解决问题。但是作者指出,他们的实验显示了在没有skip connection的条件下,也可以取得和有残差连接时候差不多的效果;作者也严谨的说道也许是关于Residual Network更深更多的实验才能完全理解residual connection的价值。虽然有残差下的Inception网络和无残差的Inception相比表现力提升不大,但是residual connection确实可以提升Inception的训练速度

3 Architectural Choices

这一节主要介绍:

  1. Inception-v4网络。
  2. Inception-ResNet-v1、Inception-ResNet-v2网络。
  3. Residual Scaling。

3.1 Pure Inception blocks

首先来看Inception-v4的结构:
在这里插入图片描述
Note:

  1. Inception-v4引入了stem模块,如上图红色框所示,其中的filter concat和Inception块中的一样,是将不同滤波器运算过的feature map做通道上的合并。

  2. 3个输入图像宽高分别是 35 × 35 、 17 × 17 、 8 × 8 35\times 35、17\times 17、8\times 8 35×3517×178×8的Inception块内部结构如下:在这里插入图片描述

  3. 2个缩减块(reduction block)的内部结构如下:在这里插入图片描述

3.2 Residual Inception Blocks

接下来介绍ResNet和Inception的合体:

  1. Inception-ResNet-v1:这是一种和Inception-v3具有相同计算损耗的结构。
  2. Inception-ResNet-v2:这是一种和Inception-v4具有相同计算损耗的结构,但是训练速度要比纯Inception-v4要快。

相比纯Inception网络,Inception-ResNet网络具有以下3个特点:

  1. Inception块的构造更加简单。
  2. 采用filter-expansion layer(其实就是 1 × 1 1\times 1 1×1卷积层)去扩大因为Inception块损失的通道数,因为过多地减少维度可能会造成信息的损失(表征性瓶颈)。
  3. 关于BN的使用。Inception-ResNet为了减小BN带来的存储消耗,只在stem模块中使用,而不是像之前在每个Inception块中使用。

Inception-ResNet结构如下:
在这里插入图片描述
Note:

  1. 两个版本的总体结构相同,不同的是stem、Inception块、缩减块。
  2. 2个版本的3个Inception块如下:在这里插入图片描述从上面结构中可以看出Inception-ResNet用残差连接取代了原Inception块中的filter concatenation,或者说残差连接代替了Inception中的池化层。
  3. 2个版本的缩减块结构如下:在这里插入图片描述在这里插入图片描述从上图中可以看出原Inception中被取代的池化层部分其实是转移到了缩减块中

3.3 Scaling of the Residuals

这一节介绍的是在残差汇合之前,对残差进行缩减来稳定训练。作者指出,当卷积核的数量超过1000时,那么残差网络就会变得不稳定,具体表现为几万次迭代之后,平均池化层之前的最后一层开始产生0的输出,使得网络崩溃坏死,这种现象通过降低学习率或者增加BN都无法解决。
因此作者决定采用residual scaling,取一个 [ 0.1 , 0.3 ] [0.1,0.3] [0.1,0.3]区间之内的缩减常数去减小Inception网络输出的方差,增加稳定性,一定程度上也可以避免模型过拟合。

具体结构如下:
在这里插入图片描述
Note:

  1. 这个缩减结构可以适用于任何具有残差连接的网络。
  2. 缩减指数一般取0.1左右,且网络越深,这个值最好是越小。
  3. 作者指出残差缩减非但不会影响最好的表现力,而且还会增加训练的稳定性。

引用一段代码(开篇引用文档③)来解释这个过程:

 def forward(self, x):
    out = self.conv2d(x)  # 这里可以是卷积层、可以是Inception模块等任意sub-network
    out = out * self.scale + x  # 乘以一个比例系数再相加
    out = self.relu(out)
    return out

4 Training Methodology

主要是理一理网络的结构,故略。

5 Experimental Results

主要是理一理网络的结构,故实验略。

6 Conclusions

论文一口气输出3个新的结构,分别是:

  1. Inception-v4:Inception-v3的进化版,增加了stem块(其实就是输入到第一个Inception的处理过程)。
  2. Inception-ResNet-v1:将Residual connection和Inception网络结合在一起,并引入residual scaling稳定训练,其计算消耗和Inception-v3类似。
  3. Inception-ResNet-v2:将Residual connection和Inception网络结合在一起,并引入residual scaling稳定训练,其计算消耗和Inception-v4类似,但训练速度更快;相比Inception-ResNet-v1,v2版本的网络参数更多,结构也略微复杂一丢丢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值