2017-12-07 | DL Model Analysis | UNLOCK

Understanding Residual Network


网络training error 会有增加,造成这种现象的原因可能如下:

  • 梯度弥散(Vanishing Gradients)
  • 梯度爆炸(Gradients Explode)

那么为什么会存在这些问题呢?首先我们知道随着网络加深,会使梯度信息很快下降到零,梯度为零,整体训练就会变慢。更具体点,我们采用backpropagation将梯度从最后一层向第一层进行传递,这个过程中梯度信息不断与weight matrix相乘,如果梯度是0-1之间,就造成gradient很快降为0,意味着模型参数更新很小。同样情况,梯度也可能会成倍增长,造成梯度爆炸。

Residual Network 介绍

Residual Network 最大的贡献是引入了残差,首先来解释一下残差的概念。引用论文中identity block结构如下:
identity block

这个block中,强制将input x 与左侧main path 子网络的输出相连,这种叫做shortcut或者skip connection,这种结构类似于电路里面的差份放大器。

残差(Residual)

假设没有shortcu的网络输出为A,即F(x)=A,引入shortcut之后的网络输出H(x),因为做的是identity即恒等变换,所以H(x)=A=x+F(x), 将上式做个变换,F(x)=H(x) - x,那么从这个式子中可以看到子网络F(x)学习到的是identity block的输出H(x)与输入x的差值,即被称作残差(Residual)。

Skip Connection 作用

Skip Connection

知道了什么是残差,下面来分析一下这种skip connection为什么能够使得网络可以达到更深、更易训练。
上图左侧的图是传统main path network,右侧是带有skip connection的residual block,利用这种block可以构建深层网络。传统网络和residual 网络主要区别是,传统网络直接学习网络输出H(x),而residual网络学习的是输出H(x)和输入x的残差,因此我们可以选择让子网络F(x)输出为0,使得H(x)直接等于输入x,那么一个多层子网络的输出仅仅就是最后一层子网络输出。

在反向传播过程中,利用残差网络可以很好的训练网络,因为可以忽略一些main path 子网络中的信息,不需要做特殊改变,通过shortcut直接从深层次网络传向低层次网络,这就使得梯度不必在所有层都进行计算,降低网络计算复杂度,同时也缓解了vanishing gradient。从另一个角度来考虑,输入x是一种低级特征,而网络中间输出可以理解成是高级或高纬特征,residual network将二者进行结合,从而能提供网络性能。

Skip Connetion 种类

从前文分析中可知,skip connection对深层次网络有着重要的作用,如何实现这种skip connection呢?根据输入x和子网络F(x)输出维度的不同可分为两种实现。

  • The idenetity block
    当输入x和子网络F(x)输出维度相同时,可以直接将而二者进行相加,如下图所示,
    identity block
    上面那条路径就是shortcut或者说skip connection,下面是普通main path

  • The convolutional block
    当输入x和子网络F(x)输出维度不同时,通过一个卷积将二者维度转换为相同,网络结构如图所示:
    convolutional block

Residual Network 实现

这部分实现主依据resnet 原论文。论文中提到identity block实现有两种结构,如下图所示。
implement

左侧是一种简单的实现被称作building block,每个main path(原论文中称作plain network),这里有两层网络构成,都是 3 x 3 的卷积网络,第一个卷积之后紧跟着是一个Relu。
右侧网络是另一种实现,称作bottleneck building block,为什么称作bottleneck呢,因为这个plain network,前后两层用的是1 x 1卷积网络,这种卷积是最小、最细的结构,因此被称作bottleneck(个人见解)。这里 1 x 1卷积网络是用来降低和增加feature map维度。plain network中卷积之后(除了最后一个卷积)会跟着一个BN层,用来加速训练。

这就是skip connection实现,都是采用最基本单元构成,实现起来也相对简单。

总结

以上就是对Residual network的简单分析,清楚了内部的结构及其原理,也可以很方便的进行实现,另外也可以很便捷的在一些有涉及图片任务中进行使用,相信效果会有提升。

参考

1. Deep Residual Learning for Image Recognition
2. Residual Net
3. Deep Learning Coursera

评论加载中