一句话理解 GNN

GNN 是 Graph Neural Network 的缩写,中文通常叫作图神经网络。它是一类专门处理图结构数据的神经网络。

所谓图结构数据,是指数据不只有一个个孤立的对象,对象之间还存在连接关系。GNN 的核心任务,就是让每个对象在更新自己的表示时,同时参考与它相连的对象。

用一句最简单的话说:

普通神经网络主要学习单个样本的特征,GNN 还会学习样本之间的关系。

例如,在社交网络中,每个用户是一个节点,关注关系是边;在论文引用网络中,每篇论文是一个节点,引用关系是边;在分子中,每个原子是一个节点,化学键是边。

在理解 GNN 之前,先弄清楚什么是图

一个图通常写成 G=(V,E)G=(V,E)

  • VV 表示节点集合,例如用户、论文、商品或原子。
  • EE 表示边集合,用来描述节点之间的关系。
  • 节点可以拥有特征,例如用户年龄、论文关键词或原子类型。
  • 边也可以拥有特征,例如关系类型、距离、权重或时间。

假设有三篇论文 A、B、C。A 引用了 B,B 又引用了 C,那么三篇论文就是三个节点,引用关系就是边。即使 A 和 C 没有直接相连,信息仍然可以经过 B 在它们之间传播。

这正是图数据与普通表格数据的重要区别:一个样本的含义,往往同时取决于它自身和周围的结构。

为什么不能直接使用普通神经网络

传统的全连接网络通常要求固定长度的输入;卷积神经网络擅长规则网格,例如图像中的像素;循环神经网络擅长有顺序的序列。

图却具有三个特殊之处:

  1. 每个节点的邻居数量可能不同。
  2. 邻居通常没有天然的先后顺序。
  3. 不同图的节点数和连接方式可能完全不同。

因此,GNN 不能简单地把“第一个邻居、第二个邻居”拼接起来处理。它需要一种不受邻居排列顺序影响、又能适应不同邻居数量的方法。这个方法就是邻居聚合

GNN 的核心:消息传递

大多数 GNN 都可以用 Message Passing,也就是消息传递框架来理解。一次消息传递通常包含三个步骤。

第一步:收集邻居信息

节点 vv 先查看自己的邻居集合 N(v)N(v),收集每个邻居在当前层的表示。

邻居信息 = AGGREGATE({邻居节点的表示})

AGGREGATE 可以是求和、平均、最大值,也可以是带注意力权重的加权求和。关键要求是:交换邻居的排列顺序后,聚合结果不应该随意改变。

第二步:更新自身表示

节点把聚合得到的邻居信息与自己的旧表示结合,生成新的表示。

新表示 = UPDATE(自身旧表示, 邻居聚合信息)

经过这一层后,节点的表示就包含了自己和一阶邻居的信息。堆叠两层后,节点通常可以接收到二阶邻居的信息;堆叠三层后,可以继续看到更远的结构。

第三步:产生任务输出

更新后的节点表示可以用于不同任务:

  • 节点分类:判断一篇论文属于哪个研究方向。
  • 链接预测:判断两个用户未来是否可能建立关系。
  • 图分类:判断一个分子是否具有某种性质。
  • 聚类:根据节点属性和连接结构发现群体。

如果任务需要对整个图做预测,模型还会用 READOUT 将所有节点表示汇总成一个图表示。

一个直观例子:判断论文主题

假设要判断一篇新论文属于机器学习、数据库还是计算机视觉。只看论文自己的关键词可能不够,因为有些词在多个领域都会出现。

GNN 会同时查看它引用了哪些论文、又被哪些论文引用。如果它大量连接到图神经网络和表示学习论文,即使摘要中没有直接出现“GNN”,周围的引用结构仍能提供很强的主题信号。

一层 GNN 相当于问:“我的直接邻居都在研究什么?”

两层 GNN 相当于继续问:“我的邻居所连接的论文又在研究什么?”

模型最终学到的节点向量,不再只是论文文本的压缩,还融合了它在引用网络中的位置。

GNN 到底学习哪些参数

邻居关系本身通常不是训练出来的,而是数据给定的。GNN 真正学习的主要是下面这些参数:

  • 将输入特征变换到隐藏空间的权重矩阵。
  • 合并自身信息和邻居信息时使用的参数。
  • 注意力模型中计算邻居重要性的参数。
  • 最终分类器或预测头的参数。

训练时,模型先进行前向传播,得到分类概率、链接分数或图级预测;再根据真实标签计算损失;最后通过反向传播调整这些参数,使预测误差逐渐减小。

因此,GNN 不是简单地“把邻居平均一下”。邻居聚合只是信息流动方式,模型仍然要通过数据学习什么特征重要、不同信息应该如何组合。

常见 GNN 模型有什么区别

GCN

GCN 是 Graph Convolutional Network。它对邻居信息进行经过度数归一化的加权聚合。它的结构简洁,是理解图卷积和半监督节点分类时最常见的起点。

GraphSAGE

GraphSAGE 强调邻居采样和归纳学习。面对很大的图时,它不一定读取全部邻居,而是抽取一部分邻居参与计算,因此更适合大规模场景和未见过的新节点。

GAT

GAT 是 Graph Attention Network。它使用注意力机制为不同邻居分配不同权重。直观上,它允许模型学习“哪些邻居对当前节点更重要”。

GIN

GIN 是 Graph Isomorphism Network。它强调对图结构的区分能力,常用于图分类任务,也是理解 GNN 表达能力时的重要模型。

这些模型的具体公式不同,但共同骨架基本一致:传播邻居信息、更新节点表示,再用学到的表示完成任务。

GNN 可以用在哪里

GNN 的应用并不限于社交网络。只要问题中的对象和关系都重要,就可能适合图建模。

  • 推荐系统:用户、商品及其交互关系。
  • 风险控制:账户、交易和资金流向。
  • 生物医药:分子、蛋白质和相互作用网络。
  • 交通预测:道路、路口和车流关系。
  • 知识图谱:实体、属性和语义关系。
  • 代码分析:变量、函数及调用关系。
  • 论文分析:作者、论文、机构和引用网络。

不过,能画成图并不代表一定要用 GNN。只有当关系结构确实能提供额外信息时,GNN 才可能比普通模型更有价值。

GNN 的常见问题

过平滑

层数太深时,相连节点的表示可能越来越相似,最后难以区分。这叫作 over-smoothing。

过压缩

大量远距离信息被压进固定维度的节点向量时,重要信息可能丢失。这叫作 over-squashing。

大图计算成本

真实图可能包含数百万甚至数十亿条边。完整聚合全部邻居会带来很高的显存和计算开销,因此常常需要采样、分区或小批量训练。

图结构并不总是可靠

边可能存在噪声,也可能随时间变化。如果连接关系本身质量很差,GNN 会传播错误信息。

相连节点不一定相似

很多基础 GNN 假设相邻节点更可能相似,但在欺诈网络、竞争网络等场景中,相邻节点可能恰好不同。这类异配图需要更有针对性的模型。

读 GNN 论文时应该看什么

看到一个新的 GNN 模型,可以先用下面六个问题拆解:

  1. 节点、边和特征分别代表什么?
  2. 每一层从哪些邻居收集信息?
  3. 邻居信息使用什么方法聚合?
  4. 自身信息是否被保留,是否存在残差连接?
  5. 模型最终解决节点级、边级还是图级任务?
  6. 实验提升来自更合理的结构,还是更大的参数量和计算量?

只要能回答这些问题,大多数 GNN 论文的主干就已经被抓住了。

最后总结

GNN 是处理图结构数据的神经网络。它最核心的思想不是某一个固定公式,而是让节点通过连接关系交换信息。

一个节点先收集邻居信息,再与自身信息结合,形成新的表示;多层传播后,表示中逐渐包含更大范围的结构和属性信息;最后,这些表示被用于分类、预测、聚类或推荐。

记住这一句话就够了:

GNN 让每个节点在认识自己的同时,也通过邻居理解自己所处的关系网络。