在人工神经网络中应用 dropout 时,需要补偿在训练时一部分神经元被停用这一事实。为此,有两种常见的策略:
- 在测试时缩放激活
- 在训练阶段反转 dropout
下面的幻灯片总结了这两种策略,取自Standford CS231n:Convolutional Neural Networks for Visual Recognition。
哪种策略更可取,为什么?
在测试时缩放激活:
在训练阶段反转 dropout:
在人工神经网络中应用 dropout 时,需要补偿在训练时一部分神经元被停用这一事实。为此,有两种常见的策略:
下面的幻灯片总结了这两种策略,取自Standford CS231n:Convolutional Neural Networks for Visual Recognition。
哪种策略更可取,为什么?
在测试时缩放激活:
在训练阶段反转 dropout:
Andrew 在他的深度学习课程中对这节Dropout Regularization做了很好的解释:
a3 = a3 / keep_prob
在实施的最后一步说:
Z [4] = W [4] * a [3] + b [4], a [3]的元素大小已从 D3减少(元素的百分比已被 D3 丢弃),因此值为Z [4]的值也将减少,因此为了大致补偿这一点,我们将通过除法来反转变化,以确保 Z [4]的值不会受到影响。keep_prob
keep_prob
“在训练阶段反转辍学”应该是可取的。
从理论上讲,如果我们将 Bernoulli dropout 视为向网络添加噪声的一种方法,则噪声最好为零均值。如果我们在训练时进行缩放以抵消停用单元的部分,则噪声的平均值将为零。
后来出现了其他类型的 dropout/noise 方法(例如高斯乘法 dropout、高斯加性噪声),它们也具有零均值。
在实践中训练和测试神经网络时,也有理由更喜欢这种实现方式。假设我想比较两个具有相同架构的模型的性能,一个是通过 dropout 训练的,一个不是。
如果我“在测试时扩展激活”,那么我在测试时需要两个不同的网络。如果我使用“反转版本”,那么我可以将相同的测试网络(代码)应用于两组训练参数。
进行反向 dropout 的另一个优点(除了不必在测试时更改代码)是,在训练期间,人们可以花哨并动态改变 dropout 率。这被称为“退火”辍学。从本质上讲,逻辑是,在训练开始时添加 dropout “噪声”有助于防止优化陷入局部最小值,同时让它最终衰减到零,从而获得具有更好性能的微调网络。