MATERIALS INTELLIGENCE · CHAPTER 01

贝叶斯优化:
材料优化的序贯决策方法

贝叶斯优化(Bayesian Optimization, BO)不是“让算法替你做实验”,而是在昂贵、缓慢且充满不确定性的材料探索中,持续追问:下一次,什么最值得做?

第一章 · 贝叶斯优化 · 2026
作者:曹斌 and ChatGPT

1.1 · THE EXPERIMENTAL QUESTION为什么材料优化特别适合 BO?

设想你在优化一类析氧反应催化剂:四种金属的配比、煅烧温度、反应时间和前驱体浓度共同决定活性与稳定性。即使每个变量只取十个值,也已是千万级组合;而一轮合成、表征与测试可能需要数天。穷举并不只是慢,而是根本不可行。

实验室中常见的策略是围绕“目前冠军”局部微调。这一策略隐含了一个危险前提:我们一开始就站在正确的山脚下。真实材料空间却更像一片群岛——有相变边界、不可合成区和仪器噪声,也有尚未被看见的性能高地。BO 的任务不是承诺一条捷径,而是在有限预算下,把每次实验同时变成性能测试知识获取

01 / EXPENSIVE

每个标签都昂贵

DFT 计算、原位表征或实验制备的成本高,数据通常只有几十到几百条。

02 / MIXED

变量五花八门

连续配比、离散元素、类别工艺和结构描述符往往同时出现。

03 / NOISY

结果带有噪声

批次差异、仪器漂移和样品不均一会让“最高分”未必真是最优。

1.2 · THE ENGINEBO 的发动机:预测、不确定性与决策

传统回归只回答“这里的性能预计是多少”。BO 还会问“我对这个预计有多大把握”。这个额外的不确定性,正是它敢于在未知区域探索、又不会盲目冒险的原因。

STEP 1已有数据
设计 x → 测量 y
STEP 2代理模型
均值 μ(x)、方差 σ(x)
STEP 3采集函数
给候选点打“下一步价值”分

代理模型:高斯过程(GP)

GP 是材料 BO 中经典的起点:小数据下表现稳健,天然给出预测均值 μ(x) 与标准差 σ(x)。当变量多、数据更多或输入是复杂结构时,也可换成随机森林、深度核或集成模型。

f(x) | D ~ Normal( μ(x), σ²(x) )

采集函数:把“下一步”量化

EIUCBPIqNEHVI

最常用的 UCB(上置信界)把性能与未知性相加:β 越大,越偏向探索;β 越小,越偏向追逐当前最好结果。

a_UCB(x) = μ(x) + β · σ(x)

一个直觉:均值高、但模型已经很确定的点,是“稳妥加分”;均值一般、但不确定性很大的点,可能藏着惊喜。采集函数负责在二者之间做可控的取舍。

1.2.1 · MATHEMATICAL CORE原理深化:高斯过程如何从数据得到“均值 + 误差条”?

把未知的材料响应函数写成 f(x),实验读数写成 y = f(x) + ε,其中 ε 是均值为零、方差为 σn2 的测量噪声。高斯过程并不预设 f 的具体函数形式,而是规定任意有限组输入的函数值服从联合高斯分布:

f(x) ∼ GP(m(x), k(x, x′))
m(x) 是先验均值;k(x, x′) 是核函数,规定两个设计点的相关性如何随距离变化。

给定训练输入矩阵 X 和响应向量 y,令 K = k(X, X),对一个新候选 x*,后验均值与方差为:

μ(x*) = k(x*, X)[K + σn2I]−1y
σ2(x*) = k(x*,x*) − k(x*,X)[K + σn2I]−1k(X,x*)第一式是相似历史样品的加权组合;第二式说明:靠近已测点时不确定性下降,远离数据或噪声较大时不确定性上升。

核函数就是材料相似性的假设

最常见的平方指数(RBF)核为 k(x,x′)=s²exp(−||x−x′||² / 2ℓ²)。长度尺度 ℓ 决定模型认为性能变化有多快:ℓ 很小,模型允许相邻配方性能剧烈跳变;ℓ 很大,模型会把局部突变抹平。材料响应常不如教科书函数光滑,Matérn 核因允许有限可微性,往往是更稳健的起点。无论选择何种核,都应在留出数据或逐轮回测中检查其预测误差和不确定性校准。

EI 的闭式形式

对最小化问题,令当前最佳观测为 fmin,改进量为 I(x)=max(0, fmin−f(x)−ξ)。在高斯后验下,令 z=(fmin−ξ−μ(x))/σ(x),就有:

EI(x) = (fmin − ξ − μ(x))Φ(z) + σ(x)φ(z)Φ 和 φ 分别为标准正态分布的累积分布函数与密度函数。第一项偏向低预测均值,第二项奖励不确定区域;ξ 控制“多大的改进才值得追求”。

这也解释了为什么 BO 不是普通的回归排序:只按 μ(x) 排序会永远追逐已知优区;只按 σ(x) 排序又会变成无目的采样。EI、UCB 等采集函数的硬核之处,正是将这两种价值置于同一决策标尺。

