辍学:缩放激活与反转辍学

机器算法验证 神经网络 深度学习 辍学
2022-01-26 11:42:41

在人工神经网络中应用 dropout 时,需要补偿在训练时一部分神经元被停用这一事实。为此,有两种常见的策略:

  • 在测试时缩放激活
  • 在训练阶段反转 dropout

下面的幻灯片总结了这两种策略,取自Standford CS231n:Convolutional Neural Networks for Visual Recognition

哪种策略更可取,为什么?


在测试时缩放激活:

在此处输入图像描述

在训练阶段反转 dropout:

在此处输入图像描述

3个回答

Andrew 在他的深度学习课程中对这节Dropout Regularization做了很好的解释:

  • 倒置 dropout 更常见,因为它使测试更容易
  • 反转的目的是确保 Z 值不会受到 W 减小的影响。

a3 = a3 / keep_prob在实施的最后一步说:

Z [4] = W [4] * a [3] + b [4] a [3]的元素大小已从 D3减少(元素的百分比已被 D3 丢弃),因此值为Z [4]的值也将减少,因此为了大致补偿这一点,我们将通过除法来反转变化,以确保 Z [4]的值不会受到影响。keep_probkeep_prob

在此处输入图像描述

“在训练阶段反转辍学”应该是可取的。

从理论上讲,如果我们将 Bernoulli dropout 视为向网络添加噪声的一种方法,则噪声最好为零均值。如果我们在训练时进行缩放以抵消停用单元的部分,则噪声的平均值将为零。

后来出现了其他类型的 dropout/noise 方法(例如高斯乘法 dropout、高斯加性噪声),它们也具有零均值。

在实践中训练和测试神经网络时,也有理由更喜欢这种实现方式。假设我想比较两个具有相同架构的模型的性能,一个是通过 dropout 训练的,一个不是。

如果我“在测试时扩展激活”,那么我在测试时需要两个不同的网络。如果我使用“反转版本”,那么我可以将相同的测试网络(代码)应用于两组训练参数。

进行反向 dropout 的另一个优点(除了不必在测试时更改代码)是,在训练期间,人们可以花哨并动态改变 dropout 率。这被称为“退火”辍学。从本质上讲,逻辑是,在训练开始时添加 dropout “噪声”有助于防止优化陷入局部最小值,同时让它最终衰减到零,从而获得具有更好性能的微调网络。

深度网络的退火辍学训练

用于训练神经网络的修正 Dropout