以一个经典的黑箱函数——黄金储量预测为例:假设我们想在一个区域内开采黄金,首先需要探明哪个位置的黄金储量最大,由于钻探设备,人力都很昂贵,我们需要在最少的次数内探明最值得开采的地方。这就是一个典型的昂贵的黑箱函数优化:每次函数的计算都会十分地耗时,每打一次孔就相当于贝叶斯优化过程中去新加一个样本点并带回原函数计算,再利用新加的样本点让我们的预测模型更加精确,我们目标是在增加最少点的情况下找到储量最大的位置。当我们一无所知的时候,可以随机先钻三个孔并利用这三个孔点的储量信息建立一个初代的模型,如图1,纵坐标为黄金储量(请忽略具体数值和单位),横坐标代表位置。
图1 黄金储量预测
那么问题来了,下一个孔钻在哪里?假设我们已有 图1中的黄金储量预测模型,在不知道真实储量分布时(True Gold Content),只从模型预测结果(Prediction)来看,在2附近与4到5之间发现高储量可能性较大,因为这里距离已探明的高储量孔点很近,且第一,第三个孔点的储量都高于第二个孔点,但还有另外一个问题,0到2附近在第一次钻孔时并没有覆盖到,在这里我们具有的信息非常少,模型预测的偏差很大,这些地方的不确定性很高,在后验模型里表现为方差大,我们是否需要冒险在方差大的地方钻一下试试呢?
我们在上述问题中纠结下一个孔打在哪里的问题就是贝叶斯优化中采集函数要解决的问题,这是一个经典的权衡探索 (exploration) 和挖掘 (exploitation) 的问题。在贝叶斯优化过程中,利用初始样本点对黑箱函数建模并经过训练后,我们得到一个概率模型,接下来采集函数会决定如何增加样本点。采集函数α(x)反映的是新样本点加在x处将会给优化带来的收益,是一个关于x的函数,需要通过优化方法解出argmax(α(x)),即收益最高的加点位置。下面我们介绍两个历史悠久的采集函数。
Probability of improvement,PI
Probability of improvement(PI) 由Kushner 于1964 年提出,最初用于响应面法(Response Surface),也是贝叶斯优化最早的采集函数,其基本思想是利用后验模型估计函数值大于(假设目标是找最大值)目前实际观测值中最大值fn*的概率来找下一个加点位置。
其中,μ(x),σ(x)是根据后验模型得到的期望和方差,ξ ≥ 0为可调参数,Φ(·)是标准正态分布的累积分布函数。
PI本身是挖掘(exploitation)的过程,代表不确定性的方差σ(x)在这个方法中的作用很小,即使是不确定性很小的地方(如已有观测值附近)亦可能计算得到一个较大的PI值,使得整个优化过程陷入局部最优解。虽然PI可以通过设置ξ的值来达到平衡挖掘和探索的作用,如图 2,但仍不能避免的问题是ξ的取值需要针对不同问题具体定义而且算法对的ξ值很敏感,ξ过小则起到的作用不大算法还是会陷入局部最优,ξ过大又会大大降低效率,在实际使用过程中很容易出现反复在最大观测值附近取得最大值,对函数建模的效率及精度提升十分有限。
图2 ξ 取值对PI的影响
Expected Improvement,EI
EI 是从一个思想实验中推导出来的,设想我们正处在贝叶斯优化寻找函数最大值的第n次迭代中,如果我们不能再继续加点,那么最优解f就应该是目前观测值中的最大值fn*。当我们还可以继续增加样本点进行下一次迭代时,假如将样本点加在x处,我们会得到观测值f(x),如果f(x)>fn*,那么这次加点的提升为f(x) – fn*,否则提升为0。用[f(x) – fn*]+表示加点对模型的提升,我们需要在得到观测值之前就决定加点的位置所以我们对这个提升取期望,定义EI为
其封闭表达式为
新的加点位置为
其中Φ(·)和φ(·)分别为累计分布函数 (Cumulative Distribution Function, CDF)和标准正态分布的概率密度分布函数 (probability density function, pdf)。argmax(EIn(x))的计算可以使用L-BFGS(详《当Bayesian Optimization遇到L-BFGS》)。图 3是黄金储量问题中使用EI作为采集函数时的情况。
图3 黄金储量问题的EI图像
PI和EI提出的都很早,而从2012年开始,基于香农(C.E.Shannon)的信息熵(Entropy)理论引入信息增益提出基于熵搜索的采集函数。熵可以理解为对不确定性的量化,而有用的信息可以降低熵。熵搜索等采集函数更关心下一个加点位置对降低模型不确定性和极值点分布的不确定性的贡献。换句话说,基于提升的PI和EI选取的的加点位置是根据本代并不完全精确的模型找到的,熵搜索的方法考虑到这样的预测到的点基本与真实极值点一定是存在差距的,所以转而选取可以最大限度降低不确定性的点。目前基于熵搜索的方法有(ES,PES和MES)等,由于涉及到很多关于信息熵的知识,本文就不仔细介绍了。
EI与PI对比
测试函数选用《当Bayesian Optimization遇到L-BFGS》中使用的Branin函数,其函数图像如图4所示
图4 Branin函数图像
我们设定初始样本点为三个,用EI和PI各自重复20次,记录每一代新加样本点观测值,评价函数采用观测值与Branin函数实际最小值(0.397887)的差值取log10便于比较EI与PI收敛的速度与解的精度关于迭代次数的变化。
图5 EI与PI测试对比结果
测试结果如图5所示,其中阴影部分为各自的标准差范围,实心点为20次重复测试的均值,我们可以发现EI在前期的收敛速度明显快于PI,而同样达到最终收敛条件时EI比PI少进行4次左右的迭代,根据测试结果,EI是优于PI的。
为了方便大家交流技术和互通行业资讯,
请添加我们“转自:非解构-公众号”微信,
加入相关讨论交流群。