想象你是一位寻宝猎人,面前是一整片被迷雾笼罩的海滩。传说某处埋着宝藏,但没人知道确切位置。你雇了挖掘机器人,每挖一铲都得付钱,预算只够挖几十次。最笨的办法是把海滩划成整齐网格,一铲一铲全覆盖——这就像科研里传统的网格参数扫描,慢且贵。聪明的猎人会先随机挖几铲,然后一边读已有线索,一边盯着地图上那些没探过的模糊区域,判断下一铲挖哪儿最划算。铲子落下,新线索回来,地图更新一次,下一铲的判断也随之刷新。这个“越挖越懂、越懂越会选”的循环,就是科研自主实验里的主动学习采样:用最少的实验次数,找到最优的实验条件。贝叶斯优化、采集函数、探索与利用的权衡、多目标取舍,都是这趟旅程中猎人手中的锦囊。

岗位关联

掌握主动学习采样,是走进 AI for Science 自主实验的核心能力:它决定实验系统能否用最少的资源找到最优条件,也是智能实验平台团队中最稀缺的算法岗位技能。

目录
  1. 可视化演示
  2. 自主实验闭环
  3. 主动学习采样
  4. 贝叶斯优化
  5. 采集函数设计
  6. 探索利用平衡
  7. 多目标优化
  8. 设备系统集成
  9. 落地案例成效
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

\u5c55\u793a\u4e09\u5c42\u535a\u5f08\u6811\u7684Minimax\u641c\u7d22\u8fc7\u7a0b\uff0c\u901a\u8fc7Alpha-Beta\u526a\u679d\u51cf\u5c11\u4e0d\u5fc5\u8981\u7684\u8282\u70b9\u8bc4\u4f30\u3002

本节配有交互动效(进入视口后自动加载,约 3KB)。

Minimax\u535a\u5f08\u641c\u7d22 \u84dd\u8272\u4e3a\u5df2\u8bc4\u4f30\u8282\u70b9\uff0c\u7ea2\u8272\u4e3a\u526a\u679d\u8282\u70b9 \u7eff\u8272\u4e3a\u6700\u4f73\u8def\u5f84 max(min(leafs)) MAX\u5c42\u9009\u6700\u5927\u503c\uff0cMIN\u5c42\u9009\u6700\u5c0f\u503c

自主实验闭环

回到那片迷雾海滩。你站在高地上,手里握着一台对讲机,脚下摊开一张不断被涂改的海图。机器人每挖一铲,都会用铲子带回沙子的颜色、湿度和金属闪光;你听完汇报,在海图上画几笔,然后朝对讲机喊出下一个落铲点。“看线索→定方案→下指令→看新线索”,这个循环一旦转起来,就再也停不下来。

在科研自主实验里,海滩是“参数空间”,铲子是“实验设备”,沙子里闪光的金属是“测量指标”。传统科研靠的是“人肉闭环”:研究员翻文献、凭直觉定条件、做实验、读数据,再定下一轮方案,一个循环少则几天、多则几周。自主实验则把“定下一个实验测什么”这一步交给 AI,设备自动执行测量,数据自动回流,闭环被压缩到分钟甚至秒级,还能 24 小时连轴转。

这个闭环通常拆成四个阶段:规划(决定下一个样品)、执行(设备按参数运行)、测量(记录结果)、学习(更新模型),然后回到规划。主动学习采样正是“规划”阶段的核心算法:它基于前 n 轮实验留下的数据集和当前学到的模型,输出下一个要测的坐标,公式写作:

对讲机那一头,机器人的铲子落下之前,算法已经把最佳坐标算得明明白白。闭环转得越快,猎人对这片海滩的理解就越深——每一轮实验都在为下一轮铺路。

