首页 › S 模型训练 › S4 训练过程 › 02

S4-02 · 过拟合与正则化:模型死记硬背怎么办

进阶阶段约 120 分钟阶段:S4 训练过程

阶段:S4-训练过程 | 预计耗时:75-90 分钟(四组对照)| 前置:S4-01 loss 曲线解读(用到那张过拟合图当靶子) 代码:本篇代码要你自己敲成 model-learn/s4_regularization.py

学习目标

  1. 掌握四大正则化药方的原理与代价:更多数据/增强、早停、Dropout、权重衰减
  2. 在同一个过拟合场景上逐一试药,用 val 准确率评出最划算的药
  3. 理解正则化的共同本质:牺牲一点训练集成绩,换泛化能力

核心知识

1. 四大药方对比

药 原理 代价 一句话写法
更多数据/增强 根治:题海无边,背不完 要多花数据/算力 S2-03 已做过
早停 early stopping val 一开始升就停车 几乎免费 监控 val, patience=N
Dropout 训练时随机丢一部分神经元,防"合谋背题" 收敛稍慢 nn.Dropout(0.5) + 记得 eval()
权重衰减 weight decay 参数越大罚越重 → 学得太复杂的代价高 几乎免费 Adam(..., weight_decay=1e-4)

2. Dropout 与 eval() 的关系(呼应 S3-03)

Dropout 只在训练时生效——这就是推理前必须 model.eval() 的真正原因。你的 SmallCNN 原版没有 Dropout,本篇加药后这个开关立刻有实际作用。

3. 本机实验设计

统一靶场:200 样本 / 30 epoch / lr=1e-3(S4-01 确认会过拟合的配置)。四组:无药对照 / 早停 / Dropout / weight decay。每组记 val 最高点及其 epoch。

实验任务

任务 1:写四合一脚本(40 分钟)

# s4_regularization.py —— 同一靶场逐一试药
# 基座 = S4-01 的 overfit 配置,加 --drug none|early|dropout|decay 参数
# dropout 组: 模型隐层后插 nn.Dropout(0.5)
# decay 组  : Adam(..., weight_decay=1e-4)
# early 组  : val_acc 连续 5 个 epoch 不再创新高就 break
# 输出格式:药物 | 最高val_acc | 达到它的epoch | 最终test_acc

任务 2:跑四组填表(20 分钟)

药 最高 val_acc 对应 epoch test_acc
无药
早停
Dropout 0.5
weight decay 1e-4

任务 3:两个思考题(15 分钟)

  1. 哪个药"最便宜"?哪个改变了模型结构?(自由药:早停;动刀:Dropout)
  2. 把 200 样本换成 2000 样本再跑无药组——过拟合减轻了吗?数据是不是最强的正则化?

验收标准

衔接下一阶段

训练过程的病都会治了 → S5-01 学习率系统实验:进入调参阶段,把第一超参数摸透。

小测验(3 题)

答完立即判分,错题给解析;得分存本地。实验与实操题不上网测:回对话找老师验收。