贝叶斯优化

贝叶斯优化

贝叶斯优化简介

贝叶斯优化(BayesOpt)是一种及其学习优化方法,用来解决黑盒无衍生全局优化(black-box derivative-free global optimization)问题,即函数只知道输入和输出,不知道其中的结构和具体函数形式,也没法求导。

maxxAf(x)\max_{x\in A}f(x)

参考[1] P. I. Frazier, “A Tutorial on Bayesian Optimization,” Jul. 2018, Accessed: Oct. 13, 2021. [Online]. Available: https://arxiv.org/abs/1807.02811v1.

可行域和函数具有以下性质:

  1. xRdx\in \mathbb{R}^d,其中d20d\leq 20比较成功概率较高。
  2. 可行域是一个简单集合,其中元素效果,也就是对应的函数值很容易评估。例如:xRd:aixibi{x\in \mathbb R^d:a_i\leq x_i\leq b_i}或者dd维简单集合xRd:ixi=1{x\in\mathbb R^d:\sum_i x_i=1}
  3. 目标函数连续,因为优化过程要用高斯回归。
  4. ff很难评估,可能只能评估几百次,因为每次评估所需要的时间都比较长,算力比较大。
  5. ff不具备一些容易用来优化的结构,比如线性或者凸/凹函数,有这些结构的函数可以用方法提高效率。简而言之,ff是黑盒函数。
  6. 对于xx我们只能获得对应的函数值f(x)f(x),不能获得一阶或者二阶导数,所以不能用梯度下降、牛顿法、逆牛顿法等方法来直接优化,这种性质称为不可求导性
  7. ff一般认为没有噪声,但实际可以有随机噪声,噪声与函数值独立且服从方差恒定的高斯分布。
  8. 目标是寻找全局最优解而不是局部最优解。

贝叶斯优化的基本思路

贝叶斯优化主要包含两部分,统计推理的方法获取函数。统计推理的方法用来获取后验概率,获取函数用来基于后验概率来寻找下一个最优点。

主要思路为:

  1. 假定有了一些目标函数的输入和对应的输出(采样值),先对目标函数进行高斯过程先验,用高斯回归对对这些数据进行拟合。
  2. 在已有的采样数据上更新对ff的后验概率分布。
  3. 根据后验概率分布,构建获取函数,寻找获取函数最大的点,作为下一个最优解。
  4. 重复2-3过程,记录其中函数值最大的那个点作为全局最优解。

最常用的统计推理方法是高斯回归(GP Regression),最常用的获取函数为Expected Improvement(EI)。

高斯回归

给定一组采样序列

