很久之前就听过这个但没具体了解,分享下学习到的东西,主要是在深度学习里一般怎么用。
贝叶斯优化是一种“聪明”的调参方法,擅长解决一些expensive的优化问题,比如超参数搜索,如果用grid search每一次「评估目标函数」(训练一次模型并查看性能)都需要花费大量的时间/金钱。
这里面有几个关键概念:
1️⃣ 代理模型 Surrogate Model:这是一个概率模型,用来近似我们想要优化的函数,比如超参数搜索的函数hyperparameters → performance,最常用的是Gaussian Process,它能给出一个预测均值和置信区间来表示预测的不确定性
2️⃣ 利用 Exploitation:在当前已知最好的区域附近进行搜索,因为它很可能产生更好的结果
3️⃣ 探索 Exploration:去那些不确定性很高的区域进行搜索,因为那里可能隐藏着全局最优解
4️⃣ 采集函数Acquisition Function:直接用来指导下一步该在哪里进行评估的决策函数,比如超参数搜索中,下一步尝试什么样的超参数来训练模型。常用的采集函数比如Expected Improvement,计算一个点相比当前最优点的预期提升量,本质就是计算一个期望
举例:贝叶斯优化用于超参数搜索
1️⃣ 初始化数据:随机选择几个超参数组合,用他们训练模型拿到结果,比如accuracy。
2️⃣ 建立模型:用这些初始数据点(超参数组合就是x,accuracy就是y)来训练一个代理模型,比如高斯过程。
3️⃣ 循环开始:
(a)使用采集函数,在整个参数空间中寻找下一个最有希望的点
(b)在步骤 (a) 找到的点上,也就是新的超参数组合训练一个新的模型,拿到acc
(c)将新的数据点加入到观测数据集中,并更新高斯过程
4️⃣ 终止:重复步骤3,直到达到预设的迭代次数或预算用尽,然后返回找到的最优解
当然贝叶斯优化也有一些缺点,比如维度诅咒,高维空间中很难建立一个好的代理模型,通常需要大量的数据,但大量的迭代也大大增加计算开销。
另外高斯过程的性能依赖于选择核函数,也是一个额外的超参数。不过相比于暴搜,一般情况下贝叶斯优化会高效得多
常用的开源库如果是sklearn的模型可以用skopt,如果是pytorch模型可以用Optuna,这个超参优化开源库是框架无关的,可以和任何模型集成,也支持贝叶斯优化外的各种优化策略
转载请注明来自海坡下载,本文标题:《贝叶斯优化(什么是贝叶斯优化)》
京公网安备11000000000001号
京ICP备11000001号
还没有评论,来说两句吧...