华为河伯

华为诺亚方舟实验室开源了一个贝叶斯优化+RL的仓库,里面包括几部分:

  • 贝叶斯研究
    (1)HEBO:异方差进化贝叶斯优化 HEBO: Heteroscedastic Evolutionary Bayesian Optimisation
    (2)T-LBO:基于变分自编码器和深度度量学习的高维贝叶斯优化 High-Dimensional Bayesian Optimisation with Variational Autoencoders and Deep Metric Learning. 介绍了一种基于深度度量学习的方法,使用变分自编码器(ves)在高维结构化输入空间上执行贝叶斯优化。
    (3)BOiLS:逻辑综合的贝叶斯优化 BOiLS: Bayesian Optimisation for Logic Synthesis (DATE22 conference)在逻辑综合过程中优化电路的结果质量(QoR)是一项艰巨的挑战,需要探索指数级大小的搜索空间。这是第一个采用现代贝叶斯优化来导航综合操作空间的算法。
    (4) 贝叶斯优化与组合优化器 Are we Forgetting about Compositional Optimisers in Bayesian Optimisation? (JMLR conference)贝叶斯优化为全局优化提供了一种样本效率方法。在这个框架中,一个决定性能的关键子例程是获取函数的最大化,由于获取函数往往是非凸的,因此优化起来是非平凡的,这使得任务变得复杂。在本文中,我们对获取函数最大化的方法进行了全面的实证研究。
    (5)AntBO:结合贝叶斯优化的抗体设计 AntBO: Towards Real-World Automated Antibody Design with Combinatorial Bayesian Optimisation.抗体是规范的y型多聚体蛋白质,具有高度特异性的分子识别能力。位于抗体可变链末端的CDRH3区域在抗原结合特异性中占主导地位。然而,CDRH3序列空间的组合性质使其不可能彻底和有效地寻找最佳结合序列。我们提出了AntBO:一种组合贝叶斯优化框架,可有效地实现CDRH3区域的硅片设计。

  • 强化学习研究
    (1)Sauté RL: Almost Surely Safe RL Using State Augmentation. 几乎肯定地(或概率为1)满足安全约束对于在现实应用中部署强化学习(RL)是至关重要的。例如,理想情况下,飞机降落和起飞的概率应为1。我们通过引入安全增强(Saute)马尔可夫决策过程(MDPs)来解决这个问题,其中通过将安全约束增强到状态空间并重塑目标来消除安全约束。我们证明Saute MDP满足Bellman方程,使我们更接近于在约束几乎肯定满足的情况下求解Safe RL。
    (2)Enhancing Safe Exploration Using Safety State Augmentation. 安全探索是无模型强化学习(RL)中一个具有挑战性和重要意义的问题。通常安全成本是稀疏的和未知的,这不可避免地导致约束违反——这是在安全关键应用程序中最好避免的现象。我们通过用安全状态来增加状态空间来解决这个问题,当且仅当约束被满足时,安全状态是非负的。该状态的值也作为约束违反的距离,其初始值表示可用的安全预算。这一思想使我们能够推导出在培训期间安排安全预算的政策。我们将我们的方法称为Simmer(用于RL的安全策略改进)。我们将这一思想应用于两个安全的RL问题:对平均成本施加约束的RL和对概率为1的成本施加约束的RL。
    (3)Model-Based Offline Reinforcement Learning with Pessimism-Modulated Dynamics Belief (NeurIPS22 conference)基于模型的离线强化学习(RL)旨在利用以前收集的静态数据集和动态模型,找到高回报的策略。动态模型的泛化能力在重用静态数据集的同时,如果利用得当,有望促进策略学习。为此,一些研究提出量化预测动态的不确定性,并明确地将其应用于惩罚奖励。然而,由于动态和奖励在MDP背景下是本质不同的因素,通过奖励惩罚来表征动态不确定性的影响可能会在模型利用和风险规避之间产生意想不到的权衡。在这项工作中,我们相反地在动态上保持信念分布,并通过信念中的有偏见抽样来评估/优化政策。基于离线RL的交替马尔可夫对策公式推导了偏向悲观的抽样程序。

HEBO github & paper

