ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

化学空间10^60,机器学习如何破解药物多目标设计难题

化学空间10^60,机器学习如何破解药物多目标设计难题

简介:这份PDF资料是Jon Paul Janet在AstraZeneca生物制药研发部门所做的机器学习化学应用报告,面向化学、药物研发与材料设计领域的学习者和研究者,帮助其理解机器学习如何介入化学结构与功能关系的研究。内容以CASP 13蛋白质折叠预测竞赛中AlphaFold的突破为引,串联多目标药物设计、分子结构预测、材料设计、反应预测与数据驱动实验设计等应用场景,并给出对化学机器学习现状与趋势的判断。资源包共1个PDF文件,大小约41.44MB,页面以幻灯片形式组织,含目录、章节要点与案例图示,便于按主题快速翻阅和引用。目前已有222人学习,适合希望建立该交叉领域整体认知、或为课题与研发工作寻找方法参考的读者。

1. 化学空间是 10^60,为什么机器学习成了唯一能走通的路

一个反直觉的事实:化学家面对的可能分子空间大约有 10^60 量级,而人类至今合成并记录在案的化合物不过 10^8 上下。换句话说,我们连这个空间的十亿亿亿分之一都没摸到。传统做法是「设计—合成—测试」的串行循环,一轮下来几天到几周;量子化学计算能把单点能量算准,但代价是小时级;而机器学习模型一旦训练完成,给出一个性质预测只要秒级。这条从「天/周」到「小时」再到「秒」的链条,正是《Machine Learning in Chemistry now and in the future》这份讲义想讲清楚的核心逻辑。它不教你调包,而是回答一个更底层的问题:为什么化学这个学科,恰好长成了机器学习最合适的土壤,以及这套方法在真实的多目标药物设计里到底怎么落地、会在哪里翻车。

2. 为什么化学数据天生适配机器学习:结构与性质的映射假设

2.1 化学的核心命题就是「结构决定性质」

整份讲义反复回到一个前提:化学科学强调结构与功能之间的关系,无论生物化学还是材料化学都是如此。这句话听起来像常识,但它恰恰是机器学习能在化学里 work 的根本原因。机器学习本质上是在拟合一个从输入到输出的映射函数,而化学家几百年来的工作,本质上也是在建立「分子结构 → 物理化学性质」的映射。两者目标同构,所以当算法能力足够时,化学问题天然就是一个监督学习问题:输入是分子表示,输出是活性、毒性、溶解度、结合亲和力。

常见的实现思路是把分子编码成模型能吃的形式,比如分子指纹、SMILES 字符串、或者图结构。这里的关键设计动机是:化学家相信「相似的结构有相似的性质」,这个平滑性假设正是模型能泛化的前提。如果结构微小扰动导致性质剧烈跳变,任何基于连续函数的模型都会失效。讲义里没有展开这一点,但从它强调「结构与功能关系」的措辞能反推出,作者是把这条平滑性当作隐含公理在用。

2.2 从实验到模拟再到模型:三级加速的代价结构

讲义用一张流程图把化学研究的三种手段并列:实验、模拟、模型。实验对应「天到周」,模拟(求解 HΨ = EΨ 这类电子结构方程)对应「小时」,模型对应「秒」。这个时间尺度的对比不是修辞,而是整个领域的经济学基础。药物发现里,一个化合物从设计到拿到实验活性数据,周期以周计,成本以千计;而一个训练好的模型可以在几秒内对百万级虚拟库做打分排序。

但这里有个容易被忽略的取舍:模型的速度是用精度换来的。模拟方法有明确的物理方程约束,误差来源相对可控;模型是数据驱动的,它的可信区间完全取决于训练数据覆盖了多大的化学空间。讲义把三者并列而不是替代,暗示的正是这个分层策略——用模型做粗筛,把昂贵的模拟和实验留给模型最有把握的那一小部分候选。我一般会这么理解:模型不是替代实验,而是把实验预算花在刀刃上。

2.3 算法迁移:为什么卷积、Transformer、图网络都能搬进化学

讲义列了一张对照表,把计算机视觉、自然语言处理、图学习三类方法与化学任务对应起来。卷积网络对应的是把分子当作图像或网格处理(比如电子密度、显微图像);Transformer 对应的是把 SMILES 当作「化学语言」做序列建模,反应预测就是典型场景;图卷积对应的是把分子天然看作原子为节点、化学键为边的图,这是最贴合化学直觉的表示。

这个迁移之所以成立,底层原因是这三类结构在化学里都有真实对应物:分子有局部邻域(对应卷积的感受野)、有序列化的字符串表示(对应语言的 token 序列)、有显式的图拓扑(对应图网络的消息传递)。讲义引用的几项工作分别验证了这三条路径。值得注意的是,图表示在化学里比在视觉里更「正统」——因为分子本来就是图,不需要像图像那样人为定义邻域。这也是为什么后来的分子性质预测模型大多收敛到图神经网络这条线上。

3. 多目标设计:药物分子为什么不能只优化一个指标

3.1 单目标优化的陷阱:活性上去了,毒性也上去了

讲义用「多目标设计」作为案例研究的核心,这不是随便选的题目。药物发现里,一个候选分子要同时满足活性、选择性、溶解度、代谢稳定性、毒性、合成可行性等一堆指标,而且这些指标之间经常互相拉扯。你把亲脂性调高,膜通透性可能变好,但溶解度和肝毒性往往同时恶化。这就是典型的帕累托前沿问题:不存在一个在所有维度都最优的分子,只存在一组「不牺牲任何一个指标就无法再改进另一个」的折中解。

如果把它当成单目标回归来做,模型会给你一个活性极高的分子,然后你在实验阶段发现它毒性爆表,前面所有投入打水漂。讲义强调多目标,本质上是在说:化学优化的目标函数天生是多维的,任何把它压成一维加权和的做法,都在偷偷引入你对权重的先验假设,而这个假设往往是错的。

3.2 帕累托前沿与标量化:两种处理多目标的思路

处理多目标优化有两条主流路线。一条是直接学帕累托前沿,让模型输出一组非支配解,交给化学家挑选;另一条是标量化,把多个目标加权求和或做约束优化,转成单目标问题。前者的好处是不需要预先指定权重,坏处是前沿的表示和采样在髙维目标空间里很困难;后者实现简单,但权重怎么定是个玄学,而且线性加权只能找到帕累托前沿的凸包部分,凹进去的区域会被漏掉。

常见的实现思路是用贝叶斯优化框架,把每个目标建模成高斯过程,然后用采集函数(如期望改进)在「探索」和「利用」之间平衡。下面这段伪代码展示了一个简化的多目标采集逻辑,重点看它如何同时考虑多个目标的预测均值和不确定性:

import numpy as np def expected_improvement_multi(mu, sigma, best, xi=0.01): """单目标 EI,作为多目标采集的基础单元 mu: 模型预测均值 (n_samples,) sigma: 预测标准差 (n_samples,) best: 当前已观测到的最优值 xi: 探索余量,越大越偏向探索 """ from scipy.stats import norm imp = mu - best - xi z = imp / (sigma + 1e-9) ei = imp * norm.cdf(z) + sigma * norm.pdf(z) ei[sigma <= 1e-9] = 0.0 # 方差为零的点不提供信息 return ei def scalarized_acquisition(mu_matrix, sigma_matrix, weights): """把多目标压成加权标量,逐目标算 EI 再加权 mu_matrix: (n_samples, n_objectives) sigma_matrix: 同形状 weights: 各目标权重,和为 1 """ n_obj = mu_matrix.shape[1] total = np.zeros(mu_matrix.shape[0]) for j in range(n_obj): best_j = mu_matrix[:, j].max() # 简化:用当前预测最优近似历史最优 total += weights[j] * expected_improvement_multi( mu_matrix[:, j], sigma_matrix[:, j], best_j) return total

这段代码的关键在于weights这个参数:它把多目标问题降维成单目标,代价是你必须事先声明各目标的重要性。实际项目里这个权重往往来自项目组的讨论,而不是数据本身,所以它天然带有主观性。xi参数控制探索强度,设得太小模型会一直围着已知最优点打转,设得太大则采样发散、浪费实验预算。这两个参数就是多目标设计里最容易翻车的地方,后面避坑章节会细说。

3.3 主动学习闭环:模型提建议,实验做裁判,数据回流再训练

多目标设计真正跑起来,靠的是一个闭环:模型在虚拟库里挑出候选 → 化学家合成并测试 → 实测数据回流 → 模型更新 → 再挑下一批。讲义把这个循环放在案例研究的中心位置,因为单次预测再准也没用,价值在于用尽量少的实验轮次逼近帕累托前沿。这个思路在业界叫主动学习或设计-制造-测试-分析循环。

闭环设计里有个容易被低估的细节:每轮该选多少个候选。选太少,信息增益不够,轮次拉长;选太多,实验成本压不住,而且模型在低置信区域的预测可能集体翻车。常见的做法是按模型不确定度分层采样,把候选分成「高置信高价值」和「高不确定高信息」两堆,前者保证短期产出,后者保证长期探索。这个平衡没有通用公式,得按项目预算和周期调。

4. 从分子表示到模型训练:几个决定成败的实现细节

4.1 分子表示的选择直接决定模型上限

同一个分子可以有多种表示:SMILES 字符串、分子指纹(如 Morgan 指纹)、图结构、3D 构象。讲义在讲算法迁移时隐含了一个判断——表示的选择要和任务匹配。做反应预测,SMILES 序列加 Transformer 很自然,因为反应本身就是「反应物字符串 → 产物字符串」的翻译问题;做性质预测,图神经网络更合适,因为它保留了拓扑信息;做构象相关的任务,就必须上 3D 坐标。

这里有个血泪经验:很多人图省事直接用指纹加全连接网络,在小数据集上效果还行,但一旦数据量上去、任务变复杂,指纹的固定长度和哈希碰撞就成了瓶颈。指纹是把分子压成一个定长向量,压缩过程中丢掉了哪些信息你是不知道的,这就是个黑匣子。图表示虽然训练慢,但信息保留更完整,可解释性也更好——你能回溯到具体哪个子结构贡献了预测。

4.2 数据划分:随机划分在化学里为什么是自欺欺人

这是讲义没有明说、但整个领域都踩过的坑。化学数据如果按随机方式划分训练集和测试集,同一个骨架的类似物可能同时出现在两边,模型实际上是在「背答案」,测试指标虚高。真实场景里,你要预测的往往是训练集里没见过的骨架,这叫分布外泛化。

正确的做法是按骨架划分(scaffold split)或按时间划分。按骨架划分保证测试集的分子骨架在训练集里没出现过,这样测出来的指标才反映真实的泛化能力。我见过太多项目报告里 R² 高达 0.9,一上真实候选库就崩,回头一查全是随机划分惹的祸。这个细节决定了你对模型能力的判断是否可信,比调超参重要得多。

4.3 不确定度估计:模型说「不知道」比说「知道」更有价值

在主动学习闭环里,模型不仅要给预测值,还要给置信度。如果模型对某个候选的预测方差很大,说明它没在训练数据里见过类似结构,这时候要么补数据,要么把这个候选交给实验去验证——这正是探索的价值所在。讲义把多目标设计和机器学习结合,背后依赖的就是这种「带不确定度的预测」。

常见的实现思路是用集成模型(多个模型预测的方差作为不确定度)或贝叶斯神经网络。集成方法实现简单、效果稳定,代价是训练成本翻几倍。高斯过程在小数据上给的不确定度最靠谱,但扩展到大数据就吃不消。选哪种取决于你的数据规模和算力预算,没有银弹。

5. 避坑与排查:化学机器学习项目里最常见的五个翻车现场

5.1 测试指标漂亮,真实候选全军覆没

现象:交叉验证 R² 0.9 以上,模型部署后对真实虚拟库打分,挑出来的分子实验活性惨不忍睹。原因:数据划分用了随机切分,训练集和测试集共享骨架,模型在背答案。解决:改用骨架划分或时间划分重新评估,如果指标大幅下降,说明之前的模型根本没有泛化能力,需要补多样化的训练数据或换更强的表示。

5.2 多目标权重拍脑袋,优化结果偏向单一指标

现象:优化出来的分子活性极高但毒性也高,或者溶解度达标但完全无法合成。原因:标量化时权重设置不合理,某个目标权重过大,模型把所有资源都压在那个维度上。解决:不要用固定权重,改用帕累托前沿方法输出一组折中解,让化学家按项目阶段挑选;如果必须标量化,至少做权重敏感性分析,看结果对权重有多敏感。

5.3 模型对分布外分子给出高置信错误预测

现象:模型对某些结构新颖的候选给出很窄的置信区间,但预测完全错误。原因:不确定度估计失效,集成模型里的各个子模型在分布外区域犯了同样的错,方差反而很小。解决:引入基于距离的分布外检测(如计算候选到训练集最近邻的距离),对远离训练分布的候选强制降权或标记为「需实验验证」,不要盲信模型自报的置信度。

5.4 数据泄漏:预处理阶段就把测试信息漏进训练

现象:模型效果好得不真实,换一批数据就崩。原因:在划分数据集之前做了全局标准化、全局特征选择或全局缺失值填充,测试集的统计信息渗进了训练过程。解决:把所有预处理步骤放进管道,只在训练集上 fit,再 transform 测试集。这个坑在化学数据里尤其隐蔽,因为特征工程往往涉及整个数据集的分布统计。

5.5 忽略合成可行性,模型推荐的分子造不出来

现象:模型挑出的候选在计算上完美,但化学家一看就说「这个合成不了」。原因:优化目标里没有合成可行性这一项,模型在化学空间里自由漫游,跑到了合成上不可达的区域。解决:把合成可行性作为约束或额外目标纳入优化,或者用逆合成规划工具对候选做过滤,只保留有可行路线的分子再进入下一轮。

6. 设计取舍:为什么「模型 + 实验」的分层策略比纯模型更靠谱

回到讲义开头那个 CASP 的例子。蛋白质折叠预测在竞赛指标上被宣布「基本解决」,但化学药物设计远比这复杂——蛋白质折叠有明确的物理目标(能量最低构象),而药物设计的目标是多维的、带主观权重的、且随项目阶段变化的。这个差异决定了化学里的机器学习不能照搬「端到端替代」的思路,而必须走分层策略:模型负责在 10^60 的空间里做粗筛和排序,模拟负责对少量候选做物理校验,实验负责最终裁决。

这个分层背后是一个成本-精度的权衡表:

层级单次成本精度适用阶段
机器学习模型秒级依赖数据覆盖百万级虚拟库粗筛
量子化学模拟小时级物理约束,较可靠百级候选精算
实验验证天到周真实基准十级候选定论

每一层的输出都是下一层的输入,模型的价值不在于替代后两层,而在于把后两层要处理的候选数量压缩几个数量级。这个思路的代价是:模型的误差会向下游传播,如果粗筛阶段漏掉了真正的好分子,后面再精确也找不回来。所以模型召回率比精确率更重要——宁可多放一些候选进模拟,也别把潜力分子筛掉。

验证这套策略是否 work,最直接的方法是做回溯测试:拿一批已知的、最终成功的药物分子,看模型在它们还没被发现的年代,能不能把它们排进候选列表的前列。如果排不进去,说明模型的化学空间覆盖有系统性盲区。这个测试比任何交叉验证指标都更能说明问题,因为它模拟的正是真实发现场景。

从那以后我每次评估一个化学机器学习方案,都会先问三个问题:数据怎么划分的、不确定度怎么估的、合成可行性有没有纳入约束。这三个问题答不上来,指标再漂亮我也不敢信。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进