大家好啊,我是董董灿。
之前介绍过 dropout 算法,它在训练神经网络中,可以随机丢弃神经元,是一种防止网络过拟合的方法。
但是在卷积神经网络中,dropout 的表现却不是很好,于是研究人员又搞了一个“结构化的 dropout 方法”,称为 dropblock,据说在卷积神经网络中表现不错。
今天就一起来看看,什么是 dropblock 吧。
1、卷积层中为什么 dropout 表现不好
dropout 在卷积层表现不好,是因为在卷积层中,特征图中的每个像素都与周围的像素高度相关。
这是由于图像像素具有局部性表达所引起的,所谓的局部性可以查看要学计算机视觉,先了解图像和像素。
由于卷积的特征图中相邻位置元素在空间上会共享语义信息,所以尽管某个单元被 dropout 掉,但与其相邻的元素依然可以保有该位置的语义信息,相关的信息仍然可以在卷积网络中流通。
因此,看似丢掉了信息,实际上并没有完全丢掉。
2、dropblock是怎么做的
为了解决这些问题,研究人员提出了一种新方法: dropblock。
dropblock 是一种结构化的 dropout 方法,它可以同时丢弃特征图中的一整块激活区域,而不是随机丢弃一个激活单元。
可以说是一种加宽加大版的 dropout 方法了。
我们以下面的图示来举个例子说明。
图(a) 代表卷积神经网络的输入图像,是一只狗子。
图(b) 和图(c) 中的绿色区域为这只狗子的图片经过了卷积运算之后得到的激活图像,绿色方块包含了激活单元。
由于图像像素局部性的存在,假设绿色区域中左上角激活的为狗子的耳朵,中间部分激活的为狗子的嘴巴,右下激活的为狗子的腿。
那么如图 b 所示,随机丢弃激活单元的方法,仅仅是丢弃了单个单元,剩余的绿色区域中仍然包含了原来的特征(比如耳朵、嘴巴和腿的特征),因此这种单纯的 dropout 方法并不有效。
而连续地将一大块区域丢弃(图c),却可以直接丢掉一些特定的区域信息(比如将左上角的耳朵信息全部丢掉,或者右下角的腿的信息),从而强制剩余的神经元去学习更重要的特征。
假设这是一个图像分类网络,那么剩余的神经元就会被强制去学习其他更有利于分类的特征。
目前,dropblock 已经被应用于许多CNN模型中,包括ResNet、DenseNet、MobileNet、EfficientNet 和 RetinaNet 等。
在ImageNet分类任务中,使用dropblock 的ResNet-50模型的准确率达到了78.13%,比传统的dropout方法提高了1.6%。
3、一个发文章的新思路
发现没有,搞 AI 算法这么卷,大家都在绞尽脑汁对算法进行变形,dropout 这种丢弃单一神经元的方法不好使,那我就整块整块的丢,效果挺好那就是一篇顶刊。
有个网友(知乎:Kevin S)对这种丢弃神经元的方法做了个总结,很有意思:
-
Dropout:完全随机扔
-
SpatialDropout :按channel随机扔
-
Stochastic Depth:按res block随机扔
-
DropBlock:每个feature map按spatial块随机扔
-
Cutout:在input层按spatial块随机扔
-
DropConnect:只在连接处扔,神经元不扔
每一种扔法都是一个顶刊文章,小伙伴们觉得怎么样,是不是打开了发文章的新思路了呢?
参考
1. 论文:Wu, Y., He, K., & Hoiem, D. (2018). DropBlock: A regularization method for convolutional networks. arXiv preprint arXiv:1810.12890.
2. ^ 5分钟搞懂 dropblock