3. Graph Attention Networks(GAT)[9]
为了解决GNN聚合邻居节点的时候没有考虑到不同的邻居节点重要性不同的问题,GAT借鉴了Transformer的idea,引入masked self-attention机制,在计算图中的每个节点的表示的时候,会根据邻居节点特征的不同来为其分配不同的权值。
具体的,对于输入的图,一个graph attention layer如图9所示,
图9
其中 采用了单层的前馈神经网络实现,计算过程如下(注意权重矩阵 对于所有的节点是共享的):
计算完attention之后,就可以得到某个节点聚合其邻居节点信息的新的表示,计算过程如下:
为了提高模型的拟合能力,还引入了多头的self-attention机制,即同时使用多个 计算self-attention,然后将计算的结果合并(连接或者求和):
此外,由于GAT结构的特性,GAT无需使用预先构建好的图,因此GAT既适用于Transductive Learning,又适用于Inductive Learning。
那么GAT的具体效果如何呢?作者分别在三个Transductive Learning和一个Inductive Learning任务上进行实验,实验结果如下:
无论是在Transductive Learning还是在Inductive Learning的任务上,GAT的效果都要优于传统方法的结果。
至此,GAT的介绍完毕,我们来总结一下,GAT的一些优点,
(1)训练GCN无需了解整个图结构,只需知道每个节点的邻居节点即可
(2)计算速度快,可以在不同的节点上进行并行计算
(3)既可以用于Transductive Learning,又可以用于Inductive Learning,可以对未见过的图结构进行处理
(仍然是简单的idea,解决了问题,效果还好!!!)
到此,我们就介绍完了GNN中最经典的几个模型GCN、GraphSAGE、GAT,接下来我们将针对具体的任务类别来介绍一些流行的GNN模型与方法。
四、无监督的节点表示学习(Unsupervised Node Representation)
由于标注数据的成本非常高,如果能够利用无监督的方法很好的学习到节点的表示,将会有巨大的价值和意义,例如找到相同兴趣的社区、发现大规模的图中有趣的结构等等。
图10
这其中比较经典的模型有GraphSAGE、Graph Auto-Encoder(GAE)等,GraphSAGE就是一种很好的无监督表示学习的方法,前面已经介绍了,这里就不赘述,接下来将详细讲解后面两个。
Graph Auto-Encoder(GAE)[10]
在介绍Graph Auto-Encoder之前,需要先了解自编码器(Auto-Encoder)、变分自编码器(Variational Auto-Encoder),具体可以参考[11],这里就不赘述。
理解了自编码器之后,再来理解变分图的自编码器就容易多了。如图11输入图的邻接矩阵和节点的特征矩阵,通过编码器(图卷积网络)学习节点低维向量表示的均值和方差,然后用解码器(链路预测)生成图。
图11
编码器(Encoder)采用简单的两层GCN网络,解码器(Encoder)计算两点之间存在边的概率来重构图,损失函数包括生成图和原始图之间的距离度量,以及节点表示向量分布和正态分布的KL-散度两部分。具体公式如图12所示:
图12
另外为了做比较,作者还提出了图自编码器(Graph Auto-Encoder),相比于变分图的自编码器,图自编码器就简单多了,Encoder是两层GCN,Loss只包含Reconstruction Loss。
那么两种图自编码器的效果如何呢?作者分别在Cora、Citeseer、Pubmed数据集上做Link prediction任务,实验结果如下表,图自编码器(GAE)和变分图自编码器(VGAE)效果普遍优于传统方法,而且变分图自编码器的效果更好;当然,Pumed上GAE得到了最佳结果。可能是因为Pumed网络较大,在VGAE比GAE模型复杂,所以更难调参。
五、Graph Pooling
Graph pooling是GNN中很流行的一种操作,目的是为了获取一整个图的表示,主要用于处理图级别的分类任务,例如在有监督的图分类、文档分类等等。
图13
Graph pooling的方法有很多,如简单的max pooling和mean pooling,然而这两种pooling不高效而且忽视了节点的顺序信息;这里介绍一种方法:Differentiable Pooling (DiffPool)。
1.DiffPool[12]
在图级别的任务当中,当前的很多方法是将所有的节点嵌入进行全局池化,忽略了图中可能存在的任何层级结构,这对于图的分类任务来说尤其成问题,因为其目标是预测整个图的标签。针对这个问题,斯坦福大学团队提出了一个用于图分类的可微池化操作模块——DiffPool,可以生成图的层级表示,并且可以以端到端的方式被各种图神经网络整合。
DiffPool的核心思想是通过一个可微池化操作模块去分层的聚合图节点,具体的,这个可微池化操作模块基于GNN上一层生成的节点嵌入 以及分配矩阵 ,以端到端的方式分配给下一层的簇,然后将这些簇输入到GNN下一层,进而实现用分层的方式堆叠多个GNN层的想法。(图14)
图14
那么这个节点嵌入和分配矩阵是怎么算的?计算完之后又是怎么分配给下一层的?这里就涉及到两部分内容,一个是分配矩阵的学习,一个是池化分配矩阵。
- 分配矩阵的学习
这里使用两个分开的GNN来生成分配矩阵 和每一个簇节点新的嵌入 ,这两个GNN都是用簇节点特征矩阵 和粗化邻接矩阵 作为输入,
- 池化分配矩阵
计算得到分配矩阵 和每一个簇节点新的嵌入 之后,DiffPool层根据分配矩阵,对于图中的每个节点/簇生成一个新的粗化的邻接矩阵 与新的嵌入矩阵 ,
总的来看,每层的DiffPool其实就是更新每一个簇节点的嵌入和簇节点的特征矩阵,如下公式:
至此,DiffPool的基本思想就讲完了。那么效果如何呢?作者在多种图分类的基准数据集上进行实验,如蛋白质数据集(ENZYMES,PROTEINS,D&D),社交网络数据集(REDDIT-MULTI-12K),科研合作数据集(COLLAB),实验结果如下:
其中,GraphSAGE是采用全局平均池化;DiffPool-DET是一种DiffPool变体,使用确定性图聚类算法生成分配矩阵;DiffPool-NOLP是DiffPool的变体,取消了链接预测目标部分。总的来说,DiffPool方法在GNN的所有池化方法中获得最高的平均性能。
为了更好的证明DiffPool对于图分类十分有效,论文还使用了其他GNN体系结构(Structure2Vec(s2v)),并且构造两个变体,进行对比实验,如下表:
可以看到DiffPool的显著改善了S2V在ENZYMES和D&D数据集上的性能。
而且DiffPool可以自动的学习到恰当的簇的数量。
至此,我们来总结一下DiffPool的优点,
(1)可以学习层次化的pooling策略
(2)可以学习到图的层次化表示
(3)可以以端到端的方式被各种图神经网络整合
然而,注意到,DiffPool也有其局限性,分配矩阵需要很大的空间去存储,空间复杂度为 , 为池化层的层数,所以无法处理很大的图。
参考
- 【1】^Graph Neural Networks: A Review of Methods and Applications. arxiv 2018https://arxiv.org/pdf/1812.08434.pdf
- 【2】^A Comprehensive Survey on Graph Neural Networks. arxiv 2019.https://arxiv.org/pdf/1901.00596.pdf
- 【3】^Deep Learning on Graphs: A Survey. arxiv 2018.https://arxiv.org/pdf/1812.04202.pdf
- 【4】^GNN papershttps://github.com/thunlp/GNNPapers/blob/master/README.md
- 【5】^Semi-Supervised Classification with Graph Convolutional Networks(ICLR2017)https://arxiv.org/pdf/1609.02907
- 【6】^如何理解 Graph Convolutional Network(GCN)?https://www.zhihu.com/question/54504471
- 【7】^GNN 系列:图神经网络的“开山之作”CGN模型 https://mp.weixin.qq.com/s/jBQOgP-I4FQT1EU8y72ICA
- 【8】^Inductive Representation Learning on Large Graphs(2017NIPS)https://cs.stanford.edu/people/jure/pubs/graphsage-nips17.pdf
- 【9】^Graph Attention Networks(ICLR2018)https://arxiv.org/pdf/1710.10903
- 【10】^Variational Graph Auto-Encoders(NIPS2016)https://arxiv.org/pdf/1611.07308
- 【11】^VGAE(Variational graph auto-encoders)论文详解https://zhuanlan.zhihu.com/p/78340397
- 【12】^Hierarchical Graph Representation Learning withDifferentiable Pooling(NIPS2018)https://arxiv.org/pdf/1806.08
本文亮点总结
1.GCN的缺点也是很显然易见的,第一,GCN需要将整个图放到内存和显存,这将非常耗内存和显存,处理不了大图;第二,GCN在训练时需要知道整个图的结构信息(包括待预测的节点)
2.GraphSAGE的优点:
(1)利用采样机制,很好的解决了GCN必须要知道全部图的信息问题,克服了GCN训练时内存和显存的限制,即使对于未知的新节点,也能得到其表示
(2)聚合器和权重矩阵的参数对于所有的节点是共享的
(3)模型的参数的数量与图的节点个数无关,这使得GraphSAGE能够处理更大的图
(4)既能处理有监督任务也能处理无监督任务
3.GAT的优点:
(1)训练GCN无需了解整个图结构,只需知道每个节点的邻居节点即可
(2)计算速度快,可以在不同的节点上进行并行计算
(3)既可以用于Transductive Learning,又可以用于Inductive Learning,可以对未见过的图结构进行处理