针对于残差模块的优化,由于很深的 ResNet 通常需要很长时间的训练(也就是训练很慢),作者引入了一种类似于 dropout 的方法,在训练过程中随机丢弃子图层(randomly drop a subset of layers),而在influence 时正常使用完整的 graph。(即在训练的过程中随机丢弃图层的反直觉方法,同时使用完整的网络进行推理。)
resnet 网络是由一个接一个的残差模块(ResBlock)串联起来的,可以视为 ResBlock 的集合。在训练时,对每个 ResBlock 随机 drop(按伯努利分布),drop 就是将上一个 ResBlock 直接输出到下一个 ResBlock,被drop ResBlock 什么都不做也不更新。另外,网络的输入被视为第一层,是不会 drop 的。
Dropout 的不同之处在于,该方法 drop 整个 ResBlock,而 Dropout 在训练期间只 drop 一部分 unit。这种方法大大降低了训练时间,甚至在训练完成后删除部分 layer,还能不影响精度。


DropOut

Dropout 现在一般用于全连接层,卷积层一般不使用 Dropout,而是使用BN来防止过拟合,而且卷积核还会有 relu 等非线性函数,降低特征直接的关联性。
典型的神经网络其训练流程是将输入通过网络进行正向传导,然后将 loss 进行反向传播。Dropout 就是针对这一过程之中,随机地删除隐藏层的部分单元,进行上述过程。具体步骤:

  1. 对一批样本,随机删除网络中的一些隐藏神经元,保持输入输出神经元不变;
  2. 将输入通过修改后的网络进行前向传播,然后将误差通过修改后的网络进行反向传播;
  3. 对于另外一批的训练样本,重复上述操作 a,b

image.png

DropOut的意义

  1. 可以理解为模型平均,起到一种 Vote 的作用。对于全连接神经网络而言,我们用相同的数据去训练5个不同的神经网络可能会得到多个不同的结果,我们可以通过一种 vote 机制来决定多票者胜出,因此相对而言提升了网络的精度与鲁棒性。同理,对于单个神经网络而言,如果我们将其进行分批(某些神经元随机失活),虽然不同的网络可能会产生不同程度的过拟合,但是将其公用一个损失函数,相当于对其同时进行了优化,取了平均,因此可以较为有效地防止过拟合的发生。
  2. 减少神经元之间复杂的共适应性(神经元之间协同性)。隐藏层神经元被随机删除之后,使得全连接网络具有了一定的稀疏化,从而有效地减轻了不同特征的协同效应。也就是说,有些特征可能会依赖于固定关系的隐含节点的共同作用,而通过 Dropout 的话,它强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,达到好的效果。消除减弱了神经元节点间的联合适应性,增强了泛化能力。由于每次用输入网络的样本进行权值更新时,隐含节点都是以一定概率随机出现,因此不能保证每2个隐含节点每次都同时出现,这样权值的更新不再依赖于有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况。(解耦

DropPath

DropPath 是将深度学习模型中的多分支结构随机失活的一种正则化策略。与 FractalNet 一起提出, FractalNetBlock 包含很多分支(如下图),DropPathBlock 中的多分支结构随机失活。image.png
训练时 DropPath 分为两个阶段交替进行:

  1. 局部丢弃,以一定的概率随机丢弃 Join 层,但必须保证起码有一条分支是通的。
  2. 全局丢弃,随机选择一条分支。

image.png