一 为什么读这篇
覃辉心心念的,Google Brain最新出的一篇。都知道dropout可以抑制过拟合,不过卷积网络里好像没怎么见到dropout的身影,特别是ResNet的网络结构里,压根没有dropout出现,从本文的题目就可以看出来,本篇提出的DropBlock就是专为CNN提供的。
二 截止阅读时这篇论文的引用次数
2018.11.24 0次。毕竟10月30号才出的
三 相关背景介绍
本文已经被2018年的NIPS接收,作者是来自Google Brain的3个学者。一作Golnaz Ghiasi是个妹子。二作是来自台湾的Tsung-Yi Lin,同时他也是RetinaNet的一作,看来质量有保证了。。
四 论文的主要贡献
提出了DropBlock这种适用于卷积层的正则化方法。dropout不行是因为卷积层的神经元之间仍然是有空间相关性的,所以即使使用了dropout,信息仍能传递。
五 详细解读
1 介绍
除了AlexNet用了dropout外,最近的网络很少用dropout,最多用在FC层。
dropout的主要问题就是随机drop特征,这一点在FC层是有效的,但在卷积层是无效的,因为卷积层的特征是空间相关的。当特征相关时,即使有dropout,信息仍能传送到下一层,导致过拟合。
本文提出的DropBlock是dropout的一种结构化形式。在DropBlock中,特征在一个block中,例如一个feature map中的连续区域会一起被drop掉。当DropBlock抛弃掉相关区域的特征时,为了拟合数据网络就不得不往别出看以寻找新的证据。
在ImageNet上,ResNet-50加了DropBlock后准确率从76.51%提升到78.13%。在COCO检测上,RetinaNet的AP从36.8%提升到38.4%。
2 相关工作
在dropout的启发下,诞生了DropConnect, maxout, StochasticDepth, DropPath, ScheduledDropPath, shake-shake regularization, ShakeDrop regularization等一系列方法,它们背后的理念基本上都是给网络注入噪声以免网络过拟合训练数据。
而其中与DropBlock最接近的方法是SpatialDropout,它是drop掉一个feature map的整个通道。
这些基于噪声注入的技术并不适用于CNN网络,事实上,也不适合RNN网络。当前RNN网络的常用噪声注入方法是Variational Dropout和ZoneOut。
DropBlock是受Cutout启发的。它是一种数据增强方法,将输入数据的部分区域给归零了。DropBlock做的就是将Cutout应用于CNN的每一个特征图(这就是创新点啊!!!)另外,最好不要用固定的归零比率,而是在训练时以一个小的比率开始,随着训练过程线性增加这个比率。这种调度机制和ScheduledDropPath类似。
3 DropBlock
drop掉某个层的特征图上的连续区域。主要有两个参数:, 控制drop掉多少神经元
输入为:层A的激活输出(也就是feature map),,,
当在inference时直接返回特征图,不做DropBlock。
按伯努利分布(0-1分布)采样mask M
对于每个0位置的,以为中心, 为大小建立方形mask,将其中的值置为0(需要注意的是仅从浅绿色区域采样M的中心点,这样block就是完整的)
最后归一化特征:
有在不同的特征通道上共享DropBlock mask和每个特征通道上独享DropBlock mask两种方法,实验证实第二种效果更好。
和dropout一样,inference时不用DropBlock,这可以解释为在评估时融合了指数级子网络的平均预测。
的大小对于所有feature map都一样,而不用考虑feature map的分辨率。当=1时就是dropout,当覆盖整个feature map时就是SpatialDropout。
实践中,并没有显式的设置的值,而是根据keep_prob来调整。
keep_prob设置为0.75到0.95之间,然后根据上式计算相应的
经实验,发现固定keep_prob的做法效果并不好,而是从1开始逐渐降低keep_prob的值到固定值效果更好。
4 实验
4.1 ImageNet Classification
上TPU,用Tensorflow的ResNet-50和AmoebaNet。图像大小分别为224x224和331x331,batch_size分别为1024和2048,ResNet-50的epoch从90增加到270。学习率在125,250,250epoch时分别除10。AmoebaNet的epoch为340,学习率用指数衰减。
4.1.1 DropBlock in ResNet-50
DropBlock加在哪?加在卷积层后或加在卷积层和跳跃连接之后。在Group4或Group3和4里加。这里的Group4也就是ResNet原文里的conv5_x。
最佳的DropBlock配置是block_size=7,在group3和group4上都用。
通过和dropout的对比,发现(1)和dropout有类似的趋势(2)比dropout有明显好的结果 => DropBlock比dropout更有效。
cutout在CIFAR10上有效,但是在ImageNet上无效。。。。。。
4.1.2 DropBlock in AmoebaNet
从82.25%提升到82.52%,这个提升就比较小了。。不过,阿米巴这个网络真强,看来网络的结构影响远远大于一些正则化技术的使用。
4.2 实验分析
DropBlock相比dropout能更有效的移除语义信息。移除越多的语义信息,则正则化越强。
使用DropBlock的模型会学习多个判别区域而不是仅仅聚焦在一个判别区域上。
4.3 COCO上的目标检测
这里需要注意的是从头开始训练的效果比在ImageNet上fine-tune的效果要好,这也从某一方面响应了何大神最新提出来的『Rethinking ImageNet Pre-training』
4.4 PASCAL VOC上的语义分割
这里的结果不太有说服力,效果不如ImageNet上预训练的。估计主要原因还是训练数据过少(只有1w张)
5 讨论
CAM(class activation mapping)说明了通过DropBlock能学到更多的空间分布的表示。
将DropBlock用在skip connection比直接用在卷积层后要好。另外随着训练的进行逐渐增加drop掉神经元的个数效果会更好。
六 读后感
感觉最大的收获是本篇将cutout方法从输入数据应用到各个特征图,将一种数据增强方法变为正则化技术,凭这个idea就产生了一篇paper。没有特殊的改进,也没有乱七八糟的公式。但是实验一定要做扎实,单纯的固定一个值(keep_prob)的做法实验效果并不好,如果这时就放弃这个idea了屁都得不到,此时试着周期性的变化这个值,发现效果好了。
另外,通过本文还知道了目前SOTA的网络是AmoebaNet,看来AutoML占据统治地位也就几年的事,之前的方法又得淘汰一波。还知道了AutoAugment这种技术。感觉读最新的论文的好处就是知道当前SOTA的是什么。非常有利于跟踪前沿。
其实DropBlock背后的理念就是把部分关键信息给屏蔽掉,逼着模型通过其他地方的关键信息来学习。
CAM是一个模型可解释性的好东西,后续可以研究研究。
七 补充
本文的二作Tsung-Yi Lin,也就是RetinaNet的提出者在14年微软实习时以一作的身份发表了关于Microsoft COCO数据集的文章,所以有时也不能轻视一些基础工作的进行,这对于后面的积累也是非常有帮助的。
一个基于pytorch的实现:https://github.com/miguelvr/dropblock
一个基于keras的实现:https://github.com/CyberZHG/keras-drop-block
怀疑两个作者有没有仔细看过原文,至少是实验部分没仔细看。原文只是把DropBlock加在深层里,浅层压根没加的。