贝叶斯优化入门

JUMU实名认证 发表于 2026-06-26 08:00 | 显示全部楼层 | 复制链接分享      上一主题  翻页  下一主题
贝叶斯优化是一种基于贝叶斯原理的全局优化算法,特别适合优化那些计算成本很高的黑箱函数。简单说就是用一个代理模型来近似目标函数,然后用采集函数来决定下一个评估点在哪里,平衡探索和利用,一步步找到最优解。因为每次评估都很贵的话,就不能像遗传算法那样随便评估很多点,得聪明地选点,用尽量少的评估次数找到最优解,这就是贝叶斯优化擅长的。在工程仿真中,有限元计算一次就很贵,贝叶斯优化就特别适合。本文将介绍贝叶斯优化的基本概念、原理、组成部分、应用场景和注意事项,帮助大家入门这门高效的优化技术。


一、贝叶斯优化概述

1. 什么是贝叶斯优化
贝叶斯优化的基本概念。

什么是贝叶斯优化:
- 是一种全局优化算法
- 基于贝叶斯原理
- 特别适合优化昂贵的黑箱函数
- 用代理模型近似目标函数
- 用采集函数选下一个评估点
- 用尽量少的评估次数找到最优解
- 英文是Bayesian Optimization,简称BO

贝叶斯优化的基本思想:
- 我们不知道目标函数长什么样,只能通过评估得到一些点
- 每次评估都很贵,所以要慎重选下一个评估点
- 先用已有的样本建一个代理模型,比如高斯过程也就是克里金
- 代理模型不仅能给预测值,还能给不确定性
- 然后用采集函数来衡量每个点的价值
- 选采集函数最大的那个点作为下一个评估点
- 评估完把新点加进去,更新代理模型
- 重复这个过程,直到满足停止条件
- 最后得到最优解

为什么叫贝叶斯优化:
- 因为用了贝叶斯定理
- 先有一个先验分布,也就是对函数的先验认识
- 然后观测到新的数据,更新后验分布
- 用后验分布来指导下一步的搜索
- 所以叫贝叶斯优化

贝叶斯优化的特点:
- 样本效率特别高,用很少的评估次数就能找到好的解
- 适合昂贵的黑箱函数,比如有限元仿真
- 是全局优化算法,不容易陷入局部最优
- 可以处理噪声
- 但维度太高的话效果会下降
- 代理模型的训练也有计算成本,但和目标函数比一般不算什么

2. 什么时候用贝叶斯优化
适用场景。

适合的场景:
- 目标函数评估成本很高,比如一次要几小时甚至几天
- 目标函数是黑箱,不知道导数,也没有解析形式
- 变量维度不是特别高,一般几十维以内
- 想要全局最优,或者至少比较好的解
- 评估次数有限,不能随便试很多点

不适合的场景:
- 目标函数评估很便宜,那不如用遗传算法或者粒子群
- 维度特别高,比如上百维,贝叶斯优化效果会下降
- 有梯度信息,那用梯度法更快
- 简单的优化问题,杀鸡用牛刀

典型的应用:
- 超参数优化,比如机器学习的调参
- 工程优化设计,比如有限元优化
- 药物发现
- 材料设计
- 实验设计
- 等等,只要是昂贵的黑箱优化都可以试试

3. 和其他优化算法的对比
各有各的特点。

和遗传算法、粒子群对比:
- 遗传算法、粒子群需要很多次函数评估
- 贝叶斯优化需要的评估次数少很多
- 评估便宜的话遗传算法、粒子群更好
- 评估贵的话贝叶斯优化更好
- 贝叶斯优化更聪明地选点

和梯度法对比:
- 梯度法需要导数信息,收敛快
- 贝叶斯优化不需要导数,是无导数优化
- 梯度法容易陷入局部最优
- 贝叶斯优化是全局优化
- 有梯度的话还是梯度法效率高

和响应面优化对比:
- 响应面优化一般先建一个完整的代理模型再优化
- 贝叶斯优化是序贯的,一步步加点
- 贝叶斯优化更高效,因为会智能地选点
- 响应面更简单直接
- 都很常用,各有各的适用场景

