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

在下面的结构图中,每一个inception模块中都有一个1111的没有激活层的卷积层,用来扩展通道数,从而补偿因为inception模块导致的维度约间。其中Inception-ResNet-V1的结果与Inception v3相当;Inception-ResNet-V1与Inception v4结果差不多,不过实际过程中Inception v4会明显慢于Inception-ResNet-v2,这也许是因为层数太多了。且在Inception-ResNet结构中,只在传统层的上面使用BN层,而不在合并层上使用BN,虽然处处使用BN是有好处,不过更希望能够将一个完整的组件放入单独的GPU中。因为具有大量激活单元的层会占用过多的显存,所以希望这些地方丢弃BN,从而总体增加Inception模块的数量。使得不需要去解决计算资源和模块什么的权衡问题。

1. inception v4

图1.1 inception v4 网络结构图

 

图1.2 图1.1的stem和Inception-A部分结构图

 

 

图1.3 图1.1的Reduction-A和Inception-B部分结构图

 

 

图1.4 图1.1的Reduction-B和Inception-C部分结构图

 

2. Inception-resnet-v1 & Inception-resnet-v2

 

图2.1 Inception-resnet-v1 & Inception-resnet-v2的结构图

 

2.1 Inception-resnet-v1的组成模块

 

图2.1.1 图2.1的stem和Inception-ResNet-A部分结构图

 

 

图2.1.2 图2.1的Reduction-A和Inception-ResNet-B部分结构图

 

 

图2.1.3 图2.1的Reduction-B和Inception-ResNet-C部分结构图

 

2.2 Inception-resnet-v2的组成模块


图2.2.1 图2.1的stem和Inception-ResNet-A部分结构图

 


图2.2.2 图2.1的Reduction-A和Inception-ResNet-B部分结构图

 

图2.2.3 图2.1的Reduction-B和Inception-ResNet-C部分结构图

3. 模型训练

在上述的Inception V4,Inception-Resnet-V1,Inception-ResNet-v2这三个模型中都用到了Reduction-A,他们各自的具体参数如下:


图3.1 不同模型下Reduction-A的模型超参数

 

作者们在训练的过程中发现,如果通道数超过1000,那么Inception-resnet等网络都会开始变得不稳定,并且过早的就“死掉了”,即在迭代几万次之后,平均池化的前面一层就会生成很多的0值。作者们通过调低学习率,增加BN都没有任何改善。

不过他们发现如果在将残差汇入之前,对残差进行缩小,可以让模型稳定训练,值通常选择[0,1.0.3],如图3.2


图3.2 对inception-resnet模块进行最后输出值的等比例缩小

 

同样的在ResNet-v1中,何凯明等人也在cifar-10中发现了模型的不稳定现象:即在特别深的网络基础上去训cifar-10,需要先以0.01的学习率去训练,然后在以0.1的学习率训练。

不过这里的作者们认为如果通道数特别多的话,即使以特别低的学习率(0.00001)训练也无法让模型收敛,如果之后再用大学习率,那么就会轻松的破坏掉之前的成果。然而简单的缩小残差的输出值有助于学习的稳定,即使进行了简单的缩小,那么对最终结果也造成不了多大的损失,反而有助于稳定训练。

  • 在inception-resnet-v1与inception v3的对比中,inception-resnet-v1虽然训练速度更快,不过最后结果有那么一丢丢的差于inception v3;
  • 而在inception-resnet-v2与inception v4的对比中,inception-resnet-v2的训练速度更块,而且结果比inception v4也更好一点。所以最后胜出的就是inception-resnet-v2。

posted @ 2020-03-12 20:25  纯洁的小兄弟  阅读(361)  评论(0编辑  收藏  举报