KDD2021 实验室AutoML团队开源高效的通用黑盒优化系统OpenBox DAIR 北大 (KDD2025)
北京大学崔斌教授数据与智能实验室(> 相比于SMAC3,Hyperopt等现有开源系统, OpenBox支持更通用的黑盒优化场景,包括多目标优化,带约束优化场景等。在25个LightGBM调参任务上,OpenBox在7个对比系统中取得了平均1.25名(average rank)的优异成绩。
近年来,人工智能与机器学习备受关注,越来越多企业使用机器学习模型解决实际问题,如人脸识别、商品推荐等。在应用机器学习模型的过程中,模型超参数的选择对模型性能有着至关重要的影响,因此超参数优化问题成为了机器学习的重要挑战之一。超参数优化作为典型的黑盒优化问题,对于优化目标不存在具体表达式或梯度信息,且验证代价较大。其目标是在有限的验证次数内,尽快找到全局最优点。除超参数优化外,黑盒优化还拥有着广泛的使用场景,如自动化A/B测试、数据库参数调优、处理器架构和芯片设计等。
现有开源的黑盒优化系统往往存在以下问题:
由于系统基于某个特定算法,一些系统只能支持单目标或是无约束的优化问题;
基于优化问题中 “no free lunch”定理,现有系统中特定的算法无法在所有任务中表现出色;
现有系统无法有效利用历史任务的结果以及分布式的验证资源。
针对这些问题,北京大学DAIR实验室AutoML项目组开发了一个名为 的轻量级黑盒优化系统,针对通用的黑盒优化场景,内置丰富的优化算法,并提供高效的并行支持,帮助用户“open the box”,解决棘手的黑盒优化问题。
为了解决现有系统上述的问题,OpenBox在设计上支持以下系统特性,包括:
作者将现有系统对上述特点的支持情况总结如上(其中△表示不支持通 用场景)。从表格中不难看出,现有开源黑盒优化系统无法支持特定的使用场景,而 OpenBox 能够提供完整的支持。
上图展示了 OpenBox 的并行架构,包含五个主要组件。服务主机(ServiceMaster)负责节点管理、负载均衡和错误恢复。任务数据库(Task> OpenBox内置大量优化组件,其中优化算法包括贝叶斯优化,遗传算法等,如下图所示:
为简化用户的使用门槛以及提高系统在各问题上的性能,OpenBox 默认采用一种自动选择优化算法的策略,根据输入参数类型,目标个数,约束个数选择合适的优化算法。用户也可基于自身需求,在系统推荐的基础上自行选择优化策略。更多OpenBox的特性请参考开源文档:
目前OpenBox已在快手、阿里巴巴集团等企业落地部署与使用。
为体现OpenBox在通用黑盒优化问题上的性能,系统针对单/多目标,无/有约束,共4种场景对比OpenBox与现有算法与系统在优化数学函数上的效果,实验效果如下四图所示。可以看出 在不同的优化场景中,OpenBox相较现有系统都有较为显著的收敛效果提升。
针对实际场景,Openbox以表格分类的机器学习任务为例,与现有开源系统BoTorch,GPGlowOpt,Spearmint,HyperMapper,SMAC3,Hyperopt进行对比。为保证公平性,Openbox使用串行方式执行任务,并汇报调参结果在测试集上的准确率。以下展示使用LightGBM与LibSVM两个模型在25个OpenML公开数据集上的调参结果平均排名。值得注意的是,由于LibSVM的搜索空间复杂且包含条件选择,OpenBox仅与支持复杂空间定义的SMAC3以及Hyperopt进行对比。
可以观察到OpenBox在两个模型调参中均获得了优异的性能。具体来说,OpenBox在Lightgbm调参中排名中位数为1.25,在LibSBM调参中为1.50,体现了OpenBox相比其它开源系统在超参数优化任务中的优势。
OpenBox 支持高效的并行优化算法,使得在达到相同的优化效果的前提下,所需要的时间代价大幅降低。下图展示了使用 OpenBox 中并行优化算法在 LightGBM 调参任务上的提升,使用的数据集为公开数据集 optdigits 。其中“Sync”表示同步并行,“Async” 表示异步并行,“-n” 表示并发度。
可以观察到,相比串行优化(Seq-1),并行能够带来很大程度上提升搜索效率。其中最显著的提升来自于并发度为8的异步优化算法,在达到与串行方法相同的优化结果时 仅使用1/80的时间预算,也即实现7.5×的加速比。
更多关于OpenBox的实验结果,请参考OpenBox论文:
目前OpenBox支持主流平台(Linux、macOS、Window)使用。用户只需在代码中定义空间,给出目标函数,构造优化器即可运行。以下以一个简单的多目标带约束问题为例:
首先,我们需要import必要的组件:
接下来,我们定义一个包含两个连续变量的搜索空间:
随后,我们给出一个简单的以上述两个变量为输入的目标函数。这个目标函数包含两个目标以及两个约束:
最后我们定义一个优化器,传入指定的参数后,只需调用run()即可开始优化。
除了上述包调用的方法,OpenBox还支持用户通过接口访问服务,从服务端获取推荐的参数配置,在本地执行参数性能验证,并通过访问网站页面,可视化监视与管理优化过程。
完整的示例以及更多的使用场景,欢迎参考OpenBox官方文档:
特约稿件,未经授权禁止转载。详情见 转载须知 。