大家好啊,我是董董灿。
今天在知乎上看到了一个帖子,叫做"深度学习中,你心目中 idea 最惊艳的论文是哪篇?"
这个问题直接让我想起了 dropout 算法 的加大加肥版,关于 dropblock 的论文。
印象深刻是因为它给了我一个发文章的新思路,虽然我早已不发论文了,但是对于在校学习并且还愁着发论文的小伙伴,或许会是一个不错的启发呢?
今天就一起来看看这个算法吧。
1、 什么是 dropblock
之前介绍过 dropout 算法,它在训练神经网络中,可以随机地丢弃神经元,是一种可以防止网络过拟合的方法。
但是在卷积神经网络中,dropout 的表现却不是很好,于是研究人员又搞了一个"结构化的 dropout 方法",称为 dropblock,据说在卷积神经网络中表现不错。
为什么 dropout 在卷积神经网络中表现不好呢?
这是因为在卷积层中,特征图中的每个像素都与周围的像素高度相关。
这主要还是由于图像像素具有局部性表达所引起的,所谓的像素局部性可以查看要学计算机视觉,先了解图像和像素。
由于卷积的特征图中相邻位置像素在空间上会共享语义信息,所以尽管某个单元被 dropout 掉,但与其相邻的元素依然可以保有该位置的语义信息,相关的信息仍然可以在卷积网络中流通。
也就是说,图像中像素是抱团来表达一个特征的。相邻范围内的像素在一起,才能表征某一块图像是猫耳朵还是猫嘴巴。
(戴着圣诞帽的猫咪,由 AI 生成)
特征是由局部范围的很多像素来确定的,而不仅仅由单一或者几个像素来决定。
因此,使用dropout方法来丢弃特征,看似是丢掉了信息,实际上并没有完全丢掉。
2、dropblock是怎么做的
为了解决这些问题,研究人员提出了一种新方法: dropblock。
dropblock 是一种结构化的 dropout 方法,它可以同时丢弃特征图中的一整块激活区域,而不是随机丢弃一个激活单元。
可以说是一种加宽加大版的 dropout 方法了。
我们以下面的图示来举个例子说明。
图(a) 代表卷积神经网络的输入图像,是一只狗子。
图(b) 和图(c) 中的绿色区域为这只狗子的图片经过了卷积运算之后得到的激活图像,绿色方块包含了激活单元。
由于图像像素局部性的存在,假设绿色区域中左上角激活的为狗子的耳朵,中间部分激活的为狗子的嘴巴,右下激活的为狗子的腿。
图中黑色的 X 代表丢弃的单元。
那么如图 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:只在连接处扔,神经元不扔
每一种扔法都是一个顶刊文章,小伙伴们觉得怎么样,是不是打开了发文章的新思路了呢?
参考论文:Wu, Y., He, K., & Hoiem, D. (2018). DropBlock: A regularization method for convolutional networks. arXiv preprint arXiv:1810.12890.
最近一直在写 AI 算法科普文字,有不少同学加我微信:ddcsggcs,探讨学习AI算法,我最近也开发了一个从零入门的学习小册子,可以查看这里了解详情:计算机视觉从入门到调优,目前已有将近100+人加入,大家一起在探讨如何更加快速有效的入门学习,如果你感兴趣,欢迎一起加入呀。
本文原创,请勿转载,如果有收获,点个赞呗~