过拟合与正则化
概念
过拟合(Overfitting)
过拟合是指模型在训练数据上表现优异,但在新数据(测试集)上表现很差。模型"记住"了训练数据中的噪声和特异性模式,而不是学习到可泛化的规律。
欠拟合(Underfitting)
模型连训练数据上的规律都没学到,训练集和测试集的表现都差。
偏差-方差权衡(Bias-Variance Tradeoff)
| 状态 | 偏差(Bias) | 方差(Variance) | 表现 |
|---|---|---|---|
| 欠拟合 | 高 | 低 | 都差 |
| 适中 | 适中 | 适中 | 都好 |
| 过拟合 | 低 | 高 | 训练好,测试差 |
- 偏差:模型预测与真实值的平均偏离度(模型学得"对不对")
- 方差:模型在不同数据集上的预测波动(模型"稳不稳定")
如何识别过拟合
- 训练损失持续下降,但验证损失先降后升(经典信号)
- 测试集指标远差于训练集
- 模型记住了训练数据的特异性细节
正则化方法
Dropout
训练时随机丢弃一定比例的神经元(通常 10%~50%),强迫网络学习冗余表示。相当于同时在训练大量子网络并取平均。
- 仅在训练时启用,推理时关闭
- 是防止过拟合最常用的方法之一
L1 / L2 正则化(权重衰减)
在损失函数中加上参数大小的惩罚项:
- L1(Lasso):L = L_original + λ·Σ|W| → 倾向产生稀疏权重
- L2(Ridge / 权重衰减):L = L_original + λ·ΣW² → 倾向产生小权重
现代 LLM 中 L2 权重衰减(Weight Decay)是标配。
早停(Early Stopping)
监控验证集损失,当不再下降时停止训练。
数据增强(Data Augmentation)
对数据做微小的随机变换(如文本中的同义词替换、回译等),增大有效训练数据量。
批量归一化(Batch Normalization)
对每一层的输出做归一化,稳定训练过程,也有一定的正则化效果。
验证集(Validation Set)
将数据分为三部分:
| 数据集 | 用途 | 比例 |
|---|---|---|
| 训练集 | 训练模型参数 | ~70%-80% |
| 验证集 | 调超参数、监控过拟合 | ~10%-15% |
| 测试集 | 最终评估泛化能力 | ~10%-15% |
面试常问
- 过拟合的典型信号是什么?
- Dropout 为什么能防止过拟合?
- 训练集、验证集、测试集各起什么作用?
