优化|贝叶斯优化系列(一):基础算法原理

news2024/11/16 3:44:52

在这里插入图片描述
贝叶斯优化是一种处理黑盒函数优化问题的重要方法。它通过构建一个目标函数的代理模型,并且利用贝叶斯机器学习方法如高斯过程回归来评估代理模型的不确定性。基于代理模型,通过一个采样函数来决定在哪里进行采样。本推文简单描述了贝叶斯优化方法的框架,包括高斯过程回归和三种常用的采样函数:期望提升,知识梯度,熵搜索和预测熵搜索。最后,本文提供了一些常用的高斯过程回归和贝叶斯优化的软件包。

1.贝叶斯优化问题

贝叶斯优化常用于求解如下的优化问题:
max ⁡ x ∈ A f ( x ) \begin{equation} \max_{x\in\mathcal{A}}f(x) \end{equation} xAmaxf(x)
其中可行解和目标函数通常具备如下的特征:

1.解空间的维度不会太高,通常 d ≤ 20 d\leq 20 d20

2.可行域 A \mathcal{A} A是一个简单的集合;

3.目标函数 f f f具有一定的连续性,可以用高斯过程回归(GPR)建模;

4. f f f的采样成本很高,对 f f f的采样次数通常是有限的;

5. f f f是黑盒函数,其结构信息例如凸性或线性性是未知的;

6.采样 f f f时只能观测到函数值,无法观测到一阶梯度或者二阶信息;

7.采样 f f f时观测值可以是无噪声的,也可以是有噪声的并假设噪声是相互独立的;

8.需要求解全局最优解。

总结起来,贝叶斯优化是一种用于解决无梯度信息下全局黑盒函数优化问题的方法。在下文分析中,我们假设 f f f的观测值是无噪声的。

2.算法框架

贝叶斯优化算法框架包含两个重要的部分:1.贝叶斯统计模型来建模目标函数;2.采样函数来决定下一次迭代在哪里采样(参见Algorithm1)。

通常选取高斯过程回归作为统计模型,其通过贝叶斯后验概率分布来描述函数值 f ( x ) f(x) f(x)。每次迭代时,我们观测到一个 f ( x ) f(x) f(x)的函数值并更新后验分布。采样函数基于 f f f当前的后验分布来计算在一个新的点 x x x处采样可能获得的价值。

下图展示了贝叶斯优化算法的一次迭代过程,其使用高斯过程回归作为统计模型并使用期望提升(experceted improvement)作为采样函数。上半部分展示了在得到三个无噪声的采样点后,利用高斯过程回归得到的对目标函数的估计,实现可以理解为对于 f ( x ) f(x) f(x)的点估计,虚线区域代表了可信区间(credible interval),类似于频率统计当中的置信区间。下半部分图当前的后验分布对应的采样函数的值,对于已采样的点,由于观测值不含噪声,再次这些点无法提供新的信息,因此相应的采样函数值为0,对于可信区域较大区间的点,由于其函数值具有较高的不确定性,采样该点具有更大的价值,采样函数的值也相对较大。

3.高斯过程回归

高斯过程回归是一种用于建模函数的贝叶斯方法,该方法的详细的介绍可参考文献[3]。对于有限的点 x 1 , . . . , x k ∈ R d x_1,...,x_k\in \mathbb{R}^d x1,...,xkRd和对应函数值向量 [ f ( x 1 ) , . . . , f ( x k ) ] [f(x_1),...,f(x_k)] [f(x1),...,f(xk)],高斯过程回归假设先验分布为正态分布:
f ( x 1 : k ) ∼ N ( μ 0 ( x 1 : k ) , Σ 0 ( x 1 : k , x 1 : k ) ) f(x_{1:k})\sim N(\mu_0(x_{1:k}),\Sigma_0(x_{1:k},x_{1:k})) f(x1:k)N(μ0(x1:k),Σ0(x1:k,x1:k))
其中, x 1 : k x_{1:k} x1:k表示 x 1 , . . . , x k x_1,...,x_k x1,...,xk, f ( x 1 : k ) = [ f ( x 1 ) , . . . , f ( x k ) ] f(x_{1:k})=[f(x_1),...,f(x_k)] f(x1:k)=[f(x1),...,f(xk)] Σ 0 ( ⋅ , ⋅ ) \Sigma_0(\cdot,\cdot) Σ0(,)表示协方差函数或核函数,我们可以通过选择 Σ 0 \Sigma_0 Σ0来加入一些先验知识,例如在输入空间中距离更近的 x i , x j x_i,x_j xi,xj对应的函数值有很大的正相关性。

