离散空间上的贝叶斯优化获取函数最大化

提出一种名为Amortized Bayesian Optimization的新方法,利用参数化策略优化离散空间中的获取函数,相较于传统方法能更快收敛至最优解。通过深度进化求解器(DES)结合强化学习训练神经网络以建议字符串修改,从而高效地找到高适应度字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Amortized Bayesian Optimization over Discrete Spaces

1.摘要

贝叶斯优化在每次迭代时都需要考虑一个问题,即获取函数最大化。这是一个内部优化问题,这将决定我们下次采样在哪里。本文的观点是,我们可以训练一个带参数的策略去最大化获取函数。这会比无参的搜索方法更快,因为我们分摊了优化成本(参数可以用到下一次迭代中)。作者称这种方法为Amortized Bayesian Optimization。

2.介绍

传统的进化算法在内循环中最大化获取函数常常找到次优解,且需要迭代很多次。
贝叶斯优化的基本框架。
在这里插入图片描述

虽然通常每次内循环都是从头开始的搜索,但本文的方法转而是通过学习以前的获取函数来学习优化获取函数的有效策略。所以,本文提出了 Deep Evolution Solver (DES),它会使用一个神经网络给字符串一个建议的修改,然后使用基于梯度的强化学习来训练这个网络。训练的时候会同时进化字符串种群和优化参数。这将同时保证神经网络的效率和适应度:快速响应好的解,同时也可以根据描述当前获取函数的新数据进行调整。
本文的代码实现在:https://github.com/google-research/google-research/tree/master/amortized_bo

3.背景

3.1问题设置

我们的目标是找一个字符串集s,它的一个或多个成员就会有很高的适合度,其中s的每个成员是A的字母表上长度为L的字符串。

3.2贝叶斯优化方法

介绍了贝叶斯,我们将最大化获取函数通常被称为“内循环”,将真实评估为“外循环”。
本文采用的获取函数为UCB,定义如下。
在这里插入图片描述
等式右边分别是均值和方差。

3.3 进化算法

介绍了两个进化算法的文章。相比之下,本文的DES方法使用了一个更简单的、基于策略的局部搜索算法来最大化获取函数,而只有简单的字符级突变。

4.算法

