干货笔记 优化算法 贝叶斯优化 xiuqhou 2021-10-13 2024-08-02 贝叶斯优化
贝叶斯优化简介
贝叶斯优化(BayesOpt)是一种及其学习优化方法,用来解决黑盒无衍生全局优化(black-box derivative-free global optimization)问题,即函数只知道输入和输出,不知道其中的结构和具体函数形式,也没法求导。
max x ∈ A f ( x ) \max_{x\in A}f(x)
x ∈ A max 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 .
可行域和函数具有以下性质:
x ∈ R d x\in \mathbb{R}^d x ∈ R d ,其中d ≤ 20 d\leq 20 d ≤ 20 比较成功概率较高。
可行域是一个简单集合,其中元素效果,也就是对应的函数值很容易评估。例如:x ∈ R d : a i ≤ x i ≤ b i {x\in \mathbb R^d:a_i\leq x_i\leq b_i} x ∈ R d : a i ≤ x i ≤ b i 或者d d d 维简单集合x ∈ R d : ∑ i x i = 1 {x\in\mathbb R^d:\sum_i x_i=1} x ∈ R d : ∑ i x i = 1 。
目标函数连续,因为优化过程要用高斯回归。
f f f 很难评估,可能只能评估几百次,因为每次评估所需要的时间都比较长,算力比较大。
f f f 不具备一些容易用来优化的结构,比如线性或者凸/凹函数,有这些结构的函数可以用方法提高效率。简而言之,f f f 是黑盒函数。
对于x x x 我们只能获得对应的函数值f ( x ) f(x) f ( x ) ,不能获得一阶或者二阶导数,所以不能用梯度下降、牛顿法、逆牛顿法等方法来直接优化,这种性质称为不可求导性 。
f f f 一般认为没有噪声,但实际可以有随机噪声,噪声与函数值独立且服从方差恒定的高斯分布。
目标是寻找全局最优解而不是局部最优解。
贝叶斯优化的基本思路
贝叶斯优化主要包含两部分,统计推理的方法 和获取函数 。统计推理的方法用来获取后验概率,获取函数用来基于后验概率来寻找下一个最优点。
主要思路为:
假定有了一些目标函数的输入和对应的输出(采样值),先对目标函数进行高斯过程先验,用高斯回归对对这些数据进行拟合。
在已有的采样数据上更新对f f f 的后验概率分布。
根据后验概率分布,构建获取函数,寻找获取函数最大的点,作为下一个最优解。
重复2-3过程,记录其中函数值最大的那个点作为全局最优解。
最常用的统计推理方法是高斯回归(GP Regression),最常用的获取函数为Expected Improvement(EI)。
高斯回归
给定一组采样序列
[ ( x 1 , f ( x 1 ) , ( x 2 , f ( x 2 ) , ⋯ , ( x n , f ( x n ) ] [(x_1,f(x_1),(x_2,f(x_2),\cdots,(x_n,f(x_n)]
[( x 1 , f ( x 1 ) , ( x 2 , f ( x 2 ) , ⋯ , ( x n , f ( x n )]
利用高斯回归获得的先验概率分布为
f ( x 1 : k ) ∼ Normal ( μ 0 ( x 1 : k ) , Σ 0 ( x 1 : k , x 1 , k ) ) f(x_{1:k})\sim \text{Normal}(\mu_0(x_{1:k}),\Sigma_0(x_{1:k},x_{1,k}))
f ( x 1 : k ) ∼ Normal ( μ 0 ( x 1 : k ) , Σ 0 ( x 1 : k , x 1 , k ))
其中x 1 : k x_{1:k} x 1 : k 表示序列x 1 , x 2 , x 3 , ⋯ , x n x_1, x_2, x_3, \cdots, x_n x 1 , x 2 , x 3 , ⋯ , x n ,μ ( ⋅ ) \mu(\cdot) μ ( ⋅ ) 是均值函数,Σ 0 ( ⋅ , ⋅ ) \Sigma_0(\cdot,\cdot) Σ 0 ( ⋅ , ⋅ ) 是协方差函数。
f ( x 1 : k ) = [ f ( x 1 ) , f ( x 2 ) , f ( x 3 ) , ⋯ , f ( x n ) ] f(x_{1:k})=[f(x_1),f(x_2),f(x_3),\cdots,f(x_n)] f ( x 1 : k ) = [ f ( x 1 ) , f ( x 2 ) , f ( x 3 ) , ⋯ , f ( x n )]
μ 0 ( x 1 : k ) = [ μ 0 ( x 1 ) , μ 0 ( x 2 ) , ⋯ , μ 0 ( x n ) ] \mu_0(x_{1:k})=[\mu_0(x_1),\mu_0(x_2),\cdots,\mu_0(x_n)] μ 0 ( x 1 : k ) = [ μ 0 ( x 1 ) , μ 0 ( x 2 ) , ⋯ , μ 0 ( x n )]
Σ 0 ( x 1 : k , x 1 : k ) = [ Σ 0 ( x 1 , x 1 ) , . . . , Σ 0 ( x 1 , x k ) ; . . . ; Σ 0 ( x k , x 1 ) , . . . , Σ 0 ( x k , x k ) ] \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)] Σ 0 ( x 1 : k , x 1 : k ) = [ Σ 0 ( x 1 , x 1 ) , ... , Σ 0 ( x 1 , x k ) ; ... ; Σ 0 ( x k , x 1 ) , ... , Σ 0 ( x k , x k )]
常用的均值函数为μ 0 ( x ) = μ \mu_0(x)=\mu μ 0 ( x ) = μ ,如果f f f 有某种趋势或者某些应用特殊的参数结构,也常用如下函数:
μ 0 ( x ) = μ + ∑ i = 1 p β i Ψ i ( x ) \mu_0(x)=\mu+\sum_{i=1}^p\beta_i\Psi_i(x)
μ 0 ( x ) = μ + i = 1 ∑ p β i Ψ i ( x )
其中Ψ i \Psi_i Ψ i 是一个参数方程,是x x x 的低阶多项式。
常用的协方差函数为power exponential kernal和Matérn kernal.
power exponential kernal
Σ 0 ( x , x ′ ) = α 0 exp ( − ∣ ∣ x − x ′ ∣ ∣ 2 ) \Sigma_0(x,x')=\alpha_0\text{exp}(-||x-x'||^2)
Σ 0 ( x , x ′ ) = α 0 exp ( − ∣∣ x − x ′ ∣ ∣ 2 )
其中α \alpha α 为参数.
Matérn kernal
Σ 0 ( x , x ′ ) = α 0 2 1 − ν Γ ( ν ) ( 2 ν ∣ ∣ x − x ′ ∣ ∣ ) ν K ν ( 2 ν ∣ ∣ x − x ′ ∣ ∣ ) \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'||)
Σ 0 ( x , x ′ ) = α 0 Γ ( ν ) 2 1 − ν ( 2 ν ∣∣ x − x ′ ∣∣ ) ν K ν ( 2 ν ∣∣ x − x ′ ∣∣ )
其中K ν K_\nu K ν 是修改后的贝塞尔函数,参数包括ν \nu ν 和α 0 : d \alpha_{0:d} α 0 : d
从已有的采样序列获取任意新一点x x x 的函数值f ( x ) f(x) f ( x ) ,即求f ( x ) ∣ f ( x 1 : n ) f(x)|f(x_{1:n}) f ( x ) ∣ f ( x 1 : n ) ,也就是后验分布,同样满足正态分布。
f ( x ) ∣ f ( x 1 : n ) ∼ Normal ( μ n ( x ) , σ n 2 ( x ) ) μ n ( x ) = Σ 0 ( x , x 1 : n ) Σ 0 ( x 1 : n , x 1 : n ) − 1 ( f ( x 1 : n − μ 0 ( x 1 : n ) ) + μ 0 ( x ) σ n 2 ( x ) = Σ 0 ( x , x ) − Σ 0 ( x , x 1 : n ) Σ 0 ( x 1 : n , x 1 : n ) − 1 Σ 0 ( x 1 : 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)
f ( x ) ∣ f ( x 1 : n ) ∼ Normal ( μ n ( x ) , σ n 2 ( x )) μ n ( x ) = Σ 0 ( x , x 1 : n ) Σ 0 ( x 1 : n , x 1 : n ) − 1 ( f ( x 1 : n − μ 0 ( x 1 : n )) + μ 0 ( x ) σ n 2 ( x ) = Σ 0 ( x , x ) − Σ 0 ( x , x 1 : n ) Σ 0 ( x 1 : n , x 1 : n ) − 1 Σ 0 ( x 1 : n , x )
选择超参数
获取函数
获取函数用来取舍,开发 (exploitation )与探索 (exploration )之间的关系,常用的获取函数有EI函数,knowledge gradient,entropy search,predictive entropy search。EI函数已经很好用了,其余函数主要为了解决一些额外的“exotic”问题。开发代表均值高(实线高),探索代表不确定度大(虚线范围大)。
如图所示的高斯过程。
EI函数
假如我们已经观测n个点,并且没有评估的机会,要从中找到让f f f 尽量大的点,最好就是选择f n ∗ = max m ≤ n f ( x m ) f_n^*=\max_{m\leq n}f(x_m) f n ∗ = max m ≤ n f ( x m ) 作为选择的 点。如果我们还有评估的机会,可以再找一个点x x x ,看新的点f ( x ) f(x) f ( x ) 和已有的最大点f n ∗ f_n^* f n ∗ 哪个更大,选择更大的点,所以将二者之差作为评估的标准,由于获取函数要求大于0,所以
EI n ( x ) : = E n [ [ f ( x ) − f n ∗ ] + ] \text{EI}_n(x):=E_n[[f(x)-f_n^*]^+]
EI n ( x ) := E n [[ f ( x ) − f n ∗ ] + ]
这里E n [ ⋅ ] E_n[\cdot] E n [ ⋅ ] 是根据已有的点获得的后验概率,满足参数为μ n ( x ) \mu_n(x) μ n ( x ) 和σ n 2 ( x ) \sigma_n^2(x) σ 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.
表达式为
EI n ( 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)
EI n ( x ) = σ n ( x ) φ ( σ n ( x ) Δ n ( x ) ) + [ Δ n ( x ) ] + − ∣ Δ n ( x ) ∣Φ ( σ n ( x ) Δ n ( x ) )
其中Δ n ( x ) : = μ n ( x ) − f n ∗ \Delta_n(x):=\mu_n(x)-f_n^* Δ n ( x ) := μ n ( x ) − f n ∗ ,衡量了新的观测点和已有观测点之差,φ ( x ) \varphi(x) φ ( x ) 和Φ ( x ) \Phi(x) Φ ( x ) 分别是概率密度(CDF)函数和概率分布(PDF)函数。
最优评估点选择为
x n + 1 = arg max EI n ( x ) x_{n+1}=\arg\max\text{EI}_n(x)
x n + 1 = arg max EI n ( x )
另一种表达式写法为:
EI n ( x ) = { ( μ n ( x ) − f n ∗ − ξ ) Φ ( Z ) + σ n ( x ) φ ( Z ) if σ n ( x ) > 0 0 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.
EI n ( x ) = { ( μ n ( x ) − f n ∗ − ξ ) Φ ( Z ) + σ n ( x ) φ ( Z ) if σ n ( x ) > 0 0 if σ n ( x ) = 0
其中
Z = { μ n ( x ) − f n ∗ − ξ σ ( x ) if σ ( x ) > 0 0 if σ ( x ) = 0 Z=\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.
Z = ⎩ ⎨ ⎧ σ ( x ) μ n ( x ) − f n ∗ − ξ if σ ( x ) > 0 0 if σ ( x ) = 0
其中ξ \xi ξ 用来衡量开发和探索的比重,一般取ξ = 0.01 \xi=0.01 ξ = 0.01 ,其值越大exploration越大,选取的最优点的方差(不确定度)相对越大;其值越小,exploitation越大,选取的最优点的均值相对越大。