在深度学习的工业实践中,模型往往面临两个核心挑战:能不能学得进去(欠拟合)以及学得太死板能不能举一反三(过拟合)。本篇博客将带你深入探讨偏差与方差的本质,并系统性地梳理 L1/L2 正则化、Dropout 以及数据增强等主流优化手段。
1. 偏差与方差 (Bias vs. Variance)
"偏差-方差分解"是衡量模型泛化性能的金标准。
1.1 数据集的现代划分策略
在小样本时代,我们习惯 60%/20%/20% 的划分。但在大数据时代(如百万级数据),验证集和测试集的比例可以大幅缩减:
-
训练集 (Train set): 用于训练模型参数。
-
验证集 (Dev set): 用于调参、选择模型结构。
-
测试集 (Test set): 仅用于最终评估,确保无偏估计。
| 数据规模 | 训练集 | 验证集 | 测试集 |
|---|---|---|---|
| 传统规模 (1k-10k) | 60% | 20% | 20% |
| 大数据规模 (1M+) | 98% | 1% | 1% |
1.2 核心概念拆解
-
偏差 (Bias): 衡量模型在训练集上的拟合能力。高偏差意味着模型太简单(欠拟合),没能抓住数据的特征。
-
方差 (Variance): 衡量模型对数据扰动的敏感度。高方差意味着模型在训练集表现极好,但在测试集表现糟糕(过拟合)。
-
噪声 (Noise): 任务本身的难度上限(不可消除的误差)。
诊断与对策:
-
高偏差(欠拟合): 表现为训练集误差大。
- 解决: 增加网络层数/隐藏单元、延长训练时间、尝试更好的算法。
-
高方差(过拟合): 表现为训练集误差小,验证集误差大。
- 解决: 正则化、增加训练数据、寻找更合适的网络架构。
2. 正则化 (Regularization)
正则化的本质是在成本函数 中加入一个惩罚项,约束模型的复杂度。
2.1 L1 与 L2 正则化
对于逻辑回归,带 L2 正则化的成本函数为:
-
L2 正则化项(权重衰减):
-
L1 正则化项:
。L1 会导致权重变得稀疏(很多 w 变为 0),常用于特征选择,但在深度学习中 L2 使用更广。
公式推导与权重衰减: 在梯度下降更新时:
整理得:
由于 ,权重的模长在每次迭代中都在减小,这就是其被称为"权重衰减"的原因。
2.2 神经网络中的 Frobenius 范数
在深度神经网络中,权重 是矩阵。我们对每一层
的
取范数:
(注:这在数学上被称为 Frobenius 范数,本质上是矩阵内所有元素的平方和。)
2.3 为什么正则化能防止过拟合?
-
直观理解: 当
很大时,为了最小化
,权重
会被迫接近 0。这相当于让很多神经元"失活",使复杂的非线性模型退化为简单的近似线性模型。
-
激活函数视角: 以
tanh为例,当 W 变小时,Z = Wa+b 也会变小,落在激活函数的线性区(原点附近),模型从复杂非线性变得平滑。
3. Dropout (随机失活) 正则化
Dropout 是深度学习领域最具代表性的正则化方法之一,最早由 Hinton 团队提出。
3.1 反向随机失活 (Inverted Dropout)
这是最常用的实现方式。在训练过程中,我们随机按概率 keep_prob 丢弃神经元。
python
# 假设当前层是第 l 层
keep_prob = 0.8
# 1. 生成随机掩码矩阵
d_l = np.random.rand(a_l.shape[0], a_l.shape[1]) < keep_prob
# 2. 将 a_l 中不符合条件的元素置零
a_l = np.multiply(a_l, d_l)
# 3. 关键:修正期望值 (Scaling)
a_l /= keep_prob
注意: 为什么要除以 keep_prob? 假设 keep_prob = 0.8,意味着 20% 的神经元被关闭。为了保证在测试阶段(不使用 Dropout)输出的平均值(期望)保持不变,我们需要在训练阶段人为放大剩下的 80% 神经元的输出。
3.2 为什么 Dropout 有效?
-
不依赖特定特征: 神经元不能依赖任何一个特定的输入特征,因为该输入随时可能被丢弃。这迫使网络以更分散的形式学习特征,从而实现权重收缩。
-
集成效应: 每一轮训练都在训练不同的子网络,最后的效果类似于对大量小型网络进行集成。
使用技巧:
-
层差异化: 对于参数量巨大的层(如全连接层),可以设置较小的
keep_prob(如 0.5);对于参数少的层,可以设为 1.0(即不使用 Dropout)。 -
代价: Dropout 使得代价函数
变得不再明确定义,因此通常先关闭 Dropout 观察
的下降曲线,确认代码无误后再开启。
4. 其他正则化方式
4.1 早停止法 (Early Stopping)
我们在训练时同时监测训练误差和验证误差。
-
现象: 随着迭代增加,训练误差持续下降,但验证误差在某一点后开始上升。
-
操作: 在验证误差最低的点停止训练。
-
优缺点: 简单高效,但它违背了"正交化"原则(因为它同时影响了优化 J 和防止过拟合两个目标)。
4.2 数据增强 (Data Augmentation)
既然过拟合是因为数据不够,那我们就人工造数据:
-
图像: 随机旋转、裁剪、水平翻转、色彩抖动。
-
意义: 例如,一张翻转后的猫依然是猫,这通过增加样本的多样性来降低方差。