Dropout 是一种用于神经网络的技术,可以防止过拟合,过拟合是指模型在训练数据上表现良好,但在未见过的数据上表现不佳。在训练期间,dropout 会在每次前向和后向传递中随机“丢弃”(即暂时停用)一层中的一部分神经元。这种随机性迫使网络避免过度依赖特定的神经元,从而鼓励其学习更强大和泛化的特征。例如,如果应用 0.5 的 dropout 率,则每个神经元在每次训练迭代中有 50% 的机会被关闭。重要的是,dropout 仅在训练期间处于活动状态;在推理(测试)期间,所有神经元都保持活动状态,但它们的输出会按 dropout 概率进行缩放,以保持一致的预期值。
Dropout 的实际实现可以在 TensorFlow 或 PyTorch 等框架中看到。例如,在 Keras 中,在密集层之后添加 Dropout(0.3)
层会对该层的输出应用 30% 的 dropout 率。这种方法在全连接层中特别有用,在全连接层中,由于参数数量众多,过拟合很常见。在卷积神经网络 (CNN) 中,dropout 有时应用于池化层之后,以防止模型记住训练数据中的空间模式。开发人员还可以将 dropout 与其他正则化方法(例如 L2 权重衰减)结合使用,以进一步提高泛化能力。Dropout 的一个主要优点是其简单性——与数据增强等技术相比,它只需要最少的代码更改和计算开销。
使用 dropout 时,开发人员应考虑权衡。较高的 dropout 率(例如 0.5)会积极减少过拟合,但如果网络缺乏容量,可能会减慢训练速度或导致欠拟合。较低的速率(例如 0.2)提供较温和的正则化。Dropout 在具有许多参数的大型网络中最有效,在这些网络中,过拟合的可能性很大。但是,在较小的网络或数据有限的任务中,尽早停止或更简单的架构等替代方法可能更可取。此外,dropout 与批归一化相互作用——在批归一化之前应用 dropout 可能会扰乱归一化统计信息,从而导致训练不稳定。测试不同的配置并监控验证性能至关重要。例如,在文本分类模型中,调整 0.2 到 0.5 之间的 dropout 率,同时调整图层大小,可以显着提高测试准确性,而不会牺牲训练速度。