DropBlock: A regularization method for convolutional networks
dropout的不足
dropout是深度学习中避免过拟合的手段之一,经典网路结构中,dropout都被放到全连接层之后,鲜有放到卷积层之后。这是因为实验证明卷积层后的dropout层对网络泛化能力的改进微乎其微,本文分析了其中的原因:卷积层输出特征图各个元素之间存在很强的相关性,随机把某些原始置为0,其邻域元素带有何其相似的信息,dropout的功能没法实现。基于这个分析,本文提出了针对卷积层输出特征的dropout改进版:dropblock,不是随机把某些元素置零,而是随机把某些block都置零。如下图所示。
实现
dropblock有两个参数:block_size和
γ
\gamma
γ。其中
γ
\gamma
γ的含义和dropout中参数一致,表示每个元素被置零的概率,被用来从特征图的valid区域中选择一些需要置为0的元素(valid区域是指区域内任意点作为中心点,block_sized大小的邻域不会超出特征图尺寸)。以这些选中的元素为中心,确定block_size x block_size的邻域,这个区域内所有特征点都要置为0。算法伪码如下:
scheduled dropblock
和dropout不同,实验发现dropblock的 γ \gamma γ值如果训练初始就设置较小的值,则会影响网络收敛。文中采用 f a c t o r = 4 factor=4 factor=4的线性函数在训练过程中从1开始逐步降低 γ \gamma γ的值,直至达到目标值
实验
DropBlock for Resnet50
合适配置DropBlock,可以帮助resnet50在ImageNet上提高1~2%, resent的bottleneck模块包括skip和conv两个分支,dropBlock不仅可以作用在conv分支,也可以作用在skip分支上。如下下图所示
第一列base实验,第二列是在skip分支增加dropblock模块,第三列是利用scheduled dropblcok。最优的参数是block_size=7.