本节摘要:把搜索策略落进真正的工具,并解决"我合过跑了很多组,却恨不得一个个回头看"的记录问题。本节介绍主流搜索框架的用法要点,以及一套能支撑归因、可复现、可复盘的实验记录规范。
阅读完本节,你应当能够:
前文我们讲了网格、随机、贝叶斯、进化。真正动手时,成熟的调优框架替你处理了"空间定义、采样策略、结果存档、可视化"这些杂事,让你把精力留在"定义目标"与"解读结果"上。
现代深度学习与经典库都带超参搜索能力,核心 API 高度相似:
# 示意:网格搜索的概念性写法 from sklearn.model_selection import GridSearchCV, RandomizedSearchCV param_grid = {"lr": [1e-4, 1e-3, 1e-2], "reg": [0, 1e-4]} gs = GridSearchCV(estimator=estimator, param_grid=param_grid, cv=3, scoring="accuracy") gs.fit(X_train, y_train)
# 示意:贝叶斯优化型搜索框架(概念性) import optuna study = optuna.create_study(direction="maximize") study.optimize(objective, n_trials=30) # objective 内做昂贵训练并返回验证分 best = study.best_params
要点不在记 API,而在想清楚三件事:①搜什么(空间)、②拿什么做信号(务必验证集/交叉验证,别用测试)、③要搜多少组(预算)。框架是好帮凶但不替你决定后两件。
这里最容易犯的一个隐蔽错误是信号选错。有些框架默认会拿同一份数据既训练又评估(比如没做交叉验证的 GridSearch),这样搜出来的"最优"等于在训练集上自说自话,验证毫无意义。诚实的做法是给每份评估留出它没参与训练的那部分数据,或者干脆用 k 折交叉验证。你可以在代码里显式传 cv=3 这样的参数,但更重要的是理解它在干什么——它不是"顺便帮你多跑三次",而是"让分数更有资格代表没见过的那部分分布"。
搜索最怕"跑了一堆、忘了哪组跑过、用的什么"。一套靠谱的实验管理至少记四件事:
| 字段 | 内容 | 用途 |
|---|---|---|
| 配置 | 每个旋钮的值 + 随机种子 | 复现 |
| 结果 | 训练/验证损失曲线、最终验证分 | 对比 |
| 结论 | 组长记一句"为什么这个值/改了什么" | 复盘 |
| 版本 | 数据版本、代码版本、依赖版本 | 归因 |
检查点也在这里接上第四章:训练中途存下的最优参数,配合日志,随时能恢复到某个实验的"当时状态"。所谓"可复现",不只是"把种子固定",而是"任何人拿到配置与版本都能得到同样的分数与曲线"。
记录只有一个字段表还不够,落到磁盘上还要有一套一致的命名与目录,才能让"一堆实验"变成"一本可检索的账"。一个粗糙但非常好用的约定是:每个实验一个目录,目录名 = 实验编号,里面固定放 config.json、logs/、checkpoints/、summary.md。config.json 存所有旋钮的值与随机种子,logs/ 存每轮的训练/验证曲线,checkpoints/ 存可恢复的最优参数,summary.md 记一句人话结论。这样的好处是十年后打开这个目录,不用问任何人,光靠文件就知道"当时跑的是什么、结果如何"。
更进阶的做法是让配置和结果分离但可对应:把"规则、需要复现的配置清单"放一份,把"每个实验的实际结果清单"放另一份,用实验编号把二者连起来。这样你在某个口径下改了基线,只需重新编号跑一次,而不会把旧结果跟新配置混在一起。所谓"实验管理",管理的就是"配置 ↔ 结果 ↔ 结论"这组一一对应关系;对应关系一旦乱掉,前面所有的搜索都失去了"可归因"的价值。
如果你还没搭过任何实验管理,先别一步到位上重型平台,从最小可用的一套开始:①固定的随机种子,②一个能导出配置的脚本入口(而不是靠手敲参数),③每轮落一份曲线与检查点,④每改一次超参就升一个实验编号。满足这四条,你的实验就已经进入了"能复盘、能归因"的轨道。当你发现单机一个脚本开始记不过来了,再往上换更重的工具也不迟。多数翻车不是缺工具,而是连这四条起码的纪律都没守住。
回到本册主线——"把调参当受控实验"。实验管理正是把"受控"落成系统的地方:
⚠️ 常见坑:只在备忘、便签里记结论,丢了版本号与种子。半年后模型要复训,你只能靠猜。至少把"配置+种子+版本"结构化记进实验室存一份。
💡 直觉:好的实验记录让它"能被人接着做"而不是"只有我记得"。写的时候想一下"如果我下个月接这个项目,读这段数据能不能自己跑起来"。能,才算合格。
单机单卡在第六站打磨到很优了。下一章把方案推到工业级:迁移、蒸馏、剪枝量化、分布式与上线后的概念漂移。