DL ML Learning Lab
03 / 10
第 3 步 · 训练稳了才能做深

Dropout 与 BatchNormDropout & BatchNorm

随机"关掉"一半神经元反而更强?深度网络两大训练神器

13 分钟
阅读 + 实操
3 个
交互演示
中级
难度

Dropout 与 BatchNorm · 交互演示

Dropout p0.30
训练步0
决策边界对比(双月数据 · 同初始权重 · 实时训练中)
无 Dropout
有 Dropout · p=0.30
Dropout 过程示意(灰点 = 本步被随机丢弃的隐藏神经元)
训练时每处理一个样本就重新随机生成一次掩码 —— 每个样本实际上都在训练一个不同的"子网络"。暂停时掩码静止。
BatchNorm 示意:第 1 隐藏层激活前 z 的分布(橙 = 原始,蓝 = BN 归一化后)
Dropout 丢弃率 p 0.30
数据噪声 0.20
BatchNorm(两个网络同时生效)
损失 /
无 Dropout:训练集 / 测试集
有 Dropout:训练集 / 测试集
过拟合差距(训练集−测试集):无 /

为什么学这步?

网络做深后,过拟合与分布漂移接踵而来。Dropout 靠随机关神经元做隐式集成,BatchNorm 靠拉回分布让深层不再漂移——两把把网络做深的工程利器。

📌 发生了什么

  • Dropout 训练时随机关神经元
  • 相当于指数级子网络集成
  • BatchNorm 把激活拉回均值 0 方差 1

⚠️ 常见陷阱

  • Dropout p 太大会欠拟合
  • 推理时不能再 Dropout
  • BN 训练用批量、推理用滑动平均

本章小结

  • Dropout 隐式集成抗过拟合
  • Inverted Dropout 训练放大推理不丢
  • BatchNorm 稳定层间分布

📐 Dropout 与 BatchNorm 的数学

两种正则化手段从不同角度稳定训练:Dropout 随机失活防共适应,BatchNorm 归一化激活分布。

Dropout 训练时按概率 p 随机置零神经元,并对存活神经元缩放 1/(1−p) 以保持期望不变;测试时不失活。

BatchNorm 对每个 mini-batch 计算均值 μ_B 与方差 σ²_B,将激活归一化到零均值单位方差,再通过可学习的 γ、β 恢复表达能力。

归一化使各层输入分布稳定,降低内部协变量偏移,允许更大的学习率、加速收敛。

🎛 Dropout 率对比

Dropout 率 p 决定失活比例,过高欠拟合,过低无正则效果。

Dropout 率 表现 结果
p = 0.2 仅失活少量神经元 正则较弱
p = 0.5 半数失活,经典设定 推荐
p = 0.8 大量失活,容量不足 欠拟合

💡 全连接层常用 p=0.5,卷积层更低(0.1~0.3);测试时不 dropout,缩放已在训练时完成。

💻 Dropout 与 BatchNorm 实现

前向传播中的 Dropout 与 BatchNorm Python 实现:

# Dropout 前向(训练时)
def dropout_forward(a, p, is_training):
    if not is_training: return a            # 测试时直接返回
    mask = (np.random.rand(len(a)) < (1 - p)).astype(float)
    return a * mask / (1 - p)               # 缩放保持期望
# BatchNorm 前向(训练时)
def batch_norm_forward(x, gamma, beta, eps):
    mu = np.mean(x)
    v2 = np.var(x)
    x_hat = (x - mu) / np.sqrt(v2 + eps)
    return gamma * x_hat + beta

📚 参考文献与延伸阅读

  • Srivastava et al. (2014), Dropout: A Simple Way to Prevent Neural Networks from Overfitting, JMLR — Dropout 原始论文
  • Ioffe & Szegedy (2015), Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift, ICML — BatchNorm 原始论文
  • Goodfellow, Bengio & Courville, Deep Learning (2016), §7.12 Dropout + §8.7 Batch Normalization
  • arXiv:1502.03167 — Batch Normalization — BatchNorm 论文预印本

📝 课后练习

检验你的理解——答对为止