five

Design-Bench

收藏
arXiv2022-02-17 更新2024-07-24 收录
下载链接:
https://github.com/rail-berkeley/design-bench
下载链接
链接失效反馈
官方服务:
资源简介:
Design-Bench是一个专为离线模型优化设计的基准数据集,由加州大学伯克利分校的研究团队开发。该数据集包含七个不同的任务,涵盖了生物学、材料科学和机器人学等多个领域,旨在为离线模型优化提供多样化的挑战。数据集中的任务设计考虑了高维度、敏感的非连续目标函数等因素,以帮助识别模型优化方法的优缺点。此外,数据集还提供了多种现有离线模型优化方法的参考实现,并通过标准化评估协议对这些方法进行了系统评估。

Design-Bench is a benchmark dataset specifically designed for offline model optimization, developed by the research team at the University of California, Berkeley. This dataset contains seven distinct tasks spanning multiple fields including biology, materials science and robotics, aiming to provide diverse challenges for offline model optimization. The tasks in the dataset are designed with considerations of factors such as high-dimensionality, sensitive non-continuous objective functions, to help identify the strengths and weaknesses of model optimization methods. In addition, the dataset provides reference implementations of multiple existing offline model optimization methods, and systematically evaluates these methods via standardized evaluation protocols.
提供机构:
加州大学伯克利分校
创建时间:
2022-02-17
原始信息汇总

Design-Bench 数据集概述

数据集描述

Design-Bench 是一个用于解决自动设计问题的基准测试框架,涉及选择一个输入以最大化一个黑盒函数。这种类型的优化在科学和工程领域有广泛应用,例如设计具有特定功能的蛋白质和DNA序列、化学公式和分子子结构、机器人形态和控制器等。

数据集目标

目标是在不查询新数据点的情况下,找到一个输入 x 以最大化未知黑盒函数 f。函数 f 通常难以评估或成本高昂,例如在蛋白质设计中需要湿实验室实验。f 由一组函数评估描述:D = {(x_0, y_0), (x_1, y_1), ... (x_n, y_n)}。

安装指南

Design-Bench 可以通过 pip 包安装,包含完整的基准测试集: bash conda create -n mbo -c conda-forge rdkit pip install design-bench[all]==2.0.20 pip install morphing-agents==1.5.1

或者选择最小安装(不包含 MuJoCo): bash conda create -n mbo -c conda-forge rdkit pip install design-bench==2.0.20

可用任务

以下表格列出了支持的数据集和目标函数组合,✅ 表示特定组合已经过测试并可从服务器下载。

Dataset Oracle Exact Gaussian Process Random Forest Fully Connected LSTM ResNet Transformer
TF Bind 8
GFP
ChEMBL
UTR
Hopper Controller
Superconductor
Ant Morphology
DKitty Morphology

任务详情

以下是每个任务的详细信息,包括数据集大小和 Spearmans ρ 值。

Task Name Dataset Oracle Dataset Size Spearmans ρ
TFBind8-Exact-v0 TF Bind 8 Exact 65792
GFP-Transformer-v0 GFP Transformer 56086 0.8497
ChEMBL-ResNet-v0 ChEMBL ResNet 40516 0.3208
UTR-ResNet-v0 UTR ResNet 280000 0.8617
HopperController-Exact-v0 Hopper Controller Exact 3200
Superconductor-RandomForest-v0 Superconductor Random Forest 21263 0.9155
AntMorphology-Exact-v0 Ant Morphology Exact 25009
DKittyMorphology-Exact-v0 DKitty Morphology Exact 25009

基准性能

以下是不同方法在各个任务上的性能表现,以标准化形式报告,1.0 表示性能等同于完整未观测数据集中表现最好的设计,0.0 表示性能等同于最差的设计。

连续任务

Method Task GFP TF Bind 8 UTR ChEMBL
Auto. CbAS 0.865 ± 0.000 0.910 ± 0.044 0.650 ± 0.006 0.470 ± 0.000
CbAS 0.865 ± 0.000 0.927 ± 0.051 0.650 ± 0.002 0.517 ± 0.055
BO-qEI 0.254 ± 0.352 0.798 ± 0.083 0.659 ± 0.000 0.333 ± 0.035
CMA-ES 0.054 ± 0.002 0.953 ± 0.022 0.666 ± 0.004 0.350 ± 0.017
Grad. 0.864 ± 0.001 0.977 ± 0.025 0.639 ± 0.009 0.360 ± 0.029
Grad. Min 0.864 ± 0.000 0.984 ± 0.012 0.647 ± 0.007 0.361 ± 0.004
Grad. Mean 0.864 ± 0.000 0.986 ± 0.012 0.647 ± 0.005 0.373 ± 0.013
MINs 0.865 ± 0.001 0.905 ± 0.052 0.649 ± 0.004 0.473 ± 0.057
REINFORCE 0.865 ± 0.000 0.948 ± 0.028 0.646 ± 0.005 0.459 ± 0.036

离散任务

Method Task Superconductor Ant Morphology DKitty Morphology Hopper Controller
Auto. CbAS 0.421 ± 0.045 0.884 ± 0.046 0.906 ± 0.006 0.137 ± 0.005
CbAS 0.503 ± 0.069 0.879 ± 0.032 0.892 ± 0.008 0.141 ± 0.012
BO-qEI 0.402 ± 0.034 0.820 ± 0.000 0.896 ± 0.000 0.550 ± 0.118
CMA-ES 0.465 ± 0.024 1.219 ± 0.738 0.724 ± 0.001 0.604 ± 0.215
Grad. 0.518 ± 0.024 0.291 ± 0.023 0.874 ± 0.022 1.035 ± 0.482
Grad. Min 0.506 ± 0.009 0.478 ± 0.064 0.889 ± 0.011 1.391 ± 0.589
Grad. Mean 0.499 ± 0.017 0.444 ± 0.081 0.892 ± 0.011 1.586 ± 0.454
MINs 0.469 ± 0.023 0.916 ± 0.036 0.945 ± 0.012 0.424 ± 0.166
REINFORCE 0.481 ± 0.013 0.263 ± 0.032 0.562 ± 0.196 -0.020 ± 0.067

任务 API

Design-Bench 任务共享一个在 design_bench/task.py 中定义的通用接口,提供一组输入设计 task.x 和一组输出预测 task.y。此外,可以使用 y = task.predict(x) 评估新输入设计的性能。

示例代码

python import design_bench task = design_bench.make(TFBind8-Exact-v0)

def solve_optimization_problem(x0, y0): return x0 # 解决一个基于模型的优化问题

解决并评估最佳输入 x_star

x_star = solve_optimization_problem(task.x, task.y) y_star = task.predict(x_star)

数据集 API

数据集提供关于黑盒函数的信息,并用于在 Design-Bench 中拟合近似目标模型。所有数据集继承自 design_bench.datasets.dataset_builder 中定义的 DatasetBuilder 类。

示例代码

python from design_bench.datasets.discrete.gfp_dataset import GFPDataset dataset = GFPDataset()

将 x 转换为分类概率分布的 logits

dataset.map_to_logits() discrete_x = dataset.to_integers(dataset.x)

将输入归一化为零均值和单位方差

dataset.map_normalize_x() original_x = dataset.denormalize_x(dataset.x)

将输出归一化为零均值和单位方差

dataset.map_normalize_y() original_y = dataset.denormalize_y(dataset.y)

修改数据集的分布

dataset.subsample(max_samples=10000, distribution="uniform", min_percentile=10, max_percentile=90)

更改输出的函数

dataset.relabel(lambda x, y: y ** 2 - 2.0 * y)

将数据集拆分为验证集

training, validation = dataset.split(val_fraction=0.1)

自定义数据集

如果需要定义自己的数据集,可以直接实例化连续或离散数据集。DiscreteDataset 和 ContinuousDataset 类接受输入 x 和输出 y 的 numpy 数组。

示例代码

python from design_bench.datasets.discrete_dataset import DiscreteDataset from design_bench.datasets.continuous_dataset import ContinuousDataset import numpy as np

创建虚拟输入和输出

x = np.random.randint(500, size=(5000, 43)) y = np.random.uniform(size=(5000, 1))

创建离散数据集

dataset = DiscreteDataset(x, y)

创建虚拟输入和输出

x = np.random.uniform(size=(5000, 871)) y = np.random.uniform(size=(5000, 1))

创建连续数据集

dataset = ContinuousDataset(x, y)

磁盘资源数据集

如果数据集保存在一组分片 numpy 文件中,可以使用 DiskResource 类创建数据集。DiscreteDataset 和 ContinuousDataset 类接受输入 x 和输出 y 的分片列表。

示例代码

python from design_bench.disk_resource import DiskResource from design_bench.datasets.discrete_dataset import DiscreteDataset from design_bench.datasets.continuous_dataset import ContinuousDataset import os import numpy as np

列出每个分片的磁盘资源

os.makedirs("new_dataset/") x = [DiskResource("new_dataset/shard-x-0.npy"), DiskResource("new_dataset/shard-x-1.npy")] y = [DiskResource("new_dataset/shard-y-0.npy"), DiskResource("new_dataset/shard-y-1.npy")]

创建虚拟输入和输出

xs = np.random.randint(500, size=(5000, 43)) ys = np.random.uniform(size=(5000, 1))

将数据集保存到分片文件

np.save("new_dataset/shard-x-0.npy", xs[:3000]) np.save("new_dataset/shard-x-1.npy", xs[3000:]) np.save("new_dataset/shard-y-0.npy", ys[:3000]) np.save("new_dataset/shard-y-1.npy", ys[3000:])

创建离散数据集

dataset = DiscreteDataset(x, y)

创建虚拟输入和输出

xs = np.random.uniform(size=(5000, 871)) ys = np.random.uniform(size=(5000, 1))

将数据集保存到分片文件

np.save("new_dataset/shard-x-0.npy", xs[:3000]) np.save("new_dataset/shard-x-1.npy", xs[3000:]) np.save("new_dataset/shard-y-0.npy", ys[:3000]) np.save("new_dataset/shard-y-1.npy", ys[3000:])

创建连续数据集

dataset = ContinuousDataset(x, y)

Oracle API

Oracle 提供了一种在不进行额外实际实验的情况下测量模型优化算法找到的候选解决方案性能的方法。Oracle 实现了一个预测函数 oracle.predict(x),该函数接受一组设计并对其性能进行预测。

示例代码

python from design_bench.datasets.discrete.gfp_dataset import GFPDataset from design_bench.oracles.tensorflow import TransformerOracle

创建数据集和噪声 oracle

dataset = GFPDataset() oracle = TransformerOracle(dataset, noise_std=0.1)

def solve_optimization_problem(x0, y0): return x0 # 解决一个基于模型的优化问题

评估解决方案 x_star 的性能

x_star = solve_optimization_problem(dataset.x, dataset.y) y_star = oracle.predict(x_star)

近似 Oracle

Design-Bench 提供了一组近似 Oracle,包括高斯过程、随机森林和几种专门针对特定数据模式的深度神经网络架构。这些近似 Oracle 可能具有以下参数:

示例代码

python from design_bench.datasets.discrete.gfp_dataset import GFPDataset from design_bench.oracles.tensorflow import TransformerOracle

Transformer 架构的参数

model_kwargs=dict( hidden_size=64, feed_forward_size=256, activation=relu, num_heads=2, num_blocks=4, epochs=20, shuffle_buffer=60000, learning_rate=0.0001, dropout_rate=0.1)

构建验证集的参数

split_kwargs=dict( val_fraction=0.1, subset=None, shard_size=5000, to_disk=True, disk_target="gfp/split", is_absolute=False)

搜集汇总
数据集介绍
main_image_url
构建方式
Design-Bench 数据集的构建方式是基于现实世界的优化问题,旨在为数据驱动离线模型优化提供一个统一的评估协议和参考实现。该数据集包含了一系列来自生物学、材料科学和机器人技术等领域的真实优化问题,这些任务为离线模型优化带来了独特的挑战。为了评估和比较离线模型优化算法,Design-Bench 提供了一个标准化的评估协议,并包含了来自不同领域的多种任务,涵盖了连续和离散、低维和高维设计空间。此外,该数据集还包含了由领域专家构建的模型,用于评估优化结果的真实性。
特点
Design-Bench 数据集的特点在于其多样性和挑战性。它包含了来自不同领域的任务,如材料科学、生物学和机器人技术等,每个任务都代表了离线模型优化中可能遇到的挑战。此外,该数据集还包含了高维设计空间和高度敏感的目标函数,以及重尾分布的数据分布等挑战性因素。这些特点使得 Design-Bench 成为评估和比较离线模型优化算法的理想选择。
使用方法
使用 Design-Bench 数据集的方法主要包括以下步骤:首先,根据任务需求选择合适的数据集。然后,使用领域专家构建的模型作为真实目标函数进行评估。最后,通过比较不同离线模型优化算法在各个任务上的性能,来评估和比较这些算法的有效性。此外,Design-Bench 还提供了参考实现和代码,方便研究人员进行实验和比较。
背景与挑战
背景概述
Design-Bench是一个用于数据驱动离线模型优化(MBO)的基准测试,它由Brandon Trabucco、Xinyang Geng和Sergey Levine等人于2022年提出。该数据集旨在解决黑盒模型优化问题,即在不知道目标函数确切形式的情况下,找到最大化目标函数的设计输入。此类问题在蛋白质设计、DNA序列、飞机和机器人设计等领域中普遍存在。离线MBO方法使用已有的数据集来合成最优设计,避免了物理构建、测试和存储结果的过程,从而节省了成本和时间。Design-Bench提供了一个统一的评估协议和现有方法的参考实现,包括来自生物学、材料科学和机器人技术等领域的多样化任务。该数据集和相关方法已在github.com/rail-berkeley/design-bench和github.com/rail-berkeley/design-baselines上发布,为离线MBO领域的研究提供了重要的资源。
当前挑战
Design-Bench面临的主要挑战包括:1)领域问题:离线MBO需要在不主动查询真实目标函数的情况下,仅使用已有数据来优化设计。这要求算法能够从有限的数据中学习到目标函数的结构,并在高维设计空间中找到最优解。2)构建过程中的挑战:由于真实目标函数不可知,算法需要学习一个代理模型来近似目标函数。然而,优化代理模型可能会导致模型输出与真实目标函数不一致,产生“欺骗”模型的现象。此外,为了找到比数据集中最佳设计更好的解,算法需要在保持数据分布的同时,从数据中偏离一定的距离。这种在数据分布内和数据分布外之间找到平衡点的需求,是离线MBO的核心挑战之一。Design-Bench中的任务涵盖了高维设计空间、敏感的非连续目标函数和重尾数据分布等挑战,帮助识别MBO方法的优缺点。
常用场景
经典使用场景
Design-Bench数据集主要用于评估和开发基于模型的离线优化算法。该数据集提供了来自生物学、材料科学和机器人学等领域的各种任务,旨在代表现实世界中的优化挑战。例如,在材料科学中,Design-Bench可以用于设计具有高临界温度的超导体;在生物学中,可以用于优化DNA序列与特定转录因子的结合亲和力;在机器人学中,可以用于优化机器人的形态结构,使其能够以最快的速度移动或到达特定位置。
衍生相关工作
Design-Bench数据集的衍生工作包括各种离线优化算法,如模型反转网络(MINs)、条件自适应采样(CbAS)、自动聚焦CbAS(Auto.CbAS)、REINFORCE/CMA-ES和保守目标模型(COMs)等。这些算法都旨在解决离线优化算法的挑战,例如高维设计空间、敏感的目标函数和重尾数据分布等。Design-Bench数据集为这些算法提供了标准化的基准,帮助研究人员评估和比较它们的性能,并推动该领域的发展。
数据集最近研究
最新研究方向
基于Design-Bench数据集,最新的研究方向主要集中在离线模型优化算法的改进和评估。Design-Bench提供了一个统一评估协议和现有方法的参考实现,旨在解决离线模型优化中的挑战,如高维设计空间、敏感的非连续目标函数等。研究热点包括如何更好地利用现有数据进行优化,以及如何避免优化过程中产生“离群”设计。此外,Design-Bench还提供了一个多样化的任务集合,涵盖了生物学、材料科学和机器人学等领域,有助于算法设计师了解真实世界中的离线模型优化的核心挑战。
相关研究论文
  • 1
    Design-Bench: Benchmarks for Data-Driven Offline Model-Based Optimization加州大学伯克利分校 · 2022年
以上内容由遇见数据集搜集并总结生成
5,000+
优质数据集
54 个
任务类型
进入经典数据集
二维码
社区交流群

面向社区/商业的数据集话题

二维码
科研交流群

面向高校/科研机构的开源数据集话题

数据驱动未来

携手共赢发展

商业合作