每个标签都昂贵
DFT 计算、原位表征或实验制备的成本高,数据通常只有几十到几百条。
贝叶斯优化(Bayesian Optimization, BO)不是“让算法替你做实验”,而是在昂贵、缓慢且充满不确定性的材料探索中,持续追问:下一次,什么最值得做?
设想你在优化一类析氧反应催化剂:四种金属的配比、煅烧温度、反应时间和前驱体浓度共同决定活性与稳定性。即使每个变量只取十个值,也已是千万级组合;而一轮合成、表征与测试可能需要数天。穷举并不只是慢,而是根本不可行。
实验室中常见的策略是围绕“目前冠军”局部微调。这一策略隐含了一个危险前提:我们一开始就站在正确的山脚下。真实材料空间却更像一片群岛——有相变边界、不可合成区和仪器噪声,也有尚未被看见的性能高地。BO 的任务不是承诺一条捷径,而是在有限预算下,把每次实验同时变成性能测试和知识获取。
DFT 计算、原位表征或实验制备的成本高,数据通常只有几十到几百条。
连续配比、离散元素、类别工艺和结构描述符往往同时出现。
批次差异、仪器漂移和样品不均一会让“最高分”未必真是最优。
传统回归只回答“这里的性能预计是多少”。BO 还会问“我对这个预计有多大把握”。这个额外的不确定性,正是它敢于在未知区域探索、又不会盲目冒险的原因。
GP 是材料 BO 中经典的起点:小数据下表现稳健,天然给出预测均值 μ(x) 与标准差 σ(x)。当变量多、数据更多或输入是复杂结构时,也可换成随机森林、深度核或集成模型。
EIUCBPIqNEHVI
最常用的 UCB(上置信界)把性能与未知性相加:β 越大,越偏向探索;β 越小,越偏向追逐当前最好结果。
一个直觉:均值高、但模型已经很确定的点,是“稳妥加分”;均值一般、但不确定性很大的点,可能藏着惊喜。采集函数负责在二者之间做可控的取舍。
把未知的材料响应函数写成 f(x),实验读数写成 y = f(x) + ε,其中 ε 是均值为零、方差为 σn2 的测量噪声。高斯过程并不预设 f 的具体函数形式,而是规定任意有限组输入的函数值服从联合高斯分布:
给定训练输入矩阵 X 和响应向量 y,令 K = k(X, X),对一个新候选 x*,后验均值与方差为:
最常见的平方指数(RBF)核为 k(x,x′)=s²exp(−||x−x′||² / 2ℓ²)。长度尺度 ℓ 决定模型认为性能变化有多快:ℓ 很小,模型允许相邻配方性能剧烈跳变;ℓ 很大,模型会把局部突变抹平。材料响应常不如教科书函数光滑,Matérn 核因允许有限可微性,往往是更稳健的起点。无论选择何种核,都应在留出数据或逐轮回测中检查其预测误差和不确定性校准。
对最小化问题,令当前最佳观测为 fmin,改进量为 I(x)=max(0, fmin−f(x)−ξ)。在高斯后验下,令 z=(fmin−ξ−μ(x))/σ(x),就有:
这也解释了为什么 BO 不是普通的回归排序:只按 μ(x) 排序会永远追逐已知优区;只按 σ(x) 排序又会变成无目的采样。EI、UCB 等采集函数的硬核之处,正是将这两种价值置于同一决策标尺。
| 环节 | 要做什么 | 材料场景中的关键问题 |
|---|---|---|
| 定义目标 | 明确最大化、最小化或多目标权衡。 | 活性、稳定性、成本不能只看单一指标;先统一单位与测试条件。 |
| 编码空间 | 设定变量边界、类别和不可行约束。 | 配比应满足总和为 1;元素组合、毒性和相稳定性是硬约束。 |
| 初始采样 | 用 Sobol / 拉丁超立方等方式覆盖空间。 | 通常先做 10–30 个有代表性的点,避免一开始都挤在经验配方附近。 |
| 拟合与提议 | 训练代理模型并最大化采集函数。 | 把重复测试的方差告诉模型;每轮可并行提议 q 个样品。 |
| 实验与更新 | 制备、测量、质控,写回数据集并循环。 | 记录失败样品与元数据;它们是模型学习“不可行区”的重要证据。 |
继续使用四元氧化物催化剂的例子。令 A、B、C 的摩尔分数为可调变量,D 为余量;煅烧温度 T 是第四个变量。目标是最小化在 10 mA cm−2 下的过电位 η。为了沿用“最大化”的记号,可把响应写成 y = −η。
这并不是把四个数字交给程序就结束了。组成变量必须满足非负且总和为 1;超过设备温度上限的候选自然无效;已知不能形成目标相的区域也应排除。把这些知识放进搜索空间,是实验者给算法的第一份、也是最重要的一份答案。
我们先用 16 个空间填充的初始样品覆盖可行区域,而不是将所有样品压在常见配方附近。其中两个关键样品进行重复测试,用于估计测量误差。这里的“覆盖”并不意味着平均撒点:如果先验知识表明某一元素的高含量有相分离风险,就应在边界附近较密集地采样,确认这条边界究竟在哪里。
初始模型显示,中等 A 含量、高温区的预测均值最高;但该处数据密集,预测方差很小。另一个富 B 区的均值略低,却因几乎没有观测而拥有大的不确定性。若探索强度足够,BO 会把一部分实验投向富 B 区。这一选择的意义不是赌运气,而是检验“B 不重要”这条早期结论是否只是数据稀缺造成的幻觉。
输入:元素比例、载体、煅烧温度、反应温度。输出:过电位、选择性、寿命。适合加入成本、贵金属上限与相稳定性约束。
输入:掺杂比例、粒径、烧结曲线、电解液配方。输出:容量、循环保持率、倍率性能。建议以多目标 Pareto 前沿替代单一加权分数。
输入:温度、压力、时间、浓度和设备参数。输出:强度、相纯度、缺陷密度。BO 尤其适合“每次试验成本高但可自动化”的场景。
以下嵌入 Bgolearn 官方互动页面。建议先尝试改变采样点和采集策略,再回到本章的 EI、UCB 推导,观察“均值”和“不确定性”如何共同改变下一次推荐。
若嵌入内容受浏览器策略限制,请在新标签页打开 Bgolearn Playground。
下面以“最小化析氧过电位 η”为例,使用 Bgolearn 的实际接口。X 的每一行可写为 [x_A, x_B, x_C, T];第四种元素的比例由 1 − x_A − x_B − x_C 给出。candidates 是已经满足组成、设备和安全约束的虚拟候选池,而不是无约束的随机数。
import numpy as np
from Bgolearn import Bgolearn
# 初始实验:行 = 样品,列 = [A, B, C, 煅烧温度]
X = np.array([[0.20, 0.15, 0.10, 650],
[0.35, 0.10, 0.20, 700],
...])
y = np.array([0.326, 0.301, ...]) # 实测过电位 η / V;越小越好
noise = 0.008 # 重复实验估计的同方差标准差 / V
for round in range(12):
candidates = feasible_compositions_and_temperature()
bgo = Bgolearn().fit(
data_matrix=X,
Measured_response=y,
virtual_samples=candidates,
Mission="Regression",
noise_std=noise,
min_search=True, # η 是最小化目标
opt_num=4,
Normalize=True)
ei, x_next = bgo.EI() # 返回候选池 EI 与推荐的 4 个点
y_next = run_synthesis_and_test(x_next) # 真实实验,不是模型预测
X = np.vstack([X, x_next])
y = np.concatenate([y, y_next])
这里 fit 先在已有 X, y 上拟合代理模型,并对整个候选池返回预测均值和标准差;EI() 再据此排序,给出推荐点。Bgolearn 内置回归、分类、EI、AEI、EQI、UCB、PoI、PES 和 KG 等流程;上例刻意选择最小接口,便于将重点放回实验设计本身。若每个样品噪声不同,可传入与训练样本等长的 noise_std 数组,而不是一个标量。
许多 BO 项目的失败,不发生在模型选择,而发生在第一张数据表。算法只能优化你交给它的变量、目标与约束;如果这些定义与真实科学问题错位,再精巧的采集函数也只会更高效地走错方向。因此,在写下第一行代码前,应完成一次“问题审计”。
以电催化为例,过电位、电流密度、Tafel 斜率、法拉第效率和寿命都可测,但它们回答不同的问题。若只优化初始过电位,算法可能偏爱很快衰减的材料;若仅用寿命,算法又可能选择活性不足的惰性配方。一个合格的目标应当明确测试条件、聚合方式与可接受阈值。例如,可以把“100 小时后仍保持 90% 活性”设为硬约束,再在满足约束的样品中最小化过电位。
可控量是本轮实验开始前能设定的东西,例如元素比例、温度、时间、气氛和浓度。派生量如最终晶粒尺寸、比表面积和 XRD 峰宽,常常只有实验后才能得到;它们可用于事后机理分析或第二阶段优化,却不能作为第一阶段推荐时已经知道的输入。若把未来才能获得的表征量放进模型,离线结果会异常漂亮,线上闭环却无法复现——这就是数据泄漏。
对组成变量,简单的独立上下界经常产生总和不为 1 的伪配方。一个实用办法是用前三个组分表示第四个余量,并在候选生成时拒绝负余量;更稳健的办法是直接在单纯形上采样。对温度、时间等连续量,边界应来自设备能力、工艺可行性与安全规定,而非历史数据中恰好出现的最小值和最大值。
BO 擅长小样本,但“小样本”要求每个样本都可解释、可追溯。材料数据常包含比算法更隐蔽的误差源:原料批次、设备校准、操作者、湿度、样品位置、测试顺序乃至电极装配方式。若这些变化没有记录,模型会把系统偏差误读成组成效应。
失败不是应当删除的脏数据。对“是否可合成”“是否满足安全条件”而言,失败恰恰是最直接的标签。可以建立一个分类模型预测可行性,或在搜索空间中永久排除经过确认的失败区域。
若同一配方重复三次得到的性能差异接近不同配方之间的差异,模型就不该对微小排名过度自信。高斯过程可通过观测噪声项表达这种不确定性;更实际的做法是,在疑似最优点、模型变化快的边界和关键对照样品上安排重复实验。重复实验看似没有探索新配方,实际上在校准“我们究竟能相信多大差异”。
先比较它与仪器重复性、样品间方差和应用需求。若标准差为 0.03 V,则该提升尚不足以支持“更优”的结论;若重复误差只有 0.003 V,且目标阈值就在附近,那么一次独立复现比继续大范围搜索更有价值。
在当前最好值为 f* 的最大化问题中,Expected Improvement(EI)并不是只偏爱最高均值。它计算“如果我在 x 处实验,超越 f* 的期望幅度有多大”。因此,一个均值略低但不确定性很大的点,仍可能拥有高 EI;而一个均值很高、但几乎被充分测试的点,新增价值会下降。
UCB 更容易解释和调节:用 κ 放大或缩小探索奖励。Probability of Improvement(PI)只看“是否可能超过当前最优”,容易偏好微小改进;EI 同时在意概率与改进幅度,常作为默认起点。没有任何采集函数在所有问题上都最好。更重要的是问:本轮预算更需要确认、发现,还是避险?
若实验平台一天能处理四个样品,连续地选四次“单点最优”会得到彼此过近的配方。批量 BO 使用 qEI、qNEI 或 qUCB 等函数,在同一批内考虑候选之间的信息重叠;也可先选一个主候选,再对模型进行“幻想更新”,依次选出互补点。对人工实验而言,一批中保留对照样品还能监测批次漂移。
实际材料空间充满不可行点:相不稳定、前驱体不可得、成本超标、设备达不到,或存在安全风险。若先让采集函数在整个空间寻找“最优”再做过滤,它会把大量注意力浪费在永远不会被实施的位置。更好的做法是在候选生成时直接满足硬约束,或建立可行性模型 P(feasible | x),使高性能但难以实现的方案自动降低优先级。
活性、稳定性和成本常彼此冲突。将三者固定加权看似简单,实则把应用偏好悄悄写死。多目标 BO 保留 Pareto 前沿:前沿上的每一个候选,都无法在不牺牲至少一个目标的前提下改善另一个。它让研究者在实验结束后仍保有选择权。
DFT、快速表征和高通量筛选通常便宜却有偏差;长期稳定性实验昂贵却更接近真实目标。多保真 BO 可以先学习不同保真度之间的关联,再决定何时做便宜的预筛、何时为一个候选支付昂贵的验证成本。关键前提是:廉价信号与最终目标必须存在可学习的相关性。
材料创新仍然依赖化学直觉、机理理解和严谨实验。BO 的独特之处在于,它把这些宝贵判断放进一个会自我修正的决策循环:每得到一个结果,就更清楚下一步该问什么。对实验预算有限、设计空间庞大的问题而言,这往往比“做更多实验”更接近真正的加速。