/knowledge/graph-neural-networks
图神经网络
神经网络喜欢网格——图像里的像素、序列里的词。但世界上有很多东西是图,根本没有网格。图神经网络通过让每个节点倾听它的邻居,直接在那种连接结构上学习。
- 学于
- 图神经网络进阶 · 图上的深度学习
- 时间
- 深度学习与图
- 应用于
- 在关系型数据上学习
- 阅读 / 复习
- 约 14 分钟阅读2026-06-26
深度学习靠利用结构征服了图像和文本——像素的网格、 词的序列。但有海量重要的数据既不是网格也不是序列;它是图:人连着人、账户连着交易、分子、知识。图神经网络(GNN)正是为这个而生的深度学习架构——它们直接在图的连接结构上学习,靠一个 看似简单的想法:每个节点通过倾听它的邻居来更新对自己的理解,一遍又一遍。
它是这一节里已有的两页天然的交汇点——研究图结构的网络分析,与学习表示的深度学习——而且是一个真正现代的工具。这一页讲为什么 普通网络不适合图、核心处的消息传递机制、GNN 实际学到了什么,以及它在哪里见效。
01
在连接的数据上学习
其承诺是把深度学习的威力——自动学习有用的表示——用到意义存在于其连接之中的数据上。经典 的网络分析页用手工计算结构特征(度、 中心性、社群);而 GNN 从图中学出每个节点正确的表示,把一个节点自己的特征与它连接的 模式结合起来。这是「手工特征 → 学习特征」的飞跃,用到了关系型数据上。
02
为什么网格与序列不适合
CNN 之所以奏效,是因为图像有固定的网格——每个像素 在相同的位置上有相同数量的邻居,所以一个滤波器可以在它上面滑动。RNN/Transformer 之所以奏效,是因为 文本是一个有序的序列。图两者都不是:节点的邻居数量千差万别,而且它们之间没有 自然的顺序。你没法在拥有任意、不规则连通性的东西上滑动一个固定的滤波器。
所以 GNN 需要一种置换不变的操作(答案不能取决于你列出一个节点邻居的任意顺序), 并且对任何数量的邻居都适用。那个操作就是消息传递。
03
消息传递:核心机制
(几乎)每个 GNN 的核心,是一个三步的循环,每一层重复一次:
- 消息——每个邻居发出它当前的特征向量(可选地经过变换)。
- 聚合——节点用一个置换不变的函数(求和、平均或取最大——这样顺序无关、任何数量 都行)把所有进来的消息合起来。
- 更新——节点把聚合后的消息与自己之前的状态结合(经过一个小的神经网络),形成它 新的表示。
一层让每个节点看到它直接的邻居;堆叠层数,信息就传播得更远——经过 层后,一个节点的表示反映了它的 跳邻域。 信息在图上的这种扩散,就是整个诀窍。
04
GNN 学到了什么
输出是为每个节点学到的一个嵌入——一个同时捕捉节点自身特征和它在图 结构中位置/角色的向量。两个特征相似且邻域相似的节点,最终会得到相似的嵌入。这就是强大 之处:模型从数据中发现结构的哪些方面重要——而不是你去猜该用哪种手工的中心性度量。那些嵌入随后送进一个最终层,去做 你关心的任何任务。
05
GCN、GraphSAGE、GAT
流行的 GNN 变体都是同一个消息传递的想法,只是聚合那一步不同:
- GCN(图卷积网络)——对邻居的消息求平均(一个归一化的均值)。简单、奠基性的版本。
- GraphSAGE——使用可学习的聚合,而且关键地采样固定数量的邻居,所以它能 扩展到巨大的图,并能泛化到训练时未见过的节点。
- GAT(图注意力网络)——施加注意力,让节点对某些邻居赋予比其他更高的 权重(不是所有邻居都同等相关)——就是那个驱动 Transformer 的注意力想法,用在图上。
那个统一的视角值得记住:每个 GNN 层都只是「让节点与它的邻居交谈」,而变体只在如何倾听上不同。
06
它用来做什么
GNN 处理图上三种自然的任务:
07
诚实的局限
GNN 很强大,但有特征性的失败模式:
08
它在我工作中的体现
09
60 秒回顾
消息传递框架、GCN/GraphSAGE/GAT 变体,以及过平滑的局限,反映了当前的 GNN 参考文献以及深度学习 课程。