文章目录
- Spatial-based ConvGNNs 基于空间的卷积
- Neural Network for Graphs (NN4G)
- Contextual Graph Markov Model (CGMM)
- Diffusion Convolutional Neural Network (DCNN)扩散卷积神经网络
- Diffusion Graph Convolution(DGC) 扩散图卷积
- PGC-DGCNN
- Partition Graph Convolution (PGC)
- Message Passing Neural Networks (MPNN) 信息传递神经网络
- Graph Isomorphism Network (GIN) 图同构网络
- GraphSage
- Graph Attention Network (GAT)图注意力网络
- Gated Attention Network (GAAN)-门控注意力网络
- Mixture Model Network (MoNet)
- PATCHY-SAN
- Large-scale Graph Convolution Networks (LGCN)
- 训练效率提升
- 基于谱和基于空间的模型的对比
- 补充:一些开源的GNNs模型
ConvGNNs可分为两类
- 频谱型:基于频谱的方法从图信号处理的角度引入滤波器来定义图卷积(2013,The emerging field of signal processing on graphs:Extending high-dimensional data analysis to networks and other irregular domains),其中图卷积运算被解释为从图信号中去除噪声
- 空间型:基于空间的方法通过信息聚合继承RecGNNs的思想来定义图卷积
图卷积网络GCN(Semi-supervised classification with graph convolutional networks,ICLR 2017)是从谱域来进行推导的,推导过程较为繁琐,但是最终的结论较简洁,在最近两年非常火,但是这种基于谱域的GCN有很大的局限性,比如不能处理有向图,扩展性差,不能处理大图等,目前基于空间的方法因其具有良好的效率、灵活性和通用性,近年来发展迅速。下面介绍一些近两年基于空间的主流图卷积网络。
Spatial-based ConvGNNs 基于空间的卷积
根据传统CNN在图像上的卷积操作,基于空间的GNN基于一个节点的空间关系定义图卷积算子。将图像看作特殊图形式,每个像素代表一个节点,如图1(a)所示,每个像素与附近的像素直接相连,如果用一个3×3窗口取块,每个节点的邻居节点就是其周围的八个像素,将滤波器作用于3×3块,则每个通道中心像素的值就是3×3块内像素的加权平均值。由于相邻结点有固定的顺序,所以可训练权重能够在不同的局部空间共享。如图1(b)所示,对于一般图结构,中心结点的表示也是根据其邻居结点的聚合结果表示。
- (a)2-D卷积。与图类似,将像素中的每个像素作为一个节点,像素的邻居节点由滤波器的大小决定。2-D卷积计算的是由红色节点和其邻居节点像素的加权平均值。节点的邻居都是有序的并且有固定大小
- (b)图卷积。为了得到红色节点的隐式表示,图卷积算子的一个简单方法是取红色节点及其邻居节点的特征的平均值。与图像数据不同,节点的邻居是无序的且大小是可变的
从另一个角度来看,基于空间的ConvGNNs与RecGNNs共享相同的信息传播/消息传递思想。空间图卷积运算实质上是沿着边缘传播节点信息。
Neural Network for Graphs (NN4G)
NN4G是第一个提出的基于空间的ConvGNNs。NN4G通过直接累加节点的邻域信息来实现图的卷积。它还应用剩余连接和跳跃连接来记忆每一层的信息。因此,NN4G的下一层节点状态为
上式也可以写出矩阵的形式
可以看出,形式和GCN类似。主要区别在于NN4G使用了非标准化邻接矩阵,这可能会导致数值不稳定问题。
Contextual Graph Markov Model (CGMM)
CGMM提出了一种基于NN4G的概率模型。在保持空间局部性的同时,CGMM还具有概率可解释性。
Diffusion Convolutional Neural Network (DCNN)扩散卷积神经网络
DCNN将图卷积看作一个扩散过程。它假设信息以一定的转移概率从一个节点转移到相邻的一个节点,使信息分布在几轮后达到均衡。DCNN将扩散图卷积定义为
- 概率转移矩阵通过来计算
- 在DCNN中,隐含表示矩阵和输入特征矩阵具有相同的维度,不是前一层隐含表示矩阵的函数
- DCNN将连接起来最为模型最后的输出
Diffusion Graph Convolution(DGC) 扩散图卷积
由于DCNN扩散过程的平稳分布是概率转移矩阵的幂级数的总和,因此扩散图卷积(Diffusion Graph Convolution, DGC)将每个扩散步骤的输出相加,而不是拼接。它定义扩散图卷积为
利用转移概率矩阵的幂意味着,遥远的邻居对中心节点提供的信息非常少。
PGC-DGCNN
PGC-DGCNN(On filter size in graph convolutional networks ,SSCI 2018)增加了基于最短路径的远距离邻居的贡献。它定义了一个最短路径邻接矩阵。如果从节点到节点的最短路径长度为,则,否则为0。PGC-DGCNN使用超参数控制感受域的大小,引入了一个图卷积操作,如下所示
- 表示两向量连接操作
计算最短路径邻接矩阵的代价可能很高,最大可能为
Partition Graph Convolution (PGC)
PGC(Spatial temporal graph convolutional networks for skeleton-based action recognition,AAAI 2018)根据不局限于最短路径的特定条件将一个节点的邻居划分为组。PGC根据每个组定义的邻域构造邻接矩阵。然后,PGC将不同参数矩阵的GCN应用到每个邻居组,并将结果进行求和:
Message Passing Neural Networks (MPNN) 信息传递神经网络
信息传递神经网络(MPNNs)(Neural message passing for quantum chemistry,ICML 2017)概述了基于空间的卷积神经网络的一般框架。它把图卷积看作一个信息传递过程,信息可以沿着边直接从一个节点传递到另一个节点。MPNN运行K-step消息传递迭代,让信息进一步传播。定义消息传递函数(即空间图卷积)为
- 和是有参数的函数
在得到每个节点的隐含表示后,可以将传递给输出层来执行节点级的预测任务,或者传递给readout函数来执行图级的预测任务。readout函数基于节点隐含表示生成整个图的表示。它通常被定义为
- 表示有参数的readout函数
通过假设、、的不同形式,如GCN、(Convolutional networks on graphs for learning molecular fingerprints,NIPS 2015)、(Molecular graph convolutions: moving beyond fingerprints,2016)、(Quantum-chemical insights from deep tensor neural networks,2017 Nature communications)等,MPNN可以覆盖很多现有的GNN。
Graph Isomorphism Network (GIN) 图同构网络
然而,图同构网络(GIN)发现,MPNN框架下的方法不能根据生成的图embedding来区分不同的图结构。为了修正这个缺点,GIN通过一个可学习的参数调整中心节点的权重。它通过下式来计算图卷积
GraphSage
由于一个节点的邻居数量可能从1个到1000个甚至更多,因此获取一个节点邻居的完整大小是低效的。GraphSage(Inductive representation learning on large graphs,NIPS 2017)引入聚合函数的概念定义图形卷积。聚合函数本质上是聚合节点的邻域信息,需要满足对节点顺序的排列保持不变,例如均值函数,求和函数,最大值函数都对节点的顺序没有要求。图的卷积运算定义为:
- 是一个聚合函数,聚合函数应该不受节点排序(如均值、和或最大值)的影响
- 表示节点的邻居的一个随机采样
GraphSage没有更新所有节点上的状态,而是提出了一种batch训练算法,提高了大型图的可扩展性。GraphSage的学习过程分为三个步骤。首先,对一个节点的K-跳邻居节点取样,然后,通过聚合其邻居节的信息表示中心节点的最终状态,最后,利用中心节点的最终状态做预测和误差反向传播。如图所示k-hop,从中心节点跳几步到达的顶点。
假设在第t-hop取样的邻居个数是,GraphSage一个batch的时间复杂度是。因此随着的增加计算量呈指数增加,这限制了GraphSage朝深入的框架发展。但是实践中,作者发现已经能够获得很高的性能。
Graph Attention Network (GAT)图注意力网络
图注意网络(GAT)(ICLR 2017,Graph attention networks)假设相邻节点对中心节点的贡献既不像GraphSage一样相同,也不像GCN那样预先确定(这种差异如图4所示)。GAT在聚合节点的邻居信息的时候使用注意力机制确定每个邻居节点对中心节点的重要性,也就是权重。定义图卷积操作如下:
表示节点和它的邻居节点之间的连接的权重,通过下式计算
- 是一个LeakReLU**函数
- 是一个可学习的参数向量
softmax函数确保节点的所有邻居的注意权值之和为1。GAT进一步使用multi-head注意力方式,并使用||concat方式对不同注意力节点进行整合,提高了模型的表达能力。这表明在节点分类任务上比GraphSage有了显著的改进。
图4展示了GCN和GAN在聚合邻居节点信息时候的不同。
- (a)图卷积网络GCN(2017,Semi-supervised classification with graph convolutional networks)在聚集过程中很清楚地分配了一个非参数的权重给的邻居
- (b)图注意力网络GAT(ICLR 2017,Graph attention networks)通过端到端的神经网络结构隐式地捕获的权重,以便更重要的节点获得更大的权重。
Gated Attention Network (GAAN)-门控注意力网络
GAAN(Gaan:Gated attention networks for learning on large and spatiotemporal graphs,2018)也利用multi-head注意力的方式更新节点的隐层状态。与GAT为各种注意力设置相同的权重进行整合的方式不同,GAAN引入self-attention机制对每一个head,也就是每一种注意力,计算不同的权重,规则如下:
其中,和表示前馈神经网络,表示第个注意力head的权重。
GeniePath除了在空间上应用了图注意力之外,还提出了一种类似于LSTM的门控机制来控制跨图卷积层的信息流。还有其他一些有趣的图注意模型(Graph classification using structural attention,KDD 18)、(Watch your step: Learning node embeddings via graph attention,NeurIPS,2018)。但是,它们不属于ConvGNN框架。
Mixture Model Network (MoNet)
混合模型网络MoNet(Geometric deep learning on graphs and manifolds using mixture model cnns ,CVPR 2017)采用了一种不同的方法来为一个节点的邻居分配不同的权值。它引入节点伪坐标来确定一个节点与其邻居之间的相对位置。一旦知道了两个节点之间的相对位置,权重函数就会将相对位置映射到这两个节点之间的相对权重。通过这种方式,可以在不同的位置共享图数据过滤器的参数。在MoNet框架下,现有的几种流形处理方法,如Geodesic CNN (GCNN)、Anisotropic CNN (各向异性CNN,ACNN)、Spline CNN,以及针对图的处理方法GCN、DCNN等,都可以通过构造非参数权函数将其推广为MoNet的特殊实例。此外,MoNet还提出了一个具有可学习参数的高斯核函数来自适应地学习权值函数。
PATCHY-SAN
另一种不同的工作方式是根据特定的标准对节点的邻居进行排序,并将每个排序与一个可学习的权重关联起来,从而实现跨不同位置的权重共享。PATCHY-SAN(Learning convolutional neural networks for graphs,ICML 2016)根据每个节点的图标签对邻居排序,并选择最上面的q个邻居。图标记实质上是节点得分,可以通过节点度、中心度、Weisfeiler-Lehman颜色等得到。由于每个节点现在有固定数量的有序邻居,因此可以将图形结构的数据转换为网格结构的数据。PATCHY-SAN应用了一个标准的一维卷积滤波器来聚合邻域特征信息,其中该滤波器的权值的顺序对应于一个节点的邻居的顺序。PATCHY-SAN的排序准则只考虑图的结构,这就需要大量的计算来处理数据。GCNs中利用标准CNN能过保持平移不变性,仅依赖于排序函数。因此,节点选择和排序的标准至关重要。PATCHY-SAN中,排序是基于图标记的,但是图标记值考虑了图结构,忽略了节点的特征信息。
Large-scale Graph Convolution Networks (LGCN)
LGCN(Large-scale learnable graph convolutional networks,SIGKDD 2018)提出了一种基于节点特征信息对节点的邻居进行排序的方法。对于每个节点,LGCN集成其邻居节点的特征矩阵,并沿着特征矩阵的每一列进行排序,排序后的特征矩阵的前k行作为目标节点的输入网格数据。最后LGCN对合成输入进行1D-CNN得到目标节点的隐含输入。PATCHY-SAN中得到图标记需要复杂的预处理,但是LGCN不需要,所以更高效。LGCN提出一个子图训练策略以适应于大规模图场景,做法是将采样的小图作为mini-batch。
训练效率提升
GraphSAGE
通常GCN这样的训练函数需要将整个图数据和所有节点中间状态保存到内存中。特别是当一个图包含数百万个节点时,针对ConvGNNs的full-batch训练算法受到内存溢出问题的严重影响。为了节省内存,GraphSage提出了一种batch训练算法。它将节点看作一棵树的根节点,然后通过递归地进行K步邻域扩展,扩展时保持采样大小固定不变。对于每一棵采样树,GraphSage通过从下到上的层次聚集隐含节点表示来计算根节点的隐含表示。
FastGCN
FastGCN(fast learning with graph convolutional networks via importance sampling,ICLR 2018)对每个图卷积层采样固定数量的节点,而不是像GraphSage那样对每个节点采样固定数量的邻居。它将图卷积理解为节点embedding函数在概率测度下的积分变换。采用蒙特卡罗近似和方差减少技术来简化训练过程。由于FastGCN对每个层独立地采样节点,层之间的连接可能是稀疏的。
AS-GCN
AS-GCN(Adaptive Sampling Towards Fast Graph Representation Learning,NeurIPS 2018)提出了一种自适应分层采样方法,其中下层的节点根据上层节点为条件进行采样。与FastGCN相比,该方法以采用更复杂的采样方案为代价,获得了更高的精度。
StoGCN(或VR-GCN)
StoGCN(Stochastic training of graph convolutional networks with variance reduction,VR-GCN,ICML 2018)的随机训练使用历史节点表示作为控制变量,将图卷积的感知域大小降低到任意小的范围。即使每个节点有两个邻居,StoGCN的性能也不相上下。但是,StoGCN仍然必须保存所有节点中间状态,这对于大型图数据来说是消耗内存的。
注:VR-GCN是ClusterGCN中的叫法。
Cluster-GCN
Cluster-GCN使用图聚类算法对一个子图进行采样,并对采样的子图中的节点执行图卷积。由于邻域搜索也被限制在采样的子图中,所以Cluster-GCN能够同时处理更大的图和使用更深层次的体系结构,用更少的时间和更少的内存。值得注意的是,Cluster-GCN为现有的ConvGNN训练算法提供了时间复杂度和内存复杂度的直接比较。
复杂度对比
下表是ConvGNN训练算法时间和内存复杂度的对比,GCN是进行full-batch训练的baseline方法。GraphSage以牺牲时间效率为代价来节省内存。同时,随着和的增加,GraphSage的时间复杂度和内存复杂度呈指数增长,其中,Sto-GCN的时间复杂度最高,内存瓶颈仍然没有解决。然而,Sto-GCN可以用非常小的实现令人满意的性能。由于没有引入冗余计算,因此Cluster-GCN的时间复杂度与baseline方法相同。在所有的方法中,Cluster-GCN实现了最低的内存复杂度。
| Complexity | GCN | GraphSage | FastGCN | StoGCN | Cluster-GCN |
|---|---|---|---|---|---|
| Time | |||||
| Memory |
- 是所有节点的数量
- 是所有边的数量
- 是网络层数
- 是batch size
- 是每一个节点采样的邻居的数量
- 为简单起见,节点隐含特征的维数保持不变,用表示
基于谱和基于空间的模型的对比
谱模型是图数据处理的理论基础。基于谱的模型作为针对图数据最早期的卷积网络在很多图相关的分析任务种取得了非常好的效果。通过设计新的图信号滤波器(如Cayleynets),理论上可以建立新的卷积神经网络。然而,由于效率、通用性和灵活性等问题,空间模型比谱模型更受欢迎。
效率
基于谱的方法的计算量会随着图的大小急剧增加,因为模型需要同时计算特征向量[[21]或者同时处理大图,这就使得模型很难对大图进行并行处理或缩放。基于空间的图方法由于直接对图域的邻居节点进行聚合,所以有潜力处理大图,方法是对一个batch数据计算而不是在整个图上计算。如果邻居节点的数量增加,能够通过采样技术GraphSage、LGCN[25,28] 提高效率。
通用性
基于谱的图方法假设图是固定的,因此对新的或者不同的图泛化性能很差。基于空间的方法在每个节点上进行局部图卷积,权值可以很容易地在不同地位置和结构之间共享。
灵活性
基于谱的模型只适用于无向图,谱方法用于有向图的唯一方法是将有向图转换为无向图(因为没有有向图的拉普拉斯矩阵明确的定义)。基于空间的模型可以将输入合并到聚合函数中,所以在处理多源输入像是边特征边方向上更灵活。
因此,近年来,基于空间的方法更受关注。
补充:一些开源的GNNs模型
| 模型 | 框架 | GitHub链接 |
|---|---|---|
| GGNN (2015) | torch | https://github.com/yujiali/ggnn |
| ChebNet (2016) | tensorflow | https://github.com/mdeff/cnn_graph |
| GAE (2016) | tensorflow | https://github.com/limaosen0/Variational-Graph-Auto-Encoders |
| Structural RNN (2016) | theano | https://github.com/asheshjain399/RNNexp |
| DRNE (2016) | tensorflow | https://github.com/tadpole/DRNE |
| DNGR (2016) | matlab | https://github.com/ShelsonCao/DNGR |
| SDNE (2016) | python | https://github.com/suanrong/SDNE |
| GCRN (2016) | tensorflow | https://github.com/youngjoo-epfl/gconvRNN |
| 1stChebNet (2017) | tensorflow | https://github.com/tkipf/gcn |
| GraphSage (2017) | tensorflow | https://github.com/williamleif/GraphSAGE |
| GAT (2017) | tensorflow | https://github.com/PetarV-/GAT |
| CNN-GCN,CGCN(2017) | tensorflow | https://github.com/VeritasYin/STGCN_IJCAI-18 |
| CayleyNet (2017) | tensorflow | https://github.com/amoliu/CayleyNet |
| SSE (2018) | C | https://github.com/Hanjun-Dai/steady_state_embedding |
| LGCN (2018) | tensorflow | https://github.com/divelab/lgcn/ |
| DualGCN (2018) | theano | https://github.com/ZhuangCY/DGCN |
| PGC-DGCNN (2018) | pytorch | https://github.com/dinhinfotech/PGC-DGCNN |
| FastGCN (2018) | tensorflow | https://github.com/matenure/FastGCN |
| StoGCN (2018) | tensorflow | https://github.com/thu-ml/stochastic_gcn |
| DGCNN (2018) | torch | https://github.com/muhanzhang/DGCNN |
| DiffPool (2018) | pytorch | https://github.com/RexYing/diffpool |
| SplineCNN (2018) | pytorch | https://github.com/rusty1s/pytorch_geometric |
| ARGA (2018) | tensorflow | https://github.com/Ruiqi-Hu/ARGA |
| GraphRNN (2018) | tensorflow | https://github.com/snap-stanford/GraphRNN |
| DCRNN (2018) | tensorflow | https://github.com/liyaguang/DCRNN |
| ST-GC(2018) | pytorch | https://github.com/yysijie/st-gcn |
| MolGAN (2018) | tensorflow | https://github.com/nicola-decao/MolGAN |
| NetGAN (2018) | tensorflow | https://github.com/danielzuegner/netgan |
| DCRNN (2018) | tensorflow | https://github.com/liyaguang/DCRNN |
| DGI (2019) | pytorch | https://github.com/PetarV-/DGI |
| GIN (2019) | pytorch | https://github.com/weihua916/powerful-gnns |
| Cluster-GCN (2019) | pytorch | https://github.com/benedekrozemberczki/ClusterGCN |
| GraphWaveNet (2019) | pytorch | https://github.com/nnzhan/Graph-WaveNet |
| ASTGCN (2019) | mxnet | https://github.com/Davidham3/ASTGCN |
最后,欢迎加微信进群交流GNN&GCN。