首页 › S 模型训练 › S5 参数调优 › 03

S5-03 · 调参方法论:从一次一个变量到网格搜索

实战阶段约 240 分钟阶段:S5 参数调优

阶段:S5-参数调优 | 预计耗时:60-75 分钟(9 组自动跑)| 前置:S5-02 优化器与 batch 代码:本篇代码要你自己敲成 model-learn/s5_grid_search.py

学习目标

  1. 掌握调参的三级方法论:单变量实验 → 网格搜索 → 随机搜索,知道各自适用场景
  2. 写一个自动网格搜索脚本:3 个 lr × 3 个 batch,自动跑完出排行榜
  3. 建立"何时停止调参"的判断——收益递减就收手

核心知识

1. 三级方法论

级别 做法 适用
单变量实验 一次改一个,如 S1~S5 的所有实验 理解每个旋钮的作用
网格搜索 选 2-3 个关键旋钮,每个取 2-3 档,全组合跑一遍 组合少(≤20 组)、算力便宜时
随机搜索 在区间里随机采样 组合空间大时(每档效果差距不大)

2. 网格搜索的纪律(缺一条就变成玄学)

  1. 只在验证集上调——测试集碰都不碰(S2-02 的铁律)
  2. 每组固定种子,可复现
  3. 记录所有组合结果,不只记最好的——失败的组合同样有信息量
  4. 收益递减就停:最优组与次优组差距 < 噪声水平(参考 S6-02 的 std)就收手

3. 本机规模

2000 样本 × 2 epoch × 9 组 ≈ 5-10 分钟。先用小规模搜索,找到方向后再在全量数据上验证一次——这也是工程惯例(小数据探路,大数据定音)。

实验任务

任务 1:写网格搜索脚本(35 分钟)

# s5_grid_search.py —— 3×3 自动搜索 + 排行榜
import itertools
LRS, BATCHES = [1e-4, 1e-3, 1e-2], [32, 128, 512]
leaderboard = []
for lr, bs in itertools.product(LRS, BATCHES):
    torch.manual_seed(42)
    # ... 2000 样本训 2 epoch(复用你写熟的代码)
    leaderboard.append((lr, bs, val_acc, test_acc, seconds))

leaderboard.sort(key=lambda r: -r[2])
print("排名 lr     batch  val_acc  test_acc  耗时")
for i, (lr, bs, va, ta, t) in enumerate(leaderboard, 1):
    print(f"{i:2d}    {lr:g}  {bs:4d}   {va:.4f}   {ta:.4f}   {t:4.0f}s")

任务 2:跑 9 组并解读排行榜(20 分钟)

  1. 前 3 名的 lr 集中在哪个数量级?(呼应 S5-01 的黄金区间)
  2. val 最高组的 test 是不是也最高?若不一致——排序差异说明什么?(val 噪声;这正是 S6-02 交叉验证的动机)
  3. 最差组和最好组差几个点?调参收益 vs 换数据收益哪个大?

任务 3:方法升级思考(10 分钟)

如果参数变成 lr × batch × dropout × weight_decay 各 3 档 = 81 组,网格还行吗?说说你会怎么办(答要点:先单变量粗筛 → 只留敏感参数做网格 → 或转随机搜索)。

验收标准

衔接下一阶段

会搜了,但"搜出来的分"可信吗 → S6-01 混淆矩阵与类别指标:进入评估阶段,先看准确率怎么骗人。

小测验(2 题)

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