这个系列以PyTorch Geometric (PyG)框架为基础介绍图神经网络模型。
- PyTorch Geometric开源地址:https://github.com/rusty1s/pytorch_geometric
- PyTorch Geometric官方文档:https://pytorch-geometric.readthedocs.io/en/latest/
- PyTorch Geometric论文:https://arxiv.org/abs/1903.02428
笔记会主要参考图神经网络模型论文,PyTorch Geometric源码实现,PyTorch Geometric官方文档,PyTorch Geometric官方示例,尽量从原理推导,个人理解说明,代码,训练Demo等角度解释各个图神经网络模型,我会尽我所能讲解清楚。
PyTorch Geometric在论文中表明在引文数据集上测试了框架性能,官方示例中也多次使用了引文数据集,笔记将主要以Cora引文数据集为例,演示多个图神经网络效果。
给定一个图 $$ \mathcal{G}=(X,(I,E)) $$
$X\in\mathbb{R}^{N\times F}$ 表示节点的特征矩阵,$N$为节点的个数,$F$为每个节点的特征数- 用$(I,E)$这种元组形式表示图的稀疏邻接矩阵,$I\in\mathbb{N}^{2\times E}$为边的索引,$E\in\mathbb{R}^{E\times D}$为$D$维的边特征
【说明】
- 以上为一般形式。最简单的图可以没有$E$,即边没有特征值(边上没有属性),但是至少要有$X$和$I$,$X$包含了节点及其特征值(节点上的属性信息),$I$为边的索引(表示节点之间的关系)。如果有其他可用的有价值的的图信息,可以在以上基础上扩展。
- 图神经网络既可以利用网络(图,graph)的结构信息(有节点和节点之间的关系即边表示),又可以利用网络(图,graph)的属性信息(以特征值的方式表示)。其中结构信息是必须要有的,如果没有图结构(主要是边),那么节点之间就是没有关系的或者认为所有节点同属一个集合,这不能称之为图。现实世界中的图结构数据一般都可以比较容易的获取到图的属性信息,实在是没有属性信息,也可以使用节点的度(形式上为对角度矩阵)作为节点的属性信息[1]。度是利用结构信息计算得来的值,此时的图数据形式上具有结构信息和属性信息,实际上只有结构信息,将这种数据喂到图神经网络中,GNNs也只能提取出图数据中高阶的特征。
- 形象地说,网络的属性信息是附着在网络的结构上的。真实世界中的网络一般都有丰富的,可利用的属性信息,能够充分利用网络的属性信息的模型一般都能得到更优质的结果。
- 使用图神经网络的目的是灵活、高效地提取人类难以挖掘的图数据中的高阶特征。
Data
结构中的最重要的三个属性是[x, edge_index, y]
。(x,y)
对应每一个训练实例,x
是图数据的特征矩阵(表征了图的属性信息),y
是图数据的标签矩阵。edge_index
是图数据的边索引,它记录了图数据中哪些节点对之间有关系,表征了图的结构信息。在Tensor形式的数据在图神经网络中向前传播的过程中,按照edge_index
在特征矩阵中对相应的节点对进行操作和计算。
[1] Xinyi Z, Chen L. CAPSULE GRAPH NEURAL NETWORK[J]. 2019: 16. [paper]