假设我们有无噪声的观测值 [ f ( x 1 ) , . . . , f ( x n ) ] [f(x_1),...,f(x_n)] [f(x1),...,f(xn)],我们想推断未观测点 x x x的函数值 f ( x ) f(x) f(x),利用贝叶斯规则,我们有:
f ( x ) ∣ f ( x 1 : n ) ∼ N ( μ 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 = Σ 0 ( x , x ) − Σ 0 ( x , x 1 : n ) Σ 0 ( x 1 : n , x 1 : n ) − 1 Σ 0 ( x 1 : n , x ) \begin{aligned} &f(x)|f(x_{1:n})\sim N(\mu_n(x),\sigma^2_{n}(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^2_n = \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) \end{aligned} f(x)f(x1:n)N(μ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=Σ0(x,x)Σ0(x,x1:n)Σ0(x1:n,x1:n)1Σ0(x1:n,x)
后验均值 μ n ( x ) \mu_n(x) μn(x)是先验信息和样本信息的加权,其权重依赖于核函数 Σ 0 \Sigma_0 Σ0
常用的核函数及其超参优化方法可以参考文献[3]的第四、五章。

4.采样函数

在贝叶斯优化算法中,采样函数用于决定下一步对定义域A中的哪个采样点。常用的采样函数包括:期望提升,知识梯度,以及熵搜索和预测熵搜索。本节简单介绍不同采样函数的定义及采样准则。

4.1 期望提升(Expected Improvement)

假设我们只能返回之前采样过的点 x x x作为优化问题的解,并且在采样次数用完之后必须基于之前的观测值返回一个解。由于假设 f f f的观测值是无噪声的,最优的选择是先前采样过的点当中观测值最大的。记 f n ∗ = max ⁡ m ≤ n f ( x m ) f^{*}_{n}=\max_{m\leq n}f(x_m) fn=maxmnf(xm)为最终选择的解的函数值,其中 n n n表示目前采样 f f f的次数。

假设我们有一次额外的采样机会,如果对 x ∈ A x \in \mathcal{A} xA采样,则我们将观测到 f ( x ) f(x) f(x)。在采样之后,会出现两种情况: f ( x ) ≥ f n ∗ f(x)\geq f_n^{*} f(x)fn f ( x ) ≤ f n ∗ f(x)\leq f_{n}^{*} f(x)fn。对于前者,最优值的提升为 f ( x ) − f n ∗ f(x)-f_n^{*} f(x)fn;对于后者,提升为0。我们将提升记作 [ f ( x ) − f n ∗ ] + [f(x)-f^{*}_n]^{+} [f(x)fn]+,其中 a + = max ⁡ ( a , 0 ) a^{+}=\max(a,0) a+=max(a,0)。定义期望提升如下: E I n = E [ [ f ( x ) − f n ∗ ] + ] ] EI_{n} = \mathbb{E}[[f(x)-f^{*}_n]^{+}]] EIn=E[[f(x)fn]+]]

利用分部积分可以得到一个闭式形式:
E I n ( x ) = [ △ n ( x ) ] + + σ n ( x ) φ ( △ n ( x ) σ n ( x ) ) − ∣ △ n ( x ) ∣ Φ ( △ n ( x ) σ n ( x ) ) EI_{n}(x)=[\triangle_n(x)]^{+}+\sigma_n(x)\varphi(\frac{\triangle_n(x)}{\sigma_n(x)})-|\triangle_n(x)|\Phi(\frac{\triangle_n(x)}{\sigma_n(x)}) EIn(x)=[n(x)]++σn(x)φ(σn(x)n(x))n(x)∣Φ(σn(x)n(x))
其中, △ n ( x ) = μ n ( x ) − f n ∗ \triangle_n(x)=\mu_n(x)-f_n^* n(x)=μn(x)fn。然后,EI算法选择EI最大的点作为下一步的采样点,即:
x n + 1 = arg ⁡ max ⁡ E I n ( x ) x_{n+1}=\arg \max EI_n(x) xn+1=argmaxEIn(x)
下图显示了 E I n ( x ) EI_n(x) EIn(x) △ n ( x ) \triangle_n(x) n(x), σ n ( x ) \sigma_n(x) σn(x)之间的单增关系。其中蓝色代表更小的值且红色代表更大的值。 E I n ( x ) EI_n(x) EIn(x)关于 △ n ( x ) \triangle_n(x) n(x) σ n ( x ) \sigma_n(x) σn(x)都是单增的。EI算法偏好于期望效用高的点和不确定性高的点,这体现了探索和利用(exploration vs. exploitation)的权衡。

