消息传递图神经网络

一、引言

我们将学习基于神
经网络的生成节点表征的范式——消息传递范式。消息传递范式是一种聚
合邻接节点信息来更新中心节点信息的范式,它将卷积算子推广到了不规
则数据领域,实现了图与神经网络的连接。此范式包含三个步骤:(1)邻接
节点信息变换、(2)邻接节点信息聚合到中心节点、(3)聚合信息变换。

Pytorch Geometric中的MessagePassing基类

Pytorch Geometric(PyG)提供了MessagePassing基类,它实现了消息传
播的自动处理,继承该基类可使我们方便地构造消息传递图神经网络,我
们只需定义函数 ,即message() 函数,和函数 ,即 update()函数,以
及使用的消息聚合方案,即aggr=“add” 、aggr="mean"或 aggr=“max” 。
这些是在以下方法的帮助下完成的

下方图片展示了基于消息传递范式的生成节点表征的过程:

  1. 在图的最右侧,B节点的邻接节点(A,C)的信息传递给了B,经过信息
    变换得到了B的嵌入,C、D节点同。
  2. 在图的中右侧,A节点的邻接节点(B,C,D)的之前得到的节点嵌入传递
    给了节点A;在图的中左侧,聚合得到的信息经过信息变换得到了A节点
    新的嵌入。3. 重复多次,我们可以得到每一个节点的经过多次信息变换的嵌入。这样
    的经过多次信息聚合与变换的节点嵌入就可以作为节点的表征,可以用
    于节点的分类。
    消息传递图神经网络_第1张图片

GCNconv

GCNConv](https://pytorch-geometric.readthedocs.io/en/latest/modules/nn.html#torch_geometric.nn.conv.GCNConv)继承了MessagePassing并以"求和"作为领域节点信息聚合方式。该层的所有逻辑都发生在其forward()方法中。在这里,我们首先使用torch_geometric.utils.add_self_loops()函数向我们的边索引添加自循环边(步骤1),以及通过调用torch.nn.Linear`实例对节点特征进行线性变换(步骤2)。

归一化系数是由每个节点的节点度得出的,它被转换为每个边的节点度。结果被保存在形状[num_edges,]的张量norm中(步骤3)。

message()函数中,我们需要通过norm对相邻节点特征x_j进行归一化处理。这里,x_j包含每条边的源节点特征,即每个中心节点的邻接。

你可能感兴趣的:(自然语言处理,pytorch)