爱吧机器人网 » 技术 > 神经网络 > 正文

Inception Network 各版本演进史

本文为雷锋字幕组编译的技术博客 A Simple Guide to the Versions of the Inception Network,原标题,作者为 Bharath Raj。
翻译 | 胡瑛皓  乔月    整理 |  凡江
原文链接:
https://towardsdatascience.com/a-simple-guide-to-the-versions-of-the-inception-network-7fc52b863202


Inception 网络是卷积神经网络 (CNN) 分类器发展中的一个重要里程碑。在 inception 之前, 大多数流行的 CNN 只是将卷积层堆叠得越来越深,以期获得更好的效果。


这就是 CNN 架构设计。有趣的是这个说法在第一篇 inception 网络的论文(https://arxiv.org/pdf/1409.4842v1.pdf)中被引用。

从另个方面来看 Inception network 是复杂的(大量工程优化)。使用很多的技巧以提高其性能 (同时从速度和准确率)。随着不断演进,也产生了几个不同版本的网络。以下是几个流行的版本:

Inception v1(https://arxiv.org/pdf/1409.4842v1.pdf)
Inception v2 与 Inception v3(https://arxiv.org/pdf/1512.00567v3.pdf)
Inception v4 与 Inception-ResNet(https://arxiv.org/pdf/1602.07261.pdf)

上面每个版本均是对其前一个版本的迭代改进。理解版本升级的细节可以帮助我们构建自定义分类器,同时提高速度和准确率。另外,依赖于你的数据,低版本可能实际上效果更好。

本文旨在阐明 inception network 的演进。

Inception v1

这个版本是一切开始的地方。让我们分析一下,最初的版本打算解决什么问题,以及它是如何解决问题的。(https://arxiv.org/pdf/1409.4842v1.pdf)

前提:

图像中的特征部分尺寸变化很大。比如包含狗的图像可以是以下任一种形式,如下所示。狗在每幅图像中所占面积不同。


从左边到右:狗占据了图片的大部分,狗占据了图片的一部分,狗仅占据了图片的很小一部分(图片来自 Unsplash)。

正是由于在信息所在位置的巨大差异,为卷积操作选择适当的核尺寸变得艰难。当信息分布更全局时,倾向选择一个较大的核;当信息分布的更局部时,倾向选择一个较小的核。

深度网络容易过拟合,同时也很难将梯度更新传递至整个网络。

单纯堆砌大量卷积操作计算昂贵。

解决方案:

那为什么不能在同一层上采用多个尺寸的过滤器呢?网络本质上会变得更宽一些,而不是更深。作者设计 inception 模块就是用了这个想法。

下图就是「最初的」inception 模块。在输入图像上用 3 个不同尺寸的过滤器(1x1, 3x3, 5x5)实施卷积操作。然后,执行了最大池化操作 (max pooling)。输出被连接(concatenated)后,送往下一层 inception 模块。


最初的 inception 模块(原文:Inception v1:https://arxiv.org/pdf/1409.4842v1.pdf)。

如前所述,深度神经网络计算非常昂贵。为了使计算更快,作者通过在 3x3 和 5x5 卷积操作前增加一个额外的 1x1 卷积,限制输入通道数量。虽然增加一个额外的操作看起来与直觉相反,1x1 卷积比 5x5 卷积操作快很多,减少输入通道数量也有帮助。值得注意的是,1x1 卷积是在最大池化后执行,而不是之前。


降维的 inception 模块(原文:Inception v1:https://arxiv.org/pdf/1409.4842v1.pdf)

采用降维的 inception 模块构建神经网络,这就是我们知道的 GoogLeNet(Inception v1)。网络架构如下:


GoogLeNet. 橙色框是 stem,包含一些基础的卷积操作。紫色框是辅助分类器。网络中宽阔部分是 inception 模块(原文:Inception v1:https://arxiv.org/pdf/1409.4842v1.pdf)

GoogLeNet 由 9 组 inception 模块线性堆叠组成。深 22 层(如算上池化层共 27 层)。在最后一个 inception 模块,采用了全局平均池化操作。

它确实是一个很深的深度分类器。对于任意深度神经网络都会发生梯度消失问题。

为防止网络中间部分不会「梯度消失」,作者引入了 2 个辅助分类器(图中紫色框)。它们本质上对 2 个 inception 模块的输出执行 softmax,并计算对同一个标签的 1 个辅助损失值。总损失函数是对辅助损失值和真实损失值的加权和。论文中辅助损失值的权值取 0.3。


毋庸置疑,辅助损失值纯粹是为训练构建,分类推断时将被忽略。

Inception v2

Inception v2 、Inception v3 出现在同一篇论文(https://arxiv.org/pdf/1512.00567v3.pdf)。作者提出了大量的改进以提升准确度同时降低计算复杂度。Inception v2 探索了以下内容:

前提:

降低 representational bottleneck。其思路是,当卷积不会大幅改变输入尺寸,神经网络的性能会更好。减少维度会造成信息大量损失,也就是所说的 representational bottleneck;

采用智能分解方法,卷积操作在计算上更高效。

解决方案:

将 1 个 5x5 卷积分解为 2 个 3x3 卷积操作以提升速度。虽然这可能看起来与直觉相反,5x5 卷积比 3x3 卷积操作在计算上要昂贵 2.78 倍。因此,事实上 2 个 3x3 卷积的堆叠提高了性能。见下图:


最左边 inception v1 模块中的 5x5 卷积现在表示为 2 个 3x3 卷积(原文: Inception v2:https://arxiv.org/pdf/1512.00567v3.pdf)

此外,他们将 nxn 的卷积过滤器分解为一个 1xn 和 nx1 卷积的组合。比如一个 3x3 的卷积等价于执行一个 1x3 的卷积后执行一个 3x1 的卷积。他们发现,这个方法较之前的 3x3 卷积在算力上便宜 33%。如下图所示:


这里,假设 n=3 获得与之前等价的图像。最左边 5x5 的卷积可以表示为 2 个 3x3 卷积,然后进一步表示为 1x3、3x1 卷积组合(原文:Inception v2:https://arxiv.org/pdf/1512.00567v3.pdf)

模块中的滤波器组(filter banks)被扩展(使得更宽而不是更深)以消除 representational bottleneck。如果模块变得更深,尺度将会过度缩小,从而导致信息的丢失。如下图所示:


使 inception 模块更宽。这种类型等同于上面显示的模块。(原文: Incpetion v2:https://arxiv.org/pdf/1512.00567v3.pdf)

上述三个原则被用来构建三种不同类型的 inception 模块(我们将它们按照引入的顺序称为模块 A,B,和 C,这些名称是为了清楚而引入的,并不是官方的名字)体系结构如下:


这里,图 5是模块 A,图 6是模块 B,图 7是模块 C。(原文: Incpetion v2:https://arxiv.org/pdf/1512.00567v3.pdf)

Inception v3前提:

作者指出,辅助分类器(auxiliary classifiers)直到训练过程结束,准确性接近饱和时,没有太多的贡献。他们认为,他们的功能是正规化(regularizes),特别是如果他们有 BatchNorm 或 Dropout 操作。

研究不在大幅度改变模块的情况下,改进 Inception v2 的可能性。

解决方案:

Inception Net v3 包含了针对 Inception v2 所述的所有升级,并且增加使用了以下内容:

RMSProp 优化器。

分解为 7x7 卷积。

辅助分类 BatchNorm。

标签平滑(添加到损失公式中的正则化组件类型,防止网络过于准确,防止过度拟合。)

Inception v4

Inception v4 和 Inception-ResNet 被介绍在同一篇论文。为了清晰起见,让我们分别讨论他们。

前提:

为了使模块更加统一,作者还注意到一些模块比必要的还要复杂。这可以使我们通过添加更多的统一模块提高其性能。

解决方案:

Inception v4 中 stem 被修改了。这里的 stem,指的是在介绍 Inception 块之前执行的最初一组操作。


上图是 Inception-ResNet v1 的 stem,底部图像是 Inception v4 和 Inception-ResNet v2 的 stem (原文: Inception v4:https://arxiv.org/pdf/1602.07261.pdf)

他们有三个主要的 inception 模块。分别为 A,B 和 C (与 Inception v2 不同 这些模块的实际名字为 A,B 和C)。它们看起来非常类似与 Inception v2 (or v3) 副本。


(左图)Inception 模块 A,B,C 使用 Inception v4。注意它们与 Inception v2(或 v3)模块相似。(原文: Inception v4:https://arxiv.org/pdf/1602.07261.pdf)

Inception v4 采用专门的「Reduction Blocks」用于更改网格的宽度和高度。早期的版本没有明确的减少块(reduction blocks)但是功能已经实现。


(左图) Reduction Block A (将 35x35 尺寸缩小至 17x17 ) Reduction Block B (将 17x17 尺寸缩小至 8x8)。请参阅本文以获取确切的超参数设置 (V,l,k). (原文: Inception v4:https://arxiv.org/pdf/1602.07261.pdf)

Inception-ResNet

v1 and v2
受到 ResNet 性能的启发,提出一种混合 inception 模块。Inception ResNet 有两个子版本分布为 v1 和 v2。在我们检查显著特征之前,让我们看看这两个版本之间的细微差别。

Inception-ResNet v1 有类似于 Inception v3 的计算成本。

Inception-ResNet v2 有类似于 Inception v4 的计算成本。

它们有不同的 stems 如插图 Inception v4 部分所示。

两个子版本对于模块 A,B,C 和 reduction blocks 具有相同的结构。只有超参数设置不同。本节中,我们只关注结构。请参阅本文中的确切超参数设置 (图像是 Inception-Resnet v1)。

前提:

在 inception 模块输入中引入残差连接(residual connections),它增加了卷积运算的输出。

解决方案:

对于剩余工作的补充,卷积后的输入和输出必须具有相同的尺寸。因此,我们在原始卷积之后使用 1x1 卷积来匹配盛大尺寸(深度在卷积之后增加)。


(左图) 在 Inception ResNet 中初始化 Inception 模块 A,B,C。注意如何用残差连接(residual connection)代替池化层(pooling layer),另外在增加前,注意附加 1x1 卷积。(原文: Inception v4:https://arxiv.org/pdf/1602.07261.pdf)
在主 inception 模块中,池化操作被代替,有利于残差连接(residual connections)。但是,你仍然在 reduction blocks 中找到这些操作。reduction blocks A 与 Inception v4 相同。


(左图) Reduction Block A (35x35 尺寸缩小至 17x17 ) Reduction Block B (17x17 尺寸缩小至 8x8 )。请参阅本文中的精确超参数设置 (V,l,k). (原文: Inception v4:https://arxiv.org/pdf/1602.07261.pdf)

如果滤波器(filters)数目超过 1000,那么网络中的残差单元(residual units) 更深的网络会导致网络「死亡」。为了提高稳定性,作者将残差(residual) 激活的比例调整为 0.1 至 0.3 左右。


激活按常数缩放,以防止网络崩溃。(原文:Inception v4https://arxiv.org/pdf/1602.07261.pdf)

原始论文在求和之后没有使用 BatchNorm 在单个 GPU 上训练模型(为了将整个模型安装在单个 GPU 上)。

发现 Inception-ResNet 模型能够在更低的 epoch 获得更高的精度。

Inception v4 和 Inception-ResNet 最终的网络布局如下:


顶部图像是 Inception v4 的布局,底部图像是 Inception-ResNet 的布局。(Source: Inception v4:https://arxiv.org/pdf/1602.07261.pdf)


上一篇:百度提出NCRF:深度学习癌症图像检测效率再提升
下一篇:从人工神经网络谈机器究竟是怎么学习的?
精选推荐
人工智能准确预测患者一年内的死亡风险,原理却无法解释
人工智能准确预测患者一年内的死亡风险,原理却无法解释

[2019-11-13]  图片来自BURGER PHANIE SCIENCE PHOTO LIBRARY美国最新研究显示,人工智能通过查看心脏测试结果,以高达85%以上的准确率预测了一个人在一 ...

深度神经网络揭示了大脑喜欢看什么
深度神经网络揭示了大脑喜欢看什么

[2019-11-06]  爱吧机器人网编者按:近日,《自然-神经科学》发表了一篇论文,研究人员创建了一种深度人工神经网络,能够准确预测生物大脑对视觉刺激所产 ...

如何让人工智能机器人快速自我纠正错误并吃一堑长一智?
如何让人工智能机器人快速自我纠正错误并吃一堑长一智?

[2017-08-23]  莱斯特大学数学系的研究人员在《Neural Networks》杂志上发表了一篇文章,概述了新算法的数学基础,可以使人工智能收集错误报告并立即纠正,而不影响现有技能 ,同时还会积......

谷歌在中国成立一个新的人工智能(AI)研究中心
谷歌在中国成立一个新的人工智能(AI)研究中心

[2017-12-13]  谷歌正在中国建立一个新的人工智能(AI)研究中心,希望进一步扩展到中国,以充分利用中国高度重视的人工智能技术。人工智能是目前地球上最具竞争力的领域之一,亚马逊,微软......

机器人从工业走向家庭  库卡KUKA目标是引领中国市场
机器人从工业走向家庭 库卡KUKA目标是引领中国市场

[2017-12-08]  机器人正在改变着人们的生活方式,而库卡KUKA想要在中国这个大蛋糕中占有一块大份额,库卡公司正在引领市场...

人工智能民主化能否实现取决于科技巨头
人工智能民主化能否实现取决于科技巨头

[2017-12-29]  我们经常听到像谷歌和微软这样的公司说他们希望人工智能民主化。这是一个很好的词,民主化。 但这些公司如何界定“民主化”还不清楚,像AI本身一样,它似乎有点炒作的味道...

Crossbar将电阻式RAM推入嵌入式AI
Crossbar将电阻式RAM推入嵌入式AI

[2018-05-17]  电阻RAM技术开发商Crossbar表示,它已与航空航天芯片制造商Microsemi达成协议,允许后者在未来的芯片中嵌入Crossbar的非易失性存储器。此举是在先进制造业节点的领先代工厂选......

MIT研制出可以像植物一样生长的机器人
MIT研制出可以像植物一样生长的机器人

[2019-11-09]  麻省理工学院开发了一种新型机器人,这种机器人可以本质上自我延伸,其生长方式与植物幼苗向上生长的方式惊人相似。值得注意的是,研究人员 ...

本周栏目热点

神经网络:人工智能以及我们的未来

[2016-11-20]   作者:James Crowder翻译:王益军审校:心原文链接:techcrunch把自己想象成在一辆未来的自动驾驶汽车的乘客。这辆汽车与你以一种 ...

[2016-11-20]   include "stdio h" include "stdlib h" include "time h" include "math h" *********************************************i ...

OpenAI开辟全新AI音乐领域,发布Jukebox神经网络生产歌曲

[2020-05-19]  日前,外媒报道,人工智能(AI)技术生成的音乐会给人们带来非常奇妙体验。其中有两大原因,第一,这是一个非常吸引人的全新领域;第二,这 ...

50行代码玩转生成对抗网络GAN模型!(附源码)

[2018-07-30]  本文为大家介绍了生成对抗网络(Generate Adversarial Network,GAN),以最直白的语言来讲解它,最后实现一个简单的 GAN 程序来帮助大家加深理解。...

深度神经网络揭示了大脑喜欢看什么

[2019-11-06]  爱吧机器人网编者按:近日,《自然-神经科学》发表了一篇论文,研究人员创建了一种深度人工神经网络,能够准确预测生物大脑对视觉刺激所产 ...