1. 在论文中,ResNet 的作者通过实验证明了恒等映射的重要性,并且提出了一个新的残差单元来简化恒等映射。

    6.1.1 新残差块

    1. 假设 六、ResNet 变种 - 图1 是第 个残差单元的输入特征;六、ResNet 变种 - 图2 为一组与第 个残差单元相关的权重(包括偏置项),六、ResNet 变种 - 图3 是残差单元中的层的数量; 代表残差函数。则第 六、ResNet 变种 - 图4 个残差单元的输出为(它也等价于第 个残差单元的输入):

      六、ResNet 变种 - 图5

      考虑递归,对于任意深的残差单元 ,则有:

      六、ResNet 变种 - 图6

      因此,对任意深的单元 ,其输入特征 六、ResNet 变种 - 图7 可以表示为浅层单元 的特征 六、ResNet 变种 - 图8 加上一个形如 的残差函数。

      这意味着:任意单元 六、ResNet 变种 - 图9 和 之间都具有残差性。

    2. 对于任意深的单元 六、ResNet 变种 - 图10 ,其输入特征 可以表示为:六、ResNet 变种 - 图11 。即:之前所有残差函数输出的总和,再加上 。

      与之形成鲜明对比的是常规网络中,输入特征 六、ResNet 变种 - 图12 是一系列矩阵向量的乘积。即为: (忽略了激活函数和 BN )。

    3. 新的残差单元也更具有良好的反向传播特性。对于损失函数 六、ResNet 变种 - 图13 ,有:

      可以看到:

      • 梯度 六、ResNet 变种 - 图14 可以分解为两个部分:

        • :直接传递信息而不涉及任何权重。它保证了信息能够直接传回给任意浅层 六、ResNet 变种 - 图15
        • :通过各权重层来传递。
      • 在一个mini-batch 中,不可能出现梯度消失的情况。

        可能对于某个样本,存在 六、ResNet 变种 - 图16 的情况,但是不可能出现mini-batch 中所有的样本满足 。

        这意味着:哪怕权重是任意小的,也不可能出现梯度消失的情况。

    4. 根据3.4. 的讨论表明:在前向和反向阶段,信号都能够直接传递到任意单元。

    6.1.2 快捷连接验证

    1. 假设可以对快捷连接执行缩放(如线性的1x1 卷积),第 六、ResNet 变种 - 图17 个残差单元的缩放因子为 ,其中 六、ResNet 变种 - 图18 也是一个可以学习的参数。此时有: ,以及:六、ResNet 变种 - 图19

      令:,则有:

      六、ResNet 变种 - 图20

      对于特别深的网络:如果 , 则 六、ResNet 变种 - 图21 发生梯度爆炸;如果 , 则 六、ResNet 变种 - 图22 发生梯度消失。这会丧失快捷连接的好处。

    2. 如果对快捷连接执行的不是线性缩放,而是一个复杂的函数 ,则上式括号中第一部分变成:六、ResNet 变种 - 图23 。其中 为 六、ResNet 变种 - 图24 的导数。

      这也会丧失快捷连接的好处,阻碍梯度的传播。

    3. 下图所示为对快捷连接进行的各种修改:

      • (a):原始的、旧的残差块。

      • (b):对所有的快捷连接设置缩放。其中缩放因子 。

        残差有两种配置:缩放(缩放因子 0.5)、不缩放。

      • (c):对快捷连接执行门控机制。残差由 六、ResNet 变种 - 图25 来缩放,快捷连接由 来缩放。

        其中 六、ResNet 变种 - 图26 , 。

      • (d):对快捷连接执行门控机制,但是残差并不进行缩放。

      • (e): 对快捷连接执行1x1 卷积。

      • (f):对快捷连接执行dropout,其中遗忘比例为0.5 。

        在统计学上,它等效于一个缩放比例为0.5的缩放操作。

      六、ResNet 变种 - 图27

      CIFAR-10 上利用ResNet-110 的测试误差如下:(fail 表示测试误差超过 20% )

      on shortcuton F 列分别给出了快捷连接、残差块上的缩放比例。

    4. 最终结果表明:快捷连接是信息传递最直接的路径,快捷连接中的各种操作都会阻碍信息的传递,以致于对优化造成困难。

    5. 理论上,对快捷连接执行1x1 卷积,会引入更多的参数。它应该比恒等连接具备更强大的表达能力。

      事实上,其训练误差要比恒等连接的训练误差高的多。这意味着模型退化是因为优化问题,而不是网络表达能力的问题。

    6.1.3 激活函数验证

    1. 设残差块之间的函数为 六、ResNet 变种 - 图28 ,即:+ 之后引入 :

      六、ResNet 变种 - 图29

      前面的理论推导均假设 为恒等映射 六、ResNet 变种 - 图30 ,而上面的实验中 。因此接下来考察 六、ResNet 变种 - 图31 的影响。

    2. 如下图所示,组件都相同,但是不同的组合导致不同的残差块或 。

      • (a):原始的、旧的残差块, 六、ResNet 变种 - 图32

      • (c):将ReLU 移动到addition 之前,。

        这种结构问题较大,因为理想的残差块的输出范围是 六、ResNet 变种 - 图33 。这里的残差块经过个ReLU 之后的输出为非负,从而使得残差的输出为 ,从而使得前向信号会逐级递增。这会影响网络的表达能力。

      • (d):将ReLU 移动到残差块之前,六、ResNet 变种 - 图34

      • (e): 将BNReLU 移动到残差块之前,。

      六、ResNet 变种 - 图35

    3. 最终结果表明:full pre-activation 效果最好。有两个原因:

      • 快捷连接通路是顺畅的,这使得优化更加简单。

    6.1.4 网络性能

    1. ILSVRC 2012 验证集上的评估结果:

    1. 通常提高模型准确率的方法是加深网络深度或者加宽网络宽度,但这些方法会增加超参数的数量、参数数量和计算量。

      ResNeXt 网络可以在不增加网络参数复杂度的前提下提高准确率,同时还减少了超参数的数量。

    2. ResNeXt 的设计参考了VGGInception 的设计哲学。

      • VGG:网络通过简单地层叠相同结构的层来实现,因此网络结构简单。其缺点是网络参数太多,计算量太大。

      • Inception:通过执行分裂-变换-合并策略来精心设计拓扑结构,使得网络参数较少,计算复杂度较低。这种分裂-变换-合并行为预期能够达到一个大的dense 层的表达能力,但是计算复杂度要低的多。

        其缺点是:

        • 每个“变换”中,滤波器的数量和尺寸等超参数都需要精细的设计。
        • 一旦需要训练新的任务(如新任务是一个NLP 任务),可能需要重新设计网络结构。因此可扩展性不高。
      • 结合了二者的优点:

        • 网络结构也是通过简单地层叠相同结构的层来实现。
        • 网络的每一层都执行了分裂-变换-合并策略。
    3. 在相同的参数数量和计算复杂度的情况下,ResNeXt 的预测性能要优于ResNet

      • 它在ILSVRC 2016 分类任务中取得了第二名的成绩。
      • 101 层的ResNeXt 就能够获得超过200ResNet 的准确率,并且计算量只有后者的一半。
    4. ResNeXt 改进了ResNet 网络结构,并提出了一个新的维度,称作“基数”cardinality。基数是网络的深度和网络的宽度之外的另一个重要因素。

      作者通过实验表明:增加基数比增加网络的深度或者网络的宽度更有效。

    6.2.1 分裂-变换-合并

    1. 考虑全连接网络中的一个神经元。假设输入为 ,为一个一度的输入向量(长度为 六、ResNet 变种 - 图36 )。假设对应的权重为 。不考虑偏置和激活函数,则神经元的输出为:六、ResNet 变种 - 图37

      它可以视作一个最简单的“分裂-变换-合并”:

      • 分裂:输入被分割成 个低维(维度为零)嵌入。
      • 变换:每个低维嵌入通过对应的权重 六、ResNet 变种 - 图38 执行线性变换。
      • 合并:变换之后的结果通过直接相加来合并。
    2. Inception 的“分裂-变换-合并”策略:

      • 分裂:输入通过1x1 卷积被分割成几个低维嵌入。
      • 变换:每个低维嵌入分别使用一组专用滤波器(3x35x5 等) 执行变换。
      • 合并:变换之后的结果进行合并(沿深度方向拼接)。
    3. 对一个ResNeXt 块,其“分裂-变换-合并”策略用公式表述为:

      其中:

      • 六、ResNet 变种 - 图39 为任意函数,它将 映射为 六、ResNet 变种 - 图40 的一个低维嵌入,并对该低维嵌入执行转换。
      • 为转换的数量,也就是基数cardinality
    4. ResNeXt 中,为了设计方便 六、ResNet 变种 - 图41 采取以下设计原则:

      • 所有的 具有相同的结构。这是参考了VGG 的层叠相同结构的层的思想。

      • 六、ResNet 变种 - 图42 的结构通常是:

        • 第一层:执行1x1 的卷积来产生 的一个低维嵌入。
        • 第二层 ~ 倒数第二层:执行卷积、池化等等变换。
        • 最后一层:执行1x1 的卷积来将结果提升到合适的维度。

    6.2.2 ResNeXt 块

    1. 一个ResNeXt 模块执行了一组相同的“变换”,每一个“变换”都是输入的一个低维嵌入,变换的数量就是基数 C

      如下所示:左图为ResNet 块;右图为ResNeXt 块。

      六、ResNet 变种 - 图43

    2. ResNeXt 模块有两种等效的形式:图(a) 为标准形式,图(b)类似Inception-ResNet 模块。其中图(b) 的拼接是沿着深度方向拼接。

      • 等效的原因是:输入通道数为1281x1 卷积可以如下拆分:( 设输入张量为 ,输出张量为 六、ResNet 变种 - 图44,核张量为 )

        六、ResNet 变种 - 图45

        经过这种拆分,图(b) 就等效于图(a)。其中: 表示输出单元位于 六、ResNet 变种 - 图46 通道, 表示输入单元位于 六、ResNet 变种 - 图47 通道, 表示通道中的坐标。

        六、ResNet 变种 - 图48

      • (b)Inception-ResNet 模块的区别在于:这里每一条路径都是相同的。

      • (c) 是一个分组卷积的形式,它就是用分组卷积来实现图(b)。它也是图(b) 在代码中的实现方式。

    1. 通常ResNeXt 模块至少有三层。事实上它也可以有两层,此时它等效于一个宽的、密集模块。

      • 此时并没有通过 1x1 卷积进行降维与升维,而是在降维的过程中同时进行变换,在升维的过程中也进行变换。
      • 如下图所示,它等价于图(c) 中,去掉中间的变换层(128,3x3,128 层),同时将第一层、第三层的 1x1 替换为3x3 卷积层。

    6.2.3 网络性能

    1. ResNeXt 的两种重要超参数是:基数C 和颈宽d

      • 基数 C:决定了每个ResNeXt 模块有多少条路径。
      • 颈宽()d:决定了ResNeXt 模块中第一层1x1 卷积降维的维度。
      • 基数 vs 颈宽:基数越大越好。

      • 基数 vs 深度/宽度:基数越大越好。

        六、ResNet 变种 - 图49

    2. 与其它模型的预测能力比较(验证集误差,single crop):

    1. 随机深度网络提出了训练时随机丢弃网络层的思想,从而能够让网络深度增加到超过1000层,并仍然可以减少测试误差。

      如图所示:在CIFAR-10 上,1202 层的ResNet 测试误差要高于 110 层的ResNet ,表现出明显的过拟合。而 1202 层的随机深度网络(结合了ResNet )的测试误差要低于 110 层的ResNet

      六、ResNet 变种 - 图50

    2. 神经网络的表达能力主要由网络深度来决定,但是过深的网络会带来三个问题:反向传播过程中的梯度消失、前向传播过程中的feature 消失、训练时间过长。

      • 虽然较浅的网络能够缓解这几个问题,但是较浅的网络表达能力不足,容易陷入欠拟合。

      • 随机深度网络解决这一矛盾的策略是:构建具有足够表达能力的深度神经网络(具有数百层甚至数千层),然后:

        • 在网络训练期间,对每个mini batch 随机地移除部分层来显著的减小网络的深度。

          移除操作:删除对应的层,并用跳跃连接来代替。

        • 在网络测试期间,使用全部的网络层。

    3. 随机深度的思想可以和ResNet 结合。因为ResNet 已经包含了跳跃连接,因此可以直接修改。

    6.3.1 随机深度

    1. 假设ResNet 有 个残差块,则有:六、ResNet 变种 - 图51 。其中:

      • 表示第 六、ResNet 变种 - 图52 个残差块的输出, 为第 六、ResNet 变种 - 图53 个残差块的输入(它也是第 个残差块的输出)。
      • 六、ResNet 变种 - 图54 为一组与第 个残差单元相关的权重(包括偏置项),六、ResNet 变种 - 图55 是残差单元中的层的数量。
      • 代表残差函数。
    2. 假设第 六、ResNet 变种 - 图56 个残差块是否随机丢弃由伯努利随机变量 来指示:当 六、ResNet 变种 - 图57 时,第 个残差块被丢弃;当 六、ResNet 变种 - 图58 时,第 个残差块被保留。

      因此有:六、ResNet 变种 - 图59

      对随机变量 ,令:

      六、ResNet 变种 - 图60

      其中 称做保留概率或者存活概率,它是一个非常重要的超参数。

    3. 六、ResNet 变种 - 图61 的选择有两个策略:

      • 所有残差块的存活概率都相同: 。

      • 所有残差块的存活概率都不同,且根据残差块的深度进行线性衰减:

        六、ResNet 变种 - 图62

        其背后的思想是:靠近输入的层提取的是被后续层使用的低级特征,因此更应该被保留下来。

    4. 给定第 个残差块的保留概率 六、ResNet 变种 - 图63 ,则网络的深度 的期望为(以残差块数量为单位):六、ResNet 变种 - 图64

      • 对于均匀存活:

      • 对于线性衰减存活:

        六、ResNet 变种 - 图65

        当 时,无论是均匀存活还是线性衰减存活,都满足 六、ResNet 变种 - 图66 。因此随机深度网络在训练时具有更短的期望深度,从而节省了训练时间。

    5. 的选择策略,以及 六、ResNet 变种 - 图67 的大小的选取需要根据实验仔细选择。

      • 根据作者的实验结果,作者推荐使用线性衰减存活概率,并选择 。此时有: 六、ResNet 变种 - 图68
      • 如果选择更小的 将会带来更大的测试误差,但是会更大的加速训练过程。

      六、ResNet 变种 - 图69

    6. 测试时,需要调整残差块的输出: 。

    7. 随机深度网络能够大大减少训练时间和测试误差。

      • 训练时间减小是因为:网络训练时,期望深度减小。

      • 测试误差减小是因为:

        • 网络训练时期望深度的减少,使得梯度链变短,从而加强了反向传播期间靠近输入层的梯度。
        • 随机深度网络可以被理解为一系列不同深度的网络的隐式集成的集成模型。
    8. 随机深度网络可以视作 六、ResNet 变种 - 图70 个隐式的神经网络的集成,这些被集成的网络都是权重共享的,类似于Dropout

      • 在训练时,对每个mini batch,只有其中之一得到了权重更新。
      • 在测试时,取所有被集成的网络的平均。
    9. 随机深度网络和 Dropout 都可以被理解为一系列网络的隐式集成。

      • 随机深度集网络成了一系列具有不同深度的神经网络,而 Dropout集成了一系列具有不同宽度的神经网络。
      • DropoutBN配合使用时会失效,而随机深度可以和BN 配合使用。
    10. 在随机深度网络中,由于训练时的随机深度,模型的测试误差的抖动相对于ResNet 会偏大。

    6.3.2 网络性能

    1. ResNet (固定深度和随机深度)在三个数据集上进行比较,测试误差的结果如下:

      • + 表示执行了数据集增强。

      • 随机深度网络采用 。

      • CIFAR10/100 采用 110 层 ResNetImageNet 采用 152 层 ResNet

    2. CIFAR-10 上, 随机深度网络的深度 六、ResNet 变种 - 图71 、概率 与测试集误差的关系: