Dropout 层是神经网络中用于减少过拟合的一种技术。当模型记住训练数据而不是学习一般模式时,就会发生过拟合。 在训练期间,dropout 层随机“丢弃”(即,停用)应用于该层的神经元的一部分,暂时将它们从网络中移除,用于单个前向和后向传递。 例如,如果 dropout 率设置为 0.3,则在每个训练步骤中,该层中 30% 的神经元将被随机忽略。 这迫使网络避免过度依赖特定神经元,从而提高冗余并使模型更具鲁棒性。
在实践中,dropout 通过在训练期间将一层的输出乘以一个二元掩码(由 0 和 1 组成的张量)来实现。 每次随机生成掩码,神经元被丢弃的概率由 dropout 率决定。 在推理(测试)期间,通常会关闭 dropout,并且该层的输出按 dropout 率缩放,以解释所有神经元现在都处于活动状态这一事实。 例如,如果在训练期间 dropout 率为 0.5,则在测试期间输出将乘以 0.5,以保持期望的幅度。 TensorFlow 和 PyTorch 等框架会自动处理这种缩放,因此开发人员只需在添加层时指定 dropout 率即可。
Dropout 在具有许多参数的大型神经网络中最有效,在这些网络中,过拟合是一个常见问题。 例如,在具有全连接层的深度前馈网络中,在每层之后添加 dropout 可以提高泛化能力。 但是,它在卷积层中较少使用,因为特征之间的空间关系至关重要。 关键的超参数是 dropout 率:过低(例如,0.1)可能效果很小,而过高(例如,0.8)可能会减慢学习速度。 通常需要进行实验才能找到合适的平衡。 Dropout 还补充了其他正则化技术,例如权重衰减(L2 正则化)或数据增强,但当标记的训练数据有限时,它特别有用,因为它人为地将可变性引入训练过程。