Dropout (Dropout)(Srivastava et al., 2014) 提供了正则化一大类模型的方法, 计算方便但功能强大。第一种近似下,Dropout可以被认为是集成非常多的大神经 网络的实用Bagging方法。Bagging涉及训练多个模型,并在每个测试样本上评估多 个模型。当每个模型是一个大型神经网络时,这似乎是不切实际的,因为训练和 评估这样的网络需要花费很多运行时间和内存。通常只能集成五至十个神经网络, 如Szegedy et al. (2014a) 用六个赢得 ILSVRC,超过这个数量就会迅速变得难以处 理。Dropout提供了一种廉价的Bagging集成近似,能够训练和评估指数级的神经网 络。
具体而言,Dropout训练的集成包括所有从基本的基础网络除去非输出单元形成 子网络,如在图7.6所示。
图 7.6: Dropout训练由所有子网络组成的集成,其中子网络通过从基本网络中删除非输出单元构 建。我们从具有两个可见单元和两个隐藏单元的基本网络开始。这四个单元有十六个可能的子集。 右图展示了从原始网络中丢弃不同的单元子集而形成的所有十六个子网络。在这个小例子中,所 得到的大部分网络没有输入单元或没有从输入连接到输出的路径。当层较宽时,丢弃所有从输入 到输出的可能路径的概率变小,所以这个问题对于层较宽的网络不是很重要。
最先进的神经网络基于一系列仿射变换和非线性变换,我 们可以将一些单元的输出乘零就能有效地删除一个单元。这个过程需要对模型一些 修改,如径向基函数网络,单元的状态和参考值之间存在一定区别。为了简单起见, 我们在这里提出乘零的简单Dropout算法,但是它被简单地修改后,可以与从网络中 移除单元的其他操作一起工作。
回想一下使用Bagging学习,我们定义 k 个不同的模型,从训练集有替换采样 构造 k 个不同的数据集,然后在训练集 i 上训练模型 i。Dropout的目标是在指数 级数量的神经网络上近似这个过程。具体来说,训练中使用Dropout,我们使用基 于minibatch的学习算法和小的步长,如梯度下降等。我们每次在minibatch加载一个 样本,然后随机抽样应用于网络中所有输入和隐藏单元的不同二值掩码。对于每个 单元,掩码是独立采样的。掩码值为 1 的采样概率(导致包含一个单元)是训练开 始前固定一个超参数。它不是模型当前参数值或输入样本的函数。通常一个输入单 元包括的概率为 0.8,一个隐藏单元包括的概率为 0.5。然后,我们运行之前一样的 前向传播、反向传播以及学习更新。图7.7说明了在Dropout下的前向传播。
图 7.7: 在使用Dropout的前馈网络中前向传播的示例。(顶部) 在此示例中,我们使用具有两个输入 单元,具有两个隐藏单元的隐藏层以及一个输出单元的前馈网络。(底部) 为了执行具有Dropout的 前向传播,我们随机地对向量 μ 进行采样,其中网络中的每个输入或隐藏单元对应一项。μ 中的 每项都是二值的且独立于其他项采样。每项为 1 的概率是超参数,对于隐藏层通常为 0.5,对于输 入通常为 0.8。网络中的每个单元乘以相应的掩码,然后正常地继续通过网络的其余部分前向传 播。这相当于从图7.6中随机选择一个子网络并通过它前向传播。
更正式地说,假设一个掩码向量 μ 指定被包括的单元,J(θ,μ) 是由参数 θ 和掩 码 μ 定义的模型代价。那么Dropout训练在于最小化 EμJ(θ, μ)。期望包含指数多的 项,但我们可以通过抽样 μ 获得梯度的无偏估计。
Dropout训练与Bagging训练不太一样。在Bagging的情况下,所有模型是独立 的。在Dropout的情况下,模型是共享参数的,其中每个模型继承的父神经网络参 数的不同子集。参数共享使得在有限可用的内存下代表指数数量的模型变得可能。 在Bagging的情况下,每一个模型在其相应训练集上训练到收敛。在Dropout的情况下,通常大部分模型都没有显式地被训练,通常该模型很大,以致到宇宙毁灭都不 能采样所有可能的子网络。取而代之的是,可能的子网络的一小部分训练单个步骤,参数共享导致剩余的子网络能有好的参数设定。这些是仅有的区别。除了这些,Dropout与Bagging算法一样。例如,每个子网络中遇到的训练集确实是替换采样的 原始训练集的一个子集。
Bagging集成必须从所有成员的累积投票做一个预测。在这种背景下,我们将这 个过程称为推断 (inference)。目前为止,Bagging和Dropout的描述中没有要求模型 具有明确的概率。现在,我们假定该模型的作用是输出一个概率分布。在Bagging的 情况下,每个模型 i 产生一个概率分布 p(i)(y | x)。集成的预测由这些分布的算术平 均值给出,
在Dropout的情况下,通过掩码 μ 定义每个子模型的概率分布 p(y | x, μ)。关于 所有掩码的算术平均值由下式给出
其中 p(μ) 是训练时采 μ 的概率分布。
因为这个求和包含指数多的项,除非在该模型的结构允许某种形式的简化,否 则是不可能计算的。目前为止,无法得知深度神经网络是否允许任何可行的简化。相 反,我们可以通过采样近似推断,即平均许多掩码的输出。即使是 10 − 20 个掩码就 足以获得不错的表现。
然而,有一个更好的方法能得到一个不错的近似整个集成的预测,且只需一个 前向传播的代价。要做到这一点,我们改用集成成员预测分布的几何平均而不是算 术平均。Warde-Farley et al. (2014) 提出的论点和经验证据表明,在这个情况下几何 平均与算术平均表现得差不多。
多个概率分布的几何平均不能保证是一个概率分布。为了保证结果是一个概率 分布,我们要求没有子模型给某一事件分配概率 0,并重新标准化所得分布。通过几 何平均直接定义的非标准化概率分布由下式给出
其中 d 是可被丢弃的单元数。这里为简化介绍,我们使用均匀分布的 μ,但非均匀分布也是可能的。为了作出预测,我们必须重新标准化集成:
涉及Dropout的一个重要观点 (Hinton et al., 2012b) 是,我们可以通过评估模型 中 p(y | x) 近似 pensemble:该模型具有所有单元,但单元 i 输出的权重乘以包括单元i 的概率。这个修改的动机是捕获从该单元输出的正确期望值。我们把这种方法称 为权重比例推断规则 (weight scaling inference rule)。目前还没有在深度非线性网络 上对这种近似推断规则的准确性作任何理论上的说法,但经验上表现得很好。
因为我们通常使用 1 的包含概率,权重比例规则一般相当于在训练结束后将权2
重除 2,然后像平常一样使用模型。实现相同结果的另一种方法是在训练期间将单元 的状态乘 2。无论哪种方式,我们的目标是确保在测试时一个单元的期望总输入是与 在训练时该单元的期望总输入是大致相同(即使近半单位在训练时丢失)。
对许多不具有非线性隐藏单元的模型族,权重比例推断规则是精确的。举个简 单的例子,考虑softmax 函数回归分类,其中由向量 v 表示 n 个输入变量:
我们可以根据二值向量 d 逐元素的乘法将一类子模型进行索引:
集成预测器被定义为重新标准化所有集成成员预测的几何平均:
其中
权重比例推断规则在其他设定下也是精确的,包括条件正态输出的回归网络以 及那些隐藏层不包含非线性的深度网络。然而,权重比例推断规则对具有非线性的 深度模型仅仅是一个近似。虽然这个近似尚未有理论上的分析,但在实践中往往效 果很好。Goodfellow et al. (2013b) 实验发现,集成预测权重比例推断规则可以比蒙 特卡罗近似工作得更好(在分类精度方面)。即使允许蒙特卡罗近似采样多达 1000子网络时也比不过。Gal and Ghahramani (2015) 发现一些模型可以通过二十个样本 和蒙特卡罗近似获得更好的分类精度。似乎推断近似的最佳选择是与问题相关的。
Srivastava et al. (2014) 显示,Dropout比其他标准的计算开销小的正则化项, 如权重衰减、过滤器范数约束和稀疏激活的正则化更有效。Dropout也可以与其他形 式的正则化合并,得到进一步的提升。
计算方便是Dropout的一个优点。训练过程中使用Dropout产生 n 个随机二进制 数与状态相乘,每个样本每次更新只需 O(n) 的计算复杂度。根据实现,也可能需要O(n) 的存储空间来持续保存这些二进制数(直到反向传播阶段)。使用训练好的模 型推断时,计算每个样本的代价是与不使用Dropout一样的,尽管我们必须在开始运 行推断前将权重除以 2。
Dropout的另一个显著优点是不怎么限制适用的模型或训练过程。几乎在所有 使用分布式表示且可以用随机梯度下降训练的模型上都表现很好。包括前馈神经网 络、概率模型,如受限玻尔兹曼机(Srivastava et al., 2014),以及循环神经网络(Bayer and Osendorfer, 2014; Pascanu et al., 2014a)。许多其他差不多强大正则化策略对模 型结构的限制更严格。
虽然Dropout在特定模型上每一步的代价是微不足道的,但在一个完整的系统 使用Dropout的代价可能非常显著。因为Dropout是一个正则化技术,它减少了模 型的有效容量。为了抵消这种影响,我们必须增大模型规模。不出意外的话,使 用Dropout时最佳验证集的误差会低很多,但这是以更大的模型和更多训练算法的迭 代次数为代价换来的。对于非常大的数据集,正则化带来的泛化误差减少得很小。在 这些情况下,使用Dropout和更大模型的计算代价可能超过正则化带来的好处。
只有极少的训练样本可用时,Dropout不会很有效。在只有不到 5000 的样本 的Alternative Splicing数据集上 (Xiong et al., 2011),贝叶斯神经网络 (Neal, 1996)比Dropout表现更好 (Srivastava et al., 2014)。当有其他未分类的数据可用时,无监 督特征学习比Dropout更有优势。
Wager et al. (2013) 表明,当Dropout作用于线性回归时,相当于每个输入特征 具有不同权重衰减系数的 L2权重衰减。每个特征的权重衰减系数的大小是由其方差 来确定。其他线性模型有类似的结果。而对于深度模型,Dropout与权重衰减是不等 同的。
使用Dropout训练时的随机性不是这个方法成功的必要条件。它仅仅是近似所有 子模型总和的一个方法。Wang and Manning (2013) 导出近似这种边缘分布的解析 解。他们的近似被称为快速 Dropout (fast dropout),由于梯度计算中的随机性减 小导致更快的收敛时间。这种方法也可以在测试时应用,比权重比例推断规则更合 理地(但计算也更昂贵)近似所有子网络的平均。快速 Dropout在小神经网络上的 性能几乎与标准的Dropout相当,但在大问题上尚未产生显著地改善或尚未应用。
正如随机性对实现Dropout的正则化效果不是必要的,这也不是充分的。为了证 明这一点,Warde-Farley et al. (2014) 使用一种称为Dropout Boosting (Dropout Boosting) 的方法设计了一个对照实验,与传统Dropout方法完全相同的噪声掩码,但缺乏正则化效果。Dropout Boosting训练整个集成以最大化训练集上的似然。在相 同意义上,传统的Dropout类似于Bagging,这种方式类似于Boosting。如预期一样, 比较单一模型训练整个网络的情况,Dropout Boosting几乎没有正则化效果。这表 明,Dropout Bagging的解释超过Dropout作为稳健性噪音的解释。当随机抽样的集 成成员相互独立地训练好后,Bagging集成的正则化效果才能达到。
Dropout启发其他以随机方法训练指数量级的共享权重的集成。DropConnect是Dropout的一个特殊情况,其中一个标量权重和单个隐藏单元状态之间的每个乘积 被认为是可以丢弃的一个单元 (Wan et al., 2013)。随机池化是构造卷积神经网络集 成的一种随机池化的形式 (见第9.3节),其中每个卷积网络参与每个特征图的不同空 间位置。目前为止,Dropout仍然是最广泛使用的隐式集成方法。
关于Dropout的一个重要见解是,通过随机行为训练网络并平均多个随机决定进 行预测,通过参数共享实现了Bagging的一种形式。早些时候,我们将Dropout描述 为通过包括或排除单元形成模型集成的Bagging。然而,这种参数共享策略不一定要 基于包括和排除。原则上,任何一种随机的修改都是可接受的。在实践中,我们必 须选择能让神经网络能够学习对抗的修改类型。理想情况下,我们也应该使用可以 快速近似推断的模型族。我们可以认为由向量 μ 参数化的任何形式的修改,是对于μ 所有可能的值训练 p(y | x, μ) 的集成。这里不要求 μ 具有有限数量的值。例如,μ 可以是实值。Srivastava et al. (2014) 表明,权重乘以 μ ∼ N (1, I) 比基于二值掩 码Dropout表现更好。由于 E[μ] = 1,标准网络自动实现集成的近似推断,而不需 要权重比例推断规则。
目前为止,我们介绍了Dropout纯粹作为一种高效近似Bagging的方法。然而,有 比这更进一步的Dropout观点。Dropout不仅仅是训练一个Bagging的集成模型,并且 是共享隐藏单元的集成模型。这意味着无论其他隐藏单元是否在模型中,每个隐藏单 元必须都能够表现良好。隐藏单元必须准备好进行模型之间的交换和互换。Hintonet al. (2012c) 由生物学的想法受到启发:有性繁殖涉及到两个不同生物体之间交换 基因,进化产生的压力使得基因不仅是良好的而且要准备好不同有机体之间的交换。 这样的基因和这些特点对环境的变化是非常稳健的,因为它们一定会正确适应任何 一个有机体或模型不寻常的特性。因此Dropout正则化每个隐藏单元不仅是一个很 好的特征,更要在许多情况下良好的特征。Warde-Farley et al. (2014) 将Dropout与 大集成的训练相比并得出结论:相比独立模型的集成获得的泛化误差,Dropout会提 供的额外改进。
Dropout强大的大部分是由于施加到隐藏单元的掩码噪声,了解这一事实是重要的。这可以看作是对输入内容的信息高度智能化、自适应破坏的一种形式,而不是 对输入原始值的破坏。例如,如果模型学得通过鼻检测脸的隐藏单元 hi,那么丢失hi 对应于擦除图像中有鼻子的信息。模型必须学习另一种 hi,要么是鼻子存在的冗 余编码,要么是脸部的另一特征,如嘴。传统的噪声注入技术,在输入端加非结构 化的噪声不能够随机地从脸部图像中抹去关于鼻子的信息,除非噪声的幅度大到几 乎能抹去图像中所有的信息。破坏提取的特征而不是原始值,让破坏过程充分利用 该模型迄今获得的关于输入分布的所有知识。
Dropout的另一个重要方面是噪声是乘性的。如果是固定规模的加性噪声,那么 加了噪声 ε 的整流线性隐藏单元可以简单地学会使 hi 变得很大(使增加的噪声 ε 变 得不显著)。乘性噪声不允许这样病态地解决噪声鲁棒性问题。
另一种深度学习算法——batch normalization,在训练时向隐藏单元引入加性和 乘性噪声重参数化模型。batch normalization的主要目的是改善优化,但噪音具有正 则化的效果,有时使Dropout变得没有必要。batch normalization将会在第8.7.1节更 详细地讨论。