图神经网络
图神经网络
Notations
- 表示图; 表示点集。
- 表示邻接矩阵。
- :包含所有节点特征的矩阵,每个节点的特征是一个 维的向量。
- :表示一个点。 表示节点 的所有邻居。
GCN
ReCap: Node Embeddings
图神经网络的目标是得到节点的特征表示(feature representation) / 节点嵌入(embedding),这是一个表示学习问题:从数据中提取最少的必要信息。
- 低维:向量维度远小于节点数。
- 连续:每个元素都是实数。
- 稠密:每个元素都不为 0。
A Naive Approach
将邻接矩阵和特征合并在一起应用在神经网络上?
- 需要 的参数,一方面过多,另一方面会过拟合(over-fitting)。
- 训练出来的神经网络不适用于不同大小的图,没有泛化能力。
- 对节点顺序敏感——我们需要一个即使改变节点顺序,结果也不会变的模型。

这就是我们即将介绍的 GCN 和 GraphSAGE。
?
图卷积网络(graph convolutional network = GCN):将作用在图片/网格上的卷积神经网络(convolutional neural network) 泛化到图上。


我们通过邻居聚合(aggregation) 的方法取代 CNN 中的 filter 来得到节点的嵌入表示。常见的聚合方式有 sum/average/min 等。

相比于 CNN,我们 GCN 的聚合方法需要满足置换不变性(permutation invariant),我们称我们需要学习的函数 是置换不变函数(permutation invariant function)。
在每一层的迭代中,所有节点共用的是同一个神经网络(共用同一组参数):

这里我们的计算图(compute graph) 可以是任意层数(不是说多层感知器的层数)的,我们一般选择一个有限的常数 ,只跑 层(即只考虑了 -邻域)。
- 在实际的网络中,取一个 较小的值时已经得到了足够多的信息,这就是著名的六度空间理论。
- 如果选择的 过大,还可能出现过平滑(over-smoothing) 的问题,即所有的节点都输出了同样的结果。

是第 层节点 的隐藏表示向量。在第 层我们需要训练学习得到的权重参数为 (邻域节点聚合的权重)和 (节点自身的权重)

Matrix Formulation
许多聚合操作可以被表示成稀疏矩阵运算的形式。如:。这里的 是一个 row normalized matrix。但这种矩阵只考虑了 的度数信息,没有考虑 (邻域节点)的度数信息。
为了解决这一问题,可以使用 ,这是一个 symmetric normalized matrix。,他也被叫做 normalized diffusion matrix。
- 如果相邻两个节点 的度数都很大,则 会变得很稠密。
- 对于 ,都有 的所有特征值(eigenvalue) ,且最大特征值为 。

Supervised Training: Classification
Task: 每个节点是一个药物,判断每个节点是不是有毒。
使用交叉熵损失函数。

节点嵌入向量在向量空间的相似度就反应了节点的相似度:

Unsupervised Training
用节点自身的信息作为标注,在原图中相似的节点应该有相似的节点嵌入。
- 为 表示 和 是相似的,否则为 。
- 表示交叉熵损失函数。
- 节点相似度可以是各种方法得到的:random walks / matrix factorization / node proximity in the graph。
GNN vs. “Shallow” Encoding
直推式学习 vs. 归纳式学习
直推式学习(transductive learning):用于预测的节点在训练时就见过。随机游走方法:DeepWalk、Node2Vec。
归纳式学习(inductive learning):用于预测的节点在训练时没见过(需要泛化到新节点)。图神经网络方法:GCN、GraphSAGE、GAT、GIN。
最简单的 encoding 的实现就是进行一个查表,这具有以下问题:
- 需要 个参数,不方便进行泛化。
- 不能捕获节点的结构信息和结构相似度(structural similarity):结构上相似,位置上远离(直接进行随机游走有长度限制)。
- 只能利用图的结构信息,而不能利用节点和边的属性信息。

GNN vs. CNN

- CNN 的卷积核权重需学习得到;GCN 的卷积核权重由 定义。
- CNN 不具有置换不变性;GCN 具有置换不变性——主要是通过聚合方法的选择得到的。
GNN vs. Transformer
Transformer 的核心功能就是引入了自注意力(self-attention) 机制:每两个 token / word 之间都会相互影响。这类似于我们 GNN 中每两个点都会相互影响。
GraphSAGE

把 维向量投影到二维平面的效果:

Comments