自动算法选择¶
由于提出了大量的贝叶斯优化算法,用户可能会发现很难为自己的任务选择合适的算法。OpenBox 提供了一个自动算法选择机制,为给定的优化任务选择合适的优化算法。
本文档简要介绍了算法选择机制,包括该机制的使用方法和算法选择标准。
用法¶
要使用自动算法选择机制,请在Advisor或Optimizer中将以下选项设置为'auto':
surrogate_type='auto'acq_type='auto'acq_optimizer_type='auto'
*默认情况下,算法选择机制是启用的。
例如:
from openbox import Advisor
advisor = Advisor(
...,
surrogate_type='auto',
acq_type='auto',
acq_optimizer_type='auto',
)
初始化后,将打印一条日志消息以指示所选的算法:
[BO auto selection] surrogate_type: gp. acq_type: ei. acq_optimizer_type: random_scipy.
算法选择标准¶
算法选择机制基于问题的特性,例如维度、超参数类型和目标数量。它旨在为不同问题提供一致的性能。
算法选择的标准是从实践经验或实验结果中获得的。
用于代理模型¶
高斯过程 (GP, 'gp') 对比概率随机森林 (PRF, 'prf'):
GP 在数学函数上表现非常好。
GP 在具有连续超参数的空间中表现良好。
如果空间充满分类超参数,PRF 更好。
GP 不适合高维问题。
PRF 可以用于高维问题。
计算成本:GP是\(O(n^3)\),而PRF是\(O(nlogn)\),其中\(n\)是观测值的数量。
目前,算法选择机制根据以下标准选择合适的代理模型:
如果搜索空间中有10个或更多的超参数,则选择
'prf'。 (如果有100个或更多的超参数,则使用随机搜索代替BO。)如果分类超参数比连续超参数多,则选择
'prf'。否则,选择
'gp'。如果模型被自动选择为
'gp',并且观测数量大于300,模型将自动切换到'prf'。
用于获取函数¶
获取函数的选择基于优化任务的类型:
对于单目标优化(SO),选择了广泛使用的期望改进(EI,
'ei')。对于带约束的单目标优化(SOC),选择带约束的期望改进(EIC,
'eic')。对于多目标优化(MO):
如果
num_objectives <= 4,则选择预期超体积改进(EHVI,'ehvi')。 (EHVI的计算成本随着目标数量的增加呈指数增长, 因此它不适合目标过多的问题。通常,阈值设置为4。)否则,将选择多目标最大熵搜索(MESMO,
'mesmo')。
对于带约束的多目标优化(MOC):
如果
num_objectives <= 4,则选择带约束的期望超体积改进(EHVIC,'ehvic')。否则,将选择带约束的多目标最大熵搜索(MESMOC,
'mesmoc')。
用于获取函数优化器¶
目前支持的采集函数优化器:
'local_random': 交错本地和随机搜索。'random_scipy': 来自SciPy的随机搜索和L-BFGS-B优化器。
'random_scipy' 优化器目前要求所有超参数都是连续的。
它比 'local_random' 花费更多时间,但更有效。
'local_random' 优化器适用于所有场景。
目前,算法选择机制根据以下标准选择适当的采集函数优化器:
如果搜索空间中存在分类超参数,则选择
'local_random'。否则,选择
'random_scipy'。
自动算法选择的扩展机制¶
对于希望扩展或自定义算法选择机制的用户,
请重写algo_auto_selection方法在Advisor中。
例如,如果你想在搜索空间中有超过10个超参数时,使用改进概率(PI)作为单目标优化的获取函数:
from openbox import Advisor, logger
class MyAdvisor(Advisor):
def algo_auto_selection(self):
if self.acq_type == 'auto':
n_dim = len(self.config_space.get_hyperparameters())
if self.num_objectives == 1 and self.num_constraints == 0 and n_dim > 10:
self.acq_type = 'pi'
logger.info(f'[auto selection] acq_type: {self.acq_type}')
super().algo_auto_selection()