过拟合、泛化与正则化
训练题做对不等于真正学会:用独立数据检验,用早停与正则化改善泛化。
训练题全做对了,换一批题却不会了
前面八课把会训练的水果机器造好了。现在给它一批从未见过的水果,它却开始认错。训练损失很低,为什么还不够?因为目标不是背下这批样本,而是对来自目标场景的新样本也能做出合理预测,这叫泛化。
| 表现 | 训练数据 | 独立验证数据 |
|---|---|---|
| 欠拟合 | 表现差 | 通常也差 |
| 比较合适 | 表现较好 | 也较好 |
| 过拟合 | 继续变好 | 改善有限,甚至变差 |
模型容量不足、特征不合适或训练不充分都可能导致欠拟合;数据少、噪声多、模型容量过大或训练过久都可能促成过拟合。这些是需要检验的解释,不是只看一条曲线就能断定的诊断。
训练、验证、测试:三份数据,三种职责
训练集用于计算梯度和更新参数;验证集用于选择宽度、正则强度、训练轮数等超参数;测试集用于配置锁定后的最终评价。不能反复根据测试成绩挑模型,再把最好一次当成客观成绩。
划分要符合实际用途:同一个人、同一文档的近重复样本不要跨集合;预测未来时按时间划分,不能随机把未来信息送进训练。标准化统计、特征选择等也不能提前读取测试集,这叫防止数据泄漏。
把两条学习曲线放在一起看
为了把泛化看得清楚,实验暂时从水果分类换成一维回归:真实规律是一条弯曲的函数,训练点带有噪声。预测曲线越接近训练散点,不一定越接近真实规律。
这是固定种子的随机特征网络:隐藏层使用固定的 tanh 单元,只训练线性输出层,不是完整的端到端多层训练。输入先用固定的三角基函数组织,输出层采用 MSE + L2,全批量梯度下降。训练、验证、测试来自独立随机流;验证集参与早停,测试只在最终测试时计算。验证和测试噪声固定为 0.15,训练噪声由旋钮调整;真实无噪声曲线只作教学对照。
蓝色训练线和绿色验证线同时下降,是好现象;如果训练继续改善、验证转而变差,可以检查是否开始拟合噪声。早停选择验证损失最小的已保存模型,不是等看到测试成绩后再回头挑一轮。
正则化与早停:不让模型只顾着背答案
早停用验证结果选训练轮次;L2 正则化在目标中加入权重平方惩罚,限制某些过大的权重;权重衰减在更新时收缩参数。普通 SGD 下两者可对应,但在 Adam 中不能直接当成同一种操作,AdamW 将衰减与自适应梯度更新解耦。
Dropout则在训练时随机屏蔽部分激活。常用 inverted dropout 将保留值除以保留概率;推理时关闭随机屏蔽,不再额外缩放。本实验不模拟 Dropout,避免把多种变化混在一起。
更多数据、合适的数据增强与更简单的模型也可能改善泛化。正则越强不一定越好,过强会欠拟合;它们都是需要验证的选择,而不是防过拟合保险。
卷二闭环:从会算,到会学,再到值得信任
现在可以完整说出一次学习的路线:先搭网络并前向算出预测,再通过合适输出和损失描述任务;反向传播算梯度,优化器更新参数;用初始化和数值监测确保学得动,最后用独立数据检验有没有学到可迁移的规律。
验收时记录模型配置、数据划分、指标和随机种子,关注不同数据子群的表现。即使独立测试通过,部署环境变化仍可能带来性能下降;泛化不是永久承诺。下一卷把这台通用机器带到语言领域,从条件概率开始。
训练成绩回答「这批题做得怎样」,泛化回答「新题能否也做好」。验证用于选择,测试用于最后评价。
💡 用大白话梳理:这一课的核心直觉
- 欠拟合与过拟合,要同时看训练和独立验证表现。
- 训练集更新参数,验证集选超参数,测试集不能反复调参。
- 早停、权重衰减、Dropout 都有边界,过强约束也会欠拟合。
- 完整闭环:前向 → 损失 → 反向 → 更新 → 稳定性 → 泛化检验。
学习小测验
动动脑筋:核心直觉小测验(选出你的答案后点击「提交」,即可查看生动通俗的详细解析)
20 语言的概率游戏:N-gram
根据已经出现的词,统计下一个词的条件概率。