消息传递——GNN图神经网络核心思想
消息传递(Message Passing)是图神经网络(GNN)的核心思想,它的主要目标是基于图结构更新每个节点的特征表示。简单来说,消息传递包括以下两步:每个节点从其邻居节点(通过图的边连接)接收信息(即“消息”),这些信息通常是邻居节点的特征或状态。通过某种规则(例如求和、平均、最大值等)将这些邻居的消息聚合成一个整体表示。将聚合后的邻居信息与当前节点自身的特征结合起来(例如加权求和、非线性变
1. 什么是消息传递(Message Passing)
消息传递(Message Passing)是图神经网络(GNN)的核心思想,它的主要目标是基于图结构更新每个节点的特征表示。简单来说,消息传递包括以下两步:
-
消息聚合(Message Aggregation):
- 每个节点从其邻居节点(通过图的边连接)接收信息(即“消息”),这些信息通常是邻居节点的特征或状态。
- 通过某种规则(例如求和、平均、最大值等)将这些邻居的消息聚合成一个整体表示。
-
特征更新(Feature Update):
- 将聚合后的邻居信息与当前节点自身的特征结合起来(例如加权求和、非线性变换),更新当前节点的特征表示。
在 GNN 中,每次消息传递后,每个节点的特征都会融合更多的邻居信息,从而逐步捕获高阶(远邻)的图结构信息。

2. 为什么要进行消息传递?
消息传递的目的是 利用图结构和节点特征来学习更好的节点表示或图表示,主要原因如下:
(1) 节点信息是局部的,需要通过消息传递获取邻居信息
- 在图数据中,每个节点的初始特征通常无法直接提供全局语义。例如,在一个学术引用网络中,单靠某篇论文的特征(如标题、内容等)很难判断该论文的研究领域;但通过引用关系(图的边),可以聚合邻居论文的信息,从而更全面地了解该论文的研究领域。
(2) 捕获图的结构信息
- 图中的节点并不是孤立的,它们通过边连接形成了复杂的结构关系。消息传递通过聚合邻居信息,可以捕获这些结构关系,并将其融入到节点的特征中。
(3) 融合高阶关系的信息
- 单次消息传递只能捕获直接邻居的信息。通过多次消息传递,每个节点可以融合来自两阶邻居、三阶邻居甚至更远邻居的信息,从而学习更全局的特征表示。
3. 具体的消息传递过程
在GCN中,消息传递过程一般如下:
(1) 消息发送(Message Sending)
- 每个节点根据自身的特征,向其邻居节点发送一条“消息”。在代码中,这通常是邻居节点特征的传播。
(2) 消息聚合(Message Aggregation)
- 每个节点从它的邻居接收到的消息,会被聚合成一个统一的表示。常用的方法包括:
- 求和(Sum): 将邻居节点的消息直接相加。
- 平均值(Mean): 将邻居节点的消息取平均值。
- 最大值(Max): 取邻居节点消息的最大值。
- 自定义聚合规则。
(3) 特征更新(Feature Update)
- 聚合后的邻居信息与当前节点自身的特征结合起来,通过某种方式(例如线性变换 + 非线性激活函数)更新当前节点的特征。
(4) 归一化(Normalization)
- 为了避免度较大的节点在聚合过程中对结果的影响过大,通常会对聚合的结果进行归一化。例如在 GCN 中采用 ( D{-1/2}AD{-1/2} ) 的方式进行归一化处理。
4. GCN 中的消息传递
以代码中的 GCNConv 类为例,以下是消息传递的实现细节:
(1) 消息发送
代码中的 propagate 方法会自动将特征矩阵 ( x ) 按边索引 ( \text{edge_index} ) 的关系进行分发:
out = self.propagate(edge_index, x=x, norm=norm)
这一步中,节点 ( i ) 的特征 ( x_i ) 会被发送到其所有邻居节点 ( j )。
(2) 消息聚合
消息传递中会调用 message 函数,该函数定义了消息的聚合规则:
def message(self, x_j, norm):
return norm.view(-1, 1) * x_j
在这里,消息聚合通过邻接矩阵的归一化系数 ( \text{norm} ) 对邻居节点特征 ( x_j ) 进行加权,并将结果累加到目标节点。
(3) 特征更新
每个节点的聚合结果与自己的特征进行结合,并加上偏置项,更新特征:
return out + self.bias
这样,节点特征就包含了邻居节点的特征信息。
5. 为什么消息传递是图神经网络的核心
消息传递的核心目标是学习节点的表示,它的作用体现在以下方面:
- 利用图结构:直接利用图的边信息,从而建模节点之间的关系。
- 聚合邻居信息:将邻居节点的特征结合起来,使节点表示更具语义性。
- 迭代多次更新:通过多层消息传递,捕获更高阶的关系信息。
实际例子
在引用网络(Cora 数据集)中:
- 如果一个节点是论文 ( A ),其初始特征是这篇论文的内容。
- 通过消息传递机制,这篇论文的特征会融合它引用的论文(邻居节点)的特征,从而了解其研究领域。
- 经过多层消息传递,这篇论文的特征将融合更高阶邻居(引用的引用)的信息,更准确地表示论文的研究领域。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)