为什么添加 dropout 层会提高深度/机器学习性能,因为 dropout 会抑制模型中的一些神经元?

数据挖掘 机器学习 深度学习 喀拉斯 正则化 辍学
2021-09-20 01:26:05

如果删除一些神经元会产生更好的模型,为什么不首先使用层数更少、神经元更少的更简单的神经网络呢?为什么要在一开始构建一个更大、更复杂的模型,然后再压制它的一部分?

4个回答

dropout 的作用是增加模型的鲁棒性,同时消除神经元之间的任何简单依赖关系。

神经元仅在通过网络向前和向后单次传递时被移除——这意味着它们的权重在该传递中被综合设置为零,因此它们的错误也是如此,这意味着权重不会更新。Dropout 也可以作为正则化的一种形式,因为它在某种程度上惩罚了模型的复杂性。

我建议阅读Michael Nielsen 的深度学习书(免费提供)中的 Dropout 部分,它提供了很好的直觉,并且还有非常有用的交互式图表/解释。他解释说:

Dropout 是一种完全不同的正则化技术。与 L1 和 L2 正则化不同,dropout 不依赖于修改成本函数。相反,在 dropout 中,我们修改了网络本身。

这是一篇很好的总结文章从那篇文章:

一些观察:

  • Dropout 迫使神经网络学习更强大的特征,这些特征与其他神经元的许多不同随机子集结合使用。
  • Dropout 大约使收敛所需的迭代次数增加一倍。但是,每个 epoch 的训练时间更少。
  • 使用 H 个隐藏单元,每个都可以删除,我们有 2^H 个可能的模型。在测试阶段,考虑整个网络,每次激活都会减少一个因子 p。

例子

想象一下,我请你给我泡杯茶——你可能总是用右手倒水,用左眼测量水位,然后再用右手用勺子搅拌茶。这意味着你的左手和右眼几乎没有用处。使用 dropout 会例如将您的右手绑在背后 - 迫使您使用左手。现在,在给我泡了 20 杯茶之后,一只眼睛或一只手都没有活动,你在使用所有可用的东西方面得到了更好的训练。也许你以后会被迫在一个小厨房里泡茶,那里只能用你的左臂使用水壶……而在使用 dropout 之后,你就有了这样做的经验!您对看不见的数据变得更加健壮。

另一种看待 dropout 作用的方法是,它就像贝叶斯模型中协变量(即原始协变量的一些复杂交互项与一些复杂的函数变换)的系数的先验。这是 Yarin Gal 在他的论文中提出的解释(参见他的出版物列表)。

这是一个简短的挥手论证,说明为什么会这样:

  • 在那些消除神经元的批次中,特征/协变量的系数(由进入神经元的神经网络中的连接构成)为零(峰值为零)。
  • 在那些存在神经元的批次中,系数不受限制(不适当的平坦先验 = 平板)。
  • 对所有批次进行平均,您会先得到一个尖峰和平板。

为什么我们需要先验板和尖峰?它引入了一个贝叶斯模型,在没有该神经元的中性网络和有它的中性网络之间进行平均。换句话说,它让我们表达了关于中性网络是否真的需要具有其全部可能的复杂性的不确定性,并在预测。这解决了中性网络能够过度拟合数据的主要问题(当然,这不是实现这一目标的唯一可能方法)。

Dropout 实际上并没有删除神经元,只是那些特定的神经元对于给定的一批数据没有任何作用(不要被激活)。

示例 -假设有 8 条车道的道路 - 当卡车来时,它们通过车道 1、2、4、6、7,当汽车来时,它们通过车道 2、3、4、7、8,当自行车来时,他们通过车道 1,2,5,8。因此,无论任何车辆,所有车道都在那里,但只有其中一些被使用。

同样,所有神经元都用于整个模型,但对于特定批次的数据,只有一部分神经元被激活。并且模型后来没有被削减,模型复杂度保持不变。

为什么要使用dropout?

正如 Ian Goodfellow 在深度学习一书中所说,

dropout 比其他标准计算成本低的正则化器更有效,例如权重衰减、过滤器范数约束和稀疏活动正则化。

他还说——

dropout 的一个优点是它的计算成本非常低。

dropout 的另一个显着优势是它不会显着限制可以使用的模型或训练过程的类型。它几乎适用于任何使用分布式表示的模型,并且可以通过随机梯度下降进行训练。这包括前馈神经网络、概率模型,例如受限玻尔兹曼机 (Srivastava et al., 2014) 和递归神经网络 (Bayer and Osendorfer, 2014; Pascanu et al., 2014a)。

这本书说——

核心思想是在层的输出值中引入噪声可以打破不重要的偶然模式,如果不存在噪声,网络将开始记忆。

dropout 层不加选择地剔除指定部分的神经元,降低了相关模型的表示能力。这可以防止网络拟合复杂的非线性决策边界(即数据集中的“噪声”),从而防止(或改善)过拟合。