4.2 知识梯度(Knowledge Gradient)

和期望提升采样函数不同,知识梯度采样函数允许返回任何的点作为问题的解。在风险中性的情况下,最终返回的解 x ∗ ^ \hat{x^*} x^ μ n \mu_n μn最大的点,即 μ n ( x ∗ ^ ) = max ⁡ x ′ μ n ( x ′ ) = μ n ∗ \mu_n(\hat{x^*})=\max_{x^{\prime}}\mu_n(x^{\prime})=\mu_n^{*} μn(x^)=maxxμn(x)=μn。如果可以对一个新的点 x x x采样,将会得到后验均值 μ n + 1 \mu_{n+1} μn+1,在新的后验均值下,最后一步采样得到的函数值提升为 μ n + 1 ∗ − μ n ∗ \mu^{*}_{n+1}-\mu^*_n μn+1μn。定义知识梯度为:
K G n ( x ) = E n [ μ n + 1 ∗ − μ n ∗ ∣ x n + 1 = x ] KG_n(x)=\mathbb{E}_n[\mu^*_{n+1}-\mu^*_{n}|x_{n+1}=x] KGn(x)=En[μn+1μnxn+1=x]
下一步的采样点为:
x n + 1 = arg ⁡ max ⁡ K G n ( x ) x_{n+1}=\arg \max KG_n(x) xn+1=argmaxKGn(x)

算法2给出了一种通过仿真计算知识梯度的方法。每次迭代时,算法仿真一个在点 x x x处采样后可能得到的观测值 y n + 1 y_{n+1} yn+1, 然后基于仿真结果 ( x , y n + 1 ) (x,y_{n+1}) (x,yn+1)计算 μ n + 1 ∗ \mu^{*}_{n+1} μn+1并得到KG的一个估计值,重复上述迭代过程 J J J次将得到的估计值的均值作为对KG的估计,当 J J J趋于无穷时估计值将会收敛到 K G n ( x ) KG_n(x) KGn(x)

算法2可以被用来估计 K G n ( x ) KG_n(x) KGn(x)并结合零阶优化算法来得到采样函数的最大值点。为了提升算法效率,Wu J, Frazier P.(2009)提出了一种基于多起点的随机梯度上升的方法来优化采样函数,具体细节参考文献[2]。

算法3提出了一种方法来优化KG采样函数来得到下一步的采样点,其中算法3内部循环中使用的随机梯度G由算法4计算得到。

不同于EI仅考虑被采样点的后验分布,KG考虑了函数 f f f的后验分布以及采样点如何影响后验分布。KG会采样那些使得后验均值的最大值得到提升的采样点即使采样点本身并不比之前采样过的最优点更好。在带有观测值带有噪声的贝叶斯优化问题当中,KG能够带来明显的性能提升。

4.3 熵搜索和预测熵搜索(Entropy Search and Predictive Entropy Search)

一个连续的概率分布 p ( x ) p(x) p(x) 的微分熵(differential entropy)定义为 ∫ p ( x ) l o g ( p ( x ) ) d x \int p(x)log(p(x))dx p(x)log(p(x))dx, 更小的微分熵意味着更小的不确定性。熵搜索(ES)算法每次迭代时对使得微分熵降低最大的点进行采样。预测熵搜索(PES)算法的想法相同,但是使用了不同的优化目标。精确计算PES和ES将会得到等价的采样函数。但是精确计算通常是不可行的,因此近似计算方法的不同导致了两种算法的采样决策也有差异。

x ∗ x^* x f f f的全局最优解。第n次迭代,高斯过程后验为 x ∗ x^* x诱导了一个概率分布,记 H ( P n ( x ∗ ) ) H(P_n(x^*)) H(Pn(x))为在该分布下计算得到的熵。类似地,如果对 x x x进行采样,则 H ( P n ( x ∗ ∣ x , f ( x ) ) ) H(P_n(x^*|x,f(x))) H(Pn(xx,f(x)))表示第n+1次迭代时的熵。通过采样 x x x使得熵的减少为:
E S n ( x ) = H ( P n ( x ∗ ) ) − E f ( x ) [ H ( P n ( x ∗ ∣ f ( x ) ) ) ] ES_n(x)=H(P_n(x^*))-E_{f(x)}[H(P_n(x^*|f(x)))] ESn(x)=H(Pn(x))Ef(x)[H(Pn(xf(x)))]
ES可以被近似地计算和优化。PES提供了另一种方法来计算前一行的公式,由于 f ( x ) f(x) f(x)导致 x ∗ x^* x的熵减少等于 f ( x ) f(x) f(x) x ∗ x^* x之间的相互信息:
P E S n ( x ) = E S n ( x ) = H ( P n ( f ( x ) ) ) − E x ∗ [ H ( P n ( f ( x ) ∣ x ∗ ) ) ] PES_n(x)=ES_n(x)=H(P_n(f(x)))-E_{x^*}[H(P_n(f(x)|x^*))] PESn(x)=ESn(x)=H(Pn(f(x)))Ex[H(Pn(f(x)x))]
PES的第一项有解析形式,第二项必须通过近似得到。

5.软件

在本小节中列出了一些贝叶斯优化和高斯过程回归的软件包。

  • DiceKriging and DiceOptim (R): 分别是高斯过程回归和贝叶斯优化的软件包,https://cran.r-project.org/web/packages/DiceOptim/index.html
  • GPyOpt (Python):基于高斯过程回归包Gpy的贝叶斯优化软件包,https://github.com/SheffieldML/GPyOpt
  • Spearmint (Python): 贝叶斯优化软件包
  • GPFlow and GPyTorch(python):是分别基于Tensorflow和PyTorch的高斯过程软件包,https://github.com/GPflow/GPflow,https://github.com/cornellius-gp/
  • Metrics Optimization Engine (C++): https://github.com/Yelp/MOE
  • DACE(Matlab):高斯过程回归软件包,http://www2.imm.dtu.dk/projects/dace/

文献

[1] Frazier P I. A tutorial on Bayesian optimization[J]. arXiv preprint arXiv:1807.02811, 2018.

[2] Wu J, Frazier P. The parallel knowledge gradient method for batch Bayesian optimization[J]. Advances in neural information processing systems, 2016, 29.

[3] Rasmussen, C. and Williams, C. (2006). Gaussian Processes for Machine Learning. MIT Press, Cam bridge, MA.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1638090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【1小时掌握速通深度学习面试1】卷积神经网络-上

目录 1.简述卷积的基本操作,并分析其与全连接层的区别 2.在卷积神经网络中,如何计算各层的感受野大小?卷积层的输出尺寸、参数量和计算量。 3.简述分组卷积及其应用场景 4.简述空洞卷积的设计思路 5.简述转置卷积的主要思想以及应用场景 1.简述卷积…

8. Django 表单与模型

8. 表单与模型 表单是搜集用户数据信息的各种表单元素的集合, 其作用是实现网页上的数据交互, 比如用户在网站输入数据信息, 然后提交到网站服务器端进行处理(如数据录入和用户登录注册等).网页表单是Web开发的一项基本功能, Django的表单功能由Form类实现, 主要分为两种: dj…

vue3项目引入VueQuill富文本编辑器(成功)及 quill-image-uploader 图像模块(未成功)

tip:重点解释都写在代码注释里了,方便理解,所以看起来比较密集 富文本基本使用 项目文件夹路径安装依赖 npm install vueup/vue-quilllatest --save 全局注册:main.js // main.js// 自己项目的一些配置(只放了主要…

IoTDB 入门教程 问题篇①——内存不足导致datanode服务无法启动

