本文持续更新,主要主要介绍贝叶斯优化
关于贝叶斯优化
- 贝叶斯优化(Bayesian Optimization,简称BO)主要用于解决超参数优化问题,目标是找到一组使得目标函数最大或者最小的超参数
- BO的最大优势是可以使用非常少的步骤找到一个还不错的超参数组合,而且不需要知道目标函数(模型)的梯度
- BO使用的场景特点:
- 需要优化的函数(模型)是非常复杂的
- 需要优化的函数(模型)对指定的变量(一般指超参数)没有梯度信息(求不出梯度)
- BO不适合使用的场景包括:
- 离散问题,即参数是离散的,则不适合使用BO
- 参数太多,即参数维度过高,此时不适合使用BO
- 和BO的适用场景和进化算法(如CEM等)比较相似
贝叶斯优化的一般步骤
- 贝叶斯优化(Bayesian Optimization)算法是一个序列决策过程(Sequential Decision-making Problem),其核心框架是SMBO (Sequential Model-Based Optimization),而贝叶斯优化狭义上特指代理模型为高斯过程回归模型的SMBO,SMBO的一般算法思路如下:
- 第一步:初始化采样n组参数\(\{x_1,x_2,…,x_n\}\)
- 第二步:针对每组参数,观察目标函数(待优化模型)的值(这一步一般需要训练模型或者模拟环境仿真,是成本比较高的操作),将得到的结果组合生成数据集\(D=\{(x_1,y_1),(x_2,y_2),…,(x_n,y_n)\}\)
- 第三步:根据数据集D拟合(训练)一个代理模型(Surrogate Model),该代理模型的功能是通过输入\(x_i\)预测输出\(y_i\)
- 第四步:根据采集函数(Acquisition Function,简称AC Function),选择一个最优参数\(x_i\)
- 第五步:观察目标函数(待优化模型)在参数\(x_i\)下的输出值\(y_i\),并将\((x_i,y_i)\)添加到数据集D中
- 循环执行第三步到第五步,直到达到指定的迭代次数
- 最终:输出数据集D中最优的参数\(x^*\)
代理模型
- 代理模型一般是非常容易计算的,或者有梯度的,给出任意的\(x_i\)能快速预估\(y_i\)的
- 常见的代理模型可以是:高斯过程回归、随机森林等等。其中,贝叶斯优化狭义上特指代理模型为高斯过程回归模型的SMBO。
- 高斯过程回归可参考:
采集函数
- 通常做法是设计一个采集函数A,对每个采样点x进行打分,分数越高的点越值得被采样。
- 一般来说,采集函数需要满足下面的要求:
- 在已有的采样点处采集函数的值更小,因为这些点已经被探索过,再在这些点处计算函数值对解决问题没有什么用
- 探索:在置信区间更宽(方差更大)的点处采集函数的值更大,因为这些点具有更大的不确定性,更值得探索
- 利用:对最大(小)化问题,在函数均值更大(小)的点处采集函数的值更大,因为均值是对该点处函数值的估计值,这些点更可能在极值点附近。
- 常用的AC Function包括下面几种:
- Probability of Improvement:
- Expected Improvement:
- Entropy Search:
- Upper Confidence Bound: