purgle 2018-08-19
五、ResNet
ResNet,深度残差网络,在top-5上的错误率为3.6%,是2015年ILSVRC的冠军,其网络结构如下所示:
残差网络的设计理念归纳起来就是:
接下来讲讲网络中最关键的残差结构:
如上图所示,这个网络的提出本质上还是要解决层次比较深的时候无法训练的问题。它借鉴了Highway Network的思想,在旁边专门开个通道使得输入可以直达输出,而优化的目标由原来的拟合输出H(x)变成输出和输入的差H(x)-x,其中H(X)是某一层原始的的期望映射输出,x是输入,箭头称作shortcut connection。
作者的解读是这样的:
如果identity是最优的,它就是我们想要的理想映射,那么我们可以直接将F(x)的参数全部置零;如果identity和H(x)很相近,那么我们就可以通过学习残差来修正这种差别。
但为什么深度残差网络没有因为网络的加深而带来梯度消失或者梯度爆炸的问题呢?下面这篇文章分析了其为何性能优越,而且提出了一种新的残差单元,并且比较了各种残差单元的性能优劣,如下图所示:
Identity Mappings in Deep Residual Networks
归纳地说就是因为残差结构的特殊性,在由loss对输入求导的时候,导数项会被分解为两个,而有一个直接对输入的导数项并不会消失,所以梯度一直存在。
六、DenseNet
众所周知,最近几年卷积神经网络提高效果的方向,要么深(比如ResNet,解决了网络深时候的梯度消失问题)要么宽(比如GoogleNet的Inception),而作者则是从feature入手,通过对feature的极致利用达到更好的效果和更少的参数。归纳起来,DenseNet有以下几个优点:
DenseNet保证网络中层与层之间最大程度的信息传输的前提下,直接将所有层连接起来。在传统的卷积神经网络中,如果你有L层,那么就会有L个连接,但是在DenseNet中,会有L(L+1)/2个连接。简单讲,就是每一层的输入来自前面所有层的输出。如下图:x
x0是input,H1的输入是x0(input),H2的输入是x0和x1(x1是H1的输出)
梯度消失问题在网络深度越深的时候越容易出现,原因就是输入信息和梯度信息在很多层之间传递导致的,而现在这种dense connection相当于每一层都直接连接input和loss,因此就可以减轻梯度消失现象,这样更深网络不是问题。另外作者还观察到这种dense connection有正则化的效果,因此对于过拟合有一定的抑制作用。
文章与ResNet进行了对比,如下:
这里的l表示层,表示l层的输出,Hl表示一个非线性变换。所以对于ResNet而言,l层的输出是l−1层的输出加上对l−1层输出的非线性变换。
下图是整个网络结构,这个结构图中包含了3个Dense Block,其中加入了bottleneck layer和transition layer操作,每个dense block的3×3卷积前面都包含了一个1×1的卷积操作,就是所谓的bottleneck layer,目的是减少输入的feature map数量,既能降维减少计算量,又能融合各个通道的特征;另外作者为了进一步压缩参数,在每两个dense block之间又增加了1×1的卷积操作,表示增加了这个Translation layer,该层的1×1卷积的输出channel默认是输入channel到一半。
参考资料