仓库地址:https://github.com/huawei-noah/HEBO
其中河伯是NeurIPS 2020 Black-Box Optimisation Challenge的冠军解决方案

HEBO仓库宣称的特性

  • 连续、整数和分类的设计参数。 Continuous, integer and categorical design parameters.
  • 约束和多目标优化。 Constrained and multi-objective optimsation.
  • 上下文optimsation。Contextual optimsation.
  • 多个代理模型包括GP, RF和BNN。 Multiple surrogate models including GP, RF and BNN.
  • 模块化和灵活的贝叶斯优化构建块。Modular and flexible Bayesian Optimisation building blocks.

PaperHEBO: Heteroscedastic Evolutionary Bayesian Optimisation

  • Motivation:赢得了NeurIPS 2020黑箱优化比赛。
  • Method:提出了对 surrogate model 和 acquisition maximisation process 的非常规修改,结果显示这样的组合优于所有基线提供 Bayesmark包。最后,做了消融实验,分析有效trick
    (1)对surrogate model的修改:增加了输入的wraping,降低非平稳性;增加了输出的transform,使得目标函数的异质的高斯噪声可以转化为同质的高斯噪声。
    (2)对于acquisition function的修改:同时使用贝叶斯的3种acquisition function,包括EI、PI、UCB(或LCB),作为多目标优化的3个目标,提出multi object acquisition function。
  • Background:黑盒优化有很多挑战巴拉巴拉,反正贝叶斯对于无导数的优化挺擅长的。介绍了一下贝叶斯优化的Surrogate Model 和 Acquisition Functions
  • Contribution:在贝叶斯优化的两个过程中都做了一些修改,使用的是几十年前用过的一些方法的结合,取得不错的效果,获得了比赛第一,调研了一些消融实验确认创新点可以取得收益。

GitHub doc

  • 安装 pip install hebo
  • Space 定义:目前支持类型:int,实数num,在对数空间变化的实数pow,bool,离散cat
import torch
from hebo.design_space.design_space import DesignSpace
params = [
    {'name' : 'hidden_size', 'type' : 'int', 'lb' : 16, 'ub' : 128},
    {'name' : 'batch_size',  'type' : 'int', 'lb' : 16, 'ub' : 128},
    {'name' : 'lr', 'type' : 'pow', 'lb' : 1e-4, 'ub' : 1e-2, 'base' : 10},
    {'name' : 'use_bn', 'type' : 'bool'},
    {'name' : 'activation', 'type' : 'cat', 'categories' : ['relu', 'tanh','sigmoid']},
    {'name' : 'dropout_rate', 'type' : 'num', 'lb' : 0.1, 'ub' : 0.9},
    {'name' : 'optimizer', 'type' : 'cat', 'categories' : ['sgd', 'adam', 'rmsprop']}
]

space = DesignSpace().parse(params)
space.sample(5)  # 随机抽样,返回一个pandas
# 实际上在hebo内部会将所有类型的数据都转化为torch.FloatTensor或torch.LongTensor
  • Optimisation 优化器
from hebo.optimizers.hebo import HEBO
from hebo.optimizers.bo import BO # 具有LCB采样的基本BO
hebo_seq = HEBO(space, model_name = 'gpy', rand_sample = 4)
for i in range(64):
    rec_x = hebo_seq.suggest(n_suggestions=1) # n_suggestions可以决定每次采样多少个点来并行评估
    hebo_seq.observe(rec_x, obj(rec_x)) # obj是目标函数
    if i % 4 == 0:
        print('Iter %d, best_y = %.2f' % (i, hebo_seq.y.min()))

conv_hebo_seq = np.minimum.accumulate(hebo_seq.y) # 获取所有结果,用于绘图
  • Tuning sklearn esitmator 直接做黑盒优化
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score, mean_squared_error
from hebo.sklearn_tuner import sklearn_tuner

space_cfg = [
        {'name' : 'max_depth',        'type' : 'int', 'lb' : 1, 'ub' : 20},
        {'name' : 'min_samples_leaf', 'type' : 'num', 'lb' : 1e-4, 'ub' : 0.5},
        {'name' : 'max_features',     'type' : 'cat', 'categories' : ['auto', 'sqrt', 'log2']},
        {'name' : 'bootstrap',        'type' : 'bool'},
        {'name' : 'min_impurity_decrease', 'type' : 'pow', 'lb' : 1e-4, 'ub' : 1.0},
        ]
X, y   = load_boston(return_X_y = True)
result = sklearn_tuner(RandomForestRegressor, space_cfg, X, y, metric = r2_score, max_iter = 16)

print(result) #打印结果 {'最大深度':15, 'min_samples_leaf':0.00011814573477638075, 'max_features':'log2', '引导程序':假, 'min_impurity_decrease':0.00010743041070558209}
  • Advanced optimisation 高级优化(优化带约束的多目标函数)
from pymoo.factory import get_problem
problem = get_problem("zdt1", n_var = 5) # pymoo的多目标基准函数

dim = problem.n_var  # 优化维度
num_obj = problem.n_obj  # 优化的目标数量
num_constr = problem.n_constr  # 优化的约束数量

from hebo.optimizers.general import GeneralBO  #在这之前还有很多别的配置,建议直接看HEBO官方文档,下方仅截取核心代码
opt = GeneralBO(space, num_obj, num_constr, model_conf = conf)
for i in range(50):
    rec = opt.suggest(n_suggestions=4)
    opt.observe(rec, obj(rec))

# 可以通过绘图发现HEBO得到的帕累托前沿比随机搜索更好
  • High-dimensional optimisation via random linear embedding 将随机嵌入与HRBO结合,进行高维优化(实际上解决的还是低内在维度的问题)
from hebo.benchmarks.synthetic_benchmarks import BraninDummy
from hebo.optimizers.hebo_embedding import HEBO_Embedding

prob  = BraninDummy(1000) # 1000-D Branin function where the frist two dimensions are active
opt   = HEBO_Embedding(prob.space, rand_sample = 10, eff_dim = 2, scale = 1)
  • Evolutionary Optimization with HEBO API 进化算法优化,包装了pymoo的进化算法
from hebo.optimizers.evolution import Evolution
from hebo.benchmarks.synthetic_benchmarks import Ackley

prob = Ackley(dim = 2)
opt = Evolution(prob.space, num_obj = 1, num_constr = 0, algo = 'de', verbose = True)
n_eval = 0
for i in range(30):
    rec     = opt.suggest()
    obs     = prob(rec)
    n_eval += rec.shape[0]
    opt.observe(rec, obs)
print(f'After iter {i+1}, evaluated {n_eval}, best_y is {opt.best_y.squeeze()}')
  • Custom: writing your own BO algorithm 自定义算法,暂时还没有相关介绍

复现HEBO结果

Step1:配置环境

pip install HEBO
pip install pymoo==0.4.1  # 新版本的pymoo>=0.5.0跑不起来hebo
pip install bayesmark[optimizers,notebooks] # 既安装所有内置优化器,也安装包含notebook的环境

Step2:下载HEBO,评测脚本

git clone https://github.com/rdturnermtl/bbo_challenge_starter_kit.git # 下载官方的一键评测脚本,主要用到了bayesmark这个库来作为评测基准
git clone https://github.com/huawei-noah/HEBO.git  # 下载HEBO代码

Step3:测试一下评测脚本,用pysot算子例程评测3次得到的结果,评测的训练模型是SVM、DT,使用训练数据集合是boston、wine。脚本将自动进行初始化、评测、结果分析。

cd bbo_challenge_starter_kit
bash ./run_local.sh ./example_submissions/pysot 3  # 会报错,看了下是pysot/optimizer.py的实现有问题,引入了不存在的类
bash ./run_local.sh ./example_submissions/random-search 3  # 换个算法就能跑了
所有评估指标

统计指标

Step4:重跑华为的脚本,时间关系只评估1趟就好了

bash ./run_local.sh ../HEBO/HEBO/archived_submissions/hebo 1

报错 ModuleNotFoundError: No module named 'pymoo.algorithms.so_genetic_algorithm'。原因是pymoo升级了,如果要跑hebo,就需要安装旧版本的pymoo==0.4.1


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容