4.3 泛化、学习曲线与正则化:训练误差低只证明优化做到了
对 16 个横坐标互异的训练点,可以用至多十五阶多项式插值,但曲线可能在点与点之间剧烈摆动。训练 loss 接近零,只说明模型在这批样本和目标上被优化成功;它是否抓住可重复规律,要看真正独立的数据。
本课目标
- 区分 optimization、approximation、estimation 与 irreducible error;
- 用训练/验证学习曲线诊断问题;
- 理解 bias–variance decomposition 的适用范围;
- 根据失效原因选择正则化、数据、模型或分布修复。
1. 欠拟合和过拟合是现象,不是病因
典型观察:
- training 与 validation 都差:可能高 bias、特征不足、优化失败、标签噪声或任务不可预测;
- training 好、validation 差:可能高 variance、泄漏修复后差距、分布不匹配或验证样本太小;
- 两者都好、生产差:评估分布错、反馈循环、实现偏斜或指标不对应行动。
只看一对分数无法唯一诊断。要结合基线、学习曲线、分组/时间切片和错误样本来源。
2. 四类误差来源
- optimization error:没有充分找到 hypothesis class 中的低训练 loss 解;
- approximation error:模型类无法表达目标关系;
- estimation error:有限样本使选出的模型偏离类中最佳泛化模型;
- irreducible/noise:在当前信息下仍有随机性或 label 测量误差。
增加模型容量可减少 approximation error,却可能增加 estimation 难度;更多有效独立数据主要帮助 estimation;更久训练只解决 optimization。
3. 学习曲线比一次分数更有信息
在不同训练样本量上重复拟合,分别计算 train/validation loss。下面是 Python 3 + scikit-learn 片段(partial),沿用上一课的 pipeline,输入独立可交换的分类样本 X、y。每个训练子集与验证折都须有足够类别覆盖;失败直接报错,避免把 NaN 画成一条看似平静的曲线。
from sklearn.model_selection import learning_curve, StratifiedKFold
sizes, train_scores, valid_scores = learning_curve(
estimator=pipeline,
X=X,
y=y,
cv=StratifiedKFold(n_splits=5, shuffle=True, random_state=0),
scoring="neg_log_loss",
train_sizes=[0.1, 0.25, 0.5, 0.75, 1.0],
shuffle=True,
random_state=0,
error_score="raise",
n_jobs=1,
)
train_loss = -train_scores
valid_loss = -valid_scores解释时关注均值、折间分布和曲线趋势:
- 两条曲线在较差水平接近:模型/特征/目标可能不足;
- gap 大且 validation 随数据增加改善:更多相似数据可能有用;
- validation 提前平台:数据量并非主要瓶颈;
- 某些时间折恶化:可能是 drift,而非传统过拟合。
neg_log_loss 返回负的损失,越大越好;画损失时先取负号,再按越低越好解释。参数行为见 scikit-learn 的 learning_curve 文档。
上述随机示例不适用于团队重复或时间序列。分组场景要先保留完整验证组,再按完整训练组增加样本;时间场景固定未来验证窗,逐步扩大此前已成熟的训练窗。仅给 learning_curve 换一个 CV 对象,并不会自动让它内部的训练子集保留完整 group。
4. Bias–variance decomposition 的准确边界
在 squared-error regression、固定输入等标准设定下:
它提供直觉:模型对不同训练样本的敏感性是 variance,平均预测偏离真实回归函数是 bias。
这里的期望包含训练集抽样和测试标签噪声;噪声项是给定当前特征后 Y 的条件方差。满足这些平方误差设定时,恒等式也适用于过参数化网络,模型大并不会使代数失效。Classification error 和 log loss 则不能直接套这条平方误差公式。“降低 bias 必然升高 variance”也不是每次改动的铁律;更好的特征或更多数据可能同时改善两者。
5. 显式正则化
在经验 loss 上加入复杂度惩罚:
- L2 收缩参数,常改善稳定性;
- L1 可产生稀疏解,但相关特征选择不稳定;
- tree depth/min samples 约束分裂;
- margin、smoothness、monotonic constraint 编码不同 inductive bias。
6. 隐式正则化与训练过程
- early stopping 限制优化轨迹;
- SGD 的 batch、learning rate 和噪声影响解;
- architecture 约束可表达函数;
- dropout 对特定神经网络形成随机正则;
- pruning/quantization 主要是压缩,也可能改变泛化。
这些不是通用药方。Early stopping 使用 validation 选择停止点,validation 已参与模型选择;最终评估仍需独立边界。
7. Data augmentation 要保持标签语义
图像平移、文本改写、音频扰动等声明某种 invariance。若变换后 label 不应保持,augmentation 会制造错误数据:把道路标志左右翻转、医学影像改变方位、否定句同义改写失败。
验证:
- 变换在真实部署中合理;
- label/结构保持;
- 不泄漏 validation/test;
- 各群体效用没有系统下降;
- 增益来自目标分布,而不是人工样本特征。
8. 标签噪声与困难样本
高 loss 样本可能是:
- 真正罕见但重要;
- 误标或输入损坏;
- 分布外;
- 模型尚未学会。
自动删除“难样本”会抹掉少数群体和真实边界。先追溯来源、复核样本并报告处理。Robust loss、label smoothing 和 noise model 依赖噪声假设,不能替代标签审计。
9. 分布变化不是普通 variance
Train/validation 同分布泛化好,不保证在 covariate shift、label shift、concept drift 或政策变化下保持。
P(X) 变化:输入人群/设备变化
P(Y) 变化:基准率变化
P(Y|X) 变化:关系/定义改变
selection 变化:谁被观察/获得标签改变这些只是定位变化的入口。严格的 covariate shift 还假设 P(Y|X) 不变;label shift 假设 P(X|Y) 不变。只观察到输入或类别比例变化,不能直接认定相应重加权方法成立。
按时间、站点和关键群体切片;建立新鲜 holdout、shadow evaluation 和上线监控。正则化不能修复错误目标分布。
10. 对症行动表
| 证据 | 优先行动 |
|---|---|
| train/valid 都不如简单 baseline | 查任务、特征、优化和 label |
| gap 随样本增加明显缩小 | 获取更多相似且独立数据 |
| gap 大且模型容量过高 | 正则化/简化/更稳切分 |
| 特定时间/站点崩溃 | 修复分布覆盖或限定使用 |
| 少数群体 label 质量差 | 修采集与标签,不只调模型 |
| 生产与离线不一致 | 查 pipeline parity 和反馈循环 |
常见误区
- 训练误差低说明学到了规律:可能只记住样本或泄漏。
- 欠拟合只需换更复杂模型:优化、标签和信息不足也会导致。
- 所有正则化都能防过拟合:必须匹配模型和失效原因。
- 更多数据一定有效:错误分布或错误标签只会扩大问题。
练习
- 为多项式回归画训练和验证曲线,不只报告 training MSE。
- 构造优化不足与高 bias 两种“train/valid 都差”案例。
- 比较 L1/L2 在相关特征下的选择稳定性。
- 为一个时间漂移问题说明为何增加旧数据可能变差。
小结
泛化诊断需要把训练表现、独立验证、样本规模和分布变化放在一起。正则化只是控制模型的一种方式;任务、标签、数据覆盖和部署一致性往往更先决定上限。
下一章进入线性模型:从平方损失和概率建模出发,理解线性回归、逻辑回归及其优化,而不是只调用一个 fit()。