标准回答
Dropout(Srivastava et al.)是缓解 过拟合 的正则化技术。
机制:
- 训练时:以概率 p(如 0.5)随机丢弃神经元输出(置 0)
- 推理时:model.eval() 关闭 Dropout,或输出乘以 (1-p) 保持期望一致(PyTorch nn.Dropout 自动处理)
为何有效:
- 破坏共适应:神经元不能依赖固定搭档,须学鲁棒特征
- 隐式集成:每步相当于训练不同子网络,推理近似平均
- 降低有效容量:防止记忆训练集噪声
实践:
- 全连接层 p=0.5 常见;CNN 卷积层 p 较小(0.2~0.3)或用在 FC 头
- 与 Batch Normalization、数据增强、权重衰减叠加使用
- 过大 p 导致欠拟合
PyTorch:nn.Dropout(p=0.5)。详见 深度学习训练技巧。
常见误区
⚠️ 常见踩坑
推理前忘记 model.eval(),Dropout 仍随机置零,导致同一输入预测结果抖动、指标虚低;另一个是把 Dropout 直接堆在 Batch Normalization 前后,二者方差统计互相干扰反而掉点,现代 CNN 多只在 FC 头或用 BN 替代 Dropout。
追问
追问 1:Dropout 和 L2 正则有何不同?
L2(权重衰减)持续约束权重幅度,让所有权重变小、更平滑;Dropout 通过随机丢弃破坏神经元共适应,近似集成多个子网络。前者作用于权重大小,后者作用于网络连接结构,二者常叠加使用、互补。
追问 2:为什么 eval 模式必须关 Dropout?
训练时随机丢弃,推理需确定性输出。eval() 关闭 Dropout 并用训练时 scale 补偿,否则推理输出随机且幅度错误。
追问 3:Dropout 能用在卷积层吗?
能,但效果有限:卷积特征图相邻像素强相关,独立置零单个像素仍能由邻居恢复信息。更有效的是 nn.Dropout2d(空间 Dropout),按整张特征图通道丢弃。实践中 CNN 更多靠 Batch Normalization + 数据增强,Dropout 多放在最后的全连接头。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。
📖 术语表
📰 AI 资讯
🛠️ AI 工具
- Pytorch
Meta 开源的深度学习框架,100K+ stars。以动态计算图和 Pythonic 风格著称,在学术界和工业界都有广泛应用,支持分布式训练、移动端部署和 ONNX 导出
- Tensorflow
全球最流行的机器学习框架之一,195K+ stars。Google 开源的端到端 ML 平台,支持 TensorFlow、Keras 等多种 API,覆盖深度学习、强化学习、移动端部署等全场景,是 AI 工程师的必备工具