过拟合与正则化:L2、Dropout 与早停
过拟合(Overfitting)是模型把训练集的噪声与特例也背了下来、导致泛化能力下降的现象;正则化(Regularization)是抑制它的一族手段——在损失中加惩罚项(L2/权重衰减)、训练时随机失活(Dropout)、见好就收(早停)等。
一句话定义
过拟合(Overfitting)是模型把训练集的噪声与特例也背了下来、导致泛化能力下降的现象;正则化(Regularization)是抑制它的一族手段——在损失中加惩罚项(L2/权重衰减)、训练时随机失活(Dropout)、见好就收(早停)等。
直觉
过拟合像「背题库的学生」:模拟卷(训练集)次次满分,新卷(测试集)一塌糊涂。L2 是「不许答案太啰嗦」的文风扣分;Dropout 是「平时训练随机蒙住同学的眼睛,逼每个人独立掌握全局」;早停是「模拟卷成绩开始掉头就停止刷题」。
为什么重要
泛化(kp-001 的根本目标)与记忆的分界线就在这里。经验上训练损失下降而验证损失回升的交叉点,就是过拟合的显影时刻;不会诊断与处理它,kp-016/kp-021 的项目就会停在「训练 99%、测试 70%」的尴尬里。本知识点也是 kp-030 误区集中最多反直觉事实的来源。
前置知识
- kp-009(损失函数)、kp-011(训练动态——观察训练/验证曲线)。
核心概念
- 训练集/验证集/测试集:学习用/调参用/终评用三分数据,只能用验证集做一切决策(kp-015 详述)。
- 泛化差距(generalization gap):验证误差与训练误差之差,过拟合的直接度量。
- L2 正则/权重衰减(weight decay):损失加 λ/2·‖θ‖²,偏好小而分散的权重。
- Dropout:训练时以概率 p 随机置零每个激活,推理时全开并按 (1−p) 缩放(或训练时 inverted 缩放)。
- 早停(early stopping):验证损失连续若干 epoch 不降即停止,恢复最优检查点。
- 数据增强:不改变标签地扩充数据多样性,属「治本型正则」(kp-015 详述)。
原理与机制
诊断先于治疗:训练损失与验证损失双曲线是心电图——两者同步下降=欠训练;训练降、验证升=过拟合;两者都高=欠拟合(容量或训练不足)。L2 的机制在 kp-010 的优化器一节埋过伏笔:∂/∂θ[λ/2‖θ‖²] = λθ,等价于每步更新前先把参数缩小 (1−ηλ) 倍——这就是「权重衰减」名字的来历;它压制个别超大权重,让预测由众多小权重共同投票,平滑了模型对输入扰动的敏感度。Dropout 的机制是「训练时注入结构噪声」:每次前向随机失活比例 p 的神经元,等效于每步都在训练一个随机子网络,最终模型近似这些子网络的集成(ensemble);inverted dropout 在训练时就把存活激活除以 (1−p),推理阶段无需任何改动。早停的机制最朴素:过拟合是训练时间维度上的事件,验证损失谷底就是记忆开始压倒学习的时刻。三者适用性经验:视觉 CNN 常用「数据增强为主 + 权重衰减 5e−4 + 早停」;全连接 MLP 上 Dropout(0.2~0.5) 收益明显;Transformer 系则依赖大规模数据与 Dropout 变体(超出本库,指路独立站点)。
公式或模型
L2 正则化的目标函数与等效更新:
目标: L_total = L_data + (λ/2) Σ_θ ‖θ‖²
梯度: ∂L_total/∂θ = ∂L_data/∂θ + λθ
更新: θ ← θ − η(∂L_data/∂θ + λθ) = (1 − ηλ)θ − η·∂L_data/∂θ
Dropout(inverted):训练时 a_masked = m·a/(1−p),m~Bernoulli(1−p);推理时恒等变量说明:λ 为正则强度(常见 1e−4~5e−3);p 为失活概率;Bernoulli 掩码 m 逐元素独立采样。注意 PyTorch 的 weight_decay 参数即上式 λ,与优化器解耦使用(AdamW,kp-010)。
图示
损失
│╲
│ ╲ ╲ ← 训练损失(一路下降)
│ ╲ ╲
│ ╲ 过拟合区 ↘ ╱ ← 验证损失(先降后升)
│ ╲____________ ╲ ╱
│ ▼ 最佳早停点
└──────────────────────► epoch直观类比
Dropout 的「蒙眼训练」还有下半句:推理时全员睁眼,相当于无数个「单眼视角」的平均——像会诊,比任何一位专家独断都稳。
实例或案例
kp-016 的 MLP 项目给出标准复现:5 万样本 MNIST、无正则的 784-512-512-10 MLP,训练 30 epoch 后训练准确率 99.8%、测试 98.2%;加 Dropout(0.3)+weight_decay(1e−4) 后训练降到 99.0%、测试升至 98.5%。再看调参次序的纪律:λ 与 p 必须只用验证集选择——若用测试集调参,测试成绩就成了「第二次训练集」,这是 kp-030 误区集中最著名的「验证集泄漏」。kp-021 的 CIFAR-10 项目则演示增强型正则(随机裁剪+翻转)贡献的数个百分点。
常见误区
- 「训练损失 100% = 学好了」:过拟合的典型症状恰是训练满分、验证平庸,永远双曲线对照着看。
- 「正则越强越保险」:λ 过大导致欠拟合(训练损失都降不动),正则是旋钮不是开关。
- 「Dropout 在 BatchNorm 之前的层使用理所当然」:两者叠加在小批量下可能互相放大方差,现代 CNN 常只留其一(kp-014)。
- 「早停是失败」:提前停止正是「不让验证损失为训练让路」的理性决策,配合检查点恢复即可。
与其他知识点的关系
kp-015 的数据管道提供「治本型正则」(增强)与干净的验证协议;kp-014 与 Dropout 有适用边界张力;kp-010 的 AdamW 是 L2 在自适应优化器下的正确形态;kp-030 系统盘点过拟合相关误区;kp-032 的预训练可视为「最高效的正则——用海量数据先验取代惩罚项」。
自测题
- 画出典型过拟合的双损失曲线并标出早停点。
答案要点:训练损失单调降、验证损失 U 形,谷底即早停点。
- 证明 L2 正则在 SGD 下等价于每步参数乘 (1−ηλ)。
答案要点:梯度加 λθ 代入更新式整理即得,故俗称权重衰减。
- inverted Dropout 为什么在训练时除以 (1−p)?
答案要点:保持激活期望不变,推理网络无需缩放即可直接使用,避免训练/推理不一致。
延伸阅读
- Srivastava 等《Dropout》JMLR 2014(含「子网络集成」解释)。
- Goodfellow 等《Deep Learning》7.5 节(Dropout)、5.2 节(容量/过拟合/欠拟合)。
学习状态
状态保存在浏览器本地,用于首页与路径页的进度统计。