Math-08.泛化与正则-05.EarlyStopping与验证集

本页讲解 Early stopping(早停)——在验证 loss 不再改善时停止训练,等价于隐式限制模型复杂度。

段末注释早停(early stopping)在验证指标连续 $P$ 个 epoch 无提升时终止训练并回滚至最佳 checkpoint;可看作对训练迭代次数的正则化。

系列入口00.系列规划 | 前置:01 总论Math-04/05 学习率


1. 机制(D2–D3)

图 1 val loss 回升时停止

1
2
3
4
5
6
7
8
9
for epoch in 1..T:
train(...)
val_loss = evaluate(val)
if val_loss 改善:
save checkpoint; patience = 0
else:
patience += 1
if patience >= P: break
load best checkpoint
超参 含义
patience $P$ 容忍验证不改善的 epoch 数
min_delta 最小改善幅度才算「更好」

2. 与正则的关系(D6)

早停限制有效训练步数 → 参数未走到完全拟合训练噪声的位置 → 降 Variance02 偏差方差)。

与 L2、Dropout 可叠加;小数据深度学习中常必备。


3. 跨领域实践(D7)

图 2 不同任务的 patience

领域 监控指标 典型 patience
图像分类微调 val accuracy 5–15 epoch
语言模型微调 val perplexity 1–3 epoch(易过拟合)
表格 XGBoost val AUC,early_stopping_rounds 20–50 轮
时间序列预测 val MAE(注意时间顺序划分) 视序列长
蛋白性质回归 val RMSE,小样本 小 patience + 强正则
强化学习 eval 回报(非纯 loss) 任务相关

4. 验证集设计(D7)

  • 与训练同分布互斥
  • 大小足够稳定估计(通常 $\ge$ 几千样本或 CV 代替)
  • 用测试集做早停

5. 局限(D8)

图 4 局限

问题 说明
val 噪声大 误早停 → 增大 val 或 CV
warmup 阶段 前几个 epoch 忽略
与 cosine 调度耦合 可能未训满就停
只存最后一轮 应存 best checkpoint

6. PyTorch 思路(D12)

1
2
3
4
5
6
7
8
9
10
11
12
best_val, patience, P = float("inf"), 0, 10
for epoch in range(max_epochs):
train_one_epoch()
v = validate()
if v < best_val - 1e-4:
best_val, patience = v, 0
torch.save(model.state_dict(), "best.pt")
else:
patience += 1
if patience >= P:
break
model.load_state_dict(torch.load("best.pt"))

7. 小结

验证集是早停与调参的唯一依据(测试集封存)。下一篇:06 交叉验证

系列导航04 Dropout | 10 诊断

-------------本文结束感谢您的阅读-------------