二、贝叶斯优化的基本原理

1. 贝叶斯定理
基础中的基础。

贝叶斯定理:
- P(f|D) = P(D|f) * P(f) / P(D)
- P(f)是先验分布,也就是观测数据前对函数的认识
- P(D|f)是似然,也就是给定函数f,观测到数据D的概率
- P(f|D)是后验分布,也就是观测到数据后对函数的更新认识
- 贝叶斯优化就是用这个后验分布来指导搜索

简单理解:
- 一开始我们对目标函数有个大概的想法,这就是先验
- 然后我们评估了几个点,得到了一些数据
- 根据这些数据,我们更新对目标函数的认识,这就是后验
- 后验比先验更准确,因为有了数据
- 然后用后验来决定下一步在哪里评估
- 评估完再更新后验
- 一步步越来越准

2. 代理模型
近似目标函数的模型。

什么是代理模型:
- 也叫元模型、响应面
- 用来近似目标函数
- 因为目标函数评估太贵,所以用便宜的代理模型代替
- 贝叶斯优化里一般用概率代理模型,能给不确定性

常用的代理模型:
- 高斯过程Gaussian Process,也就是克里金,最经典最常用
- 随机森林
- 贝叶斯神经网络
- 等等

为什么选高斯过程:
- 是概率模型,能给出预测的均值和方差
- 有完善的理论
- 中小样本表现好
- 插值精确
- 是贝叶斯优化最经典的选择

高斯过程的特点:
- 可以看作是函数上的分布
- 任意有限个点的联合分布都是多元正态分布
- 由均值函数和协方差函数也就是核函数决定
- 预测的时候不仅给均值,还给方差
- 方差就代表不确定性
- 样本点上方差为0,离样本越远方差越大

3. 采集函数
选下一个点的依据。

什么是采集函数:
- 也叫获取函数、效用函数
- 用来衡量每个点的价值
- 综合考虑这个点可能有多好,以及我们有多不确定
- 也就是平衡探索和利用
- 采集函数最大的点就是下一个要评估的点

探索和利用的平衡:
- 利用:在我们觉得好的地方搜索,也就是均值高的地方
- 探索:在我们不确定的地方搜索,也就是方差大的地方
- 只利用容易陷入局部最优
- 只探索效率太低
- 好的采集函数要平衡这两者

常用的采集函数:
- 概率提升PI Probability of Improvement
- 期望提升EI Expected Improvement
- 置信上界UCB Upper Confidence Bound
- 还有很多其他的

这些采集函数各有各的特点,后面会详细讲。

4. 序贯优化的过程
一步步来。

贝叶斯优化的循环:
1. 用已有的样本训练代理模型
2. 在整个搜索空间上计算采集函数
3. 找到采集函数最大的点,就是下一个评估点
4. 用真实的目标函数评估这个点
5. 把新的点加入样本集
6. 回到第1步,重复循环
7. 直到满足停止条件

停止条件:
- 达到最大评估次数
- 找到的解足够好了
- 连续多少轮没有改进
- 计算时间到了
- 等等

三、常用的采集函数

1. 概率提升PI
最简单的之一。

什么是概率提升:
- 衡量一个点的函数值比当前最优值好的概率
- 概率越大,这个点越值得评估
- 英文是Probability of Improvement,简称PI

公式:
- PI(x) = Φ( (μ(x) - f* - ξ) / σ(x) )
- μ(x)是预测均值
- σ(x)是预测标准差
- f*是当前找到的最优值
- ξ是一个小的参数,控制探索的程度
- Φ是标准正态分布的累积分布函数

特点:
- 简单直观
- 是一种贪心的策略
- 偏向于利用,探索不够
- 容易陷入局部最优
- 现在用得不如EI多

2. 期望提升EI
最常用的采集函数。

什么是期望提升:
- 衡量一个点的函数值比当前最优值能提升多少的期望
- 不仅考虑提升的概率,还考虑提升的幅度
- 比PI更合理
- 英文是Expected Improvement,简称EI