1.3 · THE CLOSED LOOP从问题定义到闭环实验:一轮 BO 怎样跑?

环节要做什么材料场景中的关键问题
定义目标明确最大化、最小化或多目标权衡。活性、稳定性、成本不能只看单一指标;先统一单位与测试条件。
编码空间设定变量边界、类别和不可行约束。配比应满足总和为 1;元素组合、毒性和相稳定性是硬约束。
初始采样用 Sobol / 拉丁超立方等方式覆盖空间。通常先做 10–30 个有代表性的点,避免一开始都挤在经验配方附近。
拟合与提议训练代理模型并最大化采集函数。把重复测试的方差告诉模型;每轮可并行提议 q 个样品。
实验与更新制备、测量、质控,写回数据集并循环。记录失败样品与元数据;它们是模型学习“不可行区”的重要证据。

1.4 · A RUNNING EXAMPLE贯穿案例:催化剂配方怎样逐步收敛?

继续使用四元氧化物催化剂的例子。令 A、B、C 的摩尔分数为可调变量,D 为余量;煅烧温度 T 是第四个变量。目标是最小化在 10 mA cm−2 下的过电位 η。为了沿用“最大化”的记号,可把响应写成 y = −η

这并不是把四个数字交给程序就结束了。组成变量必须满足非负且总和为 1;超过设备温度上限的候选自然无效;已知不能形成目标相的区域也应排除。把这些知识放进搜索空间,是实验者给算法的第一份、也是最重要的一份答案。

第 0 轮:用覆盖,而非直觉,建立起点

我们先用 16 个空间填充的初始样品覆盖可行区域,而不是将所有样品压在常见配方附近。其中两个关键样品进行重复测试,用于估计测量误差。这里的“覆盖”并不意味着平均撒点:如果先验知识表明某一元素的高含量有相分离风险,就应在边界附近较密集地采样,确认这条边界究竟在哪里。

第 1 轮:模型第一次提出反直觉建议

初始模型显示,中等 A 含量、高温区的预测均值最高;但该处数据密集,预测方差很小。另一个富 B 区的均值略低,却因几乎没有观测而拥有大的不确定性。若探索强度足够,BO 会把一部分实验投向富 B 区。这一选择的意义不是赌运气,而是检验“B 不重要”这条早期结论是否只是数据稀缺造成的幻觉。

1.5 · APPLICATION MAP材料领域的三类典型任务

CATALYSIS

催化剂配方与工况

输入:元素比例、载体、煅烧温度、反应温度。输出:过电位、选择性、寿命。适合加入成本、贵金属上限与相稳定性约束。

ENERGY

电池与储能材料

输入:掺杂比例、粒径、烧结曲线、电解液配方。输出:容量、循环保持率、倍率性能。建议以多目标 Pareto 前沿替代单一加权分数。

PROCESS

工艺窗口寻优

输入:温度、压力、时间、浓度和设备参数。输出:强度、相纯度、缺陷密度。BO 尤其适合“每次试验成本高但可自动化”的场景。

互动实验:Bgolearn Playground

以下嵌入 Bgolearn 官方互动页面。建议先尝试改变采样点和采集策略,再回到本章的 EI、UCB 推导,观察“均值”和“不确定性”如何共同改变下一次推荐。

若嵌入内容受浏览器策略限制,请在新标签页打开 Bgolearn Playground

1.6 · FROM THEORY TO BENCH一个可复用的实战配方

下面以“最小化析氧过电位 η”为例,使用 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 数组,而不是一个标量。

1.7 · MODELLING THE QUESTION在运行算法前:把材料问题建模正确

许多 BO 项目的失败,不发生在模型选择,而发生在第一张数据表。算法只能优化你交给它的变量、目标与约束;如果这些定义与真实科学问题错位,再精巧的采集函数也只会更高效地走错方向。因此,在写下第一行代码前,应完成一次“问题审计”。

目标:测量值不等于优化目标

以电催化为例,过电位、电流密度、Tafel 斜率、法拉第效率和寿命都可测,但它们回答不同的问题。若只优化初始过电位,算法可能偏爱很快衰减的材料;若仅用寿命,算法又可能选择活性不足的惰性配方。一个合格的目标应当明确测试条件、聚合方式与可接受阈值。例如,可以把“100 小时后仍保持 90% 活性”设为硬约束,再在满足约束的样品中最小化过电位。

定义:黑箱目标函数。在 BO 中,黑箱并不表示没有机理,而是表示我们无法用低成本、可靠的解析公式直接从设计变量算出结果。合成和测试过程就是对这个黑箱的一次昂贵查询。

变量:区分可控量、派生量与泄漏信息

可控量是本轮实验开始前能设定的东西,例如元素比例、温度、时间、气氛和浓度。派生量如最终晶粒尺寸、比表面积和 XRD 峰宽,常常只有实验后才能得到;它们可用于事后机理分析或第二阶段优化,却不能作为第一阶段推荐时已经知道的输入。若把未来才能获得的表征量放进模型,离线结果会异常漂亮,线上闭环却无法复现——这就是数据泄漏。

空间:把“不能做”写成规则

