Task02 消息传递图神经网络

参考链接:https://github.com/datawhalechina/team-learning-nlp/blob/master/GNN/Markdown%E7%89%88%E6%9C%AC/4-%E6%B6%88%E6%81%AF%E4%BC%A0%E9%80%92%E5%9B%BE%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C.md

一、引言

消息传递范式是一种聚合邻接节点信息来更新中心节点信息的范式,它将卷积算子推广到了不规则数据领域,实现了图与神经网络的连接。消息传递范式因为简单、强大的特性,于是被人们广泛地使用。遵循消息传递范式的图神经网络被称为消息传递图神经网络。

二、 消息传递范式介绍

下图展示了基于消息传递范式的聚合邻接节点信息来更新中心节点信息的过程:


image-20210516110407207.png
  • 1.图中黄色方框部分展示的是一次邻接节点信息传递到中心节点的过程:B节点的邻接节点(A,C)的信息经过变换后聚合到B节点,接着B节点信息与邻接节点聚合信息一起经过变换得到B节点的新的节点信息。同时,分别如红色和绿色方框部分所示,遵循同样的过程,C、D节点的信息也被更新。实际上,同样的过程在所有节点上都进行了一遍,所有节点的信息都更新了一遍。
  • 2.这样的“邻接节点信息传递到中心节点的过程”会进行多次。如图中蓝色方框部分所示,A节点的邻接节点(B,C,D)的已经发生过一次更新的节点信息,经过变换、聚合、再变换产生了A节点第二次更新的节点信息。多次更新后的节点信息就作为节点表征。

消息传递图神经网络遵循上述的“聚合邻接节点信息来更新中心节点信息的过程”,来生成节点表征。
注(1):神经网络的生成节点表征的操作称为节点嵌入(Node Embedding),节点表征也可以称为节点嵌入。这次学习规定节点嵌入只代指神经网络生成节点表征的操作。
注(2):未经过训练的图神经网络生成的节点表征还不是好的节点表征,好的节点表征可用于衡量节点之间的相似性。通过监督学习对图神经网络做很好的训练,图神经网络才可以生成好的节点表征。
注(3),节点表征与节点属性的区分:遵循被广泛使用的约定,此次学习约定,节点属性data.x是节点的第0层节点表征,第层的节点表征经过一次的节点间信息传递产生第层的节点表征。不过,节点属性不单指data.x,广义上它就指节点的属性,如节点的度等。

三、MessagePassing基类初步分析

Pytorch Geometric(PyG)提供了MessagePassing基类,它封装了“消息传递”的运行流程。通过继承MessagePassing基类,可以方便地构造消息传递图神经网络。构造一个最简单的消息传递图神经网络类,只需定义message()方法()update()方法(),以及使用的消息聚合方案aggr="add"aggr="mean"aggr="max")。

四、MessagePassing子类实例

主要从以下几个步骤实现:

  1. 向邻接矩阵添加自环边。
  2. 对节点表征做线性转换。
  3. 计算归一化系数。
  4. 归一化邻接节点的节点表征。
  5. 将相邻节点表征相加("求和 "聚合)。

步骤1-3通常是在消息传递发生之前计算的。步骤4-5可以使用MessagePassing基类轻松处理。

五、结语

消息传递范式是一种聚合邻接节点信息来更新中心节点信息的范式,它将卷积算子推广到了不规则数据领域,实现了图与神经网络的连接。
该范式包含三个步骤:
(1)邻接节点信息变换;
(2)邻接节点信息聚合到中心节点;
(3)聚合信息变换。
因为简单且强大的特性,消息传递范式现被人们广泛地使用。基于此范式,可以定义聚合邻接节点信息来生成中心节点表征的图神经网络。在PyG中,MessagePassing基类是所有基于消息传递范式的图神经网络的基类,它大大地方便了我们对图神经网络的构建。
要掌握基于MessagePassing基类构建自己的图神经网络类的方法,我们不能仅停留于理论理解层面,还需要通过逐行代码调试,观察代码运行流程,最终掌握对MessagePassing基类的实际应用。

你可能感兴趣的:(Task02 消息传递图神经网络)