1. 什么是消息传递(Message Passing)

消息传递(Message Passing)是图神经网络(GNN)的核心思想,它的主要目标是基于图结构更新每个节点的特征表示。简单来说,消息传递包括以下两步:

  1. 消息聚合(Message Aggregation):

    • 每个节点从其邻居节点(通过图的边连接)接收信息(即“消息”),这些信息通常是邻居节点的特征或状态。
    • 通过某种规则(例如求和、平均、最大值等)将这些邻居的消息聚合成一个整体表示。
  2. 特征更新(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. 为什么消息传递是图神经网络的核心

消息传递的核心目标是学习节点的表示,它的作用体现在以下方面:

  1. 利用图结构:直接利用图的边信息,从而建模节点之间的关系。
  2. 聚合邻居信息:将邻居节点的特征结合起来,使节点表示更具语义性。
  3. 迭代多次更新:通过多层消息传递,捕获更高阶的关系信息。
实际例子

在引用网络(Cora 数据集)中:

  • 如果一个节点是论文 ( A ),其初始特征是这篇论文的内容。
  • 通过消息传递机制,这篇论文的特征会融合它引用的论文(邻居节点)的特征,从而了解其研究领域。
  • 经过多层消息传递,这篇论文的特征将融合更高阶邻居(引用的引用)的信息,更准确地表示论文的研究领域。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