Inception网络的发展
Inceptionv1
主要特点是更好地利用网络内部的计算资源,该设计允许增加网络的深度和宽度,同时保持计算预算不变。这是一个深层分类器。
解决问题
- 图像中突出大小的差异
- 卷积选择卷积核大小比较困难的问题
- 选择网络的深度困难,比价深的网络会导致过拟合的问题,所以讲梯度更新传输到整个网络
- 卷积层简单的叠加问题
解决方案
下图是「原始」Inception 模块。它使用 3 个不同大小的滤波器(1x1、3x3、5x5)对输入执行卷积操作,此外它还会执行最大池化。所有子层的输出最后会被级联起来,并传送至下一个 Inception 模块。
原始 Inception 模块。(图源:https://arxiv.org/pdf/1409.4842v1.pdf)
深度神经网络需要耗费大量计算资源。为了降低算力成本,作者在 3x3 和 5x5 卷积层之前添加额外的 1x1 卷积层,来限制输入信道的数量。
实现降维的 Inception 模块。(图源:https://arxiv.org/pdf/1409.4842v1.pdf)
利用实现降维的 Inception 模块可以构建 GoogLeNet(Inception v1),其架构如下图所示:
GoogLeNet模型。橙色框是 stem,包含一些初始卷积。紫色框是辅助分类器。较宽的部分是 inception 模块。(图源:https://arxiv.org/pdf/1409.4842v1.pdf)
GoogLeNe模型包括9个线性叠加的Inception模型,有22层(包括池化层为27层),该模型的最后一个Inception模型使用全局平均池化。
梯度消失问题解决方法
为了阻止该网络中间部分梯度的「消失」过程,作者引入了两个辅助分类器(上图紫色框)。它们对其中两个 Inception 模块的输出执行 softmax 操作,然后在同样的标签上计算辅助损失。总损失即辅助损失和真实损失的加权和。该论文中对每个辅助损失使用的权重值是 0.3。辅助损失只是在训练部分使用,在推断部分不使用。
Inception v2
Inception v2 和 Inception v3 来自同一篇论文《Rethinking the Inception Architecture for Computer Vision》,作者提出了一系列能增加准确度和减少计算复杂度的修正方法。
文中表示,只要有足够的标注数据,增加模型大小与计算成本可以在大多数任务中快速提升模型质量。作者旨在通过适当的分解卷积与积极的正则化尽可能高效地利用添加的计算。
论文:Rethinking the Inception Architecture for Computer Vision
论文地址:https://arxiv.org/pdf/1512.00567v3.pdf
解决问题
1.减少特征的表征性瓶颈。直观上来说,当卷积不会大幅度改变输入维度时,神经网络可能会执行地更好。过多地减少维度可能会造成信息的损失,这也称为「表征性瓶颈」。
2.使用更优秀的因子分解方法,卷积才能在计算复杂度上更加高效。
解决方案
将 5×5 的卷积分解为两个 3×3 的卷积运算以提升计算速度。尽管这有点违反直觉,但一个 5×5 的卷积在计算成本上是一个 3×3 卷积的 2.78 倍。所以叠加两个 3×3 卷积实际上在性能上会有所提升,如下图所示。
图源:https://arxiv.org/pdf/1512.00567v3.pdf
另外,作者将 n*n 的卷积核尺寸分解为 1×n 和 n×1 两个卷积。
图源:https://arxiv.org/pdf/1512.00567v3.pdf
但是,此模型没有扩宽模型的宽度,只是使模型变得更深,那么维度会过多减少,造成信息损失。这种类型等同于下图类型,本文中n=3,可变为下图所示。
图源:https://arxiv.org/pdf/1512.00567v3.pdf
模块中的滤波器组被扩展(即变得更宽而不是更深),以解决表征性瓶颈。
前面三个原则用来构建三种不同类型的 Inception 模块,这里我们按引入顺序称之为模块 A、B、C。架构如下图所示。
这里,「figure 5」是模块 A,「figure 6」是模块 B,「figure 7」是模块 C。(图源:https://arxiv.org/pdf/1512.00567v3.pdf)
Inception v3
问题
1.作者注意到辅助分类器直到训练过程快结束时才有较多贡献,那时准确率接近饱和。作者认为辅助分类器的功能是正则化,尤其是它们具备 BatchNorm 或 Dropout 操作时。
2.是否能够改进 Inception v2 而无需大幅更改模块仍需要调查。
解决方案
在inception的基础上添加:
1.RMSProp 优化器;
2.Factorized 7x7 卷积;
3.辅助分类器使用了 BatchNorm;
4.标签平滑(添加到损失公式的一种正则化项,能够阻止过拟合)。
Inception v4
Inception v4 和 Inception -ResNet 在同一篇论文《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》中介绍。
使用Inception 架构可以用很低的计算成本达到很高的性能。同时本文介绍,将残差连接引入inception网络,实验证明,残差连接能够加速inception网络的训练。另外,研究者还展示了多种新型残差和非残差 Inception 网络的简化架构,作者进一步展示了适当的激活值缩放如何稳定非常宽的残差 Inception 网络的训练过程。
论文:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
论文地址:https://arxiv.org/pdf/1602.07261.pdf
问题
有些模型是不必要复杂的,通过设置更多的一致模块来提高模型的性能。
解决方案
Inception v4的整体结构如下图所示。
Inception v4 的 stem 被修改了,用于对进入Inception模块前的数据进行预处理。stem部分其实就是多次卷积+2次pooling,pooling采用了Inception-v3论文里提到的卷积+pooling并行的结构,来防止bottleneck问题。stem的网络结构如下图所示。
stem之后使用了3中14个inception模型,三种主要的inception模块如下如所示。
Inception v4 引入了专用的「缩减块」(reduction block),它被用于改变网格的宽度和高度。
左边为 35x35 到 17x17 的尺寸缩减;右边为 17x17 到 8x8 的尺寸缩减。参数设置可参考论文。
Inception-ResNet v1 和 v2
将ResNet与inception结合,主要为了加速inception训练。
v1与v2的对比
1.Inception-ResNet v1 的计算成本和 Inception v3 的接近。
2.Inception-ResNetv2 的计算成本和 Inception v4 的接近。
3.它们有不同的 stem,正如 Inception v4 部分所展示的。
4.两个子版本都有相同的模块 A、B、C 和缩减块结构。唯一的不同在于超参数设置。
问题
引入残差连接,它将 inception 模块的卷积运算输出添加到输入上。
解决方案
Inception-ResNet-v1的整体结构,在Inception-v3上加入ResNet。
为了使残差加运算可行,卷积之后的输入和输出必须有相同的维度。因此,我们在初始卷积之后使用 1x1 卷积来匹配深度(增加信道维度),另外,池化层被残差连接取代。
缩短块与inception v4相同。
总结
1.如果卷积核的数量超过 1000,则网络架构更深层的残差单元将导致网络崩溃。因此,为了增加稳定性,作者通过 0.1 到 0.3 的比例缩放残差激活值。激活值通过一个常数进行比例缩放。
2.研究发现 Inception-ResNet 模型可以在更少的 epoch 内达到更高的准确率。
原文链接:http://baijiahao.baidu.com/s?id=1601882944953788623&wfr=spider&for=pc