# 1.1 图神经网络与分子科学概述

第一章 图神经网络与分子科学概述

图神经网络和分子科学的结合,说白了就是把化学家画在纸上的分子结构式,变成计算机能理解、能计算的数学形式。我当年刚接触这个方向时,第一反应是:这有什么用?结果翻了几篇论文,才发现这个领域的水比想象中深得多。

1.1.1 发展历史:从分子描述符到图神经网络

分子科学结合计算,其实走了很长一段路。我们来梳理一下关键节点:

阶段 时间 核心方法 我的评价
先驱期 1960-1990 分子指纹、QSAR模型 靠人工设计特征,很费劲
传统ML期 1990-2010 随机森林、SVM + 描述符 准确率有提升,但还是手工特征
深度学习期 2010-2017 CNN、RNN处理分子SMILES 信息损失大,分子结构被压扁了
图网络期 2017至今 GCN、GAT、MPNN 这才真正尊重分子的拓扑结构

我记得2017年Thomas Kipf提出图卷积网络(GCN)的时候,化学界和AI界都炸了。为啥?因为分子天然就是个图结构啊——原子是节点,化学键是边。早期用SMILES字符串表示分子,简直就是把三维结构硬塞进一维序列里,你想想看,那损失有多大。

关键转折点:从“把分子拍扁成向量”到“在原生的图结构上学习”,是分子特征提取最本质的进步。

1.1.2 应用领域:不只是预测性质那么简单

图神经网络做分子特征提取,能解决哪些实际问题?我挑几个自己踩过坑的领域聊聊:

  • 虚拟筛选:从百万级化合物库中快速找候选分子。传统方法要逐个做分子对接,耗时几周;GNN做预筛选,几天就能把候选范围缩小到几百个。
  • ADMET预测:预测药物的吸收、分布、代谢、排泄和毒性。我在项目里遇到过,一个候选分子活性很好,但用GNN一算,肝毒性概率85%,直接毙掉,省了后续动物实验的冤枉钱。
  • 合成规划:反向合成分析,判断某个分子能不能合成、怎么合成。GNN能预测反应位点和产率。
  • 分子生成:生成具有特定性质的新分子结构。这个方向实用价值很高,但也很容易翻车——我曾经生成的分子画出来像外星生物,根本不稳定。

避坑指南:别盲目相信GNN的预测结果。模型对训练集外的分子骨架泛化能力有限,尤其是那些含罕见杂环或重原子的分子。

1.1.3 核心概念:分子图、特征与任务

要讲清楚分子特征提取,得先搞清楚几个基础概念。不然后面代码怎么写、模型怎么调,根本对不上号。

分子图:节点和边

一个分子图 G = (V, E),其中:

  • 节点集合 V:每个原子是一个节点。原子属性包括元素类型(C、N、O...)、杂化方式、形式电荷等。
  • 边集合 E:每根化学键是一条边。边的属性包括键类型(单键、双键、芳香键等)、是否在环内等。

举个例子,苯分子有6个碳原子和6个氢原子,但处理时通常只考虑重原子(非氢),这样图会更干净。我刚开始写代码时把氢也全算上,结果图太大,训练慢到让人崩溃。

节点特征和边特征:分子的”身份证”

每个原子和键都需要用数值向量表示。常见的特征包括:

特征类型 具体特征 维度示例
原子特征 原子类型、度(连接的原子数)、形式电荷、杂化类型、在环中、芳香性 20-100维
键特征 键类型、共轭性、是否在环中、立体化学 5-15维
全局特征 分子量、logP、电荷、手性中心数 10-50维

这些特征用one-hot编码或者可学习的嵌入向量表示。这里有个坑:特征选择决定了模型能学到的信息上限。你用少了,模型学不到;你用多了,训练变慢还可能过拟合。

图任务类型:你要解决什么问题?

分子图的任务分三级,每一级对应的实际场景不同:

  • 图级别任务:给整个分子打标签。比如预测logP、毒性、活性。这是最常见的任务。
  • 节点级别任务:预测每个原子的性质。比如原子电荷、NMR化学位移。
  • 边级别任务:预测键的性质或反应位点。比如预测哪个键最容易断裂。

我在做一个代谢位点预测项目时,就用了节点级别任务——预测每个碳原子被CYP450酶氧化的概率。GNN结果比传统方法准了将近15%,客户当场就签了二期合同。

消息传递机制:GNN的灵魂

消息传递(Message Passing)是GNN处理分子图的核心操作。简单说,就是每个原子节点收集邻居的信息,跟自己的特征融合,再更新自己。搞了若干轮之后,每个节点的表示就包含了整个分子结构的信息。

# 简化的消息传递伪代码
# 对于第k层,节点v的更新:
# 1. 聚合邻居消息
m_v^(k) = AGGREGATE({h_u^(k-1), e_uv | u ∈ N(v)})
# 2. 更新节点特征
h_v^(k) = UPDATE(h_v^(k-1), m_v^(k))

# 最终分子表示:对所有节点特征做图池化
h_G = POOL({h_v^(K) | v ∈ V})

这个机制看着简单,但实现起来细节不少。比如聚合函数选求和还是平均?更新用拼接还是加法?层数选多了会不会过平滑?这些问题我在写代码时都一一碰过,后面几章会详细讲。

嗯,这里要敲黑板:消息传递的层数决定了模型能看到多大的分子”邻域”。层数太少,学不到长程相互作用;层数太多,所有节点变得一样,反而学不到区分信息。一般分子图2-4层就够了,太大分子的可以考虑加残差连接。

注意:分子图中的消息传递层数不是越深越好。我测试过6层以上GCN在QM9数据集上的表现,精度不仅没提升,反而下降了。这就是所谓的“过平滑”问题。

1.1.4 知识体系总览

为了让整个课程的知识结构更清晰,我画了一张框架图,展示了本章及后续各章的核心逻辑关系:

图神经网络分子特征提取 · 知识框架 分子数据 SMILES / SDF / 分子图 分子图构建 节点特征 · 边特征 · 图拓扑 图神经网络模型 GCN · GAT · MPNN · 消息传递 图级别任务 性质预测 · 毒性筛选 节点级别任务 原子电荷 · 反应位点 边级别任务 键预测 · 合成规划 💡 从分子数据 → 图构建 → 模型 → 应用,是完整链路

这张图把课程的核心逻辑串起来了。从原始分子数据出发,经过图构建得到结构化的分子图,再送入GNN模型完成消息传递,最后根据任务类型输出预测结果。每个环节都有技术细节和陷阱,后面的章节会逐一展开。

我的建议:学这一章时,重点理解“分子为什么是图”以及“消息传递在做什么”。这两个概念是后面所有模型的基石。先把概念理清,再上手写代码,效率会高很多。