1. ResNet解决了什么问题?

首先在了解 ResNet 之前,我们需要知道目前CNN训练存在两大问题:

  1. 梯度消失与梯度爆炸:因为很深的网络,选择了不合适的激活函数,在很深的网络中进行梯度反传,梯度在链式法则中就会变成0或者无穷大,导致系统不能收敛。然而梯度弥散/爆炸在很大程度上被合适的激活函数(ReLU)、网络初始化方法(Kaiming初始化)BN等Tricks处理了。
  2. 梯度弥散:当深度开始增加的时候, accuracy经常会达到饱和,然后开始下降,但这并不是由于过拟合引起的。如56-layererror大于20-layererror

ResNet手推及其相关变形 - 图1
ResNet本身是一种拟合残差的结果,让网络学习任务更简单,可以有效地解决梯度弥散的问题。ResNet网络变种包括ResNet V1ResNet V2ResNext`以及Res2Net网络等。

2. ResNet网络结构与其性能优异的原因

ResNet残差块的结构如图所示。
ResNet手推及其相关变形 - 图2
ResNet网络的优点有:

  • 引入跳跃连接,允许数据直接流向任何后续项。
  • 引入残差网络,可以使得网络层数非常深,可以达到 1000 层以上。

同样,ResNet 网络的设计技巧有:

  • 理论上较深的模型不应该比和它对应的较浅的模型更差,较深的模型可以理解为是先构建较浅的模型,然后添加很多恒等映射的网络层。
  • 实际上我们较深的模型后面添加的不是恒等映射,是一些非线性层,所有网络退化问题可以看成是通过多个非线性层来近似恒等映射是困难的。解决网络退化问题的方法就是让网络学习残差。

通过分析ResNet网络可以知道,ResNet可以被看做许多路径的集合,通过研究ResNet的梯度流表明,网络训练期间只有短路径才会产生梯度流,深的路径不是必须的,通过破坏性试验可以知道,路径之间是相互依赖的,这些路径类似集成模型,其预测准确率平滑地与有效路径的数量有关。

由于 ResNet 网络中存在很多 short cut,所以 ResNet 又可以被视为很多路径的集合网络。相关实验表明,在 ResNet 网络训练期间,只有短路径才会产生梯度流动,说明深的路径不是必须的。通过破坏网络中某些 short cut 实验可以看出,在随机破坏了ResNet 网络中的某些 short cut 后,网络依然可以训练,说明在网络中,即使这些路径是共同训练的,它们也是相互独立,不相互依赖的,可以将这些路径理解为集成模型,这也是理解 ResNet 网络的性能较好的一个方向。

3. ResNetv2的设计

首先,需要看下组对于主干以及分支网络的各种设计:
ResNet手推及其相关变形 - 图3

  • (a) 原始模块,ResNet手推及其相关变形 - 图4
  • (b) 将 ResNet手推及其相关变形 - 图5 移动到了 ResNet手推及其相关变形 - 图6 之后,ResNet手推及其相关变形 - 图7
  • (c) 将 ResNet手推及其相关变形 - 图8 移动到ResNet手推及其相关变形 - 图9 之前,则ResNet手推及其相关变形 - 图10
  • (d) 将ResNet手推及其相关变形 - 图11 移动到残差块之前,ResNet手推及其相关变形 - 图12
  • (e) 将ResNet手推及其相关变形 - 图13ResNet手推及其相关变形 - 图14 移动到残差块之前,ResNet手推及其相关变形 - 图15

在图中,ResNet手推及其相关变形 - 图16 会改变数据的分布,ResNet手推及其相关变形 - 图17 会改变值的大小,上面五个图都是work的,但是第五个图效果最好,具体效果如下:

ResNet手推及其相关变形 - 图18
具体效果为什么第五个好呢?先看下面的梯度求导吧!

4. ResNet的梯度公式推导

推导一下 ResNet 的前向与反向,步骤如下:

  1. 首先回顾下ResNet的公式:

ResNet手推及其相关变形 - 图19
在这里,简化以上公式,令所有identity分支都是ResNet手推及其相关变形 - 图20以及ResNet手推及其相关变形 - 图21,那么我们就可以得到:
ResNet手推及其相关变形 - 图22

  1. 这里我们就可以使用递归计算:

ResNet手推及其相关变形 - 图23
则,不失一般性:
ResNet手推及其相关变形 - 图24
我们从上面公式可以看到深层ResNet手推及其相关变形 - 图25与浅层ResNet手推及其相关变形 - 图26 之间的关系;则,假设损失函数为,那么反向传播公式为:
ResNet手推及其相关变形 - 图27
ResNet手推及其相关变形 - 图28的值不会轻易抵消。因为在一个 mini-batch 中,不会一直都是 -1

从上式我们可以看到,ResNet 有效得防止了:“当权重很小时,梯度消失的问题”。同时,上式中的优秀特点只有在假设ResNet手推及其相关变形 - 图29以及ResNet手推及其相关变形 - 图30成立时才有效。所以,ResNet需要尽量保证两点:

  • 不要轻易改变 identity 分支的值。
  • addition 之后不再接受改变信息分布的层。

因此,在上面五组实验中,第五个(图e)效果最好的原因是:

  1. 反向传播基本符合假设,信息传递无阻碍;
  2. BN层作为pre-activation,起到了正则化的作用。

对于图(b),是因为BN在addition之后会改变分布,影响传递,出现训练初期误差下降缓慢的问题!
对于图(c),是因为这样做导致了Residual的分支的分布为负,影响了模型的表达能力。
对于图(d),与图(a)在网络上相当于是等价的,指标也基本相同。

5. 其它相关解释

除了从梯度反传的角度说明 ResNet 比较好的解决了梯度弥散的问题,还有一些文章再探讨这些个问题。比如The Shattered Gradients Problem: If resnets are the answer, then what is the question? 这篇工作中认为,即使BN过后梯度的模稳定在了正常范围内,但梯度的相关性实际上是随着层数增加持续衰减的

而经过证明,ResNet可以有效减少这种相关性的衰减。对于 ResNet手推及其相关变形 - 图31 层的网络来说,没有残差表示的Plain Net梯度相关性的衰减在ResNet手推及其相关变形 - 图32,而ResNet的衰减却只有 ResNet手推及其相关变形 - 图33。这也验证了ResNet论文本身的观点,网络训练难度随着层数增长的速度不是线性,而至少是多项式等级的增长。

6. 其他变种网络

6.1 WRNS(Wide Residual Networks)

在现有的经验上,网络的设计一般都是往深处设计,作者认为一味的增加深度不是一个有效的方法,residual block的宽度对网络的性能同样很有帮助,所以切入点在每一层的宽度上。
ResNet手推及其相关变形 - 图34
上图为论文中的图,原始的ResNet如图(a)与(b)所示,(b)是使用了bottleneckresidual block,而(c)与(d)是WRN的结构,主要是通道在原始ResNet通道数上加宽了k倍。
具体参数如下表:
ResNet手推及其相关变形 - 图35
而随着网络深度与宽度的加深,训练参数量过大会导致过拟合,作者提出在residual block里面加入dropout,也是就开头讲到的(d)。

从实验结果看,也能说明,当网络层数depth较浅,或者宽度 k 较小时,网络还不需要加dropout,但是当层数增加,宽度增加,参数量指数增大时,加入dropout可以有效防止modeloverfitting

6.2 ResNext

ResNet提出deeper可以带来网络性质提高的同时,WideResNet则认为Wider也可以带来深度网络性能的改善。为了打破或deeper,或wider的常规思路,ResNeXt则认为可以引入一个新维度,称之为cardinality
ResNet手推及其相关变形 - 图36
上图中左边为 ResNet 结构,右边为 cardinality=32ResNeXt 结构(也就是含32group )。其等效结构如下:
ResNet手推及其相关变形 - 图37

6.3 Res2Net

目前现有的特征提取方法大多都是用分层方式表示多尺度特征。分层方式即要么对每一层使用多个尺度的卷积核进行提特征(如目标检测中的 SPPNet ),要么就是对每一层提取特征进行融合(如FPN)。

本文提出的Res2Net在原有的残差单元结构中又增加了小的残差块,在更细粒度上,增加了每一层的感受野大小。Res2Net也可以嵌入到不同的特征提取网络中,如ResNet, ResNeXt等等。

Res2Net 中提出了一个新维度叫做 scaleRes2Net 的结构如下图所示:
ResNet手推及其相关变形 - 图38
上图左边是最基本的卷积模块。右图是针对中间的3x3卷积进行的改进:

  1. 首先对经过1x1输出后的特征图按通道数均分为ResNet手推及其相关变形 - 图39(图中ResNet手推及其相关变形 - 图40))块,每一部分是 ResNet手推及其相关变形 - 图41
  2. 每一个ResNet手推及其相关变形 - 图42都会具有相应的3x3卷积,由ResNet手推及其相关变形 - 图43表示。我们用ResNet手推及其相关变形 - 图44表示ResNet手推及其相关变形 - 图45的输出。
  3. 特征子集ResNet手推及其相关变形 - 图46ResNet手推及其相关变形 - 图47的输出相加,然后送入由。为了在增加ResNet手推及其相关变形 - 图48 的同时减少参数,我们省略了ResNet手推及其相关变形 - 图49的3x3卷积,这样也可以看做是对特征的重复利用。

ResNet手推及其相关变形 - 图50
当然,Res2Net可以与像SE模块进行复用。
ResNet手推及其相关变形 - 图51
最后,论文中也给出了关于depthcardinality以及scale的效果对比,如下图所示:
ResNet手推及其相关变形 - 图52

6.4 ReXNet

作者首先提出了,在传统网络的设计的中可能会存在Representational Bottleneck问题,并且该问题会导致模型性能的降低。其次,通过数学和实验研究探讨网络中出现的Representational Bottleneck问题。

论文中,先给定一个深度为L层的网络,通过ResNet手推及其相关变形 - 图53维的输入ResNet手推及其相关变形 - 图54可以得到个被编码为ResNet手推及其相关变形 - 图55的特征,其中ResNet手推及其相关变形 - 图56为权重。这里称ResNet手推及其相关变形 - 图57的层为expand层。称ResNet手推及其相关变形 - 图58的层为condense层。

ResNet手推及其相关变形 - 图59为第i个点出的非线性函数,比如带有BN层的ReLU层,每个ResNet手推及其相关变形 - 图60表示第i个点非线性,如带有批归一化(BN)层的ReLU,ResNet手推及其相关变形 - 图61为Softmax函数。

当训练模型的时候,每一次反向传播都会通过输入得到的输出与Label矩阵(ResNet手推及其相关变形 - 图62)之间的Gap来进行权重更新。

因此,这便意味着Gap的大小可能会直接影响特征的编码效果。这里对CNN的公式做略微的改动为:
ResNet手推及其相关变形 - 图63
式中ResNet手推及其相关变形 - 图64ResNet手推及其相关变形 - 图65分别为卷积运算和第i个卷积层核的权值。用传统的ResNet手推及其相关变形 - 图66 重新排序来重写每个卷积,其中ResNet手推及其相关变形 - 图67ResNet手推及其相关变形 - 图68重新排序的特征,这里将第个特征写成:
ResNet手推及其相关变形 - 图69
作者抛出了两个问题:

  • Softmax Bottleneck

由上面的卷积公式可以得知,交叉熵损失的输出为ResNet手推及其相关变形 - 图70,其秩以ResNet手推及其相关变形 - 图71的秩为界,即ResNet手推及其相关变形 - 图72。由于输入维度ResNet手推及其相关变形 - 图73小于输出维度ResNet手推及其相关变形 - 图74,编码后的特征由于秩不足而不能完全表征所有类别。这解释了Softmax层的一个Softmax bottleneck实例。能否通过引入非线性函数来缓解Softmax层的秩不足,性能得到了很大的改善?

  • Representational bottleneck

作者推测,扩展channel大小的层(即层),如下采样块,将有秩不足,并可能有Representational bottleneck。

能否通过扩大权重矩阵的秩来缓解中间层的Representational bottleneck问题?
给定某一层生成的第i个特征,ResNet手推及其相关变形 - 图75ResNet手推及其相关变形 - 图76的阈值为ResNet手推及其相关变形 - 图77(假设ResNet手推及其相关变形 - 图78)。这里,ResNet手推及其相关变形 - 图79 ,其中ResNet手推及其相关变形 - 图80表示与另一个函数ResNet手推及其相关变形 - 图81的点乘。在满足不等式的条件ResNet手推及其相关变形 - 图82下,特征的秩范围为:
ResNet手推及其相关变形 - 图83
因此,可以得出结论,秩范围可以通过增加ResNet手推及其相关变形 - 图84的秩和用适当的用具有更大秩的函数ResNet手推及其相关变形 - 图85来替换展开,如使用swish或ELU激活函数,这与前面提到的非线性的解决方法类似。
ResNet手推及其相关变形 - 图86固定时,如果将特征维数ResNet手推及其相关变形 - 图87调整到接近ResNet手推及其相关变形 - 图88,则上式可以使得秩可以无限接近到特征维数。对于一个由连续的1×1,3×3,1×1卷积组成的bottleneck块,通过考虑bottleneck块的输入和输出通道大小,用上式同样可以展开秩的范围。

针对Layer-Level秩
作者生成一组由单一层组成的随机网络ResNet手推及其相关变形 - 图89:其中ResNet手推及其相关变形 - 图90ResNet手推及其相关变形 - 图91ResNet手推及其相关变形 - 图92随机采样,ResNet手推及其相关变形 - 图93则按比例进行调整,来判断Layer-Level秩。
ResNet手推及其相关变形 - 图94
特征归一化后的秩ResNet手推及其相关变形 - 图95是由每个网络产生。为了研究ResNet手推及其相关变形 - 图96而广泛使用了非线性函数。对于每种标准化Channel大小,作者以通道比例ResNet手推及其相关变形 - 图97在[0.1,.0]之间 和每个非线性进行10,000个网络的重复实验。图a和b中的标准化秩的展示图。

针对通道配置
随机生成具有expand层(即ResNet手推及其相关变形 - 图98)的L-depth网络,以及使用少量的condense层的设计原则使得ResNet手推及其相关变形 - 图99,这里使用少量的condense层是因为condense层直接降低了模型容量。在这里作者将expand层数从0改变为ResNet手推及其相关变形 - 图100,并随机生成网络。例如,一个expand层数为0的网络,所有层的通道大小都相同(除了stem层的通道大小)。作者对每个随机生成的10,000个网络重复实验,并对归一化秩求平均值。结果如图c和d所示。
ResNet手推及其相关变形 - 图101
此外,作者测试了采样网络的实际性能,每个配置有不同数量的expand层,有5个bottleneck,stem通道大小为32。数据集用CIFAR100,在表1中给出了5个网络的平均准确率。
ResNet手推及其相关变形 - 图102
因此,作者这里给出了扩展给定网络秩的设计原则:

  1. 在一层上扩展输入信道大小;
  2. 找到一个合适的非线性映射;
  3. 一个网络应该设计多个expand层

结论表征瓶颈(representation bottleneck)将发生在这些扩展层和倒数第2层
解决方案:

  1. - 中间层处理;扩大卷积层的输入通道大小,替换ReLU6s来细化每一层
  2. - 替换ReLU6s来细化每一层;作者扩大了倒数第2层的输入通道大小,并替换了ReLU6

其它补充

关于ResNet的变种网络,之后再进行变种的其实还有蛮多的,后面我们会说到提高感受野的时候,再进行扩展,如unipose(魔改res2net)等。还有一些比较硬核的如HO-ResNet,结合了数值微分方程相关的,各位感兴趣的可以看看,基本上面试上问到的可能性不大。
还有一些网络,可能我也没有看到,欢迎各位在留言区留言,我们一起维护好这个答案。

相关参考