目录
1. 什么是图神经网络?
图神经网络(GNN)是一种直接在图上运行的深度学习模型:图是由节点(实体)通过边(关系)连接而成的数据。卷积网络假设输入是规则的像素网格,循环网络假设输入是有序的序列,而 GNN 不做这两种假设。它在不规则结构上工作,其中每个节点可能拥有不同数量的邻居,也不存在可供利用的天然顺序。
这很重要,因为大量现实数据天然就是图:社交网络、分子、知识图谱、道路系统、支付网络,以及万维网本身。GNN 为每个节点、每条边或整张图学习一个向量表示,称为嵌入(embedding)。这个嵌入同时融合了两类信息:节点自身的特征,以及围绕它的邻域结构。随后,这些嵌入会送入一个普通的预测器来完成具体任务。
这一概念可追溯到 Gori 等人(2005)与 Scarselli 等人(2009),他们提出了"图神经网络模型"。在深度学习浪潮到来之前,它一直是小众想法:2016 到 2019 年间,一批架构,即 GCN、GraphSAGE、GAT 与 GIN,让 GNN 既可扩展又准确,如今它已是机器学习工具箱中的标准组成部分。关于其中一个重要分支的线性代数根源,参见我们的姊妹篇机器学习中的谱图理论。
2. 核心思想:消息传递
几乎所有现代 GNN 都遵循一个统一的范式,称为消息传递(message passing),由 Gilmer 等人(2017)加以形式化。其直觉异常简单。每个节点从一个特征向量开始。然后,在每一层里,节点执行三步:收集来自邻居的消息,将它们聚合成一个汇总,再用这个汇总连同自己先前的取值更新自身的向量。
聚合这一步有一个硬性要求:它必须是置换不变的。由于图没有内在的顺序,结果不能依赖于邻居被列出的次序。常见选择是求和、取平均或取最大。更新这一步通常是一个小型神经网络,即一个可学习的线性变换后接一个非线性。至关重要的是,一层中的所有节点共享相同的权重,正如 CNN 在整张图像上复用同一个卷积核。正是这种权重共享,使一个训练好的 GNN 能够泛化到一张图的所有节点,甚至泛化到从未见过的图。
这种"先看邻居、再做更新"的节奏就是全部引擎。一个有用的心理图景是流言在人群中扩散:每一轮里,每个人都根据身旁的人来修正自己所知道的,几轮之后,来自远处的消息就传遍了整个房间。GNN 只是把这个更新步骤变得可学习,于是网络会自行发现:邻域中究竟哪些信号对当前任务真正重要。
3. 深入一个 GNN 层(以及该叠多深)
形式上,单层为每个节点 v 计算一个新的嵌入:
h_v⁽ᵏ⁾ = UPDATE( h_v⁽ᵏ⁻¹⁾ , AGGREGATE{ h_u⁽ᵏ⁻¹⁾ : u ∈ N(v) } )
这里 N(v) 是 v 的邻居集合,h_v⁽ᵏ⁾ 是 v 经过 k 层之后的嵌入。层数控制着感受野。经过一层,节点只听到了它的直接邻居。经过两层,它间接听到了邻居的邻居,因为这些邻居在上一轮中也用它们的邻居更新过自己。一般而言,k 层让信息在图上传播 k 跳。
这似乎暗示越深越好,但 GNN 在这一点上很特别。叠太多层会造成过平滑(oversmoothing):每个节点的嵌入都漂向相同的取值,网络也就失去了区分节点的能力。实践中常见的是两到四层,因此选择深度是一个真正的设计决策,而不只是增加容量那么简单。
4. 塑造这一领域的四种架构
四个模型定义了 GNN 的现代时代。它们共享消息传递的骨架,主要区别在于如何聚合。
- GCN(Kipf 与 Welling,2017)用按度归一化的邻居平均来聚合。它简单、快速,是出奇强的基线,并直接源自谱图理论。
- GraphSAGE(Hamilton、Ying 与 Leskovec,2017)采样固定数量的邻居,支持平均、最大或 LSTM 聚合器。它的关键贡献是归纳式学习:能泛化到训练中从未见过的节点与图,这在工业规模上至关重要。
- GAT(Veličković 等人,2018)引入注意力,为每个邻居学习一个权重,使模型能够聚焦于最相关的邻居,而非一视同仁。
- GIN(Xu 等人,2019)的设计目标是尽可能富有表达力。作者证明,GNN 区分图的能力以经典的 Weisfeiler-Lehman 检验为上界,而 GIN 的单射求和聚合器恰好达到这一上界。
这四种最好被看作起点,而非一份封闭的清单。后来的数十种变体加入了残差连接、门控、边特征或更聪明的采样,但几乎都保留了相同的消息传递内核。因此,理解 GCN、GraphSAGE、GAT 与 GIN,就掌握了读懂并思考几乎任何现代 GNN 论文所需的词汇。
一览:四种关键 GNN 架构
| 模型 | 聚合方式 | 核心思想 | 最适合 |
|---|---|---|---|
| GCN(2017) | 归一化平均 | 简单、源自谱方法的基线 | 快速而强的起点 |
| GraphSAGE(2017) | 采样 + 平均 / 最大 / LSTM | 归纳式:可用于未见过的节点 | 大型、不断增长的图 |
| GAT(2018) | 注意力加权 | 学习哪些邻居更重要 | 含噪或不均衡的邻域 |
| GIN(2019) | 求和(单射) | 最大表达力(WL 上界) | 图级分类 |
5. GNN 预测什么:三个层级
一旦 GNN 产生了嵌入,预测便在三个层级之一上进行,而同一套骨架服务于全部三者。
- 节点级:对单个节点进行分类或打分,例如将某账户标记为欺诈,或预测某用户的兴趣。
- 边级(链接预测):预测两个节点之间是否应存在一条边。这是好友推荐与商品推荐背后的引擎。
- 图级:把整张图汇总为一个预测,例如某分子是否有毒。这会加入一个读出(pooling)步骤,将所有节点嵌入合并为一个图向量。
这种模块化正是 GNN 如此通用的部分原因:替换输出头与标签,保留其余部分,同一架构就能从给用户打标签,转向推荐链接,再转向筛选分子。
6. 图神经网络用在哪里
GNN 已迅速从研究论文走入每天被数百万人使用的生产系统。
- 推荐:Pinterest 的 PinSage 及相关系统把用户与内容视为一张大图,在数十亿条目上进行网络级规模的推荐。
- 药物发现与化学:分子本身就是由原子(节点)与化学键(边)构成的图,因此 GNN 可预测分子性质、毒性与反应。这正是消息传递网络最初的动机。
- 欺诈与安全:支付与账户图能揭示有组织的协同滥用团伙,而孤立的、逐账户的特征根本看不到这些。
- 交通与物流:Google 地图曾用 GNN 改进其在道路网络上的预计到达时间。
- 科学与工程:物理仿真、知识图谱推理、电商推荐,乃至芯片设计,都建立在图学习之上。
这些案例的共同点是一个简单的检验:如果你的数据画成一张关系网络比画成一张扁平的表格更自然,那么 GNN 通常能把这种结构转化为可度量的精度提升。这种情形越来越常见,这也正是图学习在工业界与各门科学中传播得如此之快的原因。
7. 挑战、工具与上手
GNN 很强大,但并非毫不费力。除了过平滑,可扩展性是一个现实约束:一张拥有数十亿条边的图放不进内存,这正是邻居采样(GraphSAGE)与图划分被发明出来的原因。其他活跃的研究挑战包括过压缩(oversquashing,过多信息被迫挤过单一瓶颈边)、由 Weisfeiler-Lehman 检验设定的表达力上限,以及处理节点与边有多种类型的动态或异质图。
好在,借助成熟的库,上手很简单。PyTorch Geometric(PyG)与 Deep Graph Library(DGL)提供了现成的 GCN、GraphSAGE、GAT 与 GIN 层、标准基准数据集,以及高效的稀疏运算。一个不错的第一个项目是在像 Cora 这样的引文图上做节点分类,仅用几行写成的两层 GCN 就已经胜过经典基线。从这个小例子出发,同一套工具便可扩展到上述工业级应用。
常见问题
用简单的话说,图神经网络是什么?
图神经网络是一种直接在由节点和边构成的图上运行的深度学习模型。每个节点反复地从邻居那里收集信息并更新自己的向量,于是最终的表示既捕捉了节点的特征,也捕捉了它在网络中的位置。
GNN 中的消息传递是什么?
消息传递是核心机制:在每一层,每个节点收集来自邻居的消息,用求和或取平均等置换不变函数将其聚合,再用一个小型共享神经网络更新自己的嵌入。叠加层数能让信息在图上传播得更远。
GCN、GraphSAGE、GAT 与 GIN 有何区别?
它们主要在聚合方式上不同。GCN 使用归一化平均,GraphSAGE 采样邻居且是归纳式的,GAT 为邻居学习注意力权重,而 GIN 使用求和聚合器以达到 Weisfeiler-Lehman 检验所允许的最大表达力。
GNN 与普通神经网络有何不同?
CNN 假设固定网格,RNN 假设有序序列。GNN 不做这种假设:它处理节点邻居数量各异的、不规则且无序的图,并在所有节点上复用相同的权重,因此训练好的模型可以泛化到新的图。