Paper:https://arxiv.org/pdf/1810.12890.pdf
Code:https://github.com/miguelvr/dropblock & https://github.com/DHZS/tf-dropblock
摘要:当前深度神经网络被过度参数化或者训练集多样性充足或合适的正则化(权重衰减、丢弃法)训练时,通常会取得很好地效果。尽管dropout被广泛地用作全连接层的正则化技术,但它对卷积层的效果往往较差。卷积层的dropout不能成功的原因是卷积层中的激活单元在空间上相关的,所以即使使用dropout, 信息仍然可以通过卷积网络流动。因此, 需要一种结构化的dropout形式来规范卷积网络。在这篇论文中, 我们介绍DropBlock,一种结构化的dropout形式,它将一个特征图的连续区域中的单元丢弃。我们发现除了卷积层外,在跳跃链接中DropBlock也可以提高准确性。此外, 在训练过程中逐渐增加dropout的单元数可以提高超参数选择的准确性和鲁棒性。大量实验表明,在正则化卷积神经网络中,DropBlock比dropout更有效。在ImageNet分类中, 使用DropBlock的ResNet-50架构准确率达到78.13%, 比基准提高了1.6%以上。在COCO检测数据集上, DropBlock将RetinaNet提高平均精度从36.8%到38.4%。
知识点解析:DropBlock是一个类似于dropout的简单方法。它与dropout的主要区别是,它从一个层的特征图中丢弃连续的区域,而不是丢弃独立的随机单元。伪代码如下图所示。DropBlock有两个主要参数:block_size和。block_size是要丢弃的块的大小,
控制丢弃多少激活单元。
我们尝试在不同的特征通道上共享一个DropBlock掩码,或者每个特征通道都有它自己的DropBlock掩码。后一种在实验中显示较好。
和dropout类似,我们在预测阶段不适用DropBlock。可以理解为在指数个子网络集合中进行平均预测。这些子网络包括由丢弃覆盖的子网络的一个特殊子集, 其中每个子网络都看不到完整的特征图。
block_size值得设置:在我们的实现中, 我们为所有的特征图设置了常量的block_size, 而不考虑特征图的分辨率。当block_size = 1时, DropBlock类似于dropout, 当block_size覆盖整个特征图时, 它类似于SpatialDropout。
值得设置:在实现中,我们没有明确的设置
的值。如前文所述,
控制丢弃特征图里神经元的数量。假设我们想要保持每个单元激活的概率为keep_prob, 在dropout中, 二进制掩码采样采用伯努利分布,即(1 - keep_prob)。但是,考虑到掩码中每个0单元都将被block_size扩展,并且考虑到这些块将完全包含在feature map中,我们需要在采样初始二进制掩码时进行相应的调整。在我们实现中,
由下式得到:
, 其中在dropout中keep_prob是保留单元的概率。有效区域的大小
, 其中feat_size表示特征图的大小。在drop block中会有区域的重叠,所以上式只是近似值。在实验中,我们最初设定kee_prob在(0.75~0.95)之间,然后上式计算
。
设定DropBlock:我们发现在训练过程中,固定DropBlock的keep_prob不好,使用小的keep_prob值会在开始时影响学习。相反,将keep_prob随着时间从1逐渐减少到目标值更鲁邦,并为keep_prob的大多数值增加了改进。在我们的实现中,我们使用了线性方程来降低keep_prob的值,这在许多超参数的设置中都很有效。
简单的说,Dropout强迫神经网络不单独依赖某一个特征,从而提高网络的泛化能力,但使用卷积网络处理的数据(不仅仅是图像数据)通常具有空间上的关联性,因而对于位于某一空间区域的对象,随机丢弃难以drop掉该对象的信息,Dropout的目的也就不能充分达到。DropBlock则drop掉一整块区域(由超参数控制区域的大小)的激活值,强迫网络使用其他区域的特征。论文还指出,在训练过程中线性的逐步降低keep_prob的值可以获得更好的结果。
结论:论文实验部分值得精读;代码值得细看。