作者 | 黄海兵
来源 | https://www.zhihu.com/people/huang-hai-bing-27
编辑 | 海边的拾遗者公众号
本文仅作学术交流,如有侵权,请联系后台删除
图神经网络是最近AI领域最热门的话题之一,所以写点笔记督促自己学习呀。
01
图神经网络介绍
CNN跟RNN在解决欧式空间数据上取得了很大成功(比如图像跟文本),但是现实世界中很多图结构的数据它们却不能很好的解决(比如社交网络、用户购物网络),然后图神经网络的出现让这些图结构的数据也能得到较好的建模。
数据结构及算法中常用节点V跟边E进行图G结构的表示。G=(V,E),而神经网络的兴起(万物皆可embedded),将图表示转换为低维向量表示了。
图神经网络(Graph Neural Network,GNN):图神经网络是一种直接作用于图结构上的神经网络。
异质图(Heterogeneous Graphs,HetG):包括多种类型的图结构,相应的同质图中只有一种类型的节点和边。异质图说白了就是将不同属性的数据合到一起,加入更多的语义信息数据。下图1给出了一个异质图的示例(左一:演员-电影-导演图 中间图:学术会议图 右一:用户-商品图)。
图1:异构图示例
图2:异质图网络处理方法
爱思考的同学会发现图神经网络跟知识图谱很像,那他们有什么联系呢?
图神经网络跟知识图谱都是以图的形式进行表示,都是为了得到节点的分布式表示。但是他们的原理方法上有点不一样:图神经网络受到word2vec中由中心词预测上下文的启发,图神经网络的表示学习通常有两个基本目标。一是在低维空间中学习到的表征可以重构出原有网络结构。第二个目标是学习到的表征可以有效地支持网络推断。在应用上主要侧重度量图结构信息,为具体任务提供输入信息,比如节点分类、链路预测,这里以DeepWalk为代表。
而知识图谱是受到word2vec能自动发现implicit relation的启发(king-man=quene-women),重点在学习图数据时强调的是节点跟关系的表示,这里以trans系列(TransE,TransR,TransH)为代表。知识图谱在应用更关注于关系建模。但是两中方法也可以互相借鉴的。
这里给出四种典型的图神经网络的结构:
图3:图神经网络分类
GraphSAGE[4]:这个网络是Stanford的SNAP的成果,引用原文
GraphSAGE is a framework for inductive representation learning on large graphs. GraphSAGE is used to generate low-dimensional vector representations for nodes, and is especially useful for graphs that have rich node attribute information.
GCN[5]:图卷积神经网络:我们知道CNN很适合处理图像数据,其实还有很多数据跟图像很相似,比如社交网络。所以想要借鉴CNN的思想对拓扑图进行表示。GCN的本质目的就是用来提取拓扑图的空间特征。这里推荐这个博客[6],讲GCN比较通俗易懂。
GAT[7]: GRAPH ATTENTION NETWORKS,用Attention的思想对图进行表示,这里可以看一下用GAT思想做推荐的一个模型KGAT[8]。
PPNP[9]:personalized propagation of neural predictions
02
介绍几种比较典型的异质图网络
如作者 @Houye 所述,HAN也遵循经典的异质图神经网络架构(节点级别聚合与语义级别聚合),为了更好的实现层次聚合函数,HAN利用语义级别注意力和节点级别注意力来同时学习元路径与节点邻居的重要性,,并通过相应地聚合操作得到最终的节点表示。这是一个很自然的想法,因为节点邻居的重要性或者是元路径的重要性肯定是有所差异的。如果能捕获这种差异性应该能带来一定的提升. 模型整体架构如下图4所示:
图4:HAN模型整体架构
节点级别注意力:
图4.1:HAN模型节点聚合
语意级别注意力:
图4.2:HAN模型语意聚合
HAN模型监督训练及预测:
图4.3:HAN模型监督训练与预测
HAN模型在节点分类任务下的实验结果:
图4.4:HAN模型分类实验结果
图4.5:HAN模型聚合实验结果
数据及代码:https://github.com/Jhy1993/HAN
如作者 @Houye 所述,与HAN不同, 本文的HetGNN没有考虑节点级别的注意力,而是用了LSTM作为来聚合某种关系下的节点邻居并更新节点表示。这里的邻居选择也有所不同:通过random walk with restart来选择固定数量的邻居。
图5:HetGNND模型结构
HetGNN的实验结果
图5.1:HetGNN实验结果
代码及数据:https://github.com/chuxuzhang/KDD2019_HetGNN
03
应用
04
总结一下
参考文献: