大家好,我是Ai学习的老章
经常在外冲浪,看到很多优秀的技术文章,独享不如分享
我会使用DeepSeek-R1+科技类翻译大师prompt翻译出来,大家一起学习
如有翻译偏差,请大家指教。原文[1]
昨天的文章中,我分享了 CNN Explainer —— 一个交互式工具,用于可视化理解和探索 CNN 及其内部工作机制。
今天,我们将继续讨论 CNN,并理解在使用 Dropout 正则化这些网络时的一个被忽视的问题。
让我们开始吧!
在训练神经网络时,总是建议使用 Dropout(以及其他正则化技术)以提高其泛化能力。
这不仅适用于 CNN,也适用于所有其他神经网络。
我相信你已经了解了上述细节,所以让我们进入有趣的部分。
使 CNN 如此强大的核心操作是卷积 ,它允许它们捕获局部模式,如边缘和纹理,并帮助从输入中提取相关信息。
下面的动画展示了卷积操作是如何工作的。
卷积操作(视频来源:3Blue1Brown YouTube 视频中的卷积)
从纯粹的数学角度来看,我们沿着输入(如下所示的绿色部分)滑动一个滤波器(如下所示的黄色部分),并将滤波器和重叠的输入按元素相加以得到卷积输出:
在这里,如果我们应用传统的 Dropout,输入特征将会如下所示:
在全连接层中,我们零化神经元。然而,在 CNN 中,我们在卷积之前随机零化像素值 ,如上图所示。
但这并没有被发现特别适用于卷积层。
为了理解这一点,考虑我们有一些图像数据。在每张图像中,我们会发现相邻的特征(或像素)在空间上高度相关。
例如,想象一下将数字“9”的像素级别放大。
在这里,我们会注意到红色像素(或特征)与其周围的其他特征高度相关:
因此,使用 Dropout 丢弃红色特征很可能没有效果,其信息仍然可以传递到下一层。
简单来说,卷积操作的本质就违背了传统 Dropout 方法的初衷。
DropBlock 是一种更优秀、更有效且更直观的 CNN 正则化方法。
核心思想是丢弃一个连续的特征区域 (或像素),而不是单独的像素。
这在下面所示:
类似于全连接层中的 Dropout,网络试图在某些激活缺失的情况下生成更 robust 的方式来拟合数据,在 DropBlock 的情况下,卷积层能够在某些特征缺失的情况下更 robust 地拟合数据。
此外,DropBlock 的想法也直观合理 — 如果连续的特征区域被丢弃,就可以避免在使用卷积操作时 Dropout 的问题。
DropBlock 有两个主要参数:
Block_size
: 要丢弃的盒子的大小。Drop_rate
: 中央像素的丢弃概率。要应用 DropBlock,首先,我们从伯努利分布中在输入上采样一个二进制掩码:
接下来,我们创建一个大小为 block_size*block_size
的块,并将采样的像素放在中心位置:
完成!
DropBlock 在结果表中优于 Dropout:
结果表格来自 DropBlock 研究论文[2]
在 ImageNet 分类数据集上:
我们在本期通讯中介绍了标签平滑: 使用标签平滑正则化神经网络[3] 。
感谢地是,DropBlock 也集成了 PyTorch。
还有一个名为“dropblock”的库,也提供了 drop_rate
的线性调度器。
所以研究人员发现,提出 DropBlock 的技术在 drop_rate
逐渐增加时更为有效。
DropBlock 库 实现了调度器[4] 。当然,你也可以在 PyTorch[5] 中以其他方式实现这一点。所以你可以根据自己的需要选择使用哪种实现。
搭建完美的写作环境:工具篇(12 章)图解机器学习 - 中文版(72 张 PNG)ChatGPT 、大模型系列研究报告(50 个 PDF)108页PDF小册子:搭建机器学习开发环境及Python基础 116页PDF小册子:机器学习中的概率论、统计学、线性代数 史上最全!371张速查表,涵盖AI、ChatGPT、Python、R、深度学习、机器学习等
参考资料
[1]
原文: https://blog.dailydoseofds.com/p/dropblock-vs-dropout-for-regularizing
[2]
DropBlock 研究论文: https://arxiv.org/pdf/1810.12890.pdf
[3]
使用标签平滑正则化神经网络: https://blog.dailydoseofds.com/p/regularize-neural-network-using-label
[4]
实现了调度器: https://github.com/miguelvr/dropblock
[5]
PyTorch: https://pytorch.org/vision/master/generated/torchvision.ops.DropBlock2d.html