文章目录 一、前文二、发现问题三、分析问题四、继续分析五、解决问题 一、前文 IoTDB入门教程——导读 二、发现问题 执行启动命令,但是datanode服务却无法启动,查询不到6667端口 bash sbin/start-standalone.sh 进而导致数据库连接也同样失败 [rooti…

开箱子咸鱼之王H5游戏源码_内购修复优化_附带APK完美运营无bug最终版__GM总运营后台_附带安卓版本

内容目录 一、详细介绍二、效果展示2.效果图展示 三、学习资料下载 一、详细介绍 1.包括原生打包APK,资源全部APK本地化,基本上不跑服务器宽带 2.优化后端,基本上不再一直跑内存,不炸服响应快! 3.优化前端&#xff0c…

Linux开发板 FTP 服务器移植与搭建

VSFTPD(Very Secure FTP Daemon)是一个安全、稳定且快速的FTP服务器软件,广泛用于Unix和Linux操作系统。它以其轻量级、高效和易于配置而受到赞誉。VSFTPD不仅支持标准的FTP命令和操作,还提供了额外的安全特性,如匿名F…

会声会影2024中文旗舰版最新网盘安装包下载

会声会影2024是一款功能强大的视频编辑软件,它凭借直观易用的界面、全面的编辑工具以及丰富的特效库,吸引了广泛的用户群体。无论是视频编辑初学者还是专业人士,都能在这款软件中找到满足自己创作需求的功能。 一、软件概述 会声会影2024继承…

【c++】模板编程解密:C++中的特化、实例化和分离编译

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章我们来学习模版的进阶部分 目录 1.非类型模版参数按需实例化 2.模版的特化函数模版特化函数模版的特化类模版全特化偏特化 3.分离编译模版分离编译 1.非类…

Android(Java)项目支持Kotlin语言开发

Android(Java)项目通过相关Kotlin设置后,允许同时使用Java语言和Kotlin语言进行开发代码的。 示例环境: Android Studio Giraffe | 2022.3.1 Patch 3 Java 8 Kotlin 1.9.20 设置Kotlin选项: 第一步:在项…

ASP.NET淘宝店主交易管理系统的设计与实现

摘 要 淘宝店主交易管理系统主要采用了ASPACCESS的B/S设计模式,通过网络之间的数据交换来实现客户、商品、交易的管理和对客户、商品、交易统计工作,从而提高淘宝店主在管理网店过程中的工作效率和质量。 系统分为基本资料模块,统计资料模…

基于ssm+vue+Mysql的药源购物网站

开发语言:Java框架:ssmJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.…

知识图谱与知识表示:人工智能的基石

知识图谱与知识表示:人工智能的基石 一、知识图谱:连接数据的桥梁1.1 知识图谱的构成1.2 知识图谱的应用 二、知识表示:AI的推理基础2.1 知识表示的定义2.2 知识表示的形式 三、从符号表示到向量表示3.1 符号表示与向量表示3.2 向量表示的优势…

virtualbox kafka nat + host-only集群 + windows 外网 多网卡

virtualbox kafka nat + host-only集群 + windows 映射访问 kafka集群搭建背景kafka集群搭建 背景 使用virtualbox搭建kafka集群,涉及到不同网络策略的取舍 首先 桥接 网络虽说 啥都可以,但是涉及到过多ip的时候,而且还不能保证使用的ip不被占用,所以个人选择kafka虚拟机…

带宽的理解-笔记

带宽的理解 带宽(频带宽度):是指电磁波最高频率和最低频率的差值,这一段频率被称为带宽。 举例说明 人耳能听到的频率范围是20赫兹到2万赫兹。换句话说,人而只对20赫兹至2万赫兹的声音频率有反应,超出或低于这一频率范围的声音我…

目标检测发展概述

前言 本篇文章只是简单介绍一下目标检测这一计算机视觉方向的发展历史,因此重点在于介绍而不是完整阐述各个时期的代表算法,只要能够简单了解到目标检测的发展历史那么本文的目的就达到了。 目标检测的任务 从上图不难看出,目标检测是计算机…

快速了解Django:核心概念解析与实践指南

title: 快速了解Django:核心概念解析与实践指南 date: 2024/5/1 20:31:41 updated: 2024/5/1 20:31:41 categories: 后端开发 tags: Django核心路由系统视图系统ORM管理中间件Web框架登录装饰器 第一章:Django简介 背景和发展历程: Djan…

pyinstaller打包pytorch和transformers程序

记录使用pyinstaller打包含有pytorch和transformers库的程序时遇到的问题和解决方法。 环境和版本信息 操作系统:Windows 11 Python:3.10.12 pyinstaller:5.13.0 torch:2.2.2 transformers:4.40.1 打包过程和问…

MATLAB 数据导入

MATLAB 数据导入(ImportData) 在MATLAB中导入数据意味着从外部文件加载数据。该importdata功能允许加载不同格式的各种数据文件。它具有以下五种形式 序号 功能说明 1 A importdata(filename) 从filename表示的文件中将数据加载到数组A中。 2 A i…

【Docker】搭建一个媒体服务器插件后端API服务 - MetaTube

【Docker】搭建一个媒体服务器插件后端API服务 - MetaTube 前言 本教程基于群晖的NAS设备DS423的docker功能进行搭建,DSM版为 7.2.1-69057 Update 5。 简介 MetaTube 是一个媒体服务器插件,主要用于 Emby 和 Jellyfin 媒体服务器。它的主要功能是从互…

unity制作app(1)--登录 注册 界面

把学到的知识投入到生产中反而是一件简单的事情! 1.调整canvas的形状,这里和camera没有任何关系! overlay! 2.既然自适应,空间按钮的位置比例就很重要了! game窗口中新增720*1280的分辨率! 3.再回到can…