您的位置:首页 > 编程语言 > Go语言

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

2018-02-14 17:46 609 查看
论文链接:https://arxiv.org/abs/1602.07261

1、简介

本文主要是将googLeNet的Inception模块与ResNet结构进行融合,得到Inception-ResNet结构,作者通过实验发现,该结构对于图像识别的准确率并没有较大的提升但是对于网络的收敛速度有了较大的改进。

2、Inception V4

话不多说,直接上图:

所有图中没有标记“V”的卷积使用same的填充原则,意即其输出网格与输入的尺寸正好匹配。使用“V”标记的卷积使用valid的填充原则,意即每个单元输入块全部包含在前几层中,同时输出激活图(output activation map)的网格尺寸也相应会减少。



stem去掉了传统的pooling方式,采用并联的方法,并且不同的Inception模块的连接,减小了feature map,却增加了滤波器数量。

3、Inception-ResNet

相较最初的Inception,针对Inception的残差版本作者使用更廉价的Inception块。每个Inception块后紧连接着滤波层(没有激活函数的1×1卷积)以进行维度变换,以实现输入的匹配,这样补偿了在Inception块中的维度降低。

本文中作者给出了2个残差Inception版本:

Inception-ResNet-v1,计算代价跟Inception-v3大致相同。

Inception-ResNet-v2,计算代价跟Inception-v4基本相同。

残差和非残差Inception的另外一个技术性区别是,在Inception-ResNet网络中,我们在传统层的顶部而非所有层的顶部中使用batch-normalization。在全部层使用 batch-normalization是合情合理的,但是我们想保持每个模型副本在单个GPU上就可以训练。结果证明,使用更大激活尺寸在GPU内存上更加耗时。在部分层的顶部忽略 batch-normalization能够充分的增加Inception块的数量。我们希望可以更好的利用计算资源,因而这种trade-off变得没有必要。

话不多说,上图:

Inception-ResNet-V1:



Inception-ResNet-V2:



4、对残差模块的缩放

作者发现,如果滤波器数量超过1000,残差网络开始出现不稳定,同时网络会在训练过程早期便会出现“死亡”,意即经过成千上万次迭代,在平均池化(average pooling) 之前的层开始只生成0。通过降低学习率,或增加额外的batch-normalizatioin都无法避免这种状况。

在将残差模块添加到activation激活层之前,对其进行放缩能够稳定训练。通常来说,我们将残差放缩因子定在0.1到0.3。



图20 结合Inception-ResNet模块的通用框架。我们期望相同的想法在resnet事例中也适用,除了Inception块任意的子网络都进行了使用。放缩模块仅仅适用于最后的线性激活。



表1 三个Inception中Reduction-A模块滤波器的数量。四个参数是Inception-ResNet中四个卷积的参数。

5、实验

Inception-ResNet收敛较快,但对精度提高不明显



图 不同网络训练过程



表 2 一次裁剪-单个模型实验结果。



表 3 10/12裁剪评估-单一模型试验结果。



表 4 144个裁剪评估,单一模型的实验结果。

三种新的网络结构:

1. Inception-Reset-v1:混合Inception版本,它的计算效率同Inception-v3;

2. Inception-ResNet-v2:更加昂贵的混合Inception版本,同明显改善了识别性能;

3. Inception-v4:没有残差链接的纯净Inception变种,性能如同Inception-ResNet-v2我们研究了引入残差连接如何显著的提高inception网络的训练速度。而且仅仅凭借增加的模型尺寸,我们的最新的模型(带和不带残差连接)都优于我们以前的网络。

参考博客:https://ask.julyedu.com/question/7711
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