最近,深度学习领域关于图神经网络(Graph Neural Networks,GNN)的研究热情日益高涨,图神经网络已经成为各大深度学习顶会的研究热点,包括社交网络,知识图,推荐系统,甚至生命科学。GNN在对图中节点之间的依赖关系建模方面的强大功能使得与图分析相关的研究领域取得了突破。GNN处理非结构化数据时的出色能力使其在网络数据分析、推荐系统、物理建模、自然语言处理和图上的组合优化问题方面都取得了新的突破。

本文旨在介绍图形神经网络的基础知识和两种更高级的算法,DeepWalk和GraphSage。

一 图

在我们学习GNN之前,让我们先了解一下图是什么。在计算机科学中,图是由两个组成部分组成的数据结构,即顶点和边缘。图G可以通过顶点集V和它包含的边E来进行描述。

图表示学习的主要目标是:将结点映射为向量表示的时候尽可能多地保留图的拓扑信息。图表示学习主要分为基于图结构的表示学习基于图特征的表示学习

gnn图神经网络实战 gnn图神经网络图像识别_gnn图神经网络实战

 

图由顶点(Vertex)和连接顶点的边(Edge)构成,边可以是有向的或无向的,这取决于顶点之间是否存在方向依赖关系。

顶点和边之间的关系可以用邻接矩阵(A)表示,两个顶点间有边标识为1,否则为0。

如上图所示,图G=(V,E)其中 V={v1,v2,v3,v4,v5},E={(v1,v2),(v1,v3),(v2,v4),(v3,v4),(v4,v5)}

 

二 GNN 图神经网络

图神经网络是一种直接作用于图结构上的神经网络。GNN比较经典的是这篇《The Graph Neural Network Model》

GNN的一个典型应用是节点分类。本质上,图中的每个节点都与一个标签相关联,我们希望在没有ground-truth的情况下预测节点的标签。本节将说明本文中描述的算法。第一个提出的GNN常常被称为原始GNN。

在节点分类问题设置中,每个节点v的特征是x_v,并与一个ground-truth标签t_v关联。给定一个部分标记的图G,目标是利用这些标记的节点来预测未标记的标签。它学习用一个d维向量(状态)h_v表示每个节点,其中包含其邻域的信息。具体地说,

gnn图神经网络实战 gnn图神经网络图像识别_DeepWalk_02

其中x_co[v]表示与v相连的边的特征,h_ne[v]表示与v相邻节点的嵌入,x_ne[v]表示与v相邻节点的特征。函数f是将这些输入投射到d维空间的转换函数。因为我们正在为h_v寻找一个惟一的解,所以我们可以应用Banach定点定理并将上面的等式重写为迭代更新过程。这种操作通常称为消息传递邻居聚合

gnn图神经网络实战 gnn图神经网络图像识别_gnn图神经网络实战_03

H和X分别表示所有H和X的级联。

通过将状态h_v和特征x_v传递给输出函数g来计算GNN的输出。

gnn图神经网络实战 gnn图神经网络图像识别_gnn图神经网络实战_04

这里的f和g都可以解释为前馈全连接神经网络。L1损失可以直接表述为:

gnn图神经网络实战 gnn图神经网络图像识别_DeepWalk_05

可以通过梯度下降来优化。

然而,有文章指出,GNN的这一原始方法存在三个主要限制:

  1. 如果放松“不动点”的假设,就有可能利用多层感知器来学习更稳定的表示,并消除迭代更新过程。这是因为,在原方案中,不同的迭代使用相同的转换函数f的参数,而MLP不同层中不同的参数允许分层特征提取。
  2. 它不能处理边缘信息(例如,知识图中不同的边缘可能表示节点之间不同的关系)
  3. 不动点会阻碍节点分布的多样化,因此可能不适合学习表示节点。

三 DeepWalk

DeepWalk是第一个提出以无监督方式学习节点嵌入的算法。就训练过程而言,它非常类似于单词嵌入。其动机是图中节点和语料库中单词的分布遵循幂律,如下图所示:

gnn图神经网络实战 gnn图神经网络图像识别_gnn图神经网络实战_06

DeepWalk采用了Random walk的思想进行结点采样。首先根据用户的行为构建出一个图网络;随后通过Random walk随机采样的方式构建出结点序列(例如:一开始在A结点,A->B,B又跳到了它的邻居结点E,最后到F,得到"A->B->E->F"序列);对于序列的问题就是NLP中的语言模型,因为我们的句子就是单词构成的序列。接下来我们的问题就变成Word2vec(词用向量表示)的问题,采用Skip-gram的模型来得到最终的结点向量。可以说这种想法确实是十分精妙,将图结构转化为序列问题确实是非常创新的出发点。在这里,结点走向其邻居结点的概率是均等的。当然,在有向图和无向图中,游走的方式也不一样。无向图中的游走方式为相连即可走;而有向图中则是只沿着“出边”的方向走。

