图 1:一些目前提出的 Dropout方法,以及 2012 到 2019 年间 Dropout 方法的理论进展。
标准的 Dropout
2012 年提出的原始 Dropout 方法为避免前馈神经网络中出现的过拟合现象提供了一种简单的技术[1]。在每轮迭代中,网络中的每个神经元以 p 的概率被丢弃。当训练完成后,尽管神经元的输出要乘以该神经元被丢弃的概率 p,整体的网络架构还是会被使用。这样做抵消了没有神经元被丢弃的神经网络尺寸过大的影响,并且可以被解释为在训练时可能出现的网络上取平均。每一层的 dropout 概率可能不尽相同,原始的 Dropout 论文建议输入层的 p=0.2,而隐藏层的 p=0.5。输出层中的神经元不会被丢弃。这种技术通常被简称为 Dropout,但是处于本文论述的需要,我们将其称之为标准 Dropout,从而将其与其它的 Dropout 方法区分开来。该方法如图 2 所示。
图 2:标准 Dropout 的示例。左侧为全连接网络,右侧的网络以 0.5 的概率丢弃神经元。输出层并没有应用 Dropout。
从数学上来说,神经网络层训练过程中使用的标准 Dropout 的行为可以被写作:
其中 f(·)为激活函数,x 是该层的输入,W 是该层的权值矩阵,y为该层的输出,而 m 则为该层的 Dropout 掩膜(mask),mask 中每个元素为 1 的概率为 p。在测试阶段,该层的输出可以被写作:
用于训练的 Drpout 方法
本节介绍了重要的 Dropout 方法。和标准的 Dropout 一样,他们通常被用来在训练时正则化密集的前馈神经网络层。这些方法中的大多数都直接受到了标准 Dropout 的启发,并寻求提高其速度或正则化的有效程度。
基于标准 Dropout 最早提出的变体之一便是由 Wan 等人[3]于 2013 年提出的 dropconnect。该方法是对 Dropout 的一种泛化,其中每个神经元的权重或偏置以一定的概率被设置为 0,而不是将神经元的输出设置为 0。因此,在训练时,某个网络层的输出可以被写作:
其中各变量的定义与公式(1)中相同,但是这里使用了一个 Dropout mask 矩阵,而不是 mask 向量。Dropoutconnect 如图 3 所示。
图 3:Dropconnect 的示例。右侧的网络以 0.5 的概率将权值设置为 0。
Standout[4]是一种试图通过自适应地选择待丢弃的神经元(而不是随机丢弃)来改进标准 Dropout的 Dropout 方法。这个过程是通过在神经网络上叠加一个控制神经网架构的二值信念网络实现的。针对原始神经网络中的每一个权值,Standout 都会在二值信念网络中为其添加一个相应的权值参数。在训练时,某一层的输出可以被写作:
其中各变量的定义与公式(1)相同,但是W 代表作用于该层的信念网络的权值,而 g(·)代表信念网络的激活函数。
Fast Dropout[5]通过从贝叶斯的角度解释 Dropout 方法,提供了一种更快速地进行类似于 Dropout 的正则化的方式。Fast Dropout 的作者表明,带有 Dropout 的网络层的输出可以被看做是从一个潜在的分布(可以近似为高斯分布)中进行采样。然后可以直接从这个分布中采样,或者使用它的参数来传播关于整个 Dropout 集合的信息。该技术可以比标准 Dropout 更快地进行训练(在标准 Dropout 中,一次只采样可能的网络集合中的一个元素)。
受贝叶斯式dropout理解方法启发的另一种方法是 Kingma 等人[6]提出的变分Dropout(不要与 Gal 和 Ghahramani 的工作[13]弄混)。作者指出,使用高斯乘性噪声的 Dropout 变体(由 Srivastava 等人提出的[8])可以被解释为给定一个网络权值上的特定先验和特定变分目标的变分方法。然后,它们会推导出一个自适应的 Dropout 方案,该方案可以自动确定一个完整的网络或单个层或神经元的有效的Dropout 概率。相对于现有的使用确定的 Dropout 率的方法(如使用固定的概率或网格搜索)来说,这可能是一种改进。Concrete Dropout[20]是另外一种自动调整 Dropout 概率的方法。
卷积层
用于卷积神经网络(CNN)的朴素Dropout 的定义为:在特征图或输入图像中随机地丢弃像素。这并没有显著地减少过拟合,主要是因为被丢弃的像素与其邻接像素是高度相关的[21]。然而,最近研究人员取得了许多有发展前景的、使用 Dropout 作为正则化方法训练 CNN 的研究进展。
最大池化 Dropout[12]是一种保留了最大池化层的行为的方法,它同时也以一定概率让其它的特征值可以影响池化层的输出。在执行最大池化操作前,算子对特征值的某个子集进行 mask 运算。
图 4:卷积神经网络中的最大池化Dropout[12]。
在论文「Analysis on the dropout effect inconvolutional neural networks」[23]中,作者提出了一种基于训练的迭代过程改变 Dropout 概率的 Dropout 方法。丢弃神经元的概率是从均匀分布或正态分布采样得到的。该方法等价于向每一层的输出特征图添加噪声。该方法提高了网络对带有噪声的图像变化的鲁棒性[23]。作者也提出了「max-drop」,在这种方法中高激活值被有选择性地丢弃。这些高激活值是在特征图或通道上选择出来的[23]。论文[23]中的实验结果表明,文中所提出的方法的性能与「spatial dropout」相当。
Cutout 是另一种基于Dropout 的用于训练 CNN 的正则化和数据增强方法[24],它在每一张输入图像的某个区域上应用一个随机的正方形掩膜。与其它常见的在特征图级别上应用 Dropout 的方法不同,该方法直接将 Dropout 应用在输入图像上。Cutout 背后主要的动机是删除 CNN 的后续层中带有高激活值的视觉特征[24]。然而,令人惊讶的是,这种在输入图像上应用掩膜的方法在执行成本更低的情况下可以取得相同的性能。
循环层
通常而言,上述前馈 Dropout 方法可以被应用到带有循环层的网络的前馈连接中。因此,一些研究着眼于将 Dropout 方法应用于循环连接。因为在每一个时间步上由 Dropout 引起的噪声让网络难以保留长期的记忆,将标准 Dropout 应用于循环连接的效果很差[28]。然而,专门为循环层设计的 Dropout 方法也取得了成功,并且在实践中被广泛应用。一般来说,它们通过一种仍然能够保存长期记忆的方式将 Dropout 应用于循环连接上。
2015 年提出的RNNDrop[30]提供了一种简单的解决方案,能够在应用 Dropout 时更好地保留记忆。
图 5:在一个展开的循环神经网络(RNN)上,对于每一个时间步(左图)和每一个序列(右图)进行 Dropout 掩膜采样的对比。水平连接是循环的,而垂直连接是前馈的。不同的颜色代表应用于相应连接的不同 Dropout 掩膜。
2016 年,Gal 和 Ghahramani 提出了一种RNN Dropout 变体,该变体基于一种对 Dropout 方法的贝叶斯化的解释。作者指出,如果 Dropout 被看做一个贝叶斯后验的变分蒙特卡罗逼近,那么将其应用于循环层的自然方法就是生成一个同时将每个训练序列的前馈连接和循环连接置零的 Dropout 掩膜,但是为序列中的每个时间步保持相同的掩膜。这与 RNNDrop 类似的地方在于,掩膜是基于每个序列生成的,但是求导过程导致在 LSTM 单元的不同位置应用 Dropout。
循环 Dropout[14]是另一种可以在一个 LSTM 中保存记忆,同时也能像在标准 Dropout 中一样为每个输入样本生成不一样的 Dropout 掩膜的方法。这只需将 Dropout 应用于 RNN 中更新隐藏状态的部分,而不是状态本身。因此,如果一个元素被删除,那么它就不会对网络的记忆产生影响,而不是消除隐藏状态。
用于模型压缩的 Dropout 方法
标准 Dropout 加大了神经网络权值[8]的稀疏性。这一特性意味着 Dropout 方法可以通过减少有效执行所需的参数数量来压缩神经网络模型。自 2017 年以来,研究人员提出了几种基于 Dropout 压缩实际模型的方法。
2017 年,Molchanov 等人[9]提出使用变分 Dropout[6](本文第三节介绍过)同时对全连接层和卷积层进行稀疏化。结果表明,该方法在对性能影响最小的同时,大大减少了标准卷积网络的参数。然后可以将这种稀疏表征传递到现有方法中,从而将稀疏网络转换为压缩模型(如[31]中的工作)。Neklyudov 等人[10]也提出了类似的方法,他们使用了改进的变分 Dropout 方案,提高了稀疏性,但最终得到的网络结构特别易于压缩。
最近,进一步开发用于模型压缩的 Dropout 方法是一个十分活跃的研究领域。最近提出的方法包括 Targeted Dropout[32],其中神经元被自适应地选择,并以使网络适应神经剪枝的方式被丢弃,在不过多损失准确率的情况下大幅度缩小网络规模。另一种最近提出的方法是 Ising-dropout[11],它在一个神经网络的顶部覆盖了一个图形化的「Ising」模型,以识别不太有用的神经元,并在训练和推理中把它们丢弃掉。
蒙特卡罗 Dropout
2016 年,Gal 和 Ghahramani[7]提出了一种从贝叶斯理论出发的Dropout理解方式,并且被广泛接受。他们将Dropout 解释为深度高斯过程的贝叶斯近似。
除了常见的点估计输出,该方法还提供了一种估计神经网络输出置信度的简单方法。蒙特卡罗Dropout 在模型的不确定性估计中得到了广泛的应用。