xn+1=AL(Dn, f^n)\displaystyle \mathbf{x}_{n+1} = \mathrm{AL}\big(\mathcal{D}_n,\ \hat{f}_n\big)
这个公式是自主实验的总指挥令:下一轮实验做什么,由历史数据和当前模型共同决定。
  1. 目标坐标$\mathbf{x}_{n+1}$ 是下一轮要测量的样品条件向量,比如温度、压力、原料配比。
    xn+1\mathbf{x}_{n+1}
  2. 历史数据$\mathcal{D}_n$ 是前 n 次实验留下的“线索集合”,每次实验的输入与测量结果都记在里面。
    Dn={(xi,yi)}i=1n\mathcal{D}_n = \{(\mathbf{x}_i, y_i)\}_{i=1}^{n}
  3. 当前模型$\hat{f}_n$ 是根据数据学到的对黑盒函数的近似,它既给预测,也给不确定性。
    f^n\hat{f}_n
  4. 主动学习策略$\mathrm{AL}(\cdot)$ 是选点策略,把数据和模型映射成“下一铲的坐标”。
    AL(⋅)\mathrm{AL}\big(\cdot\big)

主动学习采样

如果让没经验的工人去挖宝,他会把海滩切成一格一格的棋盘,每格都挖一铲。等整张海滩翻遍,钱也花光了,宝藏可能只在某个格子的深处与他擦肩而过。猎人不同:他只挖几十铲,但每一铲都经过推演——这一铲下去,能不能让悬案最多的区域亮起来?能不能离埋宝点更近一步?

这正是“主动学习”这个名字的由来。在经典机器学习里,主动学习让模型自己挑“最有价值”的样本请人标注,而不是被动接受随机数据。到了自主实验里,“下一个测哪个样品”就是模型主动提出的问题,只是提问的目标变了:不再是把整个数据集标全,而是用最少的实验,在一个黑盒函数上找到最优条件。

这个黑盒函数记作 $f(\mathbf{x})$,输入 $\mathbf{x}$ 是配方、温度、压力这类条件,输出 $y$ 是产率、强度等指标,而且测量还带噪声:$y = f(\mathbf{x}) + \varepsilon$。要判断测哪个坐标最划算,可以用信息增益作为标尺:先算测之前我们对目标的疑惑程度,再算测完之后剩下的疑惑,两者之差就是这一铲带来的“知识量”。

所以每一铲都落在“最能让整张地图信息量涨得快”的位置。这不是玄学直觉,而是把“信息的价值”量化成了一把可靠的尺子。

ΔI=H(θ)−H(θ∣yx)\displaystyle \Delta I = H(\theta) - H\big(\theta \mid y_{\mathbf{x}}\big)
信息增益的直觉:如果测完一个点,整片地图的“谜团”大幅减少,这个点就非常值得测。
  1. 未知参数$\theta$ 表示我们真正想搞清的东西——黑盒函数本身或者它的最优位置。
    θ\theta
  2. 先验熵$H(\theta)$ 是测 $\mathbf{x}$ 之前对 $\theta$ 的疑惑程度,熵越大越迷茫。
    H(θ)H(\theta)
  3. 条件熵$H(\theta \mid y_{\mathbf{x}})$ 是测完 $\mathbf{x}$ 得到 $y_{\mathbf{x}}$ 之后剩下的疑惑。
    H(θ∣yx)H(\theta \mid y_{\mathbf{x}})
  4. 信息增益$\Delta I$ 越大,说明这一铲带来的知识越多,越应该优先去测。
    ΔI\Delta I

贝叶斯优化

你手里的地图不是普通地图,而是一张会自我修正的“概率图”。每个区域标着两件事:估计值(这里可能有宝的概率)和置信度(这个估计有多靠谱)。挖过的地方,一条条等高线变得清晰;没挖过的地方,仍是大片模糊的雾团。猎人越挖,地图越亮,判断越准。

贝叶斯优化就是这套“概率图”的数学实现。它用贝叶斯定理,把“先验的猜测”和“每一铲实测的数据”融合成“后验的认知”,再用后验指导下一步。其中最常用的代理模型是高斯过程(GP):它不但输出每个点的预测均值,还输出每个点的不确定性——就像地图上的等高线和雾团密度同时更新。

