正则化
正则化 (Regularization)
1. 什么是正则化?
在机器学习和深度学习中,正则化 (Regularization) 是一系列用于防止模型过拟合 (Overfitting) 的技术。
核心目标:让模型在训练集上表现不错的同时,在测试集(即未见过的数据)上也能有很好的表现(即提高泛化能力)。
通俗理解:
- 考试时(训练),如果你死记硬背(过拟合),遇到新题型(测试)就挂了。
- 正则化就是强迫你理解规律,而不是死记硬背,这样遇到新题型也能举一反三。
从数学角度看,正则化通常是在损失函数 $J(\theta)$ 后面加上一个惩罚项 (Penalty Term):
$$ J_{regularized}(\theta) = J_{original}(\theta) + \lambda \cdot R(\theta) $$- $J_{original}(\theta)$:原始损失(如 MSE、Cross Entropy),负责让模型预测准确。
- $R(\theta)$:正则化项,负责限制模型的复杂度。
- $\lambda$:正则化系数(超参数),控制惩罚的力度。
2. 常见的正则化方法
2.1 L1 正则化 (Lasso)
在损失函数中加入权重的绝对值之和。
$$ R(\theta) = \sum |w_i| $$- 效果:倾向于产生稀疏解(Sparse Solution),即让许多权重 $w_i$ 变为 0。
- 作用:
- 特征选择:自动去掉不重要的特征(权重变0)。
- 模型压缩:参数变少,模型更轻量。
- 直观解释:L1 的等高线是菱形,与损失函数的等高线相切时,容易切在坐标轴上(即某些维度为0)。
2.2 L2 正则化 (Ridge / Weight Decay)
在损失函数中加入权重的平方和。
$$ R(\theta) = \sum w_i^2 $$- 效果:倾向于让权重 $w_i$ 变得很小,但不会完全为 0。
- 作用:
- 防止某个特征权重过大而主导模型,使模型对输入的变化不那么敏感(更平滑)。
- 在深度学习中通常被称为权重衰减 (Weight Decay)。
- 直观解释:L2 的等高线是圆形,与损失函数的等高线相切时,通常不会切在坐标轴上,而是让整体数值变小。
2.3 Dropout (随机失活)
在训练过程中,随机地将一部分神经元的输出置为 0。
- 训练时:以概率 $p$ 丢弃神经元。
- 测试时:所有神经元都工作,但输出需要乘以 $(1-p)$ (或者在训练时除以 $(1-p)$ 进行缩放,称为 Inverted Dropout)。
- 原理:
- 集成学习:每次训练的都是一个不同的子网络,最终模型相当于无数子网络的集成 (Ensemble)。
- 打破共适应 (Co-adaptation):强迫神经元独立提取特征,不能依赖其他特定神经元的存在。
2.4 Early Stopping (早停)
在训练过程中,监控验证集 (Validation Set) 的误差。
- 当训练集误差还在下降,但验证集误差开始上升时,说明开始过拟合了。
- 此时立即停止训练,并保存验证集误差最低时的模型参数。
- 优点:简单有效,不需要修改模型结构。
2.5 数据增强 (Data Augmentation)
通过对训练数据进行变换,人为地增加数据量和多样性。
- 图像领域:旋转、翻转、裁剪、缩放、调整亮度/对比度、加噪声等。
- NLP领域:同义词替换、回译(翻译过去再翻译回来)、随机插入/删除词等。
- 原理:让模型见到更多样的数据,学习到不变性 (Invariance),从而很难死记硬背。
2.6 Batch Normalization (BN)
虽然 BN 主要用于加速收敛和解决梯度问题,但它也具有轻微的正则化效果。
- 原因:BN 在计算均值和方差时依赖于当前的 Mini-batch,这给每个样本的特征引入了一些随机噪声(因为同一个样本在不同 Batch 里,归一化的均值方差不同)。这种噪声有助于防止过拟合。
- 注意:使用 BN 时,Dropout 的使用率通常可以降低甚至不用。
3. 为什么需要正则化?(Bias-Variance Tradeoff)
机器学习的核心难题是平衡偏差 (Bias) 和 方差 (Variance)。
- 高偏差 (High Bias):模型太简单(欠拟合),连训练集都学不会。
- 高方差 (High Variance):模型太复杂(过拟合),训练集满分,测试集零分。
正则化的作用就是降低方差。 它通过限制模型的复杂度(奥卡姆剃刀原则:如无必要,勿增实体),让模型关注数据的主要规律,忽略次要的噪声。
4. 总结
| 方法 | 核心机制 | 特点 |
|---|---|---|
| L1 | 惩罚权重绝对值 | 产生稀疏权重,用于特征选择 |
| L2 | 惩罚权重平方 | 限制权重大小,防止过分依赖单一特征 |
| Dropout | 随机关掉神经元 | 模拟集成学习,打破神经元依赖 |
| Early Stopping | 监控验证集误差 | 最简单直接的防止过拟合手段 |
| Data Augmentation | 增加数据多样性 | 从根源(数据)上解决过拟合 |
5. 归一化 vs 正则化 (Normalization vs Regularization)
这是一个非常容易混淆的概念,因为它们在某些情况下会有重叠(比如 BatchNorm 也有正则化效果)。
5.1 核心区别
| 维度 | 归一化 (Normalization) | 正则化 (Regularization) |
|---|---|---|
| 核心目标 | 让模型更好训练 (Optimization) | 让模型更好泛化 (Generalization) |
| 主要作用 | 解决梯度消失/爆炸,加速收敛,让损失表面更平滑 | 防止过拟合,让模型在未知数据上表现更好 |
| 操作对象 | 数据/特征 (改变数据的分布/尺度) | 损失函数/结构 (增加惩罚项或改变网络结构) |
| 典型方法 | BatchNorm, LayerNorm, Min-Max Scaling | L1/L2, Dropout, Early Stopping |
| 训练/推理 | 训练和推理通常都需要 (且要保持一致) | 通常只在训练时生效 (如 Dropout) |
5.2 相互关系
互补关系:在现代深度学习中,通常同时使用。
- 用 Normalization (如 BN/LN) 来保证模型能训练起来,收敛得快。
- 用 Regularization (如 Weight Decay/Dropout) 来保证训练出来的模型不过拟合。
你中有我:
- BatchNorm 的正则化副作用:BN 在训练时使用 Mini-batch 的统计量,这引入了随机噪声。这种噪声在某种程度上起到了正则化的作用(类似 Dropout)。因此,使用了 BN 的网络通常可以减少 Dropout 的使用甚至不用。
- Spectral Norm (谱归一化):这是一种特殊的归一化,通过限制权重矩阵的谱范数(归一化权重)来实现 Lipschitz 连续性约束。它本质上是一种对权重的归一化,但其目的是为了稳定训练(特别是 GAN)和限制模型复杂度,所以它既是归一化也是一种强力的正则化。
5.3 一句话总结
- 归一化是修路:把坑坑洼洼的路修平整,让车(优化器)跑得更快更稳。
- 正则化是限速/考驾照:限制车手的行为,防止他因为开得太猛(过拟合)而翻车。