“黑盒优化”是什么?

本文涉及“黑盒优化”和“零阶优化”的区别和联系,以及它们的定义

关于“零阶优化”,可以看文章“Optimizing molecules using efficient queries from property evaluations


 

一、“黑盒优化”是什么?

黑盒优化”是一种优化技术,用于处理那些我们无法直接访问或理解其内部工作原理的系统或函数。在这种情况下,我们将该系统或函数视为一个“黑盒”,因为我们只能观察到输入和输出,但不能观察到其内部的具体运行机制。【不利用导数信息】

以下是“黑盒优化”的几个关键特点:

  1. 不需要导数信息:与传统的基于导数的优化方法(例如梯度下降)不同,黑盒优化不需要函数的导数信息。

  2. 适用于复杂系统:对于那些复杂的、不透明的、或者是不易于分析的系统,黑盒优化特别有用。

  3. 只需要输入和输出:用户只需提供一个函数或评估标准,优化算法会尝试找到最佳的输入,以最大化或最小化输出。

  4. 使用启发式方法:由于缺乏内部信息,黑盒优化通常依赖于启发式搜索方法,如遗传算法、蒙特卡洛树搜索、贝叶斯优化等。

总的来说,黑盒优化是针对那些我们不能直接探索或理解其内部工作机制的系统或函数的优化策略。我们只是尝试不同的输入,观察输出,然后根据这些信息来决定下一步的最佳操作。

二、“黑盒优化”常用的方法

 一般来说,黑盒优化都是从一个初始解出发,通过不停迭代来改进当前解,直到无法再改进为止。

这个黑盒优化的迭代过程可以用各种方案去刻划:比如说从一个还不错的起始点开始的局部搜索,一个从粗到细的逐步精化,或者说局部渐进和长程跳跃的组合(例如进化算法的演化和突变),等等,每种方案都对应不同的行动空间。但从本质上来说,优化和“下棋打游戏”等问题很大的不同点在于,优化本身没有”行动空间“的概念,对它而言,行动空间如何定义都无所谓,只要最终解质量好就行。

三、性能指标

其主要性能指标是:达到同样的函数值,需要多少次黑盒函数的调用,越少越好。因为在实际问题中,需要用黑盒优化的场景,往往是函数调用开销非常大且没有导数信息的场景,比如说函数值是一个复杂系统运转一天后的平均效率,或者是耗费巨资才可获得的一个实验结果,等等。


“黑盒优化”和“零阶优化”的区别和联系

定义:

  1. 黑盒优化:这是一个通用的术语,描述的是当你试图优化一个函数时,但对其内部结构几乎一无所知,只知道输入和输出关系的情境。也就是说,你不能利用函数的内部信息(如导数或结构)来帮助优化。

  2. 零阶优化:这是一个更为技术性的术语,描述的是当你优化一个函数时,你没有关于函数的导数或梯度的信息。零阶优化算法只使用函数的值,不使用任何导数信息。

区别:

  1. 范围:黑盒优化是一个更为广泛的概念,涵盖了任何我们不能直接访问函数内部信息的情境,而零阶优化特指没有导数信息的优化情境。

  2. 方法:由于黑盒优化是一个广泛的概念,因此可以使用各种方法(包括零阶优化方法)来进行。而零阶优化有一些特定的技术,如随机搜索、有限差分方法等。

联系:

  1. 零阶优化是黑盒优化的一个子集:当你面临一个黑盒问题且没有关于函数的导数信息时,你可以使用零阶优化方法。

  2. 目标相似:无论是黑盒优化还是零阶优化,目标都是在缺乏关于函数完整信息的情况下找到其最优值。

  3. 启发式方法:由于两者都缺乏函数的某些关键信息,因此它们都可能依赖启发式搜索方法来进行优化。

介绍两篇NeurIPS的文章(二) - 知乎

