如果你曾经训练过大型神经网络,你很可能遇到过它最大的敌人:** 过拟合**。你眼看着训练损失骤降,模型完美地记住了训练数据,但它在未见过的测试数据上的表现却停滞不前,甚至变得更差。模型学到的是噪声,而不是信号。这就像一个学生,他背下了模拟考试的所有答案,却在真正的考试中失败了,因为他从未真正理解底层的概念。

多年来,研究人员开发了多种技术来对抗过拟合——L2 正则化、早停和数据增强都是机器学习从业者工具箱中的常用工具。但在 2014 年,一个包括 Geoffrey Hinton、Alex Krizhevsky、Ilya Sutskever、Nitish Srivastava 和 Ruslan Salakhutdinov 在内的研究团队,引入了一种既惊人地简单又极其有效的技术:** Dropout**。

他们的论文《Dropout: 一种防止神经网络过拟合的简单方法》 (Dropout: A Simple Way to Prevent Neural Networks from Overfitting) 提出了一种方法,它能模拟训练一个由不同网络组成的庞大集成模型的效果,却没有高昂得令人望而却步的计算成本。这个想法很简单: 在训练过程中,随机关闭一部分神经元。这听起来有些混乱,但在实践中,它是迄今为止最有效的正则化技术之一,并在深度学习革命中扮演了关键角色。

在这篇文章中,我们将深入探讨这篇开创性的论文,探索什么是 Dropout,它为何如此有效,以及那些在各种任务中证明其强大能力的实验。


问题: 过拟合与协同适应

深度神经网络之所以强大,是因为它们拥有数百万个参数,这使得它们能够学习极其复杂的函数。但是,强大的能力也带来了极易过拟合的倾向。当一个网络的容量足以记住所有训练数据时,它就可能学到一些虚假的相关性和脆弱的特征,而这些特征无法泛化到新数据上。

发生这种情况的一个原因是**协同适应 **(co-adaptation) 。想象一下,隐藏层中的一组神经元协同工作: 一个神经元可能学到了一个有用的特征,但存在缺陷。另一个神经元则可以学会纠正这个特定的缺陷。它们共同为训练集生成了完美的输出。但这种合作关系是脆弱的——在模式有所不同的新数据上,这种协同适应可能会彻底失败。

减少过拟合的黄金标准是**模型组合 **(集成学习) 。如果你独立地训练几个不同的模型,并对它们的预测进行平均,结果几乎总会比任何单个模型都要好,因为不同模型的错误倾向于相互抵消。然而,对于大型神经网络来说,训练几十个独立的模型在计算上是不可行的。

Dropout 正是为了解决这个问题而提出的:** 我们如何在不训练几十个模型的情况下,获得集成学习的好处?**


核心思想: 训练一个由“精简”网络组成的集成模型

Dropout 的核心思想既简单又强大。在每个训练步骤中,对于每一个样本,你都随机“丢弃”网络中的一部分神经元——暂时将它们及其所有的连接移除。

左图为一个标准的全连接神经网络,右图为应用了 Dropout 后的同一网络。一些神经元被划掉,形成了一个更稀疏的“精简”网络。

如图 1 所示,应用 Dropout 会创建原始网络的“精简”版本。要丢弃的神经元是为每个训练样本 (或小批量) 随机选择的,因此你实际上在每一步都在训练一个不同的网络架构。一个拥有 \(n\) 个神经元的网络可以被看作是 \(2^n\) 个可能的精简网络的集合。Dropout 训练了这个庞大集成模型中的一小部分,其中一个关键细节是: 所有这些精简网络共享权重

因为一个神经元不能依赖于任何其他特定神经元的存在,它被迫学习那些自身就有用且稳健的特征。复杂的协同适应被打破了;每个神经元都必须成为一个更独立、更可靠的检测器。


Dropout 机制

在一个标准的前馈神经网络中,第 \(l+1\) 层中神经元 \(i\) 的输出 \(y_i^{(l+1)}\) 为:

\[ z_i^{(l+1)} = \mathbf{w}_i^{(l+1)} \mathbf{y}^{(l)} + b_i^{(l+1)}, \quad y_i^{(l+1)} = f(z_i^{(l+1)}) \]

这里,\(\mathbf{y}^{(l)}\) 是前一层的输出,\(\mathbf{w}_i^{(l+1)}\) 是输入权重,\(b_i^{(l+1)}\) 是偏置项,\(f\) 是激活函数。

Dropout 为每一层的输出引入了一个二元掩码 \(\mathbf{r}^{(l)}\),其中的每个元素都从一个保留概率为 \(p\) 的伯努利分布中采样:

\[ \begin{array}{rcl} r_{j}^{(l)} &\sim& \text{Bernoulli}(p), \\ \widetilde{\mathbf{y}}^{(l)} &=& \mathbf{r}^{(l)} \ast \mathbf{y}^{(l)}, \\ z_{i}^{(l+1)} &=& \mathbf{w}_{i}^{(l+1)} \widetilde{\mathbf{y}}^{(l)} + b_{i}^{(l+1)}, \\ y_{i}^{(l+1)} &=& f(z_{i}^{(l+1)}). \end{array} \]

\(\ast\) 表示逐元素相乘。首先,原始的激活值 \(\mathbf{y}^{(l)}\) 与掩码 \(\mathbf{r}^{(l)}\) 相乘,生成精简后的激活值 \(\widetilde{\mathbf{y}}^{(l)}\),然后将其传递给下一层。

一张图表,比较了标准神经元 (左) 和 Dropout 神经元 (右) 。Dropout 神经元的输入在向前传递之前会乘以一个二元掩码。

