第四章 图神经网络基础:GCN 原理、消息传递与拉普拉斯矩阵
做 ADMET 预测这几年,我最大的感触是:分子不是一串特征,而是一张图。原子是节点,化学键是边。你想想看,传统的机器学习把分子摊平成向量,丢掉了结构信息,就像只看零件清单不看装配图——能猜个大概,但细节全没了。
所以这一章,我们得把图神经网络最核心的三块地基打牢:邻接矩阵与拉普拉斯矩阵(图怎么表示)、消息传递范式(信息怎么流动)、图卷积网络 GCN(经典模型怎么算)。硬啃公式容易晕,我会穿插一些自己踩过的坑,帮你把直觉建立起来。
4.1 邻接矩阵与拉普拉斯矩阵——图的“身份证”
先说最简单的表示。邻接矩阵 A 就是个 0-1 矩阵,节点间有边就填 1,没有就填 0。对于分子图,一般还加上自环(对角线为 1),因为节点自身的信息也要保留。
举个例子,一个 4 个原子的分子,若 1-2、2-3、3-4 有键,邻接矩阵长这样:
[[1, 1, 0, 0],
[1, 1, 1, 0],
[0, 1, 1, 1],
[0, 0, 1, 1]]
但直接用 A 做卷积有个问题——度大的节点(连接多)特征会爆炸,度小的节点被淹没。于是我们引入拉普拉斯矩阵 L:
L = D - A
其中 D 是度矩阵(对角线上是每个节点的度)。更常用的是归一化拉普拉斯:
L_sym = D^{-1/2} L D^{-1/2} = I - D^{-1/2} A D^{-1/2}
为什么要归一化?我在做分子性质预测时,曾试过直接用拉普拉斯,结果分子量大的分子(节点多)预测偏差特别大。后来换成正则化拉普拉斯,梯度稳定多了。说白了,归一化是为了让每个节点不管邻居多少,都能“平等”地聚合信息。
| 矩阵类型 | 公式 | 用途 |
|---|---|---|
| 邻接矩阵 A | A_{ij} = 1 if edge else 0 | 原始图结构 |
| 度矩阵 D | D_{ii} = ∑_j A_{ij} | 计算度数 |
| 拉普拉斯 L | L = D - A | 频谱分析 |
| 归一化拉普拉斯 | L_sym = I - D^{-1/2} A D^{-1/2} | GCN 标准输入 |
4.2 消息传递范式——GNN 的“通信协议”
现代图神经网络几乎都遵循消息传递(Message Passing)范式。想象这样一个场景:每个节点给自己所有的邻居发一条“消息”,邻居收到后汇总,再更新自己的特征。这个过程一般包含三步:
- 消息生成:每个节点用当前特征生成消息,有时还考虑边的信息。
- 消息聚合:节点把所有邻居发来的消息“收拢”在一起(求和、平均、最大等)。
- 节点更新:把聚合后的消息和节点自身特征结合,生成新的节点特征。
我曾经在构建分子图时犯过一个低级错误——没有把自环消息加上。结果第一层 GNN 后,每个节点只看到邻居信息,完全忘了自己。预测 logP 时误差直接翻倍。你想想看,分子里的碳原子能不能只看邻居?它自己的电子层结构同样重要啊。
形式化地,第 k 层的消息传递可写成:
m_v^(k) = AGGREGATE({W * h_u^(k-1), for u in N(v)})
h_v^(k) = UPDATE(h_v^(k-1), m_v^(k))
AGGREGATE 和 UPDATE 是两个可学习函数。不同的 GNN 变体主要是这两个函数的设计不同。
4.3 GCN 原理解析——从谱域到空间域
图卷积网络(Graph Convolutional Network, GCN)是最经典的图神经网络,由 Kipf 等人提出。它的核心思想是:用频谱图卷积的一阶近似,变成一个简单的“邻居平均”操作。公式很简单:
H^(l+1) = σ( A_hat · H^(l) · W^(l) )
其中 A_hat = D_tilde^{-1/2} · A_tilde · D_tilde^{-1/2},A_tilde = A + I(加自环)。
拆解一下:
- 加自环:
A_tilde = A + I,让节点在聚合时包括自己。 - 对称归一化:
D_tilde^{-1/2} · A_tilde · D_tilde^{-1/2},防止度大的节点特征膨胀。 - 特征变换:乘以可学习权重矩阵
W。 - 非线性:激活函数
σ(通常是 ReLU)。
嗯,你可能会问:为什么不用更精确的频谱卷积?因为计算代价太高。GCN 用一阶切比雪夫近似,把复杂度从 O(N²) 降到了 O(|E|),在分子图上非常实用——分子节点数最多几百,但边数可能几千,这个近似在准确性和效率上取得了很好的平衡。
4.4 一张图看懂 GCN 消息传递流程
下面这张 SVG 总结了 GCN 单层的前向过程:从邻接矩阵归一化,到消息聚合,再到特征更新。我自己教学时经常画这张图,学生反馈“一看就懂了”。
torch_geometric.nn.GCNConv 时,默认已经处理了归一化和自环。但如果你自己手写,一定要记得 A_hat = normalize(A + I),我见过不少人忘记加自环导致收敛慢。
4.5 为什么 GCN 适合 ADMET 预测?
分子图有几个特点:节点数少(几十到几百原子)、边稀疏(化学键很少)、标签通常与全局结构相关(比如毒性、渗透性)。GCN 的邻居平均操作天然适合这种局部→全局的信息传递。经过 2~3 层 GCN,每个节点的感受野覆盖整个分子,然后通过池化得到分子级表征。
我记得第一次在 Tox21 数据集上跑 GCN,对比之前用的 MLP 和随机森林,分类 AUC 从 0.72 直接跳到了 0.85。同事都惊了。其实就是因为 GCN 捕捉了官能团之间的相互作用——比如一个苯环上的取代基可以通过消息传递影响另一个官能团的电荷分布。
• 邻接矩阵 + 归一化拉普拉斯是图的“骨架”,必须处理自环和度均衡。
• 消息传递范式中,聚合函数的选择至关重要(求和 vs 平均 vs 最大)。
• GCN 通过一阶谱近似实现高效空间图卷积,适合中等规模分子图。
• 训练时注意孤立节点和过平滑问题,必要时换用 GIN 或添加残差连接。