对组成变量,简单的独立上下界经常产生总和不为 1 的伪配方。一个实用办法是用前三个组分表示第四个余量,并在候选生成时拒绝负余量;更稳健的办法是直接在单纯形上采样。对温度、时间等连续量,边界应来自设备能力、工艺可行性与安全规定,而非历史数据中恰好出现的最小值和最大值。

1.8 · DATA AND UNCERTAINTY小数据并不等于粗糙数据

BO 擅长小样本,但“小样本”要求每个样本都可解释、可追溯。材料数据常包含比算法更隐蔽的误差源:原料批次、设备校准、操作者、湿度、样品位置、测试顺序乃至电极装配方式。若这些变化没有记录,模型会把系统偏差误读成组成效应。

建议记录的最小元数据

  • 样品标识、原料批次、配方和完整制备程序,而不是只记录名义组成;
  • 测试日期、仪器、校准状态、操作者与测试顺序;
  • 原始曲线或谱图的存储位置、处理脚本版本和异常处理原因;
  • 失败实验及失败类型:未合成、表征失败、性能不达标或数据无效。

失败不是应当删除的脏数据。对“是否可合成”“是否满足安全条件”而言,失败恰恰是最直接的标签。可以建立一个分类模型预测可行性,或在搜索空间中永久排除经过确认的失败区域。

噪声如何进入决策?

若同一配方重复三次得到的性能差异接近不同配方之间的差异,模型就不该对微小排名过度自信。高斯过程可通过观测噪声项表达这种不确定性;更实际的做法是,在疑似最优点、模型变化快的边界和关键对照样品上安排重复实验。重复实验看似没有探索新配方,实际上在校准“我们究竟能相信多大差异”。

思考题:一个 0.02 V 的提升值得追逐吗?

先比较它与仪器重复性、样品间方差和应用需求。若标准差为 0.03 V,则该提升尚不足以支持“更优”的结论;若重复误差只有 0.003 V,且目标阈值就在附近,那么一次独立复现比继续大范围搜索更有价值。

1.9 · ACQUISITION IN DETAIL采集函数到底在比较什么?

在当前最好值为 f* 的最大化问题中,Expected Improvement(EI)并不是只偏爱最高均值。它计算“如果我在 x 处实验,超越 f* 的期望幅度有多大”。因此,一个均值略低但不确定性很大的点,仍可能拥有高 EI;而一个均值很高、但几乎被充分测试的点,新增价值会下降。

EI(x) = E[max(0, f(x) − f* − ξ)]
ξ 是改进阈值;它越大,算法越不愿为了极小的预期提升而消耗实验预算。

UCB 更容易解释和调节:用 κ 放大或缩小探索奖励。Probability of Improvement(PI)只看“是否可能超过当前最优”,容易偏好微小改进;EI 同时在意概率与改进幅度,常作为默认起点。没有任何采集函数在所有问题上都最好。更重要的是问:本轮预算更需要确认、发现,还是避险?

批量推荐的额外难题

若实验平台一天能处理四个样品,连续地选四次“单点最优”会得到彼此过近的配方。批量 BO 使用 qEI、qNEI 或 qUCB 等函数,在同一批内考虑候选之间的信息重叠;也可先选一个主候选,再对模型进行“幻想更新”,依次选出互补点。对人工实验而言,一批中保留对照样品还能监测批次漂移。

1.10 · REAL-WORLD EXTENSIONS当问题变得真实:约束、多目标与多保真

约束不是事后过滤器

实际材料空间充满不可行点:相不稳定、前驱体不可得、成本超标、设备达不到,或存在安全风险。若先让采集函数在整个空间寻找“最优”再做过滤,它会把大量注意力浪费在永远不会被实施的位置。更好的做法是在候选生成时直接满足硬约束,或建立可行性模型 P(feasible | x),使高性能但难以实现的方案自动降低优先级。

多目标不宜过早压成一个分数

活性、稳定性和成本常彼此冲突。将三者固定加权看似简单,实则把应用偏好悄悄写死。多目标 BO 保留 Pareto 前沿:前沿上的每一个候选,都无法在不牺牲至少一个目标的前提下改善另一个。它让研究者在实验结束后仍保有选择权。

把廉价信息用在刀刃上

DFT、快速表征和高通量筛选通常便宜却有偏差;长期稳定性实验昂贵却更接近真实目标。多保真 BO 可以先学习不同保真度之间的关联,再决定何时做便宜的预筛、何时为一个候选支付昂贵的验证成本。关键前提是:廉价信号与最终目标必须存在可学习的相关性。

1.11 · FIELD NOTES五个最常见、也最容易忽略的坑

1.12 · CHAPTER SUMMARY本章小结:BO 是一位会提问的实验搭档

材料创新仍然依赖化学直觉、机理理解和严谨实验。BO 的独特之处在于,它把这些宝贵判断放进一个会自我修正的决策循环:每得到一个结果,就更清楚下一步该问什么。对实验预算有限、设计空间庞大的问题而言,这往往比“做更多实验”更接近真正的加速。

带走三句话:先把目标、变量和约束定义成可实验的问题;让模型的不确定性参与下一次决策;用独立复现和完整元数据,检验“发现”是否真的成立。