反向传播照常进行,但只通过该训练样本中存活下来的神经元。


测试阶段: 近似集成效果

在训练了指数级数量的共享权重的精简网络之后,我们如何将它们组合起来呢?在测试时,运行数千次前向传播来平均预测结果,速度太慢了。

诀窍是:** 权重缩放**。在测试时,我们使用完整、未经精简的网络,但将每个神经元的输出权重按保留概率 \(p\) 进行缩放。

一个神经元在训练时 (左) 以概率 \\(p\\) 存在;在测试时 (右) 它始终存在,但其输出权重会按比例 \\(p\\) 缩放。

为什么这能行得通?在训练期间,一个神经元的输出平均被缩放了 \(p\) 倍,因为它只有 \(p\) 的时间是激活的。在测试时将权重乘以 \(p\),可以确保期望输出与训练时的期望输出相匹配。这种缩放是对所有精简网络进行平均的一种高效而准确的近似。


证据: 跨领域的实验

作者们通过在视觉、语音、文本和生物学等领域的大量实验验证了 Dropout 的有效性。

一张表格,总结了论文中使用的各种数据集。


视觉: 达到顶尖水平的效果

MNIST 数据集上,当时的标准网络错误率约为 1.6%。使用 Dropout 后,这一数字降至 1% 以下,而一个用 DBM 预训练并用 Dropout 微调的模型达到了 0.79% 的错误率,为排列不变 (permutation-invariant) 设定创下了记录。

一张比较 MNIST 错误率的表格;基于 Dropout 的模型占据主导地位。

Dropout 的优势在不同架构中均有体现,从 2 层到 4 层,以及不同数量的单元。

不同架构的测试错误率曲线;Dropout 降低了所有架构的错误率。

在更复杂的图像数据集——SVHNCIFAR-10CIFAR-100——上,Dropout 持续提升了 CNN 的性能。

SVHN (左) 和 CIFAR-10 (右) 的数据集样本。

例如,在 CIFAR-100 上,Dropout 将错误率从 43.48% 降低到了 37.20%

一张展示 CIFAR 结果的表格;在所有层都使用 Dropout 取得了最好的成绩。


ImageNet: 助力 AlexNet 获胜

在具有里程碑意义的 ImageNet 挑战赛中,Krizhevsky 等人的 AlexNet 在其全连接层中大量使用了 Dropout,在 ILSVRC-2010 中取得了 17.0% 的 top-5 错误率,遥遥领先于当时约 26% 的竞争对手。

ImageNet 错误率: 使用 Dropout 的 CNN 优于传统特征方法。

当模型分类错误时,它通常会给出一些合理的替代选项——例如,将猎豹 (cheetah) 错认为豹 (leopard) 。

ImageNet 预测示例;排名前几的猜测是正确或合理的。


语音、文本和生物学

TIMIT 语音识别任务中,Dropout 将一个经过 DBN 预训练的网络的音素错误率从 22.7% 提升至 19.7%

TIMIT 结果表;使用 Dropout 微调达到了最高的准确率。

对于 **路透社 (Reuters) 文档分类任务,Dropout 带来了适度的提升。而在计算生物学领域——预测可变剪接 **(alternative splicing) ——它的表现优于大多数方法,接近贝叶斯神经网络的水平。

可变剪接数据集结果;Dropout 网络优于标准的机器学习方法。


Dropout 为何有效

打破协同适应,学习更好的特征

Dropout 通过让其他神经元成为不可靠的伙伴来防止协同适应。在可视化从 MNIST 学到的自编码器特征时:

未使用 Dropout 学到的特征 (左) 充满噪声;使用 Dropout 后 (右) 它们变成了清晰的边缘和笔画。

没有 Dropout,特征是嘈杂的,需要依赖其他神经元进行重构。而有了 Dropout,特征变得清晰且可解释。


引导稀疏性

Dropout 还会产生更稀疏的隐藏层激活: 每个输入激活的神经元更少,并且每个神经元的平均激活值更低。

激活值直方图;Dropout 导致在零点出现一个尖峰,并且平均激活值更低。


选择 Dropout 率

保留概率 \(p\) 控制着 Dropout 的强度。对于隐藏层,最优的 \(p\) 通常在 0.4–0.8 之间;对于输入层,0.8 左右较为常见。如果在不同架构中保持 \(p \times n\) 恒定,\(p\) 在 0.5–0.6 附近效果很好。

图表显示,当 \\(p\\) 在大约 0.4–0.8 的范围内时,测试错误率最低。


权重缩放 vs. 蒙特卡洛平均

在测试时进行权重缩放真的足够吗?与成本高昂的蒙特卡洛平均 (对许多精简网络进行采样) 进行比较后发现:

蒙特卡洛平均与权重缩放的对比;在超过约 50 个样本后,两者的错误率几乎相同。

权重缩放的性能几乎与对几十个网络进行平均一样好——而成本却低得多。


结论与影响

Dropout 简单、在测试时成本低廉,并且非常有效。通过在训练期间随机丢弃神经元,它防止了脆弱的协同适应,并迫使网络学习更稳健的特征——从而模拟了庞大集成模型的好处。

作者们展示了它在多个领域的影响,巩固了 Dropout 作为一种通用正则化器的地位。与 ReLU 激活函数和改进的优化算法一起,Dropout 已成为现代深度学习的基石之一。

它的缺点是训练时间会增加——由于梯度带有噪声,通常会慢 2–3 倍——但它在泛化能力上的提升几乎总是值得的。

时至今日,对于希望在深度神经网络中对抗过拟合的从业者来说,Dropout 仍然是一种首选技术。