[(x1,f(x1),(x2,f(x2),,(xn,f(xn)][(x_1,f(x_1),(x_2,f(x_2),\cdots,(x_n,f(x_n)]

利用高斯回归获得的先验概率分布为

f(x1:k)Normal(μ0(x1:k),Σ0(x1:k,x1,k))f(x_{1:k})\sim \text{Normal}(\mu_0(x_{1:k}),\Sigma_0(x_{1:k},x_{1,k}))

其中x1:kx_{1:k}表示序列x1,x2,x3,,xnx_1, x_2, x_3, \cdots, x_nμ()\mu(\cdot)是均值函数,Σ0(,)\Sigma_0(\cdot,\cdot)是协方差函数。

f(x1:k)=[f(x1),f(x2),f(x3),,f(xn)]f(x_{1:k})=[f(x_1),f(x_2),f(x_3),\cdots,f(x_n)]

μ0(x1:k)=[μ0(x1),μ0(x2),,μ0(xn)]\mu_0(x_{1:k})=[\mu_0(x_1),\mu_0(x_2),\cdots,\mu_0(x_n)]

Σ0(x1:k,x1:k)=[Σ0(x1,x1),...,Σ0(x1,xk);...;Σ0(xk,x1),...,Σ0(xk,xk)]\Sigma_0(x_{1:k},x_{1:k})=[\Sigma_0(x_1, x_1), . . . , \Sigma_0(x_1, x_k); . . . ; \Sigma_0(x_k, x_1), . . . , \Sigma_0(x_k, x_k)]

  1. 常用的均值函数为μ0(x)=μ\mu_0(x)=\mu,如果ff有某种趋势或者某些应用特殊的参数结构,也常用如下函数:

    μ0(x)=μ+i=1pβiΨi(x)\mu_0(x)=\mu+\sum_{i=1}^p\beta_i\Psi_i(x)

    其中Ψi\Psi_i是一个参数方程,是xx的低阶多项式。

  2. 常用的协方差函数为power exponential kernal和Matérn kernal.

    power exponential kernal

Σ0(x,x)=α0exp(xx2)\Sigma_0(x,x')=\alpha_0\text{exp}(-||x-x'||^2)

​ 其中α\alpha为参数.

​ Matérn kernal

Σ0(x,x)=α021νΓ(ν)(2νxx)νKν(2νxx)\Sigma_0(x,x')=\alpha_0\frac{2^{1-\nu}}{\Gamma(\nu)}(\sqrt{2\nu}||x-x'||)^\nu K_\nu(\sqrt{2\nu}||x-x'||)

​ 其中KνK_\nu是修改后的贝塞尔函数,参数包括ν\nuα0:d\alpha_{0:d}

从已有的采样序列获取任意新一点xx的函数值f(x)f(x),即求f(x)f(x1:n)f(x)|f(x_{1:n}),也就是后验分布,同样满足正态分布。

f(x)f(x1:n)Normal(μn(x),σn2(x))μn(x)=Σ0(x,x1:n)Σ0(x1:n,x1:n)1(f(x1:nμ0(x1:n))+μ0(x)σn2(x)=Σ0(x,x)Σ0(x,x1:n)Σ0(x1:n,x1:n)1Σ0(x1:n,x)f(x)|f(x_{1:n})\sim \text{Normal}(\mu_n(x),\sigma_n^2(x))\\ \mu_n(x)=\Sigma_0(x,x_{1:n})\Sigma_0(x_{1:n},x_{1:n})^{-1}(f(x_{1:n}-\mu_0(x_{1:n}))+\mu_0(x)\\ \sigma_n^2(x)=\Sigma_0(x,x)-\Sigma_0(x,x_{1:n})\Sigma_0(x_{1:n},x_{1:n})^{-1}\Sigma_0(x_{1:n},x)

选择超参数

获取函数

获取函数用来取舍,开发exploitation)与探索exploration)之间的关系,常用的获取函数有EI函数,knowledge gradient,entropy search,predictive entropy search。EI函数已经很好用了,其余函数主要为了解决一些额外的“exotic”问题。开发代表均值高(实线高),探索代表不确定度大(虚线范围大)。

如图所示的高斯过程。

EI函数

假如我们已经观测n个点,并且没有评估的机会,要从中找到让ff尽量大的点,最好就是选择fn=maxmnf(xm)f_n^*=\max_{m\leq n}f(x_m)作为选择的 点。如果我们还有评估的机会,可以再找一个点xx,看新的点f(x)f(x)和已有的最大点fnf_n^*哪个更大,选择更大的点,所以将二者之差作为评估的标准,由于获取函数要求大于0,所以

EIn(x):=En[[f(x)fn]+]\text{EI}_n(x):=E_n[[f(x)-f_n^*]^+]

这里En[]E_n[\cdot]是根据已有的点获得的后验概率,满足参数为μn(x)\mu_n(x)σn2(x)\sigma_n^2(x)的正态分布。

EI函数还有另一种更容易求解的形式(Jones et al. (1998) or Clark (1961))

  • Jones, D. R., Schonlau, M., and Welch, W. J. (1998). Efficient global optimization of expensive black-box functions. Journal of Global Optimization, 13(4):455–492.
  • Clark, C. E. (1961). The greatest of a finite set of random variables. Operations Research, 9(2):145–162.

表达式为

EIn(x)=σn(x)φ(Δn(x)σn(x))+[Δn(x)]+Δn(x)Φ(Δn(x)σn(x))\text{EI}_n(x)=\sigma_n(x)\varphi\left(\frac{\Delta_n(x)}{\sigma_n(x)}\right)+[\Delta_n(x)]^+-|\Delta_n(x)|\Phi\left(\frac{\Delta_n(x)}{\sigma_n(x)}\right)

其中Δn(x):=μn(x)fn\Delta_n(x):=\mu_n(x)-f_n^*,衡量了新的观测点和已有观测点之差,φ(x)\varphi(x)Φ(x)\Phi(x)分别是概率密度(CDF)函数和概率分布(PDF)函数。

最优评估点选择为

xn+1=argmaxEIn(x)x_{n+1}=\arg\max\text{EI}_n(x)

另一种表达式写法为:

EIn(x)={(μn(x)fnξ)Φ(Z)+σn(x)φ(Z)  if σn(x)>00                                                             if σn(x)=0\text{EI}_n(x)=\left\{\begin{aligned} &(\mu_n(x)-f_n^*-\xi)\Phi(Z)+\sigma_n(x)\varphi(Z)~~\text{if}~\sigma_n(x)>0\\ &0~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\text{if}~\sigma_n(x)=0 \end{aligned}\right.

其中

Z={μn(x)fnξσ(x)  if σ(x)>00                            if σ(x)=0Z=\left\{\begin{aligned} &\frac{\mu_n(x)-f_n^*-\xi}{\sigma(x)}~~\text{if}~\sigma(x)>0\\ &0~~~~~~~~~~~~~~~~~~~~~~~~~~~~\text{if}~\sigma(x)=0 \end{aligned}\right.

其中ξ\xi用来衡量开发和探索的比重,一般取ξ=0.01\xi=0.01,其值越大exploration越大,选取的最优点的方差(不确定度)相对越大;其值越小,exploitation越大,选取的最优点的均值相对越大。