- 手工调参
- 从一个比较好的baseline开始(质量比较高的工具包,好论文的超参数)
- 每次只调一个值,训练后查看变化
- 重复多次去得到:
- 哪些超参数比较重要
- 模型对超参数的敏感性(设的好也不会有很大的提升,但是设的差就很烂)tip:希望我们的模型对超参数不敏感。例如adam,虽然不会导致精度太好,但是对模型的学习率这些超参数不会太敏感,所以大多数模型构建都选择adam
- 看哪一个range是比较好的参数范围
- 需要做好实验管理
- 把训练的日志和所有的超参数记录下来
- 最简单的方法是存储logs进入txt,把训练误差等放在excel中
- tensorborard,weights&bias
- 复现实验是难的,因为关于:
- environment(hardware (例如使用了gpu也会导致结果不一)& library(库),python version)
- code(版本控制)
- randomness(随机种子,dropout,部分的库) 做法:多个模型做ensemble加权平均等能做更好的评估
tip:个人在做模型时,数据分割已经固定,但是acc上下还是浮动十分大,猜想是训练时的dropout和batch组合随机带来的acc变化,并且colab的gpu也是不固定的。
- 自动调参
- 原因:机器的花销降低,人的花销提升
- 每次为经典的ML任务训练的花销低,但是数据科学家工资高,用算法调一千次还是比大部分数据科学家强
- Eg 1m logs,10k image
- AutoML
- 超参数优化(HPO):通过搜索算法找到一组好的超参数
- 神经结构搜索(NAS):构建良好的神经网络模型
总结:我的模型是较小的,用Automl是个不错的方法,可以自己找方法去实现automl。在自己调参时一定要做好记录,这样才能总结并比对不同参数的重要性和敏感度。