05-GNN的变体与框架-
基本概念
作为深度学习与图数据结合的代表性方法,GCN的出现带动了将神经网络技术运用 于图数据的学习任务中去的一大类方法,为了给出一个涵盖更广范围的定义,一般我们统称这类方法为图神经网络,即Graph Neural Networks(GNN)。
图数据结构的两种“特征”
graph或者network的数据结构,通常是包含着顶点和边的关系。研究目标聚焦在顶点之上,边诉说着顶点之间的关系。

**当然,除了图的结构之外,每个顶点还有自己的特征 $h_i$(通常是一个高维向量)。**它可以使社交网络中每个用户的个体属性;可以是生物网络中,每个蛋白质的性质;还可以使交通路网中,每个交叉口的车流量。
graph上的deep learning方法无外乎就是希望学习上面的两种特征。
GCN的局限性
GCN是处理transductive任务的一把利器(transductive任务是指:训练阶段与测试阶段都基于同样的图结构),然而GCN有两大局限性是经常被诟病的:
**无法完成inductive任务,即处理动态图问题。**inductive任务是指:训练阶段与测试阶段需要处理的graph不同。通常是训练阶段只是在子图(subgraph)上进行,测试阶段需要处理未知的顶点。(unseen node)
处理有向图的瓶颈,不容易实现分配不同的学习权重给不同的neighbor。
GraphSAGE
作用
通过训练聚合节点邻居的函数(卷积层),使GCN扩展成归纳学习任务,对未知节点起到泛化作用。
直推式(transductive)学习:从特殊到特殊,仅考虑当前数据。在图中学习目标是学习目标是直接生成当前节点的embedding,例如
DeepWalk、LINE,把每个节点embedding作为参数,并通过SGD优化,又如GCN,在训练过程中使用图的拉普拉斯矩阵进行计算, 归纳(inductive)学习:平时所说的一般的机器学习任务,从特殊到一般:目标是在未知数据上也有区分性。
区别
GraphSAGE从两个方面对GCN做了改动,一方面是通过采样邻居的策略将GCN由全图(full batch)的训练方式改造成以节点为中心的小批量(mini batch)训练方式,这使得大规模图数据的分布式训练成为可能;另一方面是该算法对聚合邻居的操作进行了拓展,提出了替换GCN操作的几种新的方式。
采样邻居
对于很多实际的业务场景数据而言,图的规模往往是十分巨大的,单张显卡的显存容量很难达到一整张图训练时所需的空间,为此采用小批量的训练方法对大规模图数据的训练进行分布式拓展是十分必要的。
而GraphSAGE从聚合邻居的操作出发,对邻居进行随机采样来控制实际运算时节点k阶子图的数据规模,在此基础上对采样的子图进行随机组合来完成小批量式的训练。
在GCN模型中知道节点在第(k+1)层的特征只与其邻居在k层的特征有关,这种局部性质使得节点在第k层的特征只与自己的k阶子图有关。对于图中的中心节点(橙色节点),假设GCN模型的层数为2,若要想得到其第2层特征,图中所有的节点都需要参与计算。

虽然根据上述阐述,只需要考虑节点的k阶子图就可以完成对节点高层特征的计算,但是对于一个大规模的图数据来说,直接将此思路迁移过来仍然存在以下的两个问题:
子图的节点数存在呈指数级增长的问题。
真实世界中图数据节点的度往往呈现幂律分布,一些节点的度会非常大,并称这样的节点为超级节点,在很多图计算的问题中,超级节点都是比较难处理的对象。在 这里,由于超级节点本身邻居的数目就很大,再加上子图节点数呈指数级增长的问题,这种类型节点高层特征计算的代价会变得更加高昂。
对于上述两种情况的出现,遍历子图的时间代价、模型训练的计算代价与存储代价都 会变得十分不可控。
为此,GraphSAGE使用了非常自然的采样邻居的操作来控制子图发散时的增长率。
具体做法如下:
采样的阶段首先选取一个点,然后随机选取这个点的一阶邻居,再以这些邻居为起点随机选择它们的一阶邻居。例如下图中,要预测 0 号节点,因此首先随机选择 0 号节点的一阶邻居 2、4、5,然后随机选择 2 号节点的一阶邻居 8、9;4 号节点的一阶邻居 11、12;5 号节点的一阶邻居 13、15。

聚合邻居
平均/加和聚合算子
池化聚合算子
算法过程
输入:$图G=(V,E)$;输入特征${x_v,∀v∈B}$;层数$K$;权重矩阵$W^{(k)}$,$∀k∈{1,…,K}$;非线性函数$σ$;聚合操作$Agg^{(k)}$,$∀k∈{1,…,K}$;邻居采样函数$N^{(k)}:v→2^v,∀k∈{1,…,K}$。
输出:所有节点的向量表示$z_v$ ,$v∈B$。

GAT
作用
图神经网络 GNN 把深度学习应用到图结构(Graph)中,其中的图卷积网络 GCN 可以在 Graph 上进行卷积操作。但是 GCN 存在一些缺陷:依赖拉普拉斯矩阵,不能直接用于有向图;模型训练依赖于整个图结构,不能用于动态图;卷积的时候没办法为邻居节点分配不同的权重。
因此 2018 年图注意力网络GAT (Graph Attention Network)被提出,解决 GCN 存在的问题。
GAT 采用了 Attention 机制,可以为不同节点分配不同权重,训练时依赖于成对的相邻节点,而不依赖具体的网络结构,可以用于 inductive 任务。
注意力系数
如何计算注意力系数(attention coefficient):对于顶点$i$,逐个计算它的所有邻居$(j \in N_i)$和它自己之间的相似系数,即$e_{ij}=a([Wh_i||Wh_j]),j\in N_i$。
其中,一个共享参数$W$的线性映射对于顶点的特征进行了增维(一种常见的特征增强方法);$[\cdot][\cdot]$对于顶点$i,j$的变换后的特征进行了拼接;最后$a(\cdot)$把拼接后的高维特征映射到一个实数上。
显然学习顶点$i,j$之间的相关性,就是通过可学习的参数$W$和映射$a(\cdot)$完成的。
对于注意力系数进行归一化:
加权求和
根据计算好的注意力系数,把特征加权求和(aggregate)一下。
其中,$h'_i$就是GAT输出的对于每个顶点$i$的新特征(融合了领域信息),$\sigma(\cdot)$是激活函数。
多注意头/multi-head attention
multi-head attention也可以理解成用了ensemble的方法,毕竟convolution也得靠大量的卷积核才能大显神威!

GraphAttentionLayer
GAT
参数配置
选择合适的GAT模型
迁移数据
训练/测试
扩展阅读
https://baidu-pgl.gz.bcebos.com/pgl-course/lesson_4.pdf
https://qiniu.swarma.org/public/file/ppt/20190411102414.pdf
最后更新于
这有帮助吗?
