如果把一个药物分子放大一万倍,它会像一座微型城市:原子是性格各异的居民,化学键是他们之间每天打交道的街道。这座城市的整体气质——能否治病、会不会有毒、容不容易溶解——不是某个居民说了算,而是无数条邻里关系共同作用的结果。传统药物研发,就像在成千上万座这样的城市里漫无目的地挨家敲门做问卷,一敲就是十年,烧掉的钱足够修一条高速铁路。图神经网络(GNN)则像一位聪明的社区情报员:它先把城市画成一张地图,然后挨家挨户收集邻居信息,几轮“串门”之后就能给整座城市写出一份靠谱的报告。今天这篇文章,就带你跟着这位情报员走一遍:分子图如何表示、消息如何在原子之间传递,以及在药物发现最关键的虚拟筛选和先导优化环节,这套方法如何把“大海捞针”变成“按图索骥”。
对 AI 从业者而言,掌握图神经网络在药物发现中的应用,等于打开生物医药与深度学习的交叉赛道:你能把分子性质预测、虚拟筛选、先导优化从实验室流程变成可计算、可扩展的算法产品。
可视化演示
展示分子图构建、GNN消息传递编码和分子性质预测三阶段流程,可视化原子节点如何通过图神经网络聚合信息并预测药物属性。
本节配有交互动效(进入视口后自动加载,约 3KB)。
分子图构建模式 原子(C/N/O/S)映射为图节点,化学键映射为边 节点特征含原子类型、杂化方式等 G = (V, E), V=atoms, E=bonds
药物研发之痛
假设你是城市规划师,受托在上万座微型城市里选一座适合建疗养院的小城。每座城市只有几十个居民,可每个居民脾气秉性都不同:有的活泼,有的易燃,有的怕水。传统做法是派考察队挨家挨户做问卷,一轮一轮测试,一座城市要耗上几年。排队的城市太多,方案还没定,考察队已经换了三代。
这就是传统药物研发的缩影。候选分子成千上万,最终成药寥寥无几;分子的溶解度、毒性、代谢稳定性由几十个原子的微妙连接关系决定,很难凭经验一眼看穿。一条完整管线平均要花 10—15 年,耗资超过 10 亿美元,临床阶段成功率常常不足 10%。大量成本浪费在“合成—测试—失败—再合成”的循环里。
AI 破局的关键,是把化学结构变成机器能计算的拓扑数据。分子天然是一张图:原子是节点,化学键是边。图神经网络可以在这张图上学习“什么样的结构更容易成药”,在湿实验之前给出预测。下面这个公式,把传统模式的残酷成功率摆上了台面:
正因为成功率这么低,人类才需要一位不会累的“情报员”。GNN 先读图、算分、排序,把成功率最高的城市挑出来,研究者再集中火力做实验——于是十年长征被压缩成一张候选名单。
- 分子获批数量表示最终通过临床并上市的新药数。好比从一万座城市里,最终确认适合人类长期居住的只有屈指可数的几座。
- 进入临床数量表示进入临床试验阶段的候选分子总数,也就是被选中接受“实地考察”的城市数量。这个数字看起来很大,但绝大多数都在考察后半途被淘汰。
- 成功率比值获批数除以进入临床数,得到不足 10% 的成功率,直观说明传统模式投入大、产出少。
分子图表示
情报员上岗的第一件事,是画城市地图。他不会只拍一张照片,而是把每个居民登记成一张卡片,记录年龄、职业、性格;再把居民之间日常来往的街道标出来,形成一张真正的连接网络。这张网,就是分子图。
技术地说,分子图记作 \(G=(V,E)\),其中 \(V\) 是原子集合,\(E\) 是化学键集合。每个节点 \(x_v\) 记录元素类型、电荷、手性、杂化状态等信息;每条边记录键型(单键、双键、芳香键)以及是否共轭。把这些特征堆叠成矩阵,就是 GNN 的输入。构建分子图时,通常从 SMILES、SDF 或 3D 构象出发,过程中必须保留原子类型与键序信息,必要时补全氢原子和立体化学信息,否则就像地图上漏标一条小路,情报员很容易误判。
地图画好了,情报员终于可以开始挨家挨户串门,进入消息传递环节。
- 节点集 V所有原子的集合。城市地图上每个居民都是一张身份证,对应一行特征。
- 边集 E所有化学键的集合。每条边连接两个原子,表示二者之间可以传递消息的“邻里关系”。
- 特征矩阵 X把所有原子特征按行排列,得到一个 \(n \times d\) 的矩阵,其中 \(n\) 是原子数,\(d\) 是每个原子的特征维度。这张“花名册”就是 GNN 的输入。
GNN消息传递
情报员怎么快速了解一座城市?他不会直接读完一本厚厚的年鉴,而是从任意一个居民开始,挨家挨户地问:你家住着谁?你的邻居是谁?邻居的邻居又是什么样?每问一轮,每个居民对街坊的了解就更深一层。这种“串门式”的信息交换,就是 GNN 的消息传递。
在第 \(k\) 轮,每个节点先收集邻居节点的表示,用平均、求和或注意力机制聚合成一条“街坊简报”,再用带参数 \(W^{(k)}\) 和偏置 \(b^{(k)}\) 的更新函数,把简报与自己的旧表示融合,得到新表示。公式如下:
这样的传递重复 \(K\) 层后,每个原子的表示不再只代表自己,而是包含了 \(K\) 跳邻域的结构信息。对大多数药物分子,3—5 层就足以覆盖全分子。情报员走访完所有街区,把几十个居民的信息浓缩成一张总表——这张表就是分子表示,是后续预测和筛选的“城市密码”。
- 邻居集合\(\mathcal{N}(v)\) 是与节点 \(v\) 直接相连的原子集合。情报员敲的第一圈门,就是这些直接邻居。
- 平均聚合把邻居的表示向量逐维相加再除以邻居数量,得到一条平均风格的“街坊简报”,代表局部环境的整体信息。
- 线性变换与激活用 \(W^{(k)}\) 和 \(b^{(k)}\) 对简报做一次可学习的变换,再用 \(\sigma\)(如 ReLU)引入非线性,最终生成节点 \(v\) 的第 \(k\) 层表示。
分子性质预测
拿到城市总表,就要回答最关心的问题:这座城市适不适合居住?会不会发生事故?下雨天容不容易淹?在药物发现里,这对应毒性、溶解度、logP、血浆蛋白结合率等性质。
分子性质预测是一个标准的监督学习过程。把分子图输入 GNN,经过消息传递得到节点表示,再用读出层把全部节点表示聚合成一个整图向量,最后接一个多层感知机(MLP)输出预测值。分类任务输出概率,比如“是否有心脏毒性”;回归任务输出数值,比如“水溶性 logS”。训练时用实验数据做标签,均方误差是回归任务最常见的损失函数。评估时要注意按分子骨架划分训练、验证、测试集,避免结构相似的分子泄漏信息。
情报员的预测报告当然会有误差,但它能快速把“大概率适合居住”和“明显有问题”的城市分开,让人类把精力留给最有价值的候选人。
- 图读出把最后一层所有节点向量逐维相加,得到一条代表整座城市的“总报告”。情报员把几十份居民档案汇总成一份城市气质表。
- 预测头MLP 把总报告映射成最终性质数值。它相当于专家团读报告后给出结论:毒性高还是低,溶解度是多少。
- 损失函数均方误差计算预测值与实验值的差距。差距越小,说明情报员的判断越准,训练就是在不断缩小这个差距。
虚拟筛选
现在摆在情报员面前的是上百万座城市,一座一座出报告也来不及。他改用流水线模式:先按统一模板给每座城市快速打分,再按分数从高到低排出 TopK 名单。这就是虚拟筛选的直觉。
虚拟筛选用训练好的 GNN 打分器 \(f_\theta\),对化合物库中每个分子 \(m\) 的图 \(G_m\) 输出活性分数,排序后取前 \(K\) 个做实验。相比高通量筛选(HTS)一次性试验数十万孔板,GNN 虚拟筛选几乎零边际成本,还能覆盖实验无法触及的几十亿分子空间。实际管线中,通常把 GNN 打分与分子对接、ADMET 过滤、合成可行性评估组合成多级漏斗,每级都会进一步压缩候选数量。
情报员不能保证 TopK 名单一定出药,但能保证这些城市比随机抽查靠谱得多——命中率从千分之几提升到百分之几,实验成本自然断崖式下降。
- 打分函数\(f_\theta(G_m)\) 是训练好的 GNN,输入分子图,输出一个活性分数。分数越高,表明这座“城市”越符合疗养院选址标准。
- 候选库\(\mathcal{C}\) 是待筛选的化合物集合,可能包含数百万甚至上亿个分子。情报员要对库里每一座城市都快速过一遍。
- TopK 名单从全部候选分子中取出分数最高的 \(K\) 个,形成优先实验名单。它不代表最终成药,只代表“最值得实地考察”。
先导化合物优化
TopK 名单上的城市虽然整体宜居,但总有美中不足:某条街太堵、某片区域有安全隐患。要把它们变成真正的疗养院,还得定向改造。药物发现中,这一步叫先导化合物优化。
先导化合物优化就是按需修改分子结构:保留核心药效团,替换某些原子或侧链,让活性更高、毒性更低、溶解度更好。GNN 在这个环节当“虚拟裁判”,对生成式模型给出的每个新结构迅速打分,打分结果再指导下一轮生成,形成“生成—预测—筛选—反馈”的闭环。优化不是单目标冲刺,而要同时权衡活性、选择性、ADMET 和合成难度,带约束的目标函数可以写成:
情报员从“按图索骥”升级为“城市设计师”:每次改造都先用虚拟报告预演一遍,只有分数合格的城市才值得进入合成实验。这,就是分子图上的智能筛选。
- 候选改造空间\(\mathcal{G}\) 是所有允许的结构改造集合,比如替换一个原子、延长一条侧链、改变一个环。
- 最大化目标\(\arg\max f_\theta(G_{m'})\) 表示寻找让 GNN 活性分数最高的分子结构。情报员在虚拟世界快速比较每一种改造方案。
- ADMET 约束要求改造后的分子在吸收、分布、代谢、排泄和毒性指标上不低于阈值 \(\tau\)。好比疗养院选址不仅要风景好,还要交通便利、灾害风险低。
AI 应用场景
毒性风险早期筛查
阶段:分子性质预测
解决的问题:传统毒性评价依赖动物实验或细胞实验,周期长、成本高,无法在项目早期覆盖大量候选。GNN 把毒性预测前置到分子设计环节,用历史毒性数据训练消息传递模型,对还没合成的分子直接给风险分,帮助团队提前砍掉高风险的“问题社区”。
具体案例:一家初创药企在 5000 个候选虚拟分子上运行 GNN 毒性筛查,标记出约 30% 高风险分子不予合成,剩余分子进入实验后 hERG 毒性阳性率显著低于历史基线。
百万级化合物库虚拟筛选
阶段:虚拟筛选
解决的问题:化合物库动辄数亿,传统高通量筛选成本高、覆盖面窄。GNN 对每个分子只需一次前向传播,GPU 上可并行打分,把“分子大海捞针”变成“按分数取 TopK”。
具体案例:针对某激酶靶点,团队用 GNN 对一亿个可合成分子打分,仅取前 100 名做活性测试,命中率约 8%,是随机筛选的数十倍。
先导化合物生成式优化
阶段:先导化合物优化
解决的问题:先导化合物常存在活性不足、选择性差或溶解度低的问题,人工改造雷同且容易陷入局部无效。GNN 打分器嵌入生成循环后,每轮“生成—预测—筛选”只需分钟级,能系统探索大量结构改造方向,并由 ADMET 约束保证改造后的分子仍是“好公民”。
具体案例:一项目利用分子图生成器产出 2000 个类似物,经 GNN 活性与毒性联合打分后合成 50 个,其中 3 个化合物的 IC50 提升约十倍,顺利进入下一轮优化。
Python 演示
# 手写一个迷你版 GNN 消息传递,演示分子图上的邻居聚合与水溶性粗打分# 原子特征采用 4 维 one-hot:[C, O, N, H] C = [1, 0, 0, 0]O = [0, 1, 0, 0]N = [0, 0, 1, 0]H = [0, 0, 0, 1] molecules = [ ("methane", [C, H, H, H, H], [(0, 1), (0, 2), (0, 3), (0, 4)]), ("water", [O, H, H], [(0, 1), (0, 2)]), ("ethanol", [C, C, O, H, H, H, H, H], [(0, 1), (1, 2), (0, 3), (0, 4), (1, 5), (1, 6), (2, 7)]),] def message_pass(atoms, bonds, rounds=2): feats = [list(a) for a in atoms] n = len(feats) for _ in range(rounds): new_feats = [] for i in range(n): neighbors = [j for j in range(n) if j != i and ((i, j) in bonds or (j, i) in bonds)] agg = [0.0] * len(feats[i]) for j in neighbors: for d in range(len(agg)): agg[d] += feats[j][d] / max(len(neighbors), 1) new_feats.append([0.5 * feats[i][d] + 0.5 * agg[d] for d in range(len(feats[i]))]) feats = new_feats return feats def readout(feats): return [sum(f[d] for f in feats) for d in range(len(feats[0]))] def solubility_score(vec): # 亲水倾向:氧正贡献,碳负贡献 return -0.6 * vec[0] + 1.2 * vec[1] + 0.1 * vec[2] def main(): print("Molecule readout vector -> solubility score") for name, atoms, bonds in molecules: feats = message_pass(atoms, bonds, rounds=2) vec = readout(feats) score = solubility_score(vec) print("%-12s %s -> %.2f" % (name, vec, score)) if __name__ == "__main__": main()
C = [1, 0, 0, 0]把原子类型编码成固定维特征向量,相当于给居民发一张身份卡片。feats = [list(a) for a in atoms]深拷贝原子特征,保证消息传递不污染原始分子数据。neighbors = [j for j in range(n) if j != i and ((i, j) in bonds or (j, i) in bonds)]找出当前原子的全部邻居,等价于确定情报员要敲哪些门。agg[d] += feats[j][d] / max(len(neighbors), 1)邻居特征取平均,模拟一次“居民意见汇总”。new_feats.append([0.5 * feats[i][d] + 0.5 * agg[d] for d in range(len(feats[i]))])自身特征与邻居简报各占一半,生成更新后的节点表示。return [sum(f[d] for f in feats) for d in range(len(feats[0]))]把所有节点向量逐维求和,得到代表整个分子的图读出向量。
常见误区
误区分子结构图也是“图”,直接丢给 CNN 卷积一下不就能提取特征吗?为什么非要用图神经网络?
正解分子图是原子与化学键构成的拓扑结构,原子数不定、连接方式任意,没有固定的网格排列。CNN 依赖规则的像素网格,无法处理这种“每个样本结构都不一样”的数据。GNN 的消息传递沿着边进行,天然适配图的拓扑。就像城市地图不能压成一张方格子照片来理解交通,必须顺着街道走一遍。
为何常见:看到“分子结构图”和“图像”都带“图”字,又因为教科书里的 2D 结构式画得很像平面图形,容易混淆。
误区GNN 层数越多,每个原子看得越远,分子表示一定越丰富,所以堆到十几层肯定更强。
正解层数过多会带来过平滑:所有节点经过多轮聚合后高度相似,反而丢失了个体差异。药物分子通常只有几十个原子,2—4 层消息传递就能覆盖整个分子。情报员反复问同一圈邻居,得到的新消息越来越少,最后写出的城市报告也千篇一律。
为何常见:深度学习其他领域“越深越强”的印象深入人心,忽略了图结构里信息会快速重叠这一特性。
误区GNN 打分最高的分子就是完美药物,可以直接跳过实验进入临床。
正解GNN 打分只是预测活性倾向,还要综合毒性、溶解度、代谢稳定性、合成可行性等约束,而且预测误差必须用实验验证。TopK 名单只是缩小实验室范围,不代表直接成药。就像情报员说“这座城市规划不错”,但还要派人实地测量地质、气候、水电,才能真正开工。
为何常见:把“模型分数”与“药品真相”划等号,忽略了从分子到药物之间巨大的验证鸿沟。
误区药物数据太少才导致模型不准,只要拼命收集更多标注数据,GNN 分子预测就一定准确。
正解药物标注数据昂贵且稀疏,盲目堆数据不如设计分子预训练、自监督、主动学习,并用物理化学先验做约束。模型在训练集之外的化学空间外推能力有限,即使数据量变大,也可能在全新骨架上失真。
为何常见:监督学习“数据为王”的直觉在图像文本领域很有效,但药物数据的获取成本和噪声远高于图像文本。
面试题
Q1. 在分子图中,化学键通常被建模为什么?
- A.节点
- B.边← 正确答案
- C.图像
- D.标签
答案:B。分子图把原子当节点、化学键当边,就像城市里居民是节点、街道是边。化学键承担连接和传递信息的角色,所以对应边。节点、图像、标签都不符合图结构对化学键的定义。
Q2. GNN 从邻居节点收集信息的过程叫什么?
- A.最大池化
- B.邻域裁剪
- C.消息传递← 正确答案
- D.权重正则
答案:C。消息传递是 GNN 的核心操作:每个节点把邻居信息聚合到自己身上。情报员挨家挨户敲门获取街坊消息,就是消息传递的形象说法。池化是下采样,裁剪和正则化也都不是这一过程。
Q3. 分子性质预测中,读出层的主要产物是什么?
- A.原子空间坐标
- B.分子图表示向量← 正确答案
- C.化学键长度表
- D.合成路线规划
答案:B。读出层把全部节点表示聚合成一个分子级向量,代表整座城市的气质报告,再交给 MLP 预测性质。坐标是输入几何信息,键长表也不是读出层产物,合成路线属于生成任务。
Q4. 虚拟筛选中 TopK 名单的主要作用是什么?
- A.缩小实验验证范围← 正确答案
- B.直接上市销售
- C.替代临床试验
- D.保证分子可合成
答案:A。GNN 打分只为排序,TopK 名单是“优先实地考察”列表,把有限的湿实验资源集中到少数高潜力候选。它不能直接上市、替代临床,也不能保证合成可行性。
Q5. GNN 层数过多导致的过平滑现象是什么?
- A.节点表示趋同← 正确答案
- B.节点数量变少
- C.边权重变高
- D.损失保持不变
答案:A。经过很多轮消息传递,节点反复混合邻居信息,最终所有节点向量趋于相似,丢失个体差异。情报员反复问同一圈邻居,最后收到的都是差不多的话,“城市个性”就被抹掉了。节点数量、边权重不会因层数而变,损失不变也不是过平滑的特征。
Q6. 先导化合物优化中,GNN 预测主要扮演什么角色?
- A.替代合成设备
- B.快速打分评价← 正确答案
- C.发布临床报告
- D.直接测量活性
答案:B。GNN 是优化循环里的“虚拟裁判”,每生成一个新结构就立刻打分,指导下一步改造。它不能替代自动合成设备,不负责临床报告,也不替代实验测量。
Q7. 分子图中,原子特征通常不包括下面哪一项?
- A.原子类型特征
- B.部分电荷特征
- C.手性标记特征
- D.市场价格特征← 正确答案
答案:D。原子特征用于描述化学身份和局部环境,如元素类型、电荷、手性、杂化等;市场价格与分子结构无关,属于外部商业信息,不能作为模型输入特征。
Q8. 以下哪些属于 GNN 在药物发现中的典型应用?
- A.基因测序任务
- B.分子性质预测← 正确答案
- C.虚拟筛选应用← 正确答案
- D.先导化合物优化← 正确答案
答案:BCD。GNN 在本领域三大主线是分子性质预测、虚拟筛选、先导化合物优化。基因测序属于序列问题,通常用循环或 Transformer 模型,不是 GNN 在药物发现中的主流应用。
Q9. 哪些原因是虚拟筛选后仍需要实验验证的合理理由?
- A.预测存在误差← 正确答案
- B.模型百分百准确
- C.外推能力有限← 正确答案
- D.合成可能困难← 正确答案
答案:ACD。模型在训练集外化学空间的预测不可靠,合成路径也可能不现实,所以必须实验验证。B 与模型实际不符,若模型百分百准确就不需要验证了。
Q10. 关于 GNN 分子表示学习,下列哪些说法正确?
- A.分子图可无特征
- B.传播扩大感受野← 正确答案
- C.聚合依赖图拓扑← 正确答案
- D.读出整合节点表示← 正确答案
答案:BCD。GNN 通过多层传播把感受野从单原子扩大到 K 跳邻域;聚合过程沿化学键进行,依赖图的拓扑结构;读出层把节点表示整合为图表示。原子特征对学习至关重要,“分子图可无特征”是错误的。