一文详解贝叶斯优化(Bayesian Optimization)原理

参考资料:
Expected Improvement formula for Bayesian Optimisation
通俗科普文:贝叶斯优化与SMBO、高斯过程回归、TPE
理解贝叶斯优化
A Tutorial on Bayesian Optimization

贝叶斯优化是一种求解函数最优值的算法,它最普遍的使用场景是在机器学习过程中对超参数进行调优。贝叶斯优化算法的核心框架是SMBO (Sequential Model-Based Optimization),而贝叶斯优化(Bayesian Optimization)狭义上特指代理模型为高斯过程回归模型的SMBO。

问题介绍

maxxAf(x)

  • 输入:xRd,一般d20,即参数在20个以内。
  • 可行集(feasible set)A 一般是超多边形(xRd:aixibi)或d维的simplex(xRd:ixi=1
  • 在使用贝叶斯优化时,目标函数f
    • 需要是连续函数
    • 评估成本昂贵,能允许执行的次数有限
    • 是黑盒,公式/特征未知,例如:不是凹函数、线性函数之类的。
    • 因为不对函数做任何假设,所以只能访问f,不能访问其一阶、二阶导数。
    • 可以有噪声,但需要假设每个观测值的噪声是独立同分布,均值为0,方差恒定。

SMBO (Sequential Model-Based Optimization)

SMBO是一套优化框架,也是贝叶斯优化所使用的核心框架。它有两个重要组成部分:

  • 一个代理模型(surrogate model),用于对目标函数进行建模。代理模型通常有确定的公式或者能计算梯度,又或者有已知的凹凸性、线性等特性,总之就是更容易用于优化。更泛化地讲,其实它就是一个学习模型,输入是所有观测到的函数值点,训练后可以在给定任意x的情况下给出对f(x)的估计。
  • 一个优化策略(optimization strategy),决定下一个采样点的位置,即下一步应在哪个输入x处观测函数值f(x)。通常它是通过采集函数(acquisition function) 来实现的:
    采集函数通常是一个由代理模型推出的函数,它的输入是可行集(feasible set)A上的任意值,输出值衡量了每个输入x有多值得被观测。通常会从以下两方面考虑:
    • 有多大的可能性在x处取得最优值
    • 评估x是否能减少贝叶斯统计模型的不确定性
      采集函数通常也是容易求最优值的函数(例如:有公式/能算梯度,等),下一个采样点就是可行集上的最大值点,即使采集函数的取最大值的点。

该框架的主要流程是:

代理模型(Surrogate Model)

代理模型可以有很多,高斯过程、随机森林……等等。其中,贝叶斯优化(Bayesian Optimization) 狭义上特指代理模型为高斯过程回归模型的SMBO。

随机过程

随机过程(Stochastic/Random Process)可以理解为一系列随机变量的集合。更具体地说,它是概率空间上的一族随机变量{X(t),tT}, 其中是t参数,而T又被称作索引集(index set),它决定了构成随机过程的随机变量的个数,大部分情况下,随机变量都是无限个的。

  • T={0,1,2,...}时称之为随机序列或时间序列
  • 参数t经常被解释为时间。
  • 参数空间T是向量集合时,随机过程{X(t),tT}称为随机场。
  • 随机过程有时也被称为随机函数(Random Function),因为它也可以被理解为函数值是随机变量的函数。

X(t)表示系统在时刻t所处的状态。的所有可能状态构成的集合为状态空间,记为S。

随机过程的直观理解

随机过程的直观含义是我们在 t=0 时刻(此时此刻)来考虑未来每个时间点会发生的情况。

例如,当我们把t解释为时间,而X(t)解释为粒子位置时,随机过程就可以被直观地理解为粒子的一种随机运动,它在每个时刻下的位置都是随机的,并且不同时刻t1t2对应的X(t1)X(t2)是相关的,它们的相关性由协方差cov[X(t1),X(t2)]定义。

辨析随机变量和随机函数

假设:

  • x是一个变量
  • X是一个随机变量,它服从一个概率分布P(X<t)=p(t)
  • f是一个函数,例如:f(x)=x+1
  • g是一个随机函数

那么有:

  • f(x)代表一个因变量,当x确定时,也确定。例如:f(x)=x+1f(1)=2
  • f(X)代表一个随机变量,它的随机性是随机变量X带来的,所以它的概率分布也跟的概率分布有关。例如:f(x)=x+1P(f(X)<t)=P(X+1<t)=P(X<t1)
  • g(x)也代表一个随机变量,但它的随机性是随机过程g带来的。

高斯过程

高斯过程(Gaussian Process)是一类随机过程{F(x),xA},它的任意n维分布{F(x1),...,F(xn)}(n也是任意的)都服从多元正态分布,即:对任意有限个x1,...,xnAF(x1),...,F(xn)任意线性组合a1F(x1)+...+anF(xn)都是一个正态分布。

正如一个正态分布可以通过指定均值和方差来确定,一个高斯过程可以通过指定均值函数 m(x) 和协方差函数 K(x,x)唯一确定:

m(x)=E[F(x)]K(x,x)=E[(F(x)m(x))(F(x)m(x))]

则高斯过程可以表示为:

F(x)GP(m(x),K(x,x))

均值函数定义了每个索引x对应的随机变量(同时也是正态分布变量)F(x)的均值;而协方差函数不仅定义了每个索引的方差K(x,x),还定义了任意两个索引x1x2对应的随机变量F(x1)F(x1)F(x2)之间的相关性K(x1,x2)

在高斯过程模型里,协方差函数也被称作核函数(Kernel function)。

高斯过程回归

高斯过程回归(Gaussian Process Regression)就是使用高斯过程模型F(x)去拟合目标函数f(x)

让我们先回顾一下,使用正态分布N(μ,σ2)去拟合一个随机变量X的步骤:

  • 建模前,我们知道正态分布的均值和标准差都是常数,分别假设为μσ2
  • 对随机变量X进行t次采样,得到观测值x1,...,xt(简记为x1:t
  • 根据观测值计算出最优的μσ值,由此确定最终正态分布的样子,从而完成对X的拟合

高斯过程回归也是类似的:

  • 建模前,我们需要事先指定好均值函数 m(x) 和协方差函数 K(x,x),它定义了高斯过程F(x)的先验分布。
    • 有一些参数会存在于均值函数和协方差函数中。前面提到的正态分布拟合就像是一种简化:m(x)=μK(x,x)=σ2,这里μσ可以被理解为是两个参数。
  • 选择t个采样索引x1,...,xt(简记为x1:t),得到目标函数的观测值f(x1),...,f(xt)(简记为f(x1:t)),它们同样也是高斯过程里对应的随机变量F(x1),...,F(xt) F(x1),...,F(xt)F(x1:t))的观测值
  • 根据观测值调整均值函数和协方差函数里的参数,由此确定最终高斯过程的样子,从而完成对函数f(x)的拟合。

常用均值函数

  • 常数函数

    m(x)=μ

    这里μ是一个参数。即使将均值统一设置为常数,因为有方差的作用,依然能够对数据进行有效建模。

  • parametric function

    m(x)=μ+i=1PβiΨi(x)

    这里μβi都是参数。

常用协方差函数

在回归任务里,由于目标函数f是连续函数,因此对协方差函数最基础的要求是有该性质:

x与x’距离越近时,f(x)与f(x’)相关性越大。即:

K(x,x1)>K(x,x2), if ||xx1||<||xx2||

常用协方差函数有:

  • Power exponential / Gaussian

    K(x,x)=α0e||xx||2

    这里||xx||2=i=1dαi(xixi)2,不是标准的L2范式的写法,d是自变量x的维度数量,即参数的个数。α0:d是d+1个参数。

  • Màtern

    K(x,x)=α021νΓ(ν)(2ν||xx||)νKν(2ν||xx||)

    Kν是modified Bessel functions of the second kind。

如何计算参数

高斯过程回归模型里的参数(主要是均值函数和核函数里的参数),是根据观测到的数据自动地“学习”出来的。“学习”的方法就是最大后验估计(MAP,Maximum A Posterior estimate),选择在观测值已知的情况下最可能的参数值。

η^=argmaxηP(η|F(x1:t)=f(x1:t))

η代表参数集合,P(η|F(x1:t)=f(x1:t))代表在得到所有观测值的情况下,参数的概率分布。

使用贝叶斯公式进行转换:

P(η|F(x1:t)=f(x1:t))=P(F(x1:t)=f(x1:t)|η)P(η)P(F(x1:t)=f(x1:t))

这也是以高斯过程为代理模型的SMBO又被叫做贝叶斯优化的原因。

由于分母与参数无关,因此只需要最大化分子:

η^=argmaxηP(F(x1:t)=f(x1:t)|η)P(η)

P(F(x1:t)=f(x1:t)|η)是给定参数的情况下,得到所有观测值的概率。

P(η)是参数取值的先验概率,在某些问题,可以假设某些参数更可能被使用。但更常见的情况是假设其为等概率分布,那么MAP就是退化为最大似然估计(MLE, Maximum Likelihood Estimate),即选择使观测值最可能出现的参数值:

η^=argmaxηP(F(x1:t)=f(x1:t)|η)

由于在高斯过程中,观测点x1:t对应的随机变量构成的多维随机变量[F(x1),...,F(xt)](简记作F(x1:t))服从多元正态分布。其中,

  • 分布的均值是一个t维向量:μt=[m(x1),...,m(xt)]。其中,m(xi)代表第i个随机变量F(xi)的期望/均值E[F(xi)]

  • 分布的协方差矩阵是一个t×t的矩阵,记作:

    Σt=[K(x1,x1)...K(x1,xt).........K(xt,x1)...K(xt,xt)]

F(x1:t)的t个观测点f(x1),...,f(xt)(简记作f(x1:t))构成的多维变量是该多元正态分布的其中一个样本:

yt=[f(x1),...,f(xt)]

概率密度函数为

L(x1:t|η)=1(2π)t|Σt|e12(ytμt)TΣt1(ytμt)

由于观测点x1:t和观测值f(x1:t)是已知的,因此,它是一个以参数为变量的函数,我们可以选择使该概率(密度)最大化的参数值

转化为对数似然函数:

lnL(x1:t|η)=12[tln2π+ln|Σt|+(ytμt)TΣt1(ytμt)]

要最大化它,即是最小化:

M(x1:t|η)=ln|Σt|+(ytμt)TΣt1(ytμt)

它是一个已知公式可以求梯度的函数,因此在编程中可以通过梯度下降等方法去求解其最优值。

预测f(x)

在SMBO框架下,代理模型预测的不仅仅是函数值f(x),而是它的后验分布F(x)|F(x1:t)=f(x1:t),即,在已知t个观测点的值的情况下,f(x)取不同值的概率。

由于在高斯过程里,也符合多元正态分布,因此就是多元正态分布的条件分布(或边缘分布)。这个分布服从正态分布,其均值和方差如下:

F(x)|F(x1:t)=f(x1:t)N(μ,σ2)μ(x)=K(x,x1:t)K(x1:t,x1:t)1(f(x1:t)m(x1:t))+m(x)σ2(x)=K(x,x)K(x,x1:t)K(x1:t,x1:t)1K(x1:t,x)

其中,

m(x1:t)=[m(x1),...,m(xt)]

K(x1:t,x1:t)=[K(x1,x1:t)...K(xt,x1:t)]=[K(x1,x1)...K(x1,xt).........K(xt,x1)...K(xt,xt)]

由于均值函数m(x)、协方差函数K(x,x)都是确定公式的函数,公式里的参数也确定下来了,因此μ(x)σ2(x)都是确定的函数,对任意给定的x,都可以计算出值来。

通常,我们使用这个后验分布的期望/均值来作为函数值f(x)的预测值:

f(x)E[F(x)|F(x1:t)=f(x1:t)]=μ(x)

【命题1】对任意A=[a1,...,at]Ti=1,...,t,都有K(xi,x1:t)K(x1:t,x1:t)1A=ai。证明见附录。

因此,对于已经观测到的点xi,i=1,...,t,我们就有:

μ(xi)=f(xi)m(xi)+m(xi)=f(xi)σ2(xi)=K(xi,xi)K(xi,xi)=0

因此,拟合出来的模型就像这样:

绿色阴影部分是预测的95%置信区间。

采集函数(Acquisition Function)

由于代理模型输出了函数f的后验分布F(x)|F(x1:t)=f(x1:t),我们可以利用这个后验分布去评估下一个采样点应该在哪个位置。由于在采集函数阶段我们讨论的都是后验分布,因此后文中将省略条件部分,提到F(x)时指的都是F(x)|F(x1:t)=f(x1:t)

通常做法是设计一个采集函数A(x,F(x)|F(x1:t)=f(x1:t)),它的输入相当于对每个采样点x进行打分,分数越高的点越值得被采样。

一般来说,采集函数需要满足下面的要求:

  1. 在已有的采样点处采集函数的值更小,因为这些点已经被探索过,再在这些点处计算函数值对解决问题没有什么用
  2. 在置信区间更宽(方差更大)的点处采集函数的值更大,因为这些点具有更大的不确定性,更值得探索
  3. 对最大(小)化问题,在函数均值更大(小)的点处采集函数的值更大,因为均值是对该点处函数值的估计值,这些点更可能在极值点附近。

有非常多种采集函数可供选择,这里简单介绍一些作为例子。

Expected Improvement (EI)

当我们已经采样过t个点之后,总会有一个最优点xm,使得:

ft=maxi<tf(xi)=f(xm)

假设我们还可以再观测一轮,得到F(x)=f(x),最优点将在f(x)ft之间产生。不妨令

[F(x)ft]+=max(0,F(x)ft)

由于现在[F(x)ft]+是一个随机变量,因此我们可以计算它的期望:

EIt(x)=E[[F(x)ft]+]=σ(x)ϕ(μ(x)ftσ(x))+(μ(x)ft)Φ(μ(x)ftσ(x))

其中,μ(x)σ(x)是正态分布F(x)的均值和标准差,即后验均值和标准差σ2(x)

φ(x)为标准正态分布的概率密度函数:

φ(x)=12πex22

Φ(x)为标准正态分布的分布函数:

Φ(x)=12πxet22dt

EIt(x)也是一个仅以x为自变量的函数,它的最大值点就是下一个采样点。

x^=argmaxxEIt(x)

由于EIt(x)有公式,计算不费劲,也可以求梯度,找到它的最大值/极大值有很多种现成的方案可以做到,相比于求原目标函数f(x)的最值要简单得多。

  • EIt(x)推导过程

    由于F(x)是正态分布,因此可以通过其概率密度计算出期望:

    EIt(x)=E[[F(x)ft]+]=1σ2π[zft]+e(zμ)22σ2dz=1σ2πft(zft)e(zμ)22σ2dz

    k=zμσ(也是把随机变量F(x)标准化),通过换元法可以得到:

    EIt(x)=1σ2πft(zft)e(zμ)22σ2dz=12πftμσ(σk+μft)ek22dk=σ2πftμσkek22dk+(μft)(112πftμσek22dk)

    由于对g(x)=ex22,有g(x)=xex22。因此

    ftμσkek22dk=g()g(ftμσ)=g(ftμσ)

    由于φ(x)=12πg(x),继续化简:

    EIt(x)=E[[F(x)ft]+]=σ2πg(ftμσ)+(μft)(1Φ(ftμσ))=σφ(ftμσ)+(μft)[1Φ(ftμσ)]

    由于φ(x)是偶函数,且Φ(x)+Φ(x)=1,则有

    EIt(x)=E[[F(x)ft]+]=σφ(μftσ)+(μft)Φ(μftσ)

置信区间边界(Confidence Bound)

对于标准正态分布XN(0,1),给定任意关于x=0对称的区间[z,z],可以通过对概率密度进行积分计算出一个概率p,表示符合标准正态分布的随机变量的值落在该区间的概率为p。

z和p是一一对应的,假设对于给定置信水平p,随机变量X落在置信区间[z,z]的概率为p,z=δ(p),显然

p=δ1(z)=P(zXz)=zzφ(t)dt, z0

δ1(z)就是δ(p)的反函数。而由标准正态分布概率密度函数的对称性可知:

P(Xz)=12+P(0Xz)=12+p2, z0

由于F(x)N(μ,σ),它可以由标准正态分布转化过来:

F(x)=σX+μ

那么对于F(x)N(μ,σ),就有:

p=P(zXz)=P(μzσσX+μμ+zσ)=P(μzσF(x)μ+zσ), z0

也就是说,当给定置信水平p时,其置信区间就为[μzσ,μ+zσ]

可以采用该置信区间的边界作为采集函数。例如,在本文中我们讨论最大化f(x)的优化问题,通常就会使用区间的右边界UCB(Upper Confidence Bound):

UCBt(x)=μ(x)+zσ(x)

其中z是超参数,由想要的置信水平p决定:z=δ(p)

UCB越大,说明在该位置有更高的可能性找到更大的值。

同理,在最小化问题中,通常就会使用区间左边界LCB(Low Confidence Bound)。为了使我们总是找采集函数的最大值点,实际上的采集函数将是左边界的相反数,即:

LCBt(x)=zσ(x)μ(x)

Appendix

命题1证明

【命题1】对任意A=[a1,...,at]Ti=1,...,t,都有K(xi,x1:t)K(x1:t,x1:t)1A=ai

K(xi,x1:t)K(x1:t,x1:t)1=[z1,...,zt],那么有

K(xi,x1:t)K(x1:t,x1:t)1K(x1:t,x1:t)=[z1,...,zt]K(x1:t,x1:t)K(xi,x1:t)=[j=1tzjK(xj,x1),...,j=1tzjK(xj,xt)]

上述式子需对任意K(x,x)都成立。列出方程组,得:

{j=1tzjK(xj,x1)=K(xi,x1)...j=1tzjK(xj,xt)=K(xi,xt)

由于K(x1:t,x1:t)可以求逆,因此它是满秩的,这意味着上面的方程组一定有唯一解。

经过变换得出:

{jizjK(xj,x1)=(1zi)K(xi,x1)...jizjK(xj,xt)=(1zi)K(xi,xt)

由于右侧的项都是一样的,而左侧K(xi,xj),j=1,...t各有不同,要想使他们相等,就必须等于0。因此解得:

{zi=1zj=0,ji,j=1,...t

故有:对任意A=[a1,...,at]Ti=1,...,t,都有K(xi,x1:t)K(x1:t,x1:t)1A=ai

posted @   milliele  阅读(24364)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示