date: 2020/05/23

入海 - 毛不易:对于未来的想法 有太多疑问 没有回答


Dropout

论文:

参考:《深度学习500问 - Ch03深度学习基础 - Dropout系列问题


具体操作

在每一步训练中,所有神经单元(包含输入神经单元,但不包含输出神经单元)有一定概率被忽略(但在预测时使用整个网络);

这里称为dropout rate,对应的还有一个keep probability,即


每步训练时都有一部分单元缺失,使得每个单元都有机会在本次训练中具备一定的重要性,从而使得各个单元可以更好地从训练集中学习,使整个网络在工作时更有弹性;

部分“队友”的缺失、部分“输入数据”的缺失,在这种训练下,每个单元有更强的鲁棒性;

或者换个角度看,Dropout每次使一部分神经元失活,相当于每次迭代都使用一个一定限制下的随机结构进行训练。


由于各个单元是一定概率参与训练的,使得每一层输出的分布发生变化,所以在需要对这些单元进行一定补偿——

  1. 可以在训练时,对每个单元的输出都除以q
  2. 也可以在预测时,为每个单元的输出都乘以q

这两种方式二选其一即可,虽然不完全等价,但实际效果时差不多的


关于dropout rate,

  1. 通常认为取的效果最好,因为此时可以产生的随机结构数量最多;
  2. Dropout也可以用于Input层,直接对输入数据进行加噪处理,此时应当设得小一些(如0.2),确保输入数据不会发生太大变化;
  3. 如果说,在训练中加了dropout还是发现过拟合了,可以考虑增加dropout_rate(减小keep_prob);


缺点


DropPath

论文:《FractalNet: Ultra-Deep Neural Networks without Residuals (ICLR2017)》FractalNet

FractalNet一起提出,FractalNet的Block包含很多分支,DropPath是与之适配的随机丢弃分支的一种正则化策略。

image.png

(FractalNet所用Block的结构)


DropPath分两个阶段,训练时两个阶段交替进行,

image.png


实验结果(错误率):

image.png

(+表示增加平移/翻转的数据增广)

(++表示在+的基础上增加更多的数据增广)

deepest column alone表示预测时只保留最深的分支(深度为),即退化成直筒式结构,的测试结果。


DropBlock

论文:《DropBlock: A regularization method for convolutional networks (NIPS2018)


image.png

(a为原图,b为Dropout示意图,c为DropBlock示意图)

(bc中绿色区域为包含语义信息即狗的区域,×表示置零的像素点)


作者观察到,Dropout在丢弃语义信息的时候是非常低效的,如上图所示,Dropout只是零零散散地丢弃一些语义相关的像素点。而包含相同语义信息的像素点往往是相邻的,由此提出以块状的形式丢弃像素点的DropBlock正则化方案。


具体操作

image.png

(DropBlock示意图)


设特征图尺寸为,Drop块尺寸为(一般为奇数),

  1. 为概率在特征图中央区域(如图绿色区域)抽样;
  2. 分别以各个抽样点为中心膨胀出大小的块区域,得到掩膜
  3. 将原特征图上抽样的块区域数值置零,即
  4. 规范化特征图的数值确保响应的整体尺度不变,即


几个细节:


效果

image.png

(分类任务:ImageNet上实验结果)


image.png

(检测任务:ResNet50-FPN-RetinaNet在COCO上的实验结果)


image.png

(分割任务:ResNet101-FPN-FCN在VOC2012上的实验结果)


有效性分析

image.png

(ResNet50在不同block_size下的表现)

(注意block_size=1时等价于Dropout)



比较

Origin

3x10x10

image.png

Dropout

数值

image.png

BlockDrop

数值块

image.png

SpatialDrop

通道

image.png

DropPath

全部

image.png