Course 2:超参数调优与正则化
课程简介
掌握 Dropout、Batch Norm、超参数搜索策略,提升模型泛化能力。
一、正则化
正则化是防止过拟合的核心技术。过拟合表现为训练误差低但验证误差高,模型记住了噪声而非真实模式。
1.1 L2正则化(权重衰减)
在成本函数中加入权重的平方和:
$$J_{\text{reg}} = J + \frac{\lambda}{2m} \sum_{l} |W^{[l]}|_F^2$$
更新公式变为:
$$W^{[l]} := W^{[l]} \left(1 - \frac{\alpha\lambda}{m}\right) - \alpha\frac{1}{m}dZ^{[l]}A^{[l-1]T}$$
$(1 - \frac{\alpha\lambda}{m})$ 小于 1,所以每个权重都会"衰减"。λ 越大,权重越接近 0,网络退化为更简单的模型。
1.2 Dropout
每次训练迭代中随机丢弃一部分神经元:
def forward_with_dropout(A, W, b, keep_prob=0.8):
Z = np.dot(W, A) + b
A_out = np.maximum(0, Z)
D = np.random.rand(A_out.shape[0], A_out.shape[1]) < keep_prob
A_out *= D
A_out /= keep_prob # 重要:保持期望值不变
return A_out, D
关键技巧:除以 keep_prob 保证测试时不需要修改网络。Dropout 相当于集成学习——每次训练不同的子网络。
1.3 数据增强
对训练数据应用随机变换:水平翻转、随机裁剪、旋转、颜色扰动、添加噪声。这是CV领域最有效的正则化方法。
1.4 Early Stopping
验证集性能不再改善时提前停止训练,防止过拟合。
二、Batch Normalization
2.1 基本原理
对每层输入进行归一化:
$$\mu = \frac{1}{m}\sum Z^{l}$$
$$\sigma^2 = \frac{1}{m}\sum (Z^{l} - \mu)^2$$
$$\hat{Z}^{[l]} = \frac{Z^{[l]} - \mu}{\sqrt{\sigma^2 + \epsilon}}$$
$$\tilde{Z}^{[l]} = \gamma \hat{Z}^{[l]} + \beta$$
其中 $\gamma$ 和 $\beta$ 是可学习的参数。如果 $\gamma = \sqrt{\sigma^2+\epsilon}$ 且 $\beta = \mu$,BN等价于恒等变换。
2.2 BN为什么有效
- 减少内部协变量偏移——每层输入分布更稳定
- 允许更大学习率——加速训练
- 轻微正则化效果——每个mini-batch的随机性
- 减少对初始化方法的依赖
2.3 测试阶段的BN
使用训练过程中计算的移动平均均值和方差:
running_mean = 0.9 * running_mean + 0.1 * batch_mean
running_var = 0.9 * running_var + 0.1 * batch_var
z_norm = (z_test - running_mean) / np.sqrt(running_var + epsilon)
三、超参数搜索
3.1 超参数重要性排序
- 学习率 α(最重要的)
- Momentum 参数 β(通常0.9)
- 隐藏层数量和神经元数
- Mini-batch 大小
- 正则化系数 λ
3.2 随机搜索 vs 网格搜索
网格搜索在维度灾难下效率极低。推荐随机搜索:
# 学习率在对数尺度采样
r = -4 * np.random.rand()
lr = 10 ** r # 范围 [0.0001, 1]
# Momentum beta 特殊采样
r = np.random.rand()
beta = 1 - 10 ** (-1 - r * 2) # 范围 [0.9, 0.999]
3.3 Coarse-to-Fine策略
先在大范围粗搜,根据结果在好区域精细搜索。
3.4 学习率衰减
指数衰减:$\alpha = \alpha_0 \times 0.95^{\text{epoch}}$
ReduceLROnPlateau:验证损失不下降时自动降低学习率
余弦退火:$\alpha_t = \frac{1}{2}\alpha_0(1+\cos(\frac{t}{T}\pi))$
延伸阅读
- 📺 B 站播放列表:Deep Learning Specialization — 深度学习专项课程
- 📚 更多学习资源,请访问 deeplearning.ai 官网