公式:
- EI(x) = (μ(x) - f* - ξ) * Φ( (μ(x) - f* - ξ) / σ(x) ) + σ(x) * φ( (μ(x) - f* - ξ) / σ(x) )
- μ(x)是预测均值
- σ(x)是预测标准差
- f*是当前最优值
- ξ是探索参数
- Φ是累积分布函数,φ是概率密度函数

特点:
- 是最经典最常用的采集函数
- 平衡了探索和利用
- 效果一般都不错
- 有解析形式,计算方便
- 推荐首选

ξ参数的作用:
- 控制探索的程度
- 大的话更偏向探索
- 小的话更偏向利用
- 一般取0.01之类的小值
- 也可以随着迭代调整

3. 置信上界UCB
另一种常用的。

什么是置信上界:
- 把均值和方差加权加起来
- UCB(x) = μ(x) + κ * σ(x)
- κ是一个系数,控制探索的程度
- 找最大值的话就用置信上界
- 找最小值的话就用置信下界LCB
- 英文是Upper Confidence Bound,简称UCB

特点:
- 形式特别简单
- 容易理解和实现
- κ参数直接控制探索利用的平衡
- 效果也不错
- 理论分析比较方便

κ参数的选择:
- κ大的话更探索
- κ小的话更利用
- 可以是固定的,也可以随着迭代变化
- 有一些理论指导怎么选
- 实际中可以调调看

4. 其他采集函数
还有很多其他的。

比如:
- 熵搜索Entropy Search:用信息论的角度,选能减少最多不确定性的点
- 知识梯度Knowledge Gradient:衡量评估这个点后能带来的期望提升
- 预测熵搜索Predictive Entropy Search
- 多目标的采集函数
- 带约束的采集函数
- 等等,非常多

这些更高级的采集函数:
- 理论上可能更好
- 但计算更复杂
- 实际中EI和UCB用得最多
- 一般也够用了

四、贝叶斯优化的基本步骤

1. 初始化
第一步。

怎么做:
- 确定优化的问题,变量、范围、目标
- 选初始的几个样本点
- 评估这些样本点的目标函数值
- 得到初始的数据集

初始点怎么选:
- 一般用试验设计的方法
- 比如拉丁超立方抽样LHS
- 或者随机抽样
- 初始点不要太少,不然代理模型不准
- 也不用太多,毕竟贝叶斯优化就是要少评估
- 一般5-20个左右,根据维度来

初始点数量:
- 维度少的话可以少一点
- 维度多的话要多一点
- 一般至少5个吧
- 太多了就失去贝叶斯优化的意义了
- 根据问题和预算来定

2. 训练代理模型
建模型。

怎么做:
- 用已有的样本数据
- 训练代理模型,一般是高斯过程
- 估计超参数,比如核函数的长度尺度
- 得到后验分布

注意事项:
- 代理模型的质量很重要
- 超参数估计要做好
- 注意数值稳定性
- 数据可以先归一化一下

3. 优化采集函数
找下一个点。

怎么做:
- 在整个搜索空间上
- 找采集函数的最大值点
- 这个点就是下一个要评估的点

注意事项:
- 采集函数优化本身也是一个优化问题
- 但采集函数很便宜,所以可以用各种方法
- 比如多起点的梯度下降
- 或者直接网格搜索、随机搜索
- 因为采集函数便宜,所以怎么优化都行
- 但要尽量找到全局最优,不然选点就不准了

4. 评估目标函数
真实算一下。

怎么做:
- 用上一步找到的点
- 用真实的目标函数评估
- 得到真实的函数值
- 这一步是最花时间的

注意事项:
- 这是贝叶斯优化里最贵的一步
- 也是为什么要智能选点的原因
- 评估完把新点加入数据集

5. 判断终止条件
要不要继续。

常用的终止条件:
- 达到最大评估次数
- 找到的最优解满足要求了
- 连续多少轮没有改进
- 计算时间到了
- 采集函数的最大值太小了,说明没什么可探索的了
- 等等

注意事项:
- 评估次数要根据预算来定
- 不要太早停,可能还没收敛
- 也不要太晚停,浪费计算资源
- 根据问题来定

6. 输出结果
最后得到什么。

