大意是我们首先对目标函数形状有个先验,然后在每次迭代 1. 在当前对目标函数形状的后验估计下(当然首次迭代就直接用先验),在某个“最可能是最优”的地方取点,获得其函数值;2. 根据刚才的点及其函数值,更新函数的后验估计。
上面说的“最优位置”一般是两个指标的折衷:1. 在当前后验估计下,函数最优值的位置(exploitation);2. 尽量也试一试其他的位置,说不定有惊喜(exploration)。
以流行的
GP-UCB(Gaussian Process - Upper Confidence Bound)为例。我们把目标函数看成一个高斯过程(
Gaussian process)。那么在第次迭代,我们取,其中和分别为上一次迭代的后验均值和后验标准差在处的值,为某个系数(看论文);然后通过和更新后验估计并得到和。不了解怎么更新的看维基页。很明显一项对应exploitation,而一项对应exploration。论文证明了这个策略的误差界。
这个东西有各种各样的推广,比如说针对 time-varying 的目标函数,比如说如何使所需迭代数更小。比较有意思的一篇论文是
Bayesian optimization explains human active search,从实验角度证明了 Bayesian optimization(不仅仅是GP-UCB)与人类优化策略之间的相似性。