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

原文链接

摘要

向传统体系结构中引入残差连接使网络的性能变得更好,这提出了一个问题,即将Inception架构与残差连接结合起来是否能带来一些好处。在此,研究者通过实验表明使用残差连接显著地加速了Inception网络的训练。也有一些证据表明,相比没有残差连接的消耗相似的Inception网络,残差Inception网络在性能上具有微弱的优势。针对是否包含残差连接的Inception网络,本文同时提出了一些新的简化网络,同时进一步展示了适当的激活缩放如何使得很宽的残差Inception网络的训练更加稳定

引言

在本研究中,研究者研究了当时最新的两个想法:残差连接和最新版的Inception架构。他们研究了使用残差连接来代替Inception架构中的过滤连接阶段,这将使Inception架构保持它的计算效率的同时获得残差连接方法的好处。除了将两者直接集成,也研究了Inception本身能否通过加宽和加深来变得更高效。为此,他们设计了Inception v4,相比v3,它有更加统一简化的网络结构和更多的inception模块

在本文中,他们将两个纯Inception变体(Inception-v3和v4)与消耗相似的 Inception-ResNet混合版本进行比较。挑选的模型满足和非残差模型具有相似的参数和计算复杂度的约束条件。实验对组合模型的性能进行了评估,结果显示Inception-v4和Inception-ResNetv2的性能都很好,同时发现单个框架性能的提升不会引起组合性能大幅的提高

相关工作

残差连接的作者认为残差连接在训练深度卷积模型是很有必要的,但是至少在图像识别上,本研究并不支持这一点,该实验表明使用残差连接来训练深度网络也不是很难做到。不过,残差连接所带来的潜在优势可能需要在更深网络结构中来展现。但是,使用残差连接确实能够极大地提高训练速度,这一点很值得肯定。

残差连接

为减少计算而优化的ResNet连接

架构选择

纯Inception模块

以前的Inception模块为了能够在内存中对整个模型进行拟合,采用分布式训练的方法,该方法将每个副本划分成一个含多个子网络的模型。然而,Inception结构是高度可调的,这就意味着各层滤波器的数量可以有多种变化,而整个训练网络的质量不会受到影响。为了优化训练速度,他们对层的尺寸进行调整以平衡多模型子网络的计算。因为TensorFlow的引入和为了优化,本研究对Inception块的每个网格尺寸进行了统一。以下所有架构图中,卷积层没有标记"V"的表示使用相同的填充原则,即它们的输出网格尺寸与它们的输入相匹配。标记了"V"的卷积层使用valid填充,即每个单元输入块全部包含在前几层中,同时输出激活图(output activation map)的网格尺寸也相应地减少

Inception-v4网络整体架构

Inception-v4和Inception-ResNet-v2网络结构,这是输入部分(Fig3)

Inception-v4网络的35 * 35 网格模块,对应Inception-v4的Inception-A

Inception-v4网络的17 * 17 网格模块,对应Inception-v4的Inception-B

Inception-v4网络的8 * 8 网格模块,对应Inception-v4的Inception-C

35 * 35 -> 17 * 17 的降维模块(Fig7)

参数设置

17 * 17 -> 8 * 8 的网格缩减模块

残差Inception块

残差版本的Inception网络使用了比源Inception更廉价的Inception块。每个Inception块后紧连接着滤波膨胀层(没有激活函数的1×1卷积)以在相加之前放大滤波器组的维度,以实现输入的匹配。这样补偿了在Inception块中的降维。

Inception-ResNet-v1与Inception-v3的计算代价相近,Inception-ResNet-v2与Inception-v4的计算代价相近。另一个研究使用的残差和非残差变体技术上的不同是:在Inception-ResNet上仅在传统层的顶部而非所有层的顶部中使用batch-normalization。这是因为研究者想要保持每个模型副本在单个GPU上就可以训练,在部分层的顶部忽略 batch-normalization能够增加Inception块的数量

Inception-ResNet-v1和Inception-ResNet-v2网络完整架构

Inception-ResNet-v1

网络使用35*35网格模块(Inception-ResNet-A)

网络的17*17网格模块(Inception-ResNet-B)

使用Fig7作为Reduction-A

网络的17*17 -> 8*8网格缩减模块(Reduction-B)

网络的8*8网格模块(Inception-ResNet-C)

网络的主干(stem)


Inception-ResNet-v2

Fig3用于网络stem

网络35*35的网格模块(Inception-ResNet-A)

网络17*17网格模块(Inception-ResNet-B)

Fig7用于Reduction-A

网络17*17 -> 8*8网格缩减模块(Reduction-B)

网络8*8网格模块(Inception-ResNet-C)

对残差模块的缩放

研究者发现如果滤波器数量超过1000,残差网络开始出现不稳定,同时网络会在训练过程早期便会出现“死亡”,意即经过成千上万次迭代,在平均池化(average pooling) 之前的层开始只生成0。通过降低学习率,或增加额外的batch-normalizatioin都无法避免这种状况。同时,发现在将残差模块添加到activation激活层之前,对其进行放缩能够稳定训练,通常来说将残差放缩因子定在0.1-0.3,即使缩放并不是完全必须的,它似乎并不会影响最终准确率,但是放缩能有益于训练的稳定性

实验结果表明Inception-ResNet-v1,Inception-v4,Inception-ResNet-v2的错误率逐个降低并都比Inception-v3和BN-Inception表现的好

结论

本文详细呈现了三种新的网络结构

  1. Inception-ResNet-v1:混合Inception版本,它的计算效率与Inception-v3相近
  2. Inception-ResNet-v2:更加昂贵的混合Inception版本,明显改善了识别性能
  3. Inception-v4:没有残差连接的纯Inception变种,性能与Inception-ResNet-v2相近

