很多人在做深度学习实验时,参数也调了,搜索空间也拉满了,但效果就是不稳定。
其实问题往往不在"参数不够多",而在于------调参顺序是乱的。
调参不是玄学,而是有优先级和逻辑顺序的。
一、先保证"能稳定训练",再谈效果
在任何调参之前,先确认一件事:模型能不能正常收敛。
重点看三点:
- loss 是否持续下降,而不是剧烈震荡
- 训练集和验证集曲线是否基本合理
- 不出现 NaN、梯度爆炸、直接崩掉的情况
如果这一步都不稳定,后面的指标对比是没有意义的。
二、学习率(Learning Rate)
学习率永远是最重要的参数,没有之一。
经验:
- loss 不降 → 学习率可能太大
- loss 降得很慢 → 学习率可能太小
- loss 上下震荡 → 学习率大概率不合适
在不确定时,先用一个相对偏小但稳定的学习率,确保模型能学,再考虑调大。
记住一句话:学习率没调好,其他参数基本都是噪声。
三、batch size 与优化器
在学习率基本可用之后,再调整这两项。
1、batch size:
- 小 batch:噪声大,泛化好,但不稳定
- 大 batch:收敛稳,但容易过拟合
2、优化器
- Adam / AdamW:收敛快,调参友好
- SGD:泛化好,但对学习率更敏感
通常建议:先用 Adam 类优化器跑通流程,再考虑是否换 SGD。
四、正则化相关参数
这一步是为了解决过拟合问题。常见可调项包括:weight decay、dropout、label smoothing
调参逻辑是:
- 训练集好、验证集差 → 加强正则
- 两边都差 → 别急着加正则,先回头看学习率和模型容量
五、训练策略与技巧
在模型基本稳定后,再考虑这些"锦上添花"的东西:
- 学习率调度策略(cosine、step、warmup)
- EMA、梯度裁剪
- 混合精度、梯度累计
这些通常带来的是小而稳定的提升,而不是质变。
六、最后才是模型结构相关参数
这是最容易被"提前动手"的一层,但应该放在最后。包括:
- 网络深度 / 宽度
- 模块数量
- 隐藏维度
如果前面的参数没固定好,结构怎么改,结论都不可靠。
总结一下,推荐的调参顺序是:
1️⃣ 学习率
2️⃣ batch size & 优化器
3️⃣ 正则化参数
4️⃣ 训练策略
5️⃣ 模型结构
每一步只动一个变量,并且记录结果。
调参本质上是一次次假设验证,而不是盲目搜索。
顺序对了,实验效率自然就上来了。