高斯过程用一个核函数 $k(\mathbf{x}, \mathbf{x}')$ 度量两个点之间的“相似度”:离得越近的点越像。新观测会按相似度向四周传播,离实验点近的地方被狠狠修正,远的地方几乎不动。后验均值的更新公式就体现了这个传播过程:

一铲子下去,铲点周围被照得通亮,而不是只亮一个孤零零的点——这就是概率图比普通地图高明的地方。雾散开的形状,就是模型学会的“知识”。

μn+1(x)=μn(x)+k(x,xn+1)σϵ2+k(xn+1,xn+1)(yn+1−μn(xn+1))\displaystyle \mu_{n+1}(\mathbf{x}) = \mu_n(\mathbf{x}) + \frac{k(\mathbf{x}, \mathbf{x}_{n+1})}{\sigma_\epsilon^2 + k(\mathbf{x}_{n+1}, \mathbf{x}_{n+1})} \big( y_{n+1} - \mu_n(\mathbf{x}_{n+1}) \big)
一句话版本:新实验的结果如果“出乎意料”,就按相似度权重把它扩散到整个地图;越像实验点的位置,被修正得越多。
  1. 旧估计$\mu_n(\mathbf{x})$ 是第 n 轮实验之后,地图对坐标 $\mathbf{x}$ 的预测均值。
    μn(x)\mu_n(\mathbf{x})
  2. 相似度权重$k(\mathbf{x}, \mathbf{x}_{n+1})$ 表示新实验点与 $\mathbf{x}$ 有多“像”,是核函数的输出。
    k(x,xn+1)k(\mathbf{x}, \mathbf{x}_{n+1})
  3. 观测噪声$\sigma_\epsilon^2$ 是测量误差的方差,噪声越大,这次观测对地图的修正越保守。
    σϵ2\sigma_\epsilon^2
  4. 残差修正$y_{n+1} - \mu_n(\mathbf{x}_{n+1})$ 是这次实验“出乎意料”的程度,乘以权重后传遍全图。
    yn+1−μn(xn+1)y_{n+1} - \mu_n(\mathbf{x}_{n+1})

采集函数设计

光有概率图还不够,猎人的口袋里还揣着一本“下铲口诀”:把图上每个点的“希望”和“把握”折算成一个分数,然后直奔分数最高的点。这本口诀,就是采集函数(acquisition function)。

采集函数把“预测均值”和“不确定性”两个数压缩成一个标量 $\alpha(\mathbf{x})$,AI 只需要找它的最大值。不同口诀体现不同哲学:期望提升(EI)看重“比当前最好成绩能多进步多少”;概率改进(PI)看重“超过当前最好的概率”;置信上界(UCB)则把均值加上几倍标准差,简单又暴力。其中 EI 是最经典的公式之一:

口诀不同,挖宝风格就不同:保守的猎人偏爱 EI,胆大的猎人习惯带大 $\kappa$ 的 UCB,但归根结底,都离不开“希望 + 把握”的折算逻辑。选好口诀,剩下的就是每一轮重复“算分数、找最大、落铲”。

EI(x)=(μn(x)−f+)Φ(z)+σn(x) ϕ(z),z=μn(x)−f+σn(x)\displaystyle \mathrm{EI}(\mathbf{x}) = \big(\mu_n(\mathbf{x}) - f^+\big) \Phi(z) + \sigma_n(\mathbf{x}) \, \phi(z), \qquad z = \frac{\mu_n(\mathbf{x}) - f^+}{\sigma_n(\mathbf{x})}
EI 的直觉:它同时奖励“均值已经很高”的点(改进幅度大)和“方差还很大”的点(可能藏着惊喜),然后选期望改进总量最大的地方落铲。
  1. 当前最优$f^+$ 是到目前为止见过的最好成绩,是“改进”的基准线。
    f+=max⁡i≤nyif^+ = \max_{i \le n} y_i
  2. 改进幅度$\mu_n(\mathbf{x}) - f^+$ 表示在均值预测下,$\mathbf{x}$ 能比当前最优多出多少。
    μn(x)−f+\mu_n(\mathbf{x}) - f^+
  3. 概率加权把差距除以标准差得到 $z$,$\Phi(z)$ 表示“这个点能超过当前最优”的概率。
    z=μn(x)−f+σn(x),Φ(z)z = \frac{\mu_n(\mathbf{x}) - f^+}{\sigma_n(\mathbf{x})}, \quad \Phi(z)
  4. 方差红利$\sigma_n(\mathbf{x}) \phi(z)$ 是“说不准但可能很惊喜”的加成,不确定性越大,加成越多。
    σn(x) ϕ(z)\sigma_n(\mathbf{x}) \, \phi(z)

探索利用平衡

老猎人心里总有两股声音在打架:一个是“在老坑附近继续深挖,那里大概率还有金子,只是未必最大”;另一个是“换一片从没碰过的海滩碰运气,可能两手空空,也可能挖到惊天大金脉”。这就是探索与利用的天平。

在主动学习术语里,利用(exploitation)是指奔赴模型预测最好的区域,把已经挖出的规律快速变现;探索(exploration)是指给“不确定性大、可能带来惊喜”的区域机会,防止错过真正的全局最优。只利用会掉进局部最优的陷阱,只探索则预算很快见底、颗粒无收。好的采样策略必须在两者之间走钢丝。

许多采集函数内部就内置了这个天平。用一个统一的视角来看,采集值可以拆成两项的加权:

聪明的猎手会根据剩下的“铲数”动态调节心态:预算充裕时多探索,把地图铺开;预算紧张时收缩到利用,确保满载而归。主动学习的高明之处,正是把这个心态变化写成了可调节的参数。

α(x;λ)=λ f^n(x)+(1−λ) un(x)\displaystyle \alpha(\mathbf{x}; \lambda) = \lambda \, \hat{f}_n(\mathbf{x}) + (1 - \lambda) \, u_n(\mathbf{x})
这个式子像天平:$\lambda$ 偏向利用,$(1-\lambda)$ 偏向探索。UCB 里的 $\kappa$ 其实就是这种权重的化身。
  1. 利用项$\hat{f}_n(\mathbf{x})$ 是模型预测的“希望值”,越接近当前最优越值得利用。
    λ f^n(x)\lambda \, \hat{f}_n(\mathbf{x})
  2. 探索项$u_n(\mathbf{x})$ 是不确定性的度量,越大说明这片区域越值得去看。
    (1−λ) un(x)(1 - \lambda) \, u_n(\mathbf{x})
  3. 权衡参数$\lambda$ 在 0 和 1 之间滑动,决定天平往哪边倾斜。
    λ∈[0,1]\lambda \in [0, 1]

多目标优化

这一趟寻宝,你不只想要金子,还想要矿脉里伴生的宝石,最好再控制一下挖掘成本。三个愿望常常互相打架:提高纯度的条件可能压低产量,追求速度的配方可能推高成本。猎人不得不承认“世上难有两全”,退而求其次,找一条折中的最优曲线。

自主实验里也常遇到多个互相冲突的目标:产率要高、纯度要好、能耗要低。多目标优化引出帕累托最优的概念:一个方案如果无法在不损害任何一个目标的前提下改进另一个目标,它就是帕累托最优的;所有这样的方案连成一条前沿,就是帕累托前沿。前沿上的每个点都代表一种“取舍”,没有谁绝对优于谁。

最简单的处理方法是加权标量化,把多个目标压成一个目标来跑主动学习:

猎人背后站着不同心愿的委托人:要金子的、要宝石的、省预算的,他们各拿一份权重地图出发,最后在折中曲线上汇合。更先进的多目标采集函数(如 EHVI)则让一次实验同时推进所有目标的信息收集,效率更高。

g(x)=∑i=1mwifi(x),s.t. ∑i=1mwi=1, wi≥0\displaystyle g(\mathbf{x}) = \sum_{i=1}^{m} w_i f_i(\mathbf{x}), \qquad \mathrm{s.t.} \ \sum_{i=1}^{m} w_i = 1, \ w_i \ge 0
加权公式的直觉:给每个目标一个“心愿权重”,不同权重组合会得到帕累托前沿上不同的点,多跑几组权重就能描出整条折中曲线。
  1. 目标列表$f_i(\mathbf{x})$ 是第 i 个目标函数,比如产率、纯度、成本。
    fi(x), i=1,…,mf_i(\mathbf{x}), \ i = 1, \dots, m
  2. 权重约束所有权重非负且和为 1,保证加权结果是公平的“混合心愿”。
    ∑i=1mwi=1,wi≥0\sum_{i=1}^{m} w_i = 1, \quad w_i \ge 0
  3. 加权求和$g(\mathbf{x})$ 是标量化后的单一目标,一次优化得到一个帕累托点。
    g(x)=∑i=1mwifi(x)g(\mathbf{x}) = \sum_{i=1}^{m} w_i f_i(\mathbf{x})

设备系统集成

最理想的挖宝队是全自动的:机器人自己开铲、自己称重、自己画新地图、自己决定下一铲,甚至你睡觉时它还在加班。你只需要在起点设定目标,在终点验收战果。在真实的科学装置里,这个“全自动挖宝队”由三层组成:决策层(主动学习算法)、控制层(设备控制软件与指令协议)、执行层(机械臂、泵阀、检测仪)。

决策层的算法吐出一个候选坐标,中间件把它翻译成设备能执行的指令;设备跑完实验,测量数据自动回流,更新模型;模型一更新,决策层立刻为下一轮实验算出新坐标。这就是完整的自动反馈回路。集成时还要考虑异步流程:不能等所有实验都做完才更新模型,而是一个样品出炉就立即更新,为正在排队的实验提供新决策。

此外,真实系统里不能只问“哪里信息量最大”,还要问“这一铲贵不贵”:有的样品制备慢,有的测量占机时。于是决策变成了“性价比”最大化:

科学家只需要做“监工”:每天早上看一眼新地图,在任务编排里调整大方向,剩下的琐碎实验全部交给这台全自动挖宝机。流水线一旦转起来,人类就从“重复试错”中被解放出来。

max⁡x∈X EIG(x)c(x)\displaystyle \max_{\mathbf{x} \in \mathcal{X}} \ \frac{\mathrm{EIG}(\mathbf{x})}{c(\mathbf{x})}
这个式子的直觉:猎人不仅要选“收获大”的点,还要选“成本低”的点,争取每一分钱都花在刀刃上。
  1. 期望信息增益$\mathrm{EIG}(\mathbf{x})$ 是测 $\mathbf{x}$ 预计带来的信息量。
    EIG(x)\mathrm{EIG}(\mathbf{x})
  2. 实验成本$c(\mathbf{x})$ 是制备、测量和机时折算出来的总代价。
    c(x)c(\mathbf{x})
  3. 性价比选点取比值最大化,让有限的实验预算产生最多的知识。
    EIG(x)c(x)\frac{\mathrm{EIG}(\mathbf{x})}{c(\mathbf{x})}

落地案例成效

世界各地陆续传来挖宝队的战报:同样的铲数,有人挖到一座金矿,有人两手空空,差别全在“会不会选点”。主动学习在真实科研中的战绩,正是一个个“会选点”的猎人的故事。

在材料发现领域,美国劳伦斯伯克利国家实验室的 A-Lab 把主动学习规划与机器人合成、理论计算验证组合成闭环,在约 17 天的自主运行里合成了 41 种新材料,其中相当一部分几乎无需人工干预,而传统试错路线动辄要数月。在催化与配方优化领域,主动学习通常把达到目标性能所需的实验次数压减到原来的五分之一到十分之一;药物晶型筛选也在用同样的逻辑,同时盯住溶解度和稳定性两个互相打架的目标。衡量这种提升,可以用一个简单的效率倍数:

猎人们的成功不是运气,而是把“选点智慧”变成了一套可复制的算法。每个后来者都能站在前辈绘制的概率地图上出发,用更少的铲子,挖到更深的宝藏。

η=NbaselineNAL\displaystyle \eta = \frac{N_{\mathrm{baseline}}}{N_{\mathrm{AL}}}
效率倍数的直觉:把“笨办法”需要的实验次数除以“主动学习”实际用的次数,倍数越高,省得越多。
  1. 基线实验数$N_{\mathrm{baseline}}$ 是网格扫描或随机试错方式要花的实验次数。
    NbaselineN_{\mathrm{baseline}}
  2. 主动学习实验数$N_{\mathrm{AL}}$ 是主动学习实际使用的实验次数。
    NALN_{\mathrm{AL}}
  3. 效率倍数$\eta$ 表示主动学习比基线省了多少倍实验,是衡量采样策略最直观的指标。
    η\eta

AI 应用场景

自主合成实验室与材料发现

阶段:实验设计规划与实验执行

解决的问题:传统材料研发靠文献指引和经验试错,一个配方一个配方地人工做实验,周期以月计;AI 自主实验室把“选下一个配方”交给主动学习,结合贝叶斯优化在现有数据的概率地图上选点,机器人自动完成合成与表征,数据回流后再选下一个,把新材料搜索从串行人工试错变成全自动闭环。

具体案例:劳伦斯伯克利国家实验室的 A-Lab 使用主动学习规划合成路径,与机械臂、热压设备和 X 射线衍射表征联动,在数天到数周内自主合成了数十种新材料。在高维配方空间(如 OLED 分子、钙钛矿前驱体)的搜索中,主动学习把所需实验次数压缩到原来的十分之一。

同步辐射线站的智能测量调度

阶段:在线数据采集与实验调度

解决的问题:同步辐射或中子散射的机时稀缺且昂贵,线站科学家只能在有限时间内测一批样品。传统做法把所有样品按预设顺序快速扫一遍,把大量时间浪费在低信息量的点上。主动学习在每个样品采集完后立即更新模型,优先测“最能修正模型或改善最优值”的样品,甚至能动态决定每个样品该测多久。

具体案例:在 X 射线吸收谱(XAS)和衍射实验中,研究人员用贝叶斯优化动态选择下一个测量角度、能量或样品位置,把找到关键相变条件所需的扫描点数减少了 60%–80%,显著节省机时费用。

药物配方与晶型多目标筛选

阶段:多目标优化与实验设计

解决的问题:药物研发中同一化合物的不同晶型决定溶解度与稳定性,两者常常冲突。传统做法针对单一指标一轮轮筛选,顾此失彼。使用带帕累托前沿的多目标主动学习(如 EHVI),一次实验可同时收集多个目标的信息,画出溶解度—稳定性的折中曲线,再让化学家按商业目标在前沿上挑选最终晶型。

具体案例:制药公司在结晶条件(温度、反溶剂速率、浓度)的高维空间中用多目标主动学习做晶型筛选,把候选条件从数千个压缩到几十个实验,同时产出一批帕累托最优候选,而不是孤零零的“唯一最优”。

Python 演示

python77 行
import mathimport numpy as np  class SimpleGP:    """极简高斯过程:RBF核 + 解析后验均值/方差"""     def __init__(self, length_scale=0.4, sigma_noise=1e-3):        self.l = length_scale        self.sigma = sigma_noise        self.X = np.zeros((0, 1))        self.y = np.zeros((0,))     def kernel(self, x1, x2):        dist2 = float(np.sum((x1 - x2) ** 2))        return math.exp(-dist2 / (2 * self.l ** 2))     def fit(self, X, y):        self.X = np.asarray(X, dtype=float).reshape(-1, 1)        self.y = np.asarray(y, dtype=float)        n = len(self.X)        K = np.zeros((n, n))        for i in range(n):            for j in range(n):                K[i, j] = self.kernel(self.X[i], self.X[j])        self.K_inv = np.linalg.inv(K + self.sigma ** 2 * np.eye(n))     def predict(self, x):        k = np.array([self.kernel(x, xi) for xi in self.X])        mu = float(k @ self.K_inv @ self.y)        var = float(self.kernel(x, x) - k @ self.K_inv @ k)        return mu, max(var, 1e-10)  def target(x):    return math.sin(6 * x) + math.cos(3 * x) + 0.5 * x  def pick_next(model, kappa):    grid = np.linspace(-1, 1, 201)    best_x, best_a = grid[0], -1e9    for x in grid:        mu, var = model.predict(np.array([x]))        a = mu + kappa * math.sqrt(var)        if a > best_a:            best_a, best_x = a, x    return best_x  def run_active_learning(n_init=3, n_rounds=12, kappa=1.5):    rng = np.random.default_rng(0)    X = rng.uniform(-1, 1, n_init).reshape(-1, 1)    y = np.array([target(x[0]) for x in X])    model = SimpleGP()    model.fit(X, y)    print("初始样本:", np.round(X.flatten(), 3), np.round(y, 3))    for t in range(n_rounds):        x_next = pick_next(model, kappa)        y_next = target(x_next)        X = np.vstack([X, [x_next]])        y = np.append(y, y_next)        model.fit(X, y)        print("第%2d轮: 采样 x=%.3f, y=%.3f" % (t + 1, x_next, y_next))    best_idx = int(np.argmax(y))    print("主动学习15个样点找到最优: x=%.3f, y=%.3f" % (X[best_idx, 0], y[best_idx]))  def run_random_baseline(n_total=15, n_trials=200):    rng = np.random.default_rng(1)    bests = [max(target(x) for x in rng.uniform(-1, 1, n_total)) for _ in range(n_trials)]    return float(np.mean(bests))  if __name__ == "__main__":    run_active_learning()    base = run_random_baseline()    print("同样15个样点, 随机采样200次平均最优: %.3f" % base)
目的:用极简高斯过程 + UCB 采集函数复现“自主实验主动学习闭环”,并对比同等实验次数下随机采样的平均最优值,直观感受选点策略的威力。
  1. self.K_inv = np.linalg.inv(K + self.sigma ** 2 * np.eye(n))高斯过程的核心:对协方差矩阵求逆,得到后验更新的“配方”。
  2. mu = float(k @ self.K_inv @ self.y)预测均值:用新点与历史点的相似度向量 $k$ 加权组合观测值。
  3. var = float(self.kernel(x, x) - k @ self.K_inv @ k)预测方差:先验方差减去被已有数据解释掉的部分。
  4. a = mu + kappa * math.sqrt(var)UCB 采集函数:预测均值 + κ × 标准差,一次计算同时拿到“希望”和“把握”。
  5. x_next = pick_next(model, kappa)每一轮都用最新模型重新计算下一铲坐标,而不是固定采样表。
  6. model.fit(X, y)新数据回流后更新后验,闭环迭代,地图越用越准。
  7. bests = [max(target(x) for x in rng.uniform(-1, 1, n_total)) for _ in range(n_trials)]随机基线:同样预算下反复随机撒点,取平均最优作为对照。

常见误区

误区我以为主动学习就是把原来均匀扫描的网格改密一点,或者多跑几轮随机实验,效果都差不多。

正解主动学习的核心是“信息驱动”:每个采样点都由模型和采集函数算出来,目标是最大化信息增益或改进最优值。它和随机采样、网格扫描有本质区别。好比猎人是在概率地图上算出了“下一铲坐标”再落铲,而不是闭着眼睛随便撒一把沙子。

为何常见:入门时看到的实验自动化 demo 常常是一批批自动跑,看起来像随机批处理,容易把“自动”误当成“随机”。

误区只要用了贝叶斯优化,就一定能收敛到并找到真正的全局最优解,无非是时间问题。

正解没有任何采样策略能在所有黑盒函数上都保证快速找到全局最优(天下没有免费的午餐)。贝叶斯优化以较小的实验代价逼近最优,但面对剧烈多峰函数时仍可能停在局部最优附近。它控制的是“找到好解的概率和代价”,而不是确定性。地图上的雾永远无法完全散开。

为何常见:很多宣传示意图都画得很光滑,展示迅速收敛到极值,让人忽略了黑盒优化本身的不确定性本质。

误区我觉得只要开始时定好采集函数,后面每个实验该测什么就确定了,不用再调整。

正解采集函数依赖代理模型,而模型每轮都会吸收新观测并更新后验。一个点测完,整张地图都在变,最优下铲点也要重新计算,这就是“闭环迭代”。好比一铲子下去,整片区域的能见度都变了,下一步决策自然跟着变。

为何常见:把采集函数理解成“固定的采样规则表”,忽略了它是“基于当前信念”的动态决策。

误区多目标太简单了,把产率、纯度、成本各给一个权重加成一个数就行,权重按经验拍脑袋定。

正解加权标量化只是多目标处理的一种方式,而且权重选择本身就是难点;一组权重只能得到帕累托前沿上一个点,无法完整刻画目标间的冲突。帕累托前沿与专为多目标设计的采集函数(如 EHVI)能同时推进所有目标,避免反复采到“偏科”的样品。

为何常见:教科书里线性加权是最直观的入门写法,大家容易把它当成多目标优化的唯一标准做法。

面试题

Q1. 在自主实验闭环中,主动学习主要负责哪个环节?

单选题 · easy

  • A.规划下一轮实验样品← 正确答案
  • B.执行设备操作指令
  • C.测量样品物理性质
  • D.整理实验数据报告

答案:A。自主实验闭环是“规划→执行→测量→学习”,主动学习决定“下一个实验测什么”,正落在规划环节。好比猎人决定下一铲挖哪里,而不是替机器人挥铲、称重或写报告。

Q2. 主动学习采样与传统网格扫描的关键区别是?

单选题 · easy

  • A.按信息量主动挑选测点← 正确答案
  • B.按固定网格均匀测点
  • C.完全不依赖历史数据
  • D.只沿一个方向扫描

答案:A。网格扫描把参数空间均匀铺满,不关心哪里更有价值;主动学习根据已有的数据与模型,优先选信息量最大的点。就像老猎人盯着地图上的模糊区域落铲,而不是机械地一格一格挖。

Q3. 贝叶斯优化中的“代理模型”指什么?

单选题 · mid

  • A.对黑盒目标函数的概率近似← 正确答案
  • B.对实验设备的物理仿真
  • C.对历史文献的文本摘要
  • D.对实验成本的线性估计

答案:A。代理模型用概率方式(常用高斯过程)近似无法解析的黑盒函数,既给预测均值又给不确定性。它不是设备仿真、文献摘要或成本估计,而是那张会自我修正的“概率地图”。

Q4. 高斯过程输出的不确定性对采样有什么价值?

单选题 · mid

  • A.区分该探索还是利用← 正确答案
  • B.直接得到最终答案
  • C.替代所有历史数据
  • D.消除实验测量噪音

答案:A。不确定性正是探索与利用平衡的依据:不确定性大的区域值得探索,均值高的区域值得利用。它既不能直接给答案,也不能替代数据或消除噪音,而是帮助猎人判断“哪片雾值得吹开”。

Q5. UCB 采集函数中增大 κ 的效果是?

单选题 · mid

  • A.更倾向探索未知点位← 正确答案
  • B.更倾向利用已知最优
  • C.让模型预测值变大
  • D.让观测噪音降为零

答案:A。UCB = 均值 + κ × 标准差,κ 越大,标准差(不确定性)的权重越高,采集函数越青睐没探过的区域。就像猎人在预算充裕时更愿意去陌生海滩碰运气。

Q6. EI(期望提升)为 0 的点意味着什么?

单选题 · mid

  • A.测它无法改进当前最优← 正确答案
  • B.它是当前最优的邻域
  • C.它的测量值一定是 0
  • D.它来自随机采样过程

答案:A。期望提升衡量“比当前最好成绩 f⁺ 多进步多少”,EI 接近 0 说明模型认为这个点基本不可能超过 f⁺。注意它不一定是当前最优的邻域,测量值更不等于 0。

Q7. 关于帕累托前沿的说法正确的是?

单选题 · hard

  • A.前沿上的点无法同时改进全部目标← 正确答案
  • B.前沿上的点每个目标都是最优
  • C.前沿由随机采样直接得到
  • D.前沿只存在于二维目标问题

答案:A。帕累托最优的定义就是“无法在不损害其他目标的前提下改进任一目标”,所以前沿上的点是一组互不支配的折中解。它们不是每个目标都最优,也不限于二维,更不能靠随机采样直接画出。

Q8. 多目标优化中线性加权法的局限是?

单选题 · hard

  • A.对非凸前沿可能漏掉部分最优← 正确答案
  • B.可以完整刻画前沿形状
  • C.不需要人为设置任何权重
  • D.只适用于单目标问题

答案:A。线性加权本质是把前沿“投影”到一个方向,对非凸的帕累托前沿会漏掉中间凹进去的解。它需要人为设权重,且常用于多目标而非单目标问题,因此不能完整刻画前沿形状。

Q9. 下列属于常用采集函数的有哪些?

多选题 · mid

  • A.期望提升 EI← 正确答案
  • B.置信上界 UCB← 正确答案
  • C.概率改进 PI← 正确答案
  • D.随机梯度下降

答案:ABC。EI、UCB、PI 是三大经典采集函数,分别从“改进量、置信上界、超越概率”三个角度给候选点打分。随机梯度下降是优化器而非采集函数,不参与“选点”决策。

Q10. 关于探索与利用平衡的理解,正确的有哪些?

多选题 · hard

  • A.纯利用容易陷入局部最优← 正确答案
  • B.纯探索会浪费实验预算← 正确答案
  • C.权衡参数可以动态调整← 正确答案
  • D.探索利用与采集函数无关

答案:ABC。纯利用只围着自己认定的“金山”深挖,容易错过真正的全局最优;纯探索到处撒网,预算很快见底。权衡参数(如 UCB 的 κ)可随剩余预算动态调节,且探索与利用的取舍正是通过采集函数实现的,因此 D 错误。