### 黑盒优化算法的原理 黑盒优化是一种针对目标函数不可导或者难以计算其梯度的情况下的优化方法。在这种情况下,传统的基于梯度的方法无法适用,因此需要采用其他技术手段来寻找最优解。常见的黑盒优化方法包括零阶优化方法、策略梯度方法以及贝叶斯优化等[^1]。 #### 零阶优化方法 零阶优化方法的核心在于不依赖目标函数的具体形式及其梯度信息,而是通过对输入变量的小幅扰动观察输出的变化趋势来进行优化。这种方法通常适用于高维空间中的连续优化问题,并且可以通过随机采样或结构化搜索的方式逐步逼近全局最优解。 #### 策略梯度方法 在强化学习领域中广泛应用的策略梯度方法也可以视为一种特殊的黑盒优化方式。它通过定义一个概率分布作为决策机制,在每次迭代过程中更新这个分布使得期望奖励最大化。尽管这里提到的是强化学习背景下的应用实例,但实际上只要能构建类似的反馈循环系统,则同样可以将其应用于更广泛的场景之中。 #### 贝叶斯优化 对于那些评估成本较高(比如涉及复杂仿真模拟)的目标函数来说, 使用较少次数即能找到较优解显得尤为重要。此时可考虑运用贝叶斯优化(Bayesian Optimization),这是一种建立在高斯过程(Gaussian Process)之上并结合Acquisition Function指导下一步取样的高效全局寻优方案。 它利用先前已知数据点的信息预测未知区域可能存在的极值位置,从而减少不必要的重复试验次数提高效率。 --- ### 实现方法 以下是三种典型黑盒优化算法的基本实现思路: #### 方法一:零阶优化 (Zeroth-order optimization) ```python import numpy as np def zero_order_optimization(func, dim=2, max_iter=100, sigma=0.1): x = np.random.randn(dim) # 初始化参数向量 best_x = None best_value = float('inf') for _ in range(max_iter): noise = np.random.normal(size=(dim,)) f_plus = func(x + sigma * noise) f_minus = func(x - sigma * noise) grad_estimate = (f_plus - f_minus) / (2 * sigma) * noise step_size = 0.1 / (_+1)**0.5 # 动态调整步长 x -= step_size * grad_estimate current_value = func(x) if current_value < best_value: best_value = current_value best_x = x.copy() return best_x, best_value ``` 此代码片段展示了如何使用有限差分法估计梯度方向进而完成一次简单的零阶优化流程。 #### 方法二:策略梯度 (Policy Gradient) 假设存在如下环境交互逻辑: ```python class Environment(): def __init__(self): self.state = ... def reset(self):... def step(action):... ``` 那么对应的策略网络训练部分大致如下所示: ```python import torch from torch.distributions import Categorical policy_net = ... # PyTorch model definition omitted here. optimizer = torch.optim.Adam(policy_net.parameters(), lr=learning_rate) for episode in episodes: state = env.reset() log_probs = [] rewards = [] while not done: probs = policy_net(state) m = Categorical(probs) action = m.sample() next_state, reward, done = env.step(action.item()) log_probs.append(m.log_prob(action)) rewards.append(reward) state = next_state discounted_rewards = compute_discounted_returns(rewards) loss = (-torch.stack(log_probs).sum() * discounted_rewards.sum()) optimizer.zero_grad() loss.backward() optimizer.step() ``` 上述伪码描述了一个基本的REINFORCE算法框架用于解决马尔科夫决策过程(Markov Decision Processes). #### 方法三:贝叶斯优化 (Bayesian Optimization) 下面给出了一种简化版的贝叶斯优化器构造示例: ```python from sklearn.gaussian_process import GaussianProcessRegressor from scipy.optimize import minimize_scalar gp_model = GaussianProcessRegressor(...) X_sampled = [...] # 已经采集的数据样本集合 Y_sampled = [...] acq_func_values = [] def acquisition_function(x_new_candidate): mu, std = gp_model.predict(np.array([x_new_candidate]), return_std=True) ei = expected_improvement(mu, std, Y_sampled.max()) acq_func_values.append(ei) return -ei # Minimize negative EI equals to maximize it. next_point_to_evaluate = minimize_scalar(acquisition_function,bounds=(lower_bound,upper_bound),method='bounded').x new_y = objective_function(next_point_to_evaluate) X_sampled.append(next_point_to_evaluate); Y_sampled.append(new_y); gp_model.fit(X_sampled,Y_sampled) ``` 以上程序段落体现了典型的GP建模加EI准则驱动的新点选取原则。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Pengsen Ma

太谢谢了

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

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

打赏作者

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

抵扣说明:

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

余额充值