作用

残差网络解决了什么,为什么有效?

  • 缓解梯度消失问题:反向传播时,错误信号可以不经过任何中间权重矩阵变换直接传播到低层,一定程度上可以缓解梯度弥散问题(即便中间层矩阵权重很小,梯度也基本不会消失)。综上,可以认为残差连接使得信息前后向传播更加顺畅。
  • 一定程度上解决网络退化问题:在前向传播时,输入信号可以从任意低层直接传播到高层。由于包含了一个天然的恒等映射,一定程度上可以解决网络退化问题。

    网络退化:在增加网络层数的过程中,training accuracy 逐渐趋于饱和,继续增加层数,training accuracy 就会出现下降的现象,而这种下降不是由过拟合造成的。 理论上讲,较深的模型不应该比和它对应的,较浅的模型更差。因为较深的模型是较浅的模型的超空间。较深的模型可以这样得到:先构建较浅的模型,然后添加很多恒等映射的网络层。 实际上较深模型后面添加的不是恒等映射,而是一些非线性层。因此,退化问题也表明了:通过多个非线性层来近似恒等映射可能是困难的。

输入输出恒等映射

参考:残差网络如何解决网络退化问题

  • 在 MobileNet V2 的论文中提到,由于非线性激活函数 Relu 的存在,每次输入到输出的过程几乎是不可逆的,这也造成很多不可逆的信息损失,那我们可以试想一下,一个特质的一些有用信息损失了,那他的表现还能持平吗?答案是显然的。
  • 所以,ResNet 的初衷,就是让网络拥有这种恒等映射能力,能在加深网络的时候,至少能保证深层网络和浅层网络持平。ResNet 引入了残差网络结构 (Residual Network),通过这种残差网络结构,可以把网络层弄得很深,甚至达到成百上千层。并且最终分类效果也非常好,残差网络基本结构如图:

残差网络 - 图1

  • 在上图的残差网络结构图中,通过 “shortcut connections (捷径连接)” 的方式,直接把输入 x 传到输出作为初始结果,输出结果为 H(x)=F(x)+x,当 F(x)=0 时,那么 H(x)=x,也就是上面所提到的恒等映射。于是,ResNet 相当于将学习目标改变了,不再是学习一个完整的输出,而是目标值H(X) 和 x 的差值,也就是所谓的残差 F(x) := H(x)-x,因此,后面的训练目标就是要将残差结果逼近于 0,使到随着网络加深,准确率不下降
  • 这种残差跳跃式的结构,打破了传统的神经网络 n-1 层的输出只能给 n 层作为输入的惯例,使某一层的输出可以直接跨过几层作为后面某一层的输入,其意义在于为叠加多层网络而使得整个学习模型的错误率不降反升的难题提供了新的方向。

    通道维度不同如何解决?

    残差网络 - 图2
    可以看到里面的残差网络结构有些是实线,有些是虚线,有何区别?因为经过 “shortcut connections (捷径连接)” 后,H(x)=F(x) + x,如果 F(x) 和 x 的通道相同,则可直接相加,那么通道不同怎么相加呢。上图中的实线、虚线就是为了区分这两种情况的:

  • 实线的 Connection 部分,由于通道相同,所以计算方式是 H(x)=F(x)+x。

  • 虚线的的 Connection 部分,由于通道不同,采用的计算方式为 H(x)=F(x)+Wx,其中 W 是卷积操作,用来调整 x 维度的。

    两层残差结构和三层残差结构的不同

    残差网络 - 图3
    两种结构分别针对 ResNet34(左图)和 ResNet50/101/152(右图),其目的主要就是为了降低参数的数目。

  • 左图是两个 3x3x256 的卷积,参数数目: 3x3x256x256x2 = 1179648,右图是第一个 1x1 的卷积把 256 维通道降到 64 维,然后在最后通过 1x1 卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,右图的参数数量比左图减少了 16.94 倍,因此,右图的主要目的就是为了减少参数量,从而减少计算量。

  • 对于常规的 ResNet,可以用于 34 层或者更少的网络中(左图);对于更深的网络(如101层),则使用右图,其目的是减少计算和参数量。

    Follow up

    在 ResNet 的作者的第二篇相关论文《Identity Mappings in Deep Residual Networks》中,提出了 ResNet V2。ResNet V2 和 ResNet V1 的主要区别在于,作者通过研究 ResNet 残差学习单元的传播公式,发现前馈和反馈信号可以直接传输,因此 “shortcut connection”(捷径连接)的非线性激活函数(如 ReLU)替换为 Identity Mappings。同时,ResNet V2 在每一层中都使用了 Batch Normalization。这样处理后,新的残差学习单元比以前更容易训练且泛化性更强。

    没理解这个identiy mappings的替换,之后再看。

从集成学习的角度来看

Andreas Veit等人提出了一种不同的视角[2]。他们将残差网络展开,以一个三层的ResNet为例,将得到下面的树形结构:
残差网络 - 图4残差网络的展开形式
使用图来表示就是
残差网络 - 图5
这样,残差网络就可以被看作是一系列路径集合组装而成的一个集成模型,其中不同的路径包含了不同的网络层子集。Andreas Veit等人展开了几组实验(Lesion study),在测试时,删去残差网络的部分网络层(即丢弃一部分路径)、或交换某些网络模块的顺序(改变网络的结构,丢弃一部分路径的同时引入新路径)。实验结果表明,网络的表现与正确网络路径数平滑相关(在路径变化时,网络表现没有剧烈变化),这表明残差网络展开后的路径具有一定的独立性和冗余性,使得残差网络表现得像一个集成模型(ensemble)。