研究者们研究了引入残差连接如何显著地提高Inception网络地训练速度。并且他们最新地模型仅仅凭借增加模型尺寸就能表现地优于他们现有的网络

总结

本文研究了将Inception和残差连接相结合的效果,实验表明结合ResNet可以加速训练,同时提高性能,在构建 Inception-ResNet 网络同时,还设计了一个更深更优化的 Inception v4 模型,能达到相媲美的性能

比较了一下文章中提到的三个网络的架构,然后发现,Inception-ResNet-v1与Inception-ResNet-v2,Inception-v4相比,最明显的差别是stem部分不同,特别是与Inception-ResNet-v2相比,其它部分几乎就只是卷积层数的变化,而在stem部分,其它两个使用相同的结构,使用的参数量的比较 4112 : 5344,同时v1这部分输出为35*35*256,其它两个输出为35*35*384,显然这里明显让v1吃亏了,其性能差的原因我觉得这个部分有很大的原因。之后Inception-ResNet-v2与Inception-v4相比,架构的总体结构可以看出是很相似的,最大的区别在于数据是否是直接传到下一层的,如下

Inception-v4(Inception-A)

Inception-ResNet-v2(Inception-A)

Inception-v4(Reduction-B)

Inception-ResNet-v2(Reduction-B)

个人感觉差别不是很大,很直观地可以看出因为Inception-ResNet-v2使用的变换较少,计算量较小,因而可以获得更好的性能吧,其它的更多是各种参数的问题

GoogLeNetv1 论文研读笔记
GoogLeNetv2 论文研读笔记
GoogLeNetv3 论文研读笔记
ResNet 论文研读笔记

GoogLeNetv4 论文研读笔记的更多相关文章

  1. GoogLeNetv3 论文研读笔记

    Rethinking the Inception Architecture for Computer Vision 原文链接 摘要 卷积网络是目前最新的计算机视觉解决方案的核心,对于大多数任务而言,虽 ...

  2. GoogLeNetv2 论文研读笔记

    Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 原文链接 摘要 ...

  3. GoogLeNetv1 论文研读笔记

    Going deeper with convolutions 原文链接 摘要 研究提出了一个名为"Inception"的深度卷积神经网结构,其目标是将分类.识别ILSVRC14数据 ...

  4. ResNet 论文研读笔记

    Deep Residual Learning for Image Recognition 原文链接 摘要 深度神经网络很难去训练,本文提出了一个残差学习框架来简化那些非常深的网络的训练,该框架使得层能 ...

  5. < AlexNet - 论文研读个人笔记 >

    Alexnet - 论文研读个人笔记 一.论文架构 摘要: 简要说明了获得成绩.网络架构.技巧特点 1.introduction 领域方向概述 前人模型成绩 本文具体贡献 2.The Dataset ...

  6. 《DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks》研读笔记

    <DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks>研读笔记 论文标题:DSLR-Quality ...

  7. 论文阅读笔记 - YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  8. 论文阅读笔记 - Mesos: A Platform for Fine-Grained ResourceSharing in the Data Center

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  9. 论文阅读笔记 Word Embeddings A Survey

    论文阅读笔记 Word Embeddings A Survey 收获 Word Embedding 的定义 dense, distributed, fixed-length word vectors, ...

随机推荐

  1. springMVC:HandlerInterceptor拦截器的使用

    1.使用背景 Web项目中需要判断http接口用户Post上来的数据是否合法,如果不合法要另做处理,用户Post上来的数据是Json形式的,我们用了@RequestBody标记自动将json形式的提交 ...

  2. 三.int , bool , str

     03.万恶之源-基本数据类型(int, bool, str) 本节主要内容: 1. python基本数据类型回顾 2. int----数字类型3. bool---布尔类型4. str--- 字符串类 ...

  3. hdu 4911 求逆序对数+树状数组

    http://acm.hdu.edu.cn/showproblem.php?pid=4911 给定一个序列,有k次机会交换相邻两个位置的数,问说最后序列的逆序对数最少为多少. 实际上每交换一次能且只能 ...

  4. Scala_函数式编程基础

    函数式编程基础 函数定义和高阶函数 函数字面量 字面量包括整数字面量.浮点数字面量.布尔型字面量.字符字面 量.字符串字面量.符号字面量.函数字面量和元组字面量. scala> val i = ...

  5. poj 3321 单点更新 区间求和

    Apple Tree Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Java c ...

  6. DOS和批处理基本命令

    http://www.cnblogs.com/leizhao/archive/2013/03/07/2949026.html 1.rem和:: rem注释命令,该命令后的内容不被执行,但能回显 ::注 ...

  7. HTML给table添加单线边框

    一般来说,给表格加边框都会出现不同的问题,以下是给表格加边框后展现比较好的方式 <style> table,table tr th, table tr td { border:1px so ...

  8. AJPFX:外汇的点差和点值

    外汇“点差”就是交易商买卖货币之间产生的差值. 要了解点差我们先解释一下“点”的含义:为了精确和方便地表示汇价,一般用5位数字表示,其中最小变化的单位就称为"点".例如:英镑美元货 ...

  9. zookeeper 备忘

    cd /bin $ ./zkCli.sh ls /a 查看 ls /a true 查看并watch create –e /a 临时节点 create –s /a 顺序节点 create –e –s / ...

  10. 生成代码的代码 之 POJO生成器

    我们在写Java代码时候,有时候需要写一些POJO类,也就是只有一些属性和get, set方法的类.例如,在写REST 服务时候,利用Jersery + Jackson,可以把输入的JSON字符串自动 ...