Dropout和BN为什么不能共同使用?

一、问题:

Dropout和BN都有防止过拟合的作用,单独使用,都带来一定的性能改进,但最近的工作都不一起使用,这是为何?

二、原因:

1.当网络的状态从训练转移到测试时,Dropout转移了特定神经单元的方差。但是,在测试阶段,BN保持了它的统计方差,这是在整个学习过程中积累的。Dropout和BN中方差的不一致性(命名为“方差偏移”)导致推断中不稳定的数值行为,最终导致错误的预测。

2.对于下图,展示了BN和Dropout的训练和测试区别,Dropout在训练直接以p的概率进行失活,而在测试,对每个神经元进行尺度放缩(乘p)。另一种等价的表现形式,在训练阶段乘1/p,而测试阶段不需要做任何改动,所以,训练:X=a*(1/p)*X,测试:X=X,存在方差偏移。

Dropout和BN为什么不能共同使用?_第1张图片 

3.作者的发现:

(1)在任何情况下,更高的dropout概率会打破神经反应的稳定性,因此我们dropout概率< 0.5。综上所述,转移风险同时取决于Dropout比率和特征维数。特征维度就是隐藏层神经元个数,Dropout以一定概率对隐藏元个数进行失活,这个会受到影响。而BN也在每一层隐藏层个数进行BN计算(或者说沿着C维度进行BN计算)。 详细的数学证明看原文。

(2)通过训练数据调整移动均值和方差有利于改进,但与没有Dropout训练的baseline相比,它不能弥补性能上的全部损失。此外,在测试期间应用Dropout来避免“方差漂移”的网络预测的集合仍然低于这些baseline。

(3)我们理解为什么最近的一些模型(如Inception-v4 [30], SENet[14])在整个网络的最后一个BN层之后采用了一个Dropout层,因为根据我们的理论,它不会导致方差的本质偏移。

(4)我们还发现,Dropout的形式可以修改,以减少它们的方差偏移,从而提高它们的性能,即使它们处于瓶颈构建块中。

4.对我们实验的启发:

(1)丢失率别太大,通道维度多一点,网络宽一点

(2)Dropout放到BN后面,对偏移有缓解。

(3)改进Dropout的形式,减少方差偏移(听着就麻烦)。

参考文章:Understanding the Disharmony between Dropout and Batch Normalization by Variance Shift

你可能感兴趣的:(神经网络,python,算法,机器学习)