GoogLeNet:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning论文笔记

论文地址:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

前言

ResNet以及GoogLeNet在图像识别上都取得了非常优异都效果,并且都具有各自都风格和特点。ResNet的Residual block因其identity connection,具有简单无公害的结构,能够很好都解决当模型层次加深、复杂度加大时产生都优化难题,基于此,甚至提出了超过1000层的ResNet框架,可见这种结构都强大性。而GoogLeNet,尤其是Inception V3的版本,具有非常复杂而强大都拓扑结构,包含了3中类型都Inception模块,而且似乎并不会出现任何优化困难,网络的效果也非常好。因此,人们自然而然都提出了这样一个问题,如果将ResNet都Residual block和GoogLeNet都Inception block结合起来,是否可以生成一种结构更加复杂、性能更加强大的模型呢?答案是肯定的,这是否也能够证明上一篇文章都观点:优化问题和计算量是今后深度网络重要的研究方向呢?

Inception V4

话不多说,直接上图:
这里写图片描述

其中Stem模块如下:
这里写图片描述
我们发现Stem中使用了Inception V3中使用的并行结构、不对称卷积核结构,可以在保证信息损失足够小的情况下,使得计算量降低。结构中1*1的卷积核也用来降维,并且也增加了非线性。图中带V的标记说明该卷积核使用valid padding,其余的使用same padding。之后的结构也是这样。我们发现这个stem结构实际上是替代了Inception V3中第一个Inception block之前的结构,在V3中仅仅是一些3*3卷积核的堆积,输出的feature map为35*35*288,而在这里结构更加复杂、层次更深,输出的feature map为35*35*384,比V3的也更多。但是正因为之前的一系列修改,保证了计算量。

接下来Inception-A:
这里写图片描述
Inception-B:
这里写图片描述
以及Inception-C:
这里写图片描述
我们发现这三个结构和Inception V3中的三种Inception block的结构一样,关于结构,在此不再赘述,有关Inception V3的结构可以参考我的上一篇博文。不同之处在于,在这里,三种Inception block的个数分别为4、7、3个,而V3中为3、5、2个,因此新的Inception层次更深、结构更复杂,feature map的channel更多,为了降低计算量,在Inception-A和Inception-B后面分别添加了Reduction-A和Reduction-B的结构,用来降低计算量。
Reduction-A:
这里写图片描述
Reduction-B:
这里写图片描述
我们发现这两种结构中,卷积的步长(stride)为2,并且都是用了valid padding,来降低feature map的尺寸。结构中同样是用并行、不对称卷积和1*1的卷积来降低计算量。

值得注意的是,在网络的最后,softmax层之前, 使用了keep prob为0.8的drop out来防止过拟合。

Inception-ResNet-v1

总体结构:
这里写图片描述

Stem结构:
这里写图片描述
我们发现,为了保证计算量是cheap的,这里使用了和Inception V3中很类似的结构,只不过channel的数量有些许不同。

Inception-ResNet-A:
这里写图片描述
Inception-ResNet-B:
这里写图片描述
Inception-ResNet-C:
这里写图片描述

这三种block的数量分别为5、10、5个,相比之前更多了,我们发现每一个block中都使用了identity connection(源自于ResNet),也就是ReLU之前的+号,identity connection的作用曾在前面的博文中提到过,在此不再赘述。而block右部的residual function可以看成是简化版的Inception,结构和参数量都比传统的Inception block要小,并且后面都使用1*1的滤波器进行连接,主要用来进行维度匹配。

与Inception V4相同的是,在Inception-ResNet-A及Inception-ResNet-B后分别添加了Reduction-A和Reduction-B,其中Reduction-A的结构与Inception V4的一致,Reduction-B的结构如下:
这里写图片描述

在网络的最后,softmax之前,同样是用了drop out。文章中,作者还提到了,在traditional layers的前面添加了BN层,笔者认为,就是在每一个Inception-ResNet block中Residual function的最前面添加BN,这样做的好处,在博文中进行了详细的描述。值得一提的是,虽然层次变得更深了,这个Inception-ResNet-v1的计算量仍然只和Inception V3大致相同。

Inception-ResNet-v2

Inception-ResNet-v2的整体框架和Inception-ResNet-v1的一致。

只不过v2的计算量更加expensive些,它的stem结构与Inception V4的相同,Reduction-A与v1的相同,Inception-ResNet-A、Inception-ResNet-B、Inception-ResNet-C和Reduction-B的结构与v2的类似,只不过输出的channel数量更多。总的来说,Inception-ResNet-v2与Inception V4的相近。在Inception-ResNet-v2中同样使用了drop out和BN。

Scaling of the Residuals

作者发现,当一个Residual function中滤波器的数量超过1000时,这个block变得不稳定,训练容易出现‘died’的现象,产生的输出只为0,这明显是不可以的,并且通过降低学习率、增加额外的BN都无法解决这个问题。
作者给出的解决办法是,在Residual function之后、激活函数之前,使用一个activation scaling的操作能够稳定训练,其中缩放因子为0.1到0.3。至于这么做的原因,笔者就不得而知了,希望能够获得大家的指教。

实验结果

这里写图片描述
这里写图片描述
我们发现,Inception-ResNet-v1的准确率与Inception-v3的准确率接近,Inception-ResNet-v2的与Inception-V4的接近, 但是Inception-ResNet-v1和Inception-ResNet-v2的收敛速度明显比Inception-v3和Inception-v4的快得多。

总结

与Inception V3相比,更加复杂的Inception V4的性能得到了明显的提高。当然Inception V4中也使用了很多技巧和操作来降低计算量。
常用的降低计算量的方法有:

  1. 使用并行结构
  2. 使用不对称的卷积
  3. 使用1*1的卷积进行维度变换

同时我们也发现,使用ResNet的identity connection能够极大程度的提高收敛速度,可见它对于解决优化难题是非常有效果的。

发布了43 篇原创文章 · 获赞 333 · 访问量 52万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章