gnn图神经网络实战 gnn图神经网络图像识别_gnn图神经网络实战_07

上图出自阿里Embedding实践paper:Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba

在随机游走的每个时间步长上,下一个节点均匀地从前一个节点的邻居中采样。然后将每个序列截断为长度2|w| + 1的子序列,其中w表示skip-gram的窗口大小。

本文采用层次softmax 算法,解决了节点数量大、计算量大的softmax问题。要计算每个单独输出元素的softmax值,我们必须计算所有元素k的所有e^xk。

gnn图神经网络实战 gnn图神经网络图像识别_gnn图神经网络实战_08

因此,原始softmax的计算时间为O(|V|),其中V表示图中顶点的集合。

层次softmax利用二叉树来处理该问题。在这个二叉树中,所有的叶子(上图中的v1 v2…v8)都是图中的顶点。在每个内部节点中,都有一个二进制分类器来决定选择哪条路径。要计算给定顶点v_k的概率,只需计算从根节点到左节点的路径上的每个子路径的概率v_k。由于每个节点的子节点的概率之和为1,所以所有顶点的概率之和等于1的性质在层次softmax中仍然成立。现在一个元素的计算时间减少到O(log|V|),因为二叉树的最长路径以O(log(n))为界,其中n是叶子的数量。

gnn图神经网络实战 gnn图神经网络图像识别_GNN_09

经过DeepWalk GNN的训练,模型学习到每个节点的良好表示,如下图所示。不同的颜色表示输入图中不同的标签。我们可以看到,在输出图中(2维嵌入),具有相同标签的节点聚集在一起,而具有不同标签的大多数节点被正确地分离。

gnn图神经网络实战 gnn图神经网络图像识别_GNN_10

然而,DeepWalk的主要问题是它缺乏泛化的能力。每当一个新节点出现时,它都必须对模型进行重新训练,才可以表示这个节点。因此,这种GNN不适用于图中节点不断变化的动态图。

四 GraphSage

GraphSage提供解决上述问题的解决方案,以归纳方式学习每个节点的嵌入。具体而言,每个节点由其邻域的聚合表示。因此,即使在训练时间期间看不到的新节点出现在图中,它仍然可以由其相邻节点正确地表示。

具体实现中,训练时它仅仅保留训练样本到训练样本的边,然后包含Sample和Aggregate两大步骤,Sample是指如何对邻居的个数进行采样,Aggregate是指拿到邻居节点的embedding之后如何汇聚这些embedding以更新自己的embedding信息。下图展示了GraphSAGE学习的一个过程,

gnn图神经网络实战 gnn图神经网络图像识别_结点_11

第一步,对邻居采样

第二步,采样后的邻居embedding传到节点上来,并使用一个聚合函数聚合这些邻居信息以更新节点的embedding

第三步,根据更新后的embedding预测节点的标签

网络的层数可以理解为需要最大访问的邻居的跳数(hops),比如在上图中,红色节点的更新拿到了它一、二跳邻居的信息,那么网络层数就是2。为了更新红色节点,首先在第一层(k=1),我们会将蓝色节点的信息聚合到红色解节点上,将绿色节点的信息聚合到蓝色节点上。在第二层(k=2)红色节点的embedding被再次更新,不过这次用到的是更新后的蓝色节点embedding,这样就保证了红色节点更新后的embedding包括蓝色和绿色节点的信息,也就是两跳信息。

 

五 为何基于mean、max aggregate的GNN不够强大

mean和max 无法区分哪些结构

节点v和v'为中心节点,通过聚合邻居特征生成embeddind,分析不同aggregate设置下是否能区分不同的结构(如果能捕获不同结构,二者的embedding应该不一样)

设红绿蓝色节点特征值分别为r,g,b,不考虑combine

gnn图神经网络实战 gnn图神经网络图像识别_GNN_12

gnn图神经网络实战 gnn图神经网络图像识别_gnn图神经网络实战_13

结论:由于mean和max-pooling 函数 不满足单射性,无法区分某些结构的图,故性能会比sum差一点。

sum, mean, max 分别可以捕获什么信息?

三种不同的aggregate

  • sum:学习全部的标签以及数量,可以学习精确的结构信息
  • mean:学习标签的比例(比如两个图标签比例相同,但是节点有倍数关系),偏向学习分布信息
  • max:学习最大标签,忽略多样,偏向学习有代表性的元素信息

gnn图神经网络实战 gnn图神经网络图像识别_gnn图神经网络实战_14

基于对 graph分类,证明了 sum 比 mean 、max 效果好,但是不能说明在node 分类上也是这样的效果,另外可能优先场景会更关注邻域特征分布,或者代表性, 故需要都加入进来实验。

 

参考:

https://towardsdatascience.com/a-gentle-introduction-to-graph-neural-network-basics-deepwalk-and-graphsage-db5d540d50b3

https://zhuanlan.zhihu.com/p/136521625

How Powerful are Graph Neural Networks? GIN 图同构网络 ICLR 2019 论文详解