0%

Residual Net and Inception Net

Residual Net

参考: coursera-convolutional-neural-networks-resnets

论文: He, Kaiming, et al. “Deep residual learning for image recognition.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.

网络结构

VGG-19:2014年ImageNet亚军,top-5错误率7.3%,19层神经网络。(那一年的冠军是InceptionNet,top-5错误率6.7%,22层神经网络)

plain:为了与ResNet区分,给中间的网络取名为“平坦”。

residual:残差网络。为2015年ImageNet冠军,top-5错误率3.57%,152层神经网络。

为什么使用残差网络?

原因,神经网络现在越来越深,但是简单的堆砌,使得网络深度增加,并不一定能使网络的精度增加。

图上56层的神经网络的精度反而比20层的神经网络精度低。

造成这个问题的原因有:

  1. 梯度消失、梯度爆炸。虽然这个问题很大程度上被normalization解决了,但是可能还是会带来一些影响。
  2. 随着网络深度的增加,网络精度达到饱和,这时再增加网络层数,会使得网络精度迅速下降。这不是由于过拟合而造成的,可能是由于更深的网络更加难训练造成的。

为此,引入残差网络的结构:

将前几层的输出加到后几层的输出之上,上面的X是经过激活函数之后的输出,F(X)还未经过激活函数, F(X)加上X之后再共同的经过激活函数。

这个结构的直接好处就是,如果网络精度已经饱和,中间新加入的层没有价值,残差网络将十分容易的将新加入层置为0(也就是F(X)=0,F(X)+X=X),这就不会影响到网络的精度。

上面左图中34层的plain网络反而比18层的网络训练精度要低,而对于右图中的ResNet不会存在这种情况,

对残差网络的另一种理解

文献:Veit, Andreas, Michael Wilber, and Serge Belongie. “Residual networks are exponential ensembles of relatively shallow networks.” arXiv preprint arXiv:1605.06431 1 (2016).

通过下图可以表现出残差网络的另一种形式:

把左图变形一下就变成右图,那么这里注意到残差网络其实就相当于是多个网络的叠加,结果就相当于是这些网络一起投票投出来的,有一种Ensembling的意思在里面。

实现上的一些技巧

在实际的残差网络实现中,有一些技巧:

限制,进入block的输入与出去block的输出维度要一致,包括长、宽以及深度。那么图中的卷积使用的都是same,也就是保持长宽不变的卷积。

技巧,假设这里输入长宽是64 x 64,那么对于右图来说,如果没有前后的1 x 1 x 641 x 1 x 256的两个卷积,输入直接进行3 x 3 x 256的卷积:

加上1 x 1 x 641 x 1 x 256两个卷积层:

通过这样的方法,计算量可以减少一个数量级,其中1 x 1 x 64的卷积把它称为bottleneck,它在这就类似于一个瓶颈。在实际中表明,这样的方法并不会对神经网络的精度造成损害,所以通常使用这样的方式来构建block,降低计算量。



Incepution Net

2014年ImageNet冠军,top-5错误率6.7%,22层神经网络。那么实际上Incepution Netresidual net要早。

论文:Going Deeper with Convolutions,2014

Rethinking the Inception Architecture for Computer Vision,2015

网络结构

在进行一次卷积操作时,不知道该选择1 x 1还是3 x 3还是5 x 5,怎么办?答:那么就在一层里面把它们全部都用上。

在同一层里面使用1 x 13 x 35 x 5以及max pooling,它们都使用same的卷积方式, 最后将它们的结果在一起就可以了。

同样的,这里也可以使用降维的思想(它的思想在ResNet之前):

中间加入了几个1 x 1卷积,用于降低总的计算量。

比赛中使用的网络叫做GoogLeNet,整个网络的结构如下:

注意到中间有两个额外的输出,这是为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度。(博客上面看的,具体文章中还没看)

升级版本

Rethinking the Inception Architecture for Computer Vision,2015这篇文章中有新的思路,目前还没有看。

其中大概多了下面的操作: