浅层的node2vec的方法相当于一个单层的映射关系,存在许多局限性。例如不同的节点之间没有共享的参数,所有节点都有自己单独的embedding,导致模型的泛化能力不好,只能针对训练中给定的图的节点。因此需要更复杂有效的深层网络来应对实际场景中复杂多变的图网络。
一、图的深度学习基础
1. 符号
表示图的点集 表示图的邻接矩阵( 表示存在从点 到点 的边) 为表征节点特征的向量组成的矩阵。每列表示一个节点,例如关注节点的颜色,则节点的特征向量可以表示为以RGB方式表示的三维向量。如果没有特殊的特征需要关注,则可以使用 one-hot 编码的方式进行表示
2. 思路
基本的思路是,以一个节点为中心的局部的网络结构影响这个节点的特征,因此需要基于这个局部网络和节点自身产生对节点的最终表示向量。其中,其邻接点的信息可以用深度神经网络进行整合,将得到的结果以一定的方式和节点自身结合,从而得出最终的表示向量。例如对于以下的图,我们想对节点 A 进行 embedding,得到它的表示向量:
则首先需要考虑 B、C、D 对 A 的影响。如果需要知道更长远的影响,则还需要考虑 B、C、D 的邻居对 A 的影响,即 F、E 对 A 的影响。假设我们只考虑两层的深度(注意这里的深度不是神经网络的深度,而是指考虑多少层邻居),则得到 A 的表示向量的过程如下图所示:
这其中,
从这张图就可以看出,对网络的优化可以有四个方面:
- 正方形中的网络结构
- 将邻接点的表示向量整合成正方形中网络输入的方法
- 正方形中网络输出与节点自身的表示向量的结合方法
- 每层中节点自身的表示向量的选取
得到了最后的 embedding 之后,就可以用于一系列的任务,例如过一个全连接层,再加上一个 softmax 进行节点的分类;用节点 embedding 的 cos similarity 预测两个节点间是否有边。
3. 公式
有了以上的原理,很明显实现的过程可以用递归的方法进行。这里以取平均值的方式对邻居的向量进行处理,方块中的神经网络取最简单的全连接层。假设当前想要得到节点
可以看到实际上
二、图卷积网络(Graph Convolutional Networks,GCN)
在上一部分的基础上,令
:邻接矩阵加上单位阵,即给每个节点加上自环, : 的度矩阵,为对角阵, , 次在此处的作用是使矩阵对角元素同变换为原来的 次 :层 的参数矩阵 :激活函数,例如sigmoid或者ReLU
注意
三、图注意力网络(Graph Attention Networks,GAT)
为图神经网络添加注意力机制的想法来源于递归的式子:
具体而言,以
参考文献
[1] Stanford CS224W: Machine Learning with Graphs,Lecture 8 - Graph Neural Networks
[2] Semi-Supervised Classification with Graph Convolutional Networks (ICLR 2017, Thomas)
v1.5.2