课程ppt链接:https://c.d2l.ai/stanford-cs329p/_static/pdfs/cs329p_slides_12_1.pdf
课程:9.2 超参数优化【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili
目录
一、人工调参
- 参考模型中的超参数,获得一个还不错的base line
- 每次只调整一个值,看模型的变化
- 重复多次,获得调参的感觉
- 哪个超参数比较重要
- 模型对哪个超参数比较敏感(也可能选择对超参数不太敏感的算法,比如Adam,可能精度没有SGD高,但是在一个比较大的区间内更好,更容易调参)
- 超参数的寻参范围
- 需要详细记录实验信息
- 保存训练日志和超参数,用于后续进行比较、分享、重现
- 用text保存log,将详细的参数、metrics保存在excel
- 使用现有的工具,比如Tensorboard、weights&bias
- 复现比较困难,因为
- 环境(硬件&library)
- code
- 随机性(seed),数据本身、dropout等都可能导致随机结果不一致。
二、AutoML
2.1 搜索空间
搜索空间是指在给定条件下,可能出现的所有可能性的集合。
调参所做的事情就是在搜索空间中寻找最优解
2.1.1常见参数的搜索空间以及分布
- 学习率:
- 一般取值:[1e-6,1-e-1]
- 分布:log-uniform,就是在[-6,-1]中随机均匀采样,再将采样后的结果映射会原本空间内(e^n)
- batch_size:
- 一般取2的n次方,加速计算(数据分配到相同的线程中)
- momentum:
- 在[0.85,0.95]区间内均匀采样
- weight decay
- 一般取值:[1e-6,1-e-2]
- 分布:log-uniform
2.2 超参数的优化的分类
HPO:Hyperparameter optimization,超参数优化
1)黑盒:
完整训练所有的训练过程,输入是一组超参数,输出是训练结束后的模型以及模型指标。
适用于所有机器学习算法。
2)多精度方法
完整的训练特别贵,只是为了寻找更优的超参数,很多情况下不需要完整数据、模型来进行训练。所以多精度方法实际上是尽可能地降低寻参的代价。常见的方法有:
1.对数据集进行采样
2.减小模型的尺寸(resnet-50->resnet18)
3.早些停止比较差的配置(训不起来或者梯度爆炸)
常见超参数优化的算法
1.网格搜索
搜索搜索空间中所有可能的组合
当搜索空间比较大的时候,会产生维度灾难
2.随机搜索
在搜索空间中随机选取可能的组合
根据次数or精度停止(一段时间内精读不变,或者精读满足需求)
3.贝叶斯优化
学习超参数到目标函数的一个函数
(区别:机器学习学的是数据到label的一个函数)
根据当前的评估,选择下次trial的方向。
贝叶斯优化的构成
- surrogate model:拟合超参数表现的模型
- 紫色区间表示置信度,虚线是真实的,实线是模型的评估(评估HPO效果的)
- 获取函数(Acquisition function):获取函数的最大值地方表示不置信且目标函数的结果是高的。下次采样的时候就采样获取函数最大值的地方。
贝叶斯优化的缺点:
- 初始阶段,效果等同于随机搜索
- 优化过程是串行的
- 更复杂,需要更多的资源、样本点进行调参,实际使用中,可能是随机搜索更常用一些
4. SH 算法
训练过程:
假设n=16,m=25
第一轮:选取16个超参数组合,,训练25个epoch。
第二轮:选取训练25个epoch后,最优的8个超参数组合,继续训练50个epoch。
每次的超参数组合减半,训练的epoch数双倍,直至收敛。
每轮的训练时长一样,所以可以提前预估自己需要选取多少组超参数来进行寻参。
5. Hyperband
实际上就是多跑几次SH算法,因为有些参数在后面效果才会起来,所以多给它们一些机会。
每次选取上轮SH算法中最好的n组超参数,继续进行下一轮SH算法。
优点:对n和m的选取不那么敏感。
2.3 总结:
- 一般会先使用随机搜索进行寻参
- 有些参数在很多数据集上效果都很优秀,可以记住它们,或者从其他人的论文中寻找别人的超参数组合