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


    一、问题:

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

    二、原因:

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

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

     

    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

  • 相关阅读:
    时间轮TimeWheel工作原理解析
    AI对开发者职业的影响,保持领先的7 个行动指南
    C# OpenCvSharp 环形文字处理 直角坐标与极坐标转换
    C++应程序实现修改设备IP地址、MAC、设备ID功能
    Nginx安装与配置
    pagehelper踩坑记之分页乱套
    c++中的类模板
    07 单件(Singleton)模式
    day03-CSS
    Vue2和Vue3生命周期映射关系及异同
  • 原文地址:https://blog.csdn.net/qq_37424778/article/details/126645585