探索“贝叶斯优化”
原文来自Distill社区,《Exploring Bayesian Optimization》
贝叶斯优化与其他优化算法一样,都是最大化或者最小化某个函数。相比起其他算法,贝叶斯优化适用于任何未知函数。
引子
假设我们要优化f(x),它的形状如图:
有两个常见的目标:
- 主动学习:估计出f(x)形状;
- 贝叶斯优化:找到最有可能是最高点的x。
主动学习
因为昂贵的计算成本,我们只能计算几次f(x),所以需要一个代理模型来代表未被计算过的地方f(x)的取值。常用的代理模型有高斯过程,在这里使用它。
通过计算f(x),可以更新代理模型,如图所示:
最开始代理模型是一个平滑分布的GP,通过一次探索(红点),代理模型根据贝叶斯规则得到了更新。
在这样的更新过程中,有这样的问题:为了尽可能地减少探索次数,我们该如何选择探索点?选择不确定度最高的点进行探索。
如图描述了探索的过程,代理模型的随机性在一次次的探索过程中随机性不断降低。
贝叶斯优化
主动学习,通过探索具体的位置来不断更新代理模型,最终我们可以得到关于f(x)的估计。但是存在浪费,我们的目标是寻找最大值,但是我们探索了“低谷”。
贝叶斯优化尝试回答这样的问题:基于目前已知的,那个点是我们接下来应该探索的呢?
这非常重要,因为探索是非常昂贵的,费时的。
做决定的东西被称为:acquisition function,acquisition function启发式地决定下一次探索的点,基于当前模型。
贝叶斯优化算法
- 选择代理模型(surrogate model),e.g. 高斯过程模型;
- 计算某一点的f(x),根据(x,f(x))来更新代理模型;
- 使用采集函数(acquisition function)决定下一次的探索点;
- 重复2-3,直到收敛或者满足终止条件。
特点:
- 免梯度。
- f(x)完全黑箱,甚至可以是一个化学反应。
- 考虑了不确定性。
采集函数
采集函数对贝叶斯优化非常重要,有多种选择,在此介绍PI采集函数(Probability of improvement)。 $$ x_{t+1}=argmax(\alpha(x))=argmax(P(f(x)>f(x^++\epsilon))) $$ 其中f(x^+)是当前查询到的最大值。
如果说代理模型是GP,那么上面的式子可以写为: $$ x_{t+1}=\underset{x}{\operatorname{argmax}} \phi(\frac{u_t(x-f(x^+)-\epsilon)}{\sigma_t(x)}) $$ 还有很多其他的采集函数,针对不同的代理模型,可能会有对应的简化计算。对于上面的f(x)函数,不同采集函数的采集过程如图所示:
可以看出采集函数型比起Random具有一定的指导意义,UCB,EI函数的速度较快。
Links:
一些贝叶斯优化的开源库: