网站首页 > 技术文章 正文
机器之心报道
机器之心编辑部
深度学习三巨头之一 Geoffrey Hinton 在 2012 年提出的 dropout 主要用来解决过拟合问题,但近日的一项工作表明,dropout 能做的事情不止于此。
2012 年,Hinton 等人在其论文《Improving neural networks by preventing co-adaptation of feature detectors》中提出了 dropout。同年,AlexNet 的出现开启了深度学习的新纪元。AlexNet 使用 dropout 显著降低了过拟合,并对其在 ILSVRC 2012 竞赛中的胜利起到了关键作用。可以这么说,如果没有 dropout,我们目前在深度学习领域看到的进展可能会被推迟数年。
自 dropout 推出以后,它被广泛用作正则化器,降低神经网络中的过拟合。dropout 使用概率 p 停用每个神经元,防止不同的特征相互适应。应用 dropout 之后,训练损失通常增加,而测试误差减少,从而缩小模型的泛化差距。深度学习的发展不断引入新的技术和架构,但 dropout 依然存在。它在最新的 AI 成果中继续发挥作用,比如 AlphaFold 蛋白质预测、DALL-E 2 图像生成等,展现出了通用性和有效性。
尽管 dropout 持续流行,但多年来其强度(以drop rate p 表示)一直在下降。最初的 dropout 工作中使用了 0.5 的默认drop rate。然而近年来常常采用较低的drop rate,比如 0.1,相关示例可见训练 BERT 和 ViT。这一趋势的主要动力是可用训练数据的爆炸式增长,使得过拟合越来越困难。加之其他因素,我们可能很快会遇到更多欠拟合而非过拟合问题。
近日在一篇论文《Dropout Reduces Underfitting》中,Meta AI、加州大学伯克利分校等机构的研究者展示了如何使用 dropout 来解决欠拟合问题。
论文地址:https://arxiv.org/abs/2303.01500
他们首先通过对梯度范数的有趣观察来研究 dropout 的训练动态,然后得出了一个关键的实证发现:在训练初始阶段,dropout 降低小批量的梯度方差,并允许模型在更一致的方向上更新。这些方向也更与整个数据集的梯度方向保持一致,具体如下图 1 所示。
因此,模型可以更有效地优化整个训练集的训练损失,而不会受到个别小批量的影响。换句话说,dropout 抵消了随机梯度下降(SGD)并防止训练早期采样小批量的随机性所造成的过度正则化。
基于这一发现,研究者提出了 early dropout(即 dropout 仅在训练早期使用),来帮助欠拟合模型更好地拟合。与无 dropout 和标准 dropout 相比,early dropout 降低了最终的训练损失。相反,对于已经使用标准 dropout 的模型,研究者建议在早期训练 epoch 阶段移除 dropout 以降低过拟合。他们将这一方法称为 late dropout,并证明它可以提升大模型的泛化准确率。下图 2 比较了标准 dropout、early 和 late dropout。
研究者在图像分类和下游任务上使用不同的模型来评估 early dropout 和 late dropout,结果显示二者始终比标准 dropout 和无 dropout 产生了更好的效果。他们希望自己的研究发现可以为 dropout 和过拟合提供新颖的见解,并激发人们进一步开发神经网络正则化器。
分析与验证
在提出 early dropout 和 late dropout 之前,该研究探讨了是否可以使用 dropout 作为减少欠拟合的工具。该研究使用其提出的工具和指标对 dropout 的训练动态进行了详细分析,并比较了 ImageNet 上两个 ViT-T/16 的训练过程(Deng et al., 2009):一个没有 dropout 作为基线;另一个在整个训练过程中有 0.1 的 dropout 率。
梯度范数(norm)。该研究首先分析了 dropout 对梯度 g 强度的影响。如下图 6(左)所示,dropout 模型产生范数较小的梯度,表明它在每次梯度更新时采用较小的步长(step)。
模型距离。由于梯度步长更小,我们期望 dropout 模型相对于其初始点移动的距离比基线模型更小。如下图 6(右)所示,该研究绘制了每个模型与其随机初始化的距离。然而,令人惊讶的是,dropout 模型实际上比基线模型移动了更大的距离,这与该研究最初基于梯度范数的预期相反。
梯度方向方差。该研究首先假设 dropout 模型在小批量中产生更一致的梯度方向。下图 7 所示的方差与假设基本一致。直到一定的迭代次数(大约 1000 次)以后,dropout 模型和基线模型的梯度方差都在一个较低的水平波动。
梯度方向误差。然而,正确的梯度方向应该是什么?为了拟合训练数据,基本目标是最小化整个训练集的损失,而不仅仅是任何一个小批量的损失。该研究在整个训练集上计算给定模型的梯度,其中 dropout 设置为推理模式以捕获完整模型的梯度。梯度方向误差如下图 8 所示。
基于上述分析,该研究发现尽早使用 dropout 可以潜在地提高模型对训练数据的拟合能力。而是否需要更好地拟合训练数据取决于模型是处于欠拟合还是过拟合状态,这可能很难精确定义。该研究使用如下标准:
- 如果一个模型在标准 dropout 下泛化得更好,则认为它处于过拟合状态;
- 如果模型在没有 dropout 的情况下表现更好,则认为它处于欠拟合状态。
模型所处的状态不仅取决于模型架构,还取决于所使用的数据集和其他训练参数。
然后,该研究提出了 early dropout 和 late dropout 两种方法
early dropout。在默认设置下,欠拟合状态下的模型不使用 dropout。为了提高其适应训练数据的能力,该研究提出 early dropout:在某个迭代之前使用 dropout,然后在其余的训练过程中禁用 dropout。该研究实验表明,early dropout 减少了最终的训练损失并提高了准确性。
late dropout。过拟合模型的训练设置中已经包含了标准的 dropout。在训练的早期阶段,dropout 可能会无意中造成过拟合,这是不可取的。为了减少过拟合,该研究提出 late dropout:在某个迭代之前不使用 dropout,而是在其余的训练中使用 dropout。
该研究提出的方法在概念和实现上都很简单,如图 2 所示。实现时需要两个超参数:1) 在打开或关闭 dropout 之前等待的 epoch 数;2)drop rate p,类似于标准的 dropout rate。该研究表明,这两种超参数可以保证所提方法的稳健性。
实验及结果
研究者在具有 1000 个类和 1.2M 张训练图像的 ImageNet-1K 分类数据集上进行了实证评估,并报告了 top-1 验证准确率。
具体结果首先如下表 1(上部)所示,early dropout 持续提升测试准确率,降低训练损失,表明早期阶段的 dropout 有助于模型更好地拟合数据。研究者还展示了使用 drop rate 为 0.1 时与标准 dropout、随机深度(s.d.)的比较结果,这两者都对模型具有负面影响。
此外,研究者将训练 epoch 增加一倍并减少 mixup 和 cutmix 强度,从而改进了这些小模型的方法。下表 1(底部)的结果表明,基线准确率显著提升,有时甚至大大超越了以往工作的结果。
为了评估 late dropout,研究者选择了更大的模型,即分别具有 59M 和 86M 参数的 ViT-B 和 Mixer-B,使用了基础的训练方法。
结果如下表 3 所示,与标准 s.d. 相比,late s.d. 提升了测试准确率。这一提升是在保持 ViT-B 或增加 Mixer-B 训练损失的同时实现的,表明 late s.d. 有效降低了过拟合。
最后,研究者在下游任务上对预训练 ImageNet-1K 模型进行微调,并对它们进行评估。下游任务包括 COCO 目标检测与分割、ADE20K 语义分割以及在 C-100 等五个数据集上的下游分类。目标是在微调阶段不使用 early dropout 或 late dropout 的情况下评估学得的表示。
结果如下表 4、5 和 6 所示,首先当在 COCO 上进行微调时,使用 early dropout 或 s.d. 进行预训练的模型始终保持优势。
其次对于 ADE20K 语义分割任务而言,使用本文方法进行预训练的模型优于基准模型。
最后是下游分类任务,本文方法在大多数分类任务上提升了泛化性能。
更多技术细节及实验结果请参阅原论文。
猜你喜欢
- 2024-10-17 【Python深度学习系列】网格搜索神经网络超参数:丢弃率dropout
- 2024-10-17 中英趣译,用英文说对方“活该”才痛快!
- 2024-10-17 问题:ID:16145下列属于dropout特性的有()
- 2024-10-17 那些与out有关的英文表达! 与out有关的英语词组
- 2024-10-17 Dropout和标准化(Batch Normalization)
- 2024-10-17 麦克风将被静音,美网友都在猜:特朗普会如何应对?
- 2024-10-17 不只Dropout,刚刚,至少30项机器学习技术都变成了谷歌专利
- 2024-10-17 Dropout VS BN: 别在你的网络中使用Dropout
- 2024-10-17 让Dropout在图像超分领域重焕光彩
- 2024-10-17 神经网络中的损失函数正则化和 Dropout 并手写代码实现
你 发表评论:
欢迎- 11-19零基础学习!数据分析分类模型「支持向量机」
- 11-19机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现
- 11-19我以前一直没有真正理解支持向量机,直到我画了一张图
- 11-19研一小姑娘分享机器学习之SVM支持向量机
- 11-19[机器学习] sklearn支持向量机
- 11-19支持向量机
- 11-19初探支持向量机:用大白话解释、原理详解、Python实现
- 11-19支持向量机的核函数
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)