怎么做:
- 所有评估过的点里最好的那个
- 就是找到的最优解
- 也可以用代理模型再找一下可能更好的点
- 但一般还是真实评估过的更可靠

注意事项:
- 贝叶斯优化是随机的,每次结果可能不一样
- 可以多跑几次取最好的
- 结果可能是近似最优,不一定是全局最优
- 重要的结果可以再验证一下

五、贝叶斯优化的优缺点

1. 优点
贝叶斯优化的好处。

优点总结:
- 样本效率特别高,用很少的评估次数就能找到好的解
- 适合昂贵的黑箱函数,这是最大的优势
- 是全局优化算法,不容易陷入局部最优
- 可以处理噪声
- 有完善的理论基础
- 可以自然地处理不确定性
- 可以利用先验知识

2. 缺点
贝叶斯优化的问题。

缺点总结:
- 维度太高的话效果会下降,一般几十维以内比较好
- 代理模型的训练和采集函数的优化也有计算成本
- 超参数的选择对结果有影响
- 是序贯的,不好并行,当然也有并行的版本
- 代理模型如果不准的话,选点也会不准
- 相对来说比简单的优化算法复杂一点

3. 高维问题怎么办
维度灾难。

贝叶斯优化的维度问题:
- 维度太高的话,高斯过程的计算量是O(n³)的
- 而且需要的样本数也会指数增长
- 一般认为几十维以内贝叶斯优化比较有优势
- 更高维的话可能就不如其他方法了

应对高维的方法:
- 用更高效的代理模型,比如稀疏高斯过程
- 用随机嵌入,把高维降到低维
- 用贝叶斯优化和其他方法结合
- 变量选择,去掉不重要的变量
- 等等,有很多研究方向

六、贝叶斯优化在有限元中的应用

1. 工程优化设计
最常见的应用。

怎么用:
- 设计变量作为优化变量
- 比如尺寸、形状、材料参数等
- 目标函数是重量、成本、应力、位移等
- 约束也是各种性能指标
- 每次评估目标函数都要跑一次有限元,很贵
- 用贝叶斯优化来智能选点
- 用尽量少的有限元计算次数找到最优解

为什么适合:
- 有限元计算一次很贵,可能要几分钟到几小时
- 评估次数有限,不能随便试很多
- 目标函数是黑箱,没有导数
- 可能有多个局部最优
- 贝叶斯优化正好擅长这种问题

好处:
- 比传统的优化方法少用很多次有限元计算
- 节省大量时间和计算资源
- 可以找到更好的解
- 特别适合计算成本高的问题

2. 可靠性优化设计
考虑不确定性的优化。

怎么用:
- 优化设计变量,同时考虑参数的不确定性
- 既要性能好,又要可靠性高
- 也就是可靠性优化设计RBDO
- 每次评估可靠度都要很多次有限元,特别贵
- 用贝叶斯优化来做外层的优化
- 可以大大减少计算量

挑战:
- 两层优化,计算量本来就很大
- 贝叶斯优化可以减少外层的迭代次数
- 但内层的可靠度计算还是很贵
- 一般还要配合代理模型
- 或者用更高效的可靠度方法

3. 参数辨识和模型校准
反问题。

怎么用:
- 有试验数据,要校准有限元模型的参数
- 让模拟结果和试验结果尽量吻合
- 目标函数是模拟和试验的误差
- 每次评估都要跑有限元
- 用贝叶斯优化来找最优参数

为什么适合:
- 参数辨识问题经常是病态的
- 可能有很多局部最优
- 有限元计算贵
- 贝叶斯优化全局搜索能力强
- 样本效率高

4. 多目标优化
多个目标的情况。

怎么用:
- 不止一个目标函数
- 目标之间可能有冲突
- 要找帕累托最优解集
- 贝叶斯优化也可以做多目标
- 有对应的多目标采集函数

多目标贝叶斯优化:
- 采集函数要考虑多个目标
- 比如期望超体积提升EHVI
- 或者其他的多目标采集函数
- 最后得到一组帕累托最优解
- 每次评估还是很贵,所以要高效选点

5. 其他应用
还有很多其他应用。

比如:
- 材料参数反演
- 损伤识别
- 传感器优化布置
- 实验设计
- 工艺流程优化
- 等等,只要是昂贵的黑箱优化都可以试试

七、常用的工具和库

1. Python相关的库
现在很流行。

常用的库:
- scikit-optimize:简称skopt,简单易用的贝叶斯优化库
- GPyOpt:基于GPy的贝叶斯优化库
- Optuna:很流行的超参数优化库,也有贝叶斯优化
- Hyperopt:也是超参数优化常用的
- BoTorch:基于PyTorch的贝叶斯优化库,比较新,功能强
- 还有很多其他的

推荐:
- 入门的话scikit-optimize比较简单,容易上手
- 做研究的话BoTorch很强大,灵活
- Optuna做超参数优化很方便
- 根据需要选

2. MATLAB相关
工程界常用。

MATLAB的工具:
- 贝叶斯优化工具箱
- 统计和机器学习工具箱里有
- 很多人自己写的代码
- 等等

3. 商业软件
还有很多商业软件。

比如:
- ANSYS DesignXplorer:有各种优化方法,也有类似贝叶斯的
- Isight:过程集成和优化软件
- modeFRONTIER:优化软件
- LS-OPT:优化和可靠性软件
- 等等,很多商业优化软件都有类似的方法

4. 自己实现
也可以自己写。

自己写的好处:
- 更灵活,可以自定义
- 理解更深入
- 可以根据需要修改

注意事项:
- 高斯过程的实现要注意数值稳定性
- 采集函数优化要做好
- 超参数估计很重要
- 可以先从简单的版本开始

八、总结

贝叶斯优化是一种高效的全局优化算法,特别适合优化计算成本很高的黑箱函数。它用代理模型近似目标函数,用采集函数智能地选择下一个评估点,平衡探索和利用,用尽量少的评估次数找到最优解。在工程仿真中,因为有限元计算成本很高,贝叶斯优化就特别有用,可以大大提高优化效率,节省时间和计算资源。

贝叶斯优化的要点总结:
- 适合优化昂贵的黑箱函数,样本效率特别高
- 核心组成:代理模型(一般高斯过程)、采集函数、序贯优化循环
- 常用采集函数:概率提升PI、期望提升EI、置信上界UCB,EI最常用
- 基本步骤:初始化、训练代理模型、优化采集函数、评估目标函数、判断终止、输出结果
- 优点是样本效率高、全局优化、适合黑箱;缺点是高维效果下降、相对复杂
- 在有限元中用于工程优化、可靠性优化、参数辨识、多目标优化等
- 有很多成熟的工具和库,比如scikit-optimize、GPyOpt、Optuna、BoTorch等

给初学者的建议:
- 先理解基本思想,知道贝叶斯优化是怎么回事,为什么高效
- 不用一开始就把所有理论都搞懂,先用现成的工具试试
- 从简单的问题开始,比如一个简单的测试函数,先练手
- 代理模型先从高斯过程开始,最经典最常用
- 采集函数先从期望提升EI开始,最常用效果也不错
- 初始点不要太少,不然代理模型一开始不准
- 要理解探索和利用的平衡,这是贝叶斯优化的核心
- 评估次数要根据预算来定,不要太少也不要太多
- 维度太高的话要注意,贝叶斯优化不是万能的
- 可以先用现成的库,比如scikit-optimize,不用自己写
- 有兴趣再深入研究理论和各种高级方法
- 多做实际案例,在实践中积累经验

贝叶斯优化是一个很强大也很实用的优化工具,掌握了之后可以解决很多以前因为计算成本太高而做不了的优化问题。它的思想很优雅,效果也很好,在工程优化、机器学习调参等领域都有广泛的应用。希望本文能帮助大家入门贝叶斯优化。如果有相关的经验或者问题,欢迎在评论区交流讨论。

  距米网  

找到您想要的设计

工程师、学生在线交流学习平台
关注我们

手机版- JMCAD苏ICP备18040927号-1 |苏公网安备32041102000587号

©2017-2026 常州居居米智能技术有限公司