LESSON 19 · 卷II 神经网络

过拟合、泛化与正则化

训练题做对不等于真正学会:用独立数据检验,用早停与正则化改善泛化。

第 1 站

训练题全做对了,换一批题却不会了

前面八课把会训练的水果机器造好了。现在给它一批从未见过的水果,它却开始认错。训练损失很低,为什么还不够?因为目标不是背下这批样本,而是对来自目标场景的新样本也能做出合理预测,这叫泛化。

三种典型情况
表现训练数据独立验证数据
欠拟合表现差通常也差
比较合适表现较好也较好
过拟合继续变好改善有限,甚至变差

模型容量不足、特征不合适或训练不充分都可能导致欠拟合;数据少、噪声多、模型容量过大或训练过久都可能促成过拟合。这些是需要检验的解释,不是只看一条曲线就能断定的诊断。

第 2 站

训练、验证、测试:三份数据,三种职责

训练集用于计算梯度和更新参数;验证集用于选择宽度、正则强度、训练轮数等超参数;测试集用于配置锁定后的最终评价。不能反复根据测试成绩挑模型,再把最好一次当成客观成绩。

划分要符合实际用途:同一个人、同一文档的近重复样本不要跨集合;预测未来时按时间划分,不能随机把未来信息送进训练。标准化统计、特征选择等也不能提前读取测试集,这叫防止数据泄漏。

观察测试集成绩,改了学习率后重新测试,还算一次独立验收吗?
第 3 站

把两条学习曲线放在一起看

为了把泛化看得清楚,实验暂时从水果分类换成一维回归:真实规律是一条弯曲的函数,训练点带有噪声。预测曲线越接近训练散点,不一定越接近真实规律。

泛化实验室 · 学会曲线,还是记住散点?
预测曲线与训练样本
训练与验证 MSE

把边界说清楚

这是固定种子的随机特征网络:隐藏层使用固定的 tanh 单元,只训练线性输出层,不是完整的端到端多层训练。输入先用固定的三角基函数组织,输出层采用 MSE + L2,全批量梯度下降。训练、验证、测试来自独立随机流;验证集参与早停,测试只在最终测试时计算。验证和测试噪声固定为 0.15,训练噪声由旋钮调整;真实无噪声曲线只作教学对照。

蓝色训练线和绿色验证线同时下降,是好现象;如果训练继续改善、验证转而变差,可以检查是否开始拟合噪声。早停选择验证损失最小的已保存模型,不是等看到测试成绩后再回头挑一轮。

第 4 站

正则化与早停:不让模型只顾着背答案

早停用验证结果选训练轮次;L2 正则化在目标中加入权重平方惩罚,限制某些过大的权重;权重衰减在更新时收缩参数。普通 SGD 下两者可对应,但在 Adam 中不能直接当成同一种操作,AdamW 将衰减与自适应梯度更新解耦。

L_total = mean((ŷ−y)²) + λ‖w‖²;本实验只惩罚输出权重,不惩罚偏置

Dropout则在训练时随机屏蔽部分激活。常用 inverted dropout 将保留值除以保留概率;推理时关闭随机屏蔽,不再额外缩放。本实验不模拟 Dropout,避免把多种变化混在一起。

更多数据、合适的数据增强与更简单的模型也可能改善泛化。正则越强不一定越好,过强会欠拟合;它们都是需要验证的选择,而不是防过拟合保险。

Dropout 推理时继续随机删掉节点,能直接当成普通推理吗?
第 5 站

卷二闭环:从会算,到会学,再到值得信任

现在可以完整说出一次学习的路线:先搭网络并前向算出预测,再通过合适输出和损失描述任务;反向传播算梯度,优化器更新参数;用初始化和数值监测确保学得动,最后用独立数据检验有没有学到可迁移的规律。

验收时记录模型配置、数据划分、指标和随机种子,关注不同数据子群的表现。即使独立测试通过,部署环境变化仍可能带来性能下降;泛化不是永久承诺。下一卷把这台通用机器带到语言领域,从条件概率开始。

💡 章节速记 · 本课核心

训练成绩回答「这批题做得怎样」,泛化回答「新题能否也做好」。验证用于选择,测试用于最后评价。

💡 用大白话梳理:这一课的核心直觉

  • 欠拟合与过拟合,要同时看训练和独立验证表现。
  • 训练集更新参数,验证集选超参数,测试集不能反复调参。
  • 早停、权重衰减、Dropout 都有边界,过强约束也会欠拟合。
  • 完整闭环:前向 → 损失 → 反向 → 更新 → 稳定性 → 泛化检验。
小测验

学习小测验

动动脑筋:核心直觉小测验(选出你的答案后点击「提交」,即可查看生动通俗的详细解析)

Q1训练损失持续下降,但验证损失开始上升,最值得检查什么?
Q2哪种数据使用方式最符合独立评价的原则?