内循环图示如下:
在这里插入图片描述
DES算法如下:
在这里插入图片描述
强化学习中参数 θ \theta θ的更新用下面这个式子:
在这里插入图片描述
在这 R ( s i , a ) = F ( s i ′ ) − F ( s i ) R(s_i,a)=F(s^{'}_i)-F(s_i) R(si,a)=F(si)F(si);字符串 s i ′ = m u t a t e ( s i , a ) s^{'}_i=mutate(s_i,a) si=mutate(si,a) s i s_i si在行为 a a a下变化结果; p ( s ) p(s) p(s)是分布函数,上式的梯度如下:

在这里插入图片描述
通过计算原始字符串和改变后字符串之间的差异,我们迫使模型学习编辑操作。

编辑操作

我们用编辑的位置和编辑后的字符定义一个编辑操作。数学定义如下:
在这里插入图片描述
编辑操作的空间为字符串长度L*字母表大小 ∣ A ∣ |A| A

决策网络

网络的输出包含两个部分:位置分布和针对每个大小的位置分别生成的字符的分布

代理模型

本文贝叶斯代理模型使用了一个由10个浅层前馈神经网络组成的集合。使用集合的平均值作为奖励的估计和不确定性估计的标准偏差。

算法

我们从初始的字符串种群开始,并用真正的奖励函数来评估它们。这个种群是从字符字母表上的均匀分布中随机抽样的。对于每个问题,我们对所有BO运行使用相同的初始种群来公平地比较内部求解器。我们训练了神经网络集合的开始种群及其奖励,并得到了第一次迭代的获取函数。
接下来,我们运行内部求解器来找到使获取函数最大化的字符串。内部求解器每次都用一个随机种群来初始化。在内循环的最后,我们根据获取函数的值对进化求解器的字符串进行排序,并使用最好的字符串作为BO下一次迭代的候选对象(没有重复)。我们用真实的奖励来评估候选人,并将它们添加到数据集中。在外循环的下一个迭代中,我们对更新的数据集重新训练回归器,并解决了一个新的获取函数。
在内循环的最后,我们根据获取函数的值对进化求解器产生的历史字符串进行排序,并使用最好的字符串作为BO下一次迭代的候选对象(没有重复)。
我们用真实的奖励来评估候选人,并将它们添加到数据集中。在外循环的下一个迭代中,我们对更新的数据集重新训练回归器,并生成了一个新的获取函数。

总结

DES没有交叉操作,只有突变操作,通过强化学习思路,学习如何在突变时的奖励更大。更新参数 θ \theta θ时使用的是梯度下降法。

5.实验

使用以下两个测试实验,两个案例都是字符串长度从20到100,字母表大小都是20

  • Alternating Chain
  • Protein Contact Map Potts Model

Alternating Chain:我们最初考虑一个生成一串交替数的综合问题。奖励最高的字符串正好由两个相互交替的数字组成。尽管这个问题很简单,但对于进化型求解器来说是很困难的,因为它很容易找到交替数的子符串,但是很难找到一个全局的解决方案。我们实验了字符串的长度为20、50和100,字母表大小为20。

Protein Contact Map Potts Model:我们还应用我们的方法来寻找最减少折叠能量的蛋白质序列。能量由来自蛋白质数据库接触图的波茨模型计算。我们测试了蛋白质长度为20、50和75。
在这里插入图片描述
具体计算公式为:
在这里插入图片描述
其中 x i x_i xi表示序列的第i个位置的字符, C i j C_{ij} Cij是个指标,表示是否蛋白质折叠时,位置i和j上的残基的 C α C\alpha Cα原子小于6个埃。 ϕ ( x i , x j ) \phi(x_i,x_j) ϕ(xi,xj)是一个来自于真实世界的蛋白质广泛使用的联合概率(参考:Residue–residue potentials with a favorable contact pair term and an unfavorable high packing density term, for simulation and threading.)。在序列中的所有位置都使用相同的20x20的联合概率表,因此,蛋白质间能量函数的差异仅由它们不同的接触图结构决定。这里将局部项 ϕ i ( x i ) \phi_i(x_i) ϕi(xi)设置为零。

实验设置

本文算法是BO作为外循环,内循环用冷热启动内循环DES的算法。
对比算法是EA和使用GA作为内循环的BO算法。

为了公平,实验没有用到任何先验知识,模型没有提前训练。DES也没有提前训练,而是和种群一同进化。为了公平每种算法都设成相同初始种群(内循环)。

参数设置
所有问题的超参数都一样,唯一不同的是DES每次编辑的数量。本文在字符串长度为L=20时使用K=10次编辑操作。L=50时K=20;L = 75和L = 100时K=70。
本文在内环和外环中都使用了500的种群大小。
作为BO实验的第一步,我们随机抽取一组500个字符串(外循环真实采样),并在这个集合上训练一个回归器的集合。
然后,我们运行内部求解器,它使用了500个字符串,它们在内循环的300步(即迭代300+)以上发生突变。作为内部求解器的最后一步,我们在内部求解器运行的整个过程中选择代理下最好的500个样本(即拿这500个点再做真实评估)。我们用oracle函数来评估这些候选对象,将它们添加到被评估的字符串集中,并重复BO过程。我们总共对BO外环进行了15次循环(因此,真实评估总数为15×500=7500)。

不确定性估计来自于10个三层(32、8、4个单元)使用ReLU激活函数的神经网络。在外环的每一次迭代中,我们训练一个10个epochs,每次Batch大小为50,学习率为0.01和均方误差(MES)损失的集合。
对于DES,我们使用了一个卷积层的策略网络。我们使用了一个深度300(即300个核),一个大小为5的一维核,以及在字符串上步长设定为1。卷积之后是一个ReLU和一个线性层(输出层)来计算策略。
我们给每个输入字符串的one-hot编码增加了一个位置编码。我们发现保存字符串的位置信息是很重要的,因为我们使用该策略来分别预测每个位置的字符上的分布。使用了学习率为10e-3的ADAM梯度优化器。
下图展示了两个问题的优化结果:
在这里插入图片描述
可以看到对比直接使用EA求解问题,使用BO的方法会更有效。而本文的热启动的DES往往优于其他使用其他求解器的BO。
下表展示了其他字符串的结果:
在这里插入图片描述
在这里插入图片描述

一般来说,对于串长度50及更高的时候,DES的性能优于其他方法。在较小的问题(长度为20)上,我们的方法可以与其他求解器相媲美。

在每一轮过程中,我们使用RBF、Matern和二次核的作为GP核函数。
下图显示了在蛋白质长度-50问题上的一系列内环步骤的性能。
在这里插入图片描述
如预期所述,冷启动策略梯度和正则化演化内求解器随着更多的步骤而改进。
使用DES,虽然达到最高总体性能,但在允许太多(1000)步骤时会降级。这表明,如果没有进一步的正则化,它可以过度适合早期的迭代(局部最优)。

下图展示了随编辑次数变化的结果。

在这里插入图片描述

每一步更多的编辑允许策略做出更大的动作,这有助于蛋白质问题,但是它也可以使优化问题更加困难,正如在交替链问题上演示的那样,因为它必须通过一系列许多编辑来采取有噪声的策略梯度。

下图比较了内部循环使用DES优化和正则化进化的前三轮BO的长度-50蛋白质5P21问题。
在这里插入图片描述
在第一次外部循环迭代中,DES以一个随机初始化的策略开始,因此比正则化的进化更慢地提高了奖励。在下一个迭代中,暖启动的DES和正则化进化以大致相同的速度优化了采集函数。在第三次迭代中,DES在不到50次迭代中获得了获取函数的高值解,而正则化的演化则无法实现这样高的一个值在内循环超过200轮内。这表明,热启动的策略可以是后续迭代的有效优化器,减少了解决获取函数所需的内环步骤数。

返回贝叶斯优化优秀论文总结目录

<think>我们被要求用中文回答,并且按照给定的格式要求(行内公式用$...$,独立公式用$$...$$)。用户的问题是关于贝叶斯优化用于超参数调优的Python代码示例。根据引用[1]和引用[3],我们知道在Python中有一个bayesian-optimization包,以及引用[3]还提到了网格搜索和贝叶斯调参的示例。因此,我们将重点介绍使用bayesian-optimization包来实现贝叶斯优化。步骤:1.安装bayesian-optimization包(如果尚未安装)。2.定义目标函数,该函数接受超参数作为输入,并返回一个需要优化的指标(如交叉验证的准确率)。3.定义超参数的搜索空间(边界)。4.初始化BayesianOptimization对象,并传入目标函数和参数边界。5.执行优化过程,指定迭代次数等。6.获取最优结果。注意:目标函数通常是我们希望最大化函数(如准确率),但有时我们可能希望最小化(如损失),这时可以在目标函数中返回负值或使用其他转换。示例:我们将使用一个简单的机器学习模型(如支持向量机SVM)在鸢尾花数据集上进行超参数调优。我们将调优SVM的两个超参数:C(正则化参数)和gamma(RBF核的参数)。注意:由于贝叶斯优化使用高斯过程,它假设目标函数是平滑的,因此对于离散超参数可能需要特殊处理(如将其转换为连续变量再四舍五入,或者使用其他方法)。下面给出代码示例:</think>### 贝叶斯优化在超参数调优中的Python实现 贝叶斯优化是一种高效的黑盒优化算法,通过构建代理模型(如高斯过程)和采集函数(如期望改进EI)来智能探索超参数空间[^1]。以下是一个完整的Python实现示例: #### 1. 安装依赖库 ```bash pip install bayesian-optimization scikit-learn numpy ``` #### 2. 核心代码实现 ```python from bayes_opt import BayesianOptimization from sklearn.svm import SVC from sklearn.datasets import load_iris from sklearn.model_selection import cross_val_score # 加载数据集 X, y = load_iris(return_X_y=True) # 定义目标函数(需最大化) def svm_cv(C, gamma): """SVM交叉验证目标函数""" model = SVC(C=C, gamma=gamma, random_state=42) return cross_val_score(model, X, y, cv=5).mean() # 设置参数边界 pbounds = { 'C': (0.1, 100), # 正则化参数 'gamma': (0.0001, 1) # 核函数参数 } # 初始化贝叶斯优化器 optimizer = BayesianOptimization( f=svm_cv, pbounds=pbounds, random_state=42, ) # 执行优化 optimizer.maximize( init_points=5, # 初始随机采样点 n_iter=25, # 贝叶斯迭代次数 ) # 输出最优结果 print(f"最优参数: {optimizer.max['params']}") print(f"最高准确率: {optimizer.max['target']:.4f}") # 可视化过程 import matplotlib.pyplot as plt plt.plot([res['target'] for res in optimizer.res]) plt.xlabel('迭代次数') plt.ylabel('准确率') plt.title('贝叶斯优化收敛曲线') plt.show() ``` #### 3. 关键组件说明 1. **代理模型**:使用高斯过程建模目标函数$f(x)$: $$f(x) \sim \mathcal{GP}(m(x), k(x,x'))$$ 其中$m(x)$为均值函数,$k(x,x')$为协方差函数[^1]。 2. **采集函数**:采用期望改进(EI)指导采样: $$\text{EI}(x) = \mathbb{E}[\max(f(x) - f(x^+), 0)]$$ 其中$x^+$是当前最优解[^3]。 3. **参数空间**:通过`pbounds`定义连续参数的搜索范围,离散参数需特殊处理(如取整转换)。 #### 4. 优化过程特征 - **智能探索**:前期广泛探索参数空间,后期聚焦有希望区域 - **高效收敛**:通常20-50次迭代即可找到近似最优解 - **并行支持**:可通过`n_jobs`参数实现并行评估 #### 5. 实际应用建议 1. **参数转换**:对指数级参数(如学习率)使用对数变换: ```python pbounds = {'lr': (np.log10(1e-5), np.log10(1))} ``` 2. **早停机制**:添加迭代停止条件: ```python from bayes_opt.util import Colours if optimizer.max['target'] > 0.95: # 达到阈值则停止 print(Colours.green("达到性能阈值!")) break ``` 3. **结果持久化**:保存优化过程: ```python optimizer.point_to_json("optimization_results.json") ``` 贝叶斯优化相比网格搜索可减少90%以上的计算量,特别适合高成本目标函数(如深度学习训练)[^3]。实际应用中需根据问题特性调整采集函数和核函数参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小怪兽会微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值