—— A Comprehensive Survey on Graph Neural Networks 综述笔记

GNN basic

基础性概念主要参考以下文献:

A Gentle Introduction to Graph Neural Networks (distill.pub)

Understanding Convolutions on Graphs (distill.pub)

GNN入门-编程知识网

最简单的GNN框架。关键是更新和聚合操作。

更新

GNN blocks 也叫GNN layer,简化版的layer中对每个节点分别进行MLP(输入n维特征x,输出n维隐藏特征h) 不考虑节点间关联性(connectivity)。

GNN入门-编程知识网

聚合

在更新中考虑关联性:先聚合 再更新。

GNN入门-编程知识网

这里的pooling function也叫聚合,可以是相邻节点的sum, average。

具体实消息传递时使用矩阵乘法。将邻接矩阵A和特征矩阵x相乘就实现了使用求和聚合的简单消息传递。

k次更新后,可以聚合到k阶邻居的信息。

GNN入门-编程知识网

论文将GNN分为四类:

recGNN

循环图神经网络 (Recurrent Graph Neural Networks, RecGNNs) 基本上算是 GNN 的先驱成果。RecGNN 通过循环神经架构学习节点表示。它们假设图中的节点不断与其邻居交换信息/消息,直到达到稳定的平衡。RecGNN 在概念上很重要,并启发了后来对卷积图神经网络的研究。

convGNN

上面提到的考虑关联性的多层GNN架构就是 convGNN。具体来说卷积图神经网络 (Convolutional Graph Neural Networks, ConvGNNs) 的主要思想是通过汇总节点自身的特征 和邻居的特征 来生成节点的表示形式。与 RecGNN 不同,ConvGNN 堆叠多个图卷积层以提取高级节点表示。

GNN入门-编程知识网

论文将convGNN 进一步分成两种:基于谱的和基于空间的。

基于谱的convGNN

在基于谱的图神经网络中,图被假定为无向图,无向图的一种等价数学表示是正则化图拉普拉斯矩阵,即\(\mathbf{L}=\mathbf{I}_{\mathbf{n}}-\mathbf{D}^{-\frac{1}{2}} \mathbf{A D}^{-\frac{1}{2}}\)

其中,A为图的邻接矩阵,D为对角矩阵,对角线上值为度数.

正则化图拉普拉斯矩阵具有实对称半正定的性质。利用这个性质,正则化拉普拉斯矩阵可以进行特征值分解\(\mathbf{L}=\mathbf{U} \boldsymbol{\Lambda} \mathbf{U}^{T}\)

其中U是由L的特征向量构成的矩阵,\(\Lambda\)是对角矩阵,对角线上的值为L的特征值。

正则化拉普拉斯矩阵的特征向量构成了一组正交基,被称为谱(spectrum)。

可以用特征向量的线性组合来表示输入特征x,线性组合的系数\(\hat x\)被称为x的谱表示。

\[x=\sum_{i=1}^{n} \hat{x_{i}} u_{i}=U \hat{x_{1}}
\]

这里将x和\(\hat x\)的转换定义为傅里叶变换

\[\begin{array}{l}
\mathscr{F}(\mathrm{x})=\mathrm{U}^{T} \mathrm{x} \\
\mathscr{F}^{-1}(\hat{\mathrm{x}})=\mathrm{U} \hat{\mathrm{x}}
\end{array}
\]

现在我们可以来定义对输入特征x的图卷积操作了

\[\begin{aligned}
\mathrm{x} *_{G} \mathrm{~g} &=\mathscr{F}^{-1}(\mathscr{F}(\mathrm{x}) \odot \mathscr{F}(\mathrm{g})) \\
&=\mathrm{U}\left(\mathbf{U}^{T} \mathrm{x} \odot \mathbf{U}^{T} \mathrm{~g}\right)
\end{aligned}
\]

其中,g是我们定义的滤波器filter;\(\bigodot\)表示Hadamard product。

基于谱的图卷积网络都遵循这样的模式,它们之间关键的不同点在于选择的滤波器不同。

现有的基于谱的图卷积网络模型有以下这些:Spectral CNN、Chebyshev Spectral CNN (ChebNet)、Adaptive Graph Convolution Network (AGCN)

基于谱的图卷积神经网络方法的一个常见缺点是,它们需要将整个图加载到内存中以执行图卷积,这在处理大型图时是不高效的。

例子 ChebNet

GNN入门-编程知识网

这个式子比较复杂,本质上是一个多项式过滤器(polynomial filter),具体计算embedding h时比较直观,令x前面的系数为:

\[p_{w}(L)=\sum_{i=1}^{d} w_{i} T_{i}(\tilde{L})
\]

则可以这样计算:GNN入门-编程知识网

上面把系数提取出来了,更加通用的计算方法如下

GNN入门-编程知识网

基于空间的

基于空间的图卷积神经网络的思想主要源自于传统卷积神经网络对图像的卷积运算,不同的是它基于节点的空间关系来定义图卷积的。

对于一般的图,基于空间的图卷积将中心节点表示和相邻节点表示进行聚合,以获得该节点的新表示。

例子 GCN

以GCN为例,这里的主要区别是求mean时只考虑邻居节点。

GNN入门-编程知识网

GCN原论文中的归一化是下面的形式,推导过程中同时借鉴了基于谱的方法和基于空间的方法。

GNN入门-编程知识网

Graph Autoencoders

图自动编码器 (Graph Autoencoders, GAEs) 是无监督的学习框架,可将节点编码到潜在的矢量空间中,并从编码后的信息中重建图数据。 最终目的是利用神经网络结构将图的顶点表示为低维向量。

GNN入门-编程知识网

目前基于GCN的自编码器的方法主要有:Graph Autoencoder (GAE)和Adversarially Regularized Graph Autoencoder (ARGA)

典型的解决方案是利用多层感知机作为编码器来获取节点嵌入,其中解码器重建节点的邻域统计信息,如positive pointwise mutual information (PPMI)或一阶和二阶近似值。

最近,研究人员已经探索了将GCN作为编码器的用途,将GCN与GAN结合起来,或将LSTM与GAN结合起来设计图自动编码器。

图自编码器的其它变体有:

Network Representations with Adversarially Regularized Autoencoders (NetRA)

Deep Neural Networks for Graph Representations (DNGR)

Structural Deep Network Embedding (SDNE)

Deep Recursive Network Embedding (DRNE)

DNGR和SDNE学习仅给出拓扑结构的节点嵌入,而GAE、ARGA、NetRA、DRNE用于学习当拓扑信息和节点内容特征都存在时的节点嵌入。图自编码器的一个挑战是邻接矩阵A的稀疏性,这使得解码器的正条目数远远小于负条目数。为了解决这个问题,DNGR重构了一个更密集的矩阵,即PPMI矩阵,SDNE对邻接矩阵的零项进行惩罚,GAE对邻接矩阵中的项进行重加权,NetRA将图线性化为序列。

STGNNs

时空图神经网络(STGNNs) 旨在从时空图学习隐藏模式,这种模式在各种应用中变得越来越重要,例如交通速度预测,驾驶员操纵预期和人类行为识别。 STGNN 的关键思想是同时考虑空间依赖性和时间依赖性。 许多当前的方法将图卷积与 RNN 或 CNN 集成在一起以捕获空间依赖性,从而对时间依赖性进行建模。

GNN入门-编程知识网

Graph Generative Networks

图生成网络的目标是在给定一组观察到的图的情况下生成新的图。图生成网络的许多方法都是特定于领域的。例如,在分子图生成中,一些工作模拟了称为SMILES的分子图的字符串表示。在自然语言处理中,生成语义图或知识图通常以给定的句子为条件。最近,人们提出了几种通用的方法。一些工作将生成过程作为节点和边的交替形成因素,而另一些则采用生成对抗训练。这类方法要么使用GCN作为构建基块,要么使用不同的架构。

MOFs可能的应用

图的表示

虽然我们只为每个属性描述了带有矢量化信息的图,但图结构更灵活,可以容纳其他类型的信息。幸运的是,消息传递框架足够灵活,通常使 GNN 适应更复杂的图结构是关于定义如何通过新的图属性传递和更新信息。

例如,我们可以考虑多边图或多重图 ,其中一对节点可以共享多种类型的边,当我们想要根据节点类型对节点之间的交互进行不同建模时,就会发生这种情况。例如,对于社交网络,我们可以根据关系类型(熟人、朋友、家人)指定边缘类型。可以通过为每种边缘类型设置不同类型的消息传递步骤来调整 GNN。

我们还可以考虑嵌套图,例如一个节点代表一个图,也称为超节点(hypernode)图。 嵌套图对于表示层次信息很有用。例如,我们可以考虑一个分子网络,其中一个节点代表一个分子,如果我们有一种方法(反应)将一个分子转换为另一个分子,则两个分子之间共享一条边 。在这种情况下,我们可以在嵌套图上学习,方法是让 GNN 在分子级别学习表示,另一个在反应网络级别学习表示,并在训练期间在它们之间交替。

另一种类型的图是超图 ,其中一条边可以连接到多个节点,而不仅仅是两个。对于给定的图,我们可以通过识别节点社区并分配连接到社区中所有节点的超边来构建超图。

GNN入门-编程知识网

batch采样

训练神经网络的一种常见做法是使用根据训练数据(小批量)的随机常数大小(批量大小)子集计算的梯度来更新网络参数。由于彼此相邻的节点和边的数量的可变性,这种做法对图提出了挑战,这意味着我们不能拥有恒定的批量大小。

使用图进行批处理的主要思想是创建保留较大图的基本属性的子图。这种图采样操作高度依赖于上下文,并且涉及从图中子选择节点和边。这些操作在某些情况下(引文网络)可能有意义,而在其他情况下,这些操作可能过于强大(分子,其中子图仅代表一个新的较小的分子)。

如何对图进行采样是一个开放的研究问题。 如果我们关心在邻域级别保留结构,一种方法是随机采样均匀数量的节点,即我们的节点集。然后添加与节点集相邻的距离为 k 的相邻节点,包括它们的边。 每个邻域都可以被认为是一个单独的图,并且可以在这些子图的批次上训练 GNN。损失可以被掩盖以仅考虑节点集,因为所有相邻节点都将具有不完整的邻域。更有效的策略可能是首先随机采样单个节点,将其邻域扩展到距离 k,然后在扩展集中选择另一个节点。一旦构建了一定数量的节点、边或子图,就可以终止这些操作。如果上下文允许,我们可以通过选择初始节点集然后对恒定数量的节点进行二次采样(例如随机,或通过随机游走或 Metropolis 算法)来构建恒定大小的邻域。

成功的路并不拥挤,因为大部分人都在颓(笑)