一. GNN原理介绍
1.1 GNN简介与优势
图(Graph)
是一种数据结构,常见的图结构模式包含图的节点(node)和边(edge),其中边包含实体之间的关系(relationship)信息
传统的机器学习所用到的数据是欧氏空间(Euclidean Domain)的数据,欧氏空间下的数据最显著的特征就是有着规则的空间结构,比如图片是统一大小的长方形栅格,语音数据是一维序列,这些数据能够通过一维或二维的矩阵进行表示,进行卷积等操作较为高效。同时,存在一个核心的假设:样本之间是相互独立的
但是,在现实生活中许多数据都是不具备规则的空间结构,即是非欧氏空间下的数据,如电子交易、推荐系统等抽象出来的图谱,图谱中每个节点与其他节点的连接不是固定的。图神经网络可以对非欧氏空间的数据进行建模,捕获数据的内部依赖关系。
图神经网络(Graph Neural Network)
是不规则的、无序的,除了能够学习结构化数据(输出数据为图结构数据)之外,还能学习到非结构化数据,⽐如文本(texts)和图⽚(images),并能够在提取出的图结构中进⾏推理(reasoning),比如NLP的句法依赖树(dependency tree of sentences)
和CV的场景图(scene graph of images)
等都需要图推理模型
GNN本质上是⼀种连接模型,通过网络中节点之间的信息传递(message passing)的方式来获取图中的依存关系(dependence of graph),GNN
通过从节点任意深度的邻居来更新该节点状态,这个状态能够表示状态信息
1.2 GNN Motivation
-
CNN
:用于提取多尺度的局部空间特征,并将其组合起来构造有效表征的方式,从而在几乎所有的机器学习领域取得了突破,其主要特征包括:局部链接、共享权重及多层结构的使用,上述方式也可以在图问题上具有重要价值:- 图是最典型的局部链接结构
- 图的共享权重降低了计算量
- 图的多层结构用以捕捉多种特征,然而
CNN
只能对规则欧氏数据进行操作,因此在非欧几里得数据中定义局部卷积操作与池化算子存在较大难度
-
Graph Embedding
:图嵌入是学习用低维向量表示图的节点、边或子图。Deepwalk利用representation learning
和word embedding
的思想,对随机游走序列应用SkipGram
模型实现节点的表示,但这类方法有两个明显缺点:- 编码器之间没有参数共享导致计算效率底下,参数的数量将随着节点数量线性增长
- 缺乏模型泛化能力,不能处理动态图或推广到新图
1.3 GNN与传统NN的区别
标准的神经网络不能处理图结构输入,需要节点的特征按照一定的顺序进行排列,但是对于图结构而言并没有天然的顺序而言,GNN采用在每个节点上分别传播(propagate)的方式进行学习,由此忽略了节点的顺序,相当于GNN的输出会随着输入的不同而不同
图结构的边表示节点之间的依存关系,在传统的神经网络中,依存关系是通过节点特征表达出来的,无法显式地表达中这种依存关系。而GNN通过邻居节点的加权求和来更新节点的隐藏状态。
对于高级的AI来说,推理是一个非常重要的研究主题,人类大脑的推理过程基本上都是基于图的方式,这个图是从日常的生活经历中学习得到的。GNN尝试从非结构化数据比如场景图和故事文本中产生结构化的图,并通过这些图来生成更高级的AI系统
1.4 GNN模型分类:
- 图卷积网络(Graph Convolutional Networks)和图注意力网络(Graph Attention Networks),涉及到传播步骤(propagation step)
- 图的空域网络(Spatial-temporal Networks),该模型通常用在动态图(Dynamic Graph)上
- 图的自编码(Auto-encoder),该模型通常使用无监督学习(unsupervised)的方式
- 图生成网络(Generative networks),为生成式网络
二. GNN模型概述
2.1 GNN符号定义与含义说明
符号(notations) | 说明(Descriptions) |
---|---|
m维欧氏空间 | |
标量,向量,矩阵 | |
矩阵转置 | |
N维单位矩阵 | |
和的卷积 | |
graph中的节点数 | |
graph中的边数 | |
节点v的邻域集 | |
时间步t处节点v的向量a | |
节点v在时间步t的隐藏状态 | |
节点v到w的边特征 | |
带标签k的边的特征 | |
节点v在时间步t的输出 | |
Hadamard product哈达玛积 |
2.2 图神经网络原理
图神经网络的第一次提出在IEEE2009的《The Graph Neural Network Model》由锡耶纳大学提出,该论文将现有的神经网络模型扩展到处理图领域的数据
在图结构中,每个节点由它自身的特征以及与其相连的节点特征来定义该节点,GNN的目标是通过学习得到一个状态的嵌入向量(embedding),给定一张图,用表示结点自身的特征,边特征用表示。GNN的学习目标是获得每个结点的隐藏状态(state embedding)。在时刻,结点的隐藏状态按照如下方式更新:
- 假设是带有参数的函数,叫做
局部转移函数(local transition function)
。就是隐藏状态的状态更新函数,在所有节点中共享(全局共享) - :表示与节点关联的边的特征向量
- :表示节点的邻居节点特征向量
- :表示节点的邻居节点在时刻的隐藏状态
举例,假设对于节点5,其隐藏状态的更新函数如下:
利用更新函数 ,不断地利用当前时刻邻居结点的隐藏状态作为部分输入来生成下一时刻中心结点的隐藏状态,最终需要一个输出函数,适应不同的下游任务,论文中称为
局部输出函数(local output function)
,用 表示:
收敛性证明:
假设将所有的状态向量,所有的输出向量,所有的特征向量和所有的节点特征而得到的向量叠加起来,分别用表示,那么可以得到更加紧凑的表示:
Banach的不动点定理:无论输入是什么形式,只要是个压缩的映射,不断迭代压缩,最终都会收敛到某一个固定的点,即称之为不动点
是用前馈神经网络实现,把每个邻居结点的特征、隐藏状态、每条相连边的特征以及结点本身的特征简单拼接在一起,在经过前馈神经网络后做一次简单的加和:
为压缩映射的等价条件是的梯度(导数)要小于1,可以通过对雅可比矩阵(Jacobian Matrix)
的惩罚项(Penalty)来实现,限制对的偏导数矩阵的大小,则可以根据Banach的不动点定理,GNN使用如下的迭代方法来计算状态参量:
其中表示的第个迭代周期的张量。对于任意的初始值,公式(7)能通过快速收敛来得到公式(4)最终的固定点的解,证毕
和的参数学习:
不一定所有结点都是有监督的,模型的损失只通过有监督信号的结点得到,可以将损失函数定义为如下形式:
表示监督节点的数目,和分别表示节点的真实值和预测值。损失函数的学习基于梯度下降策略,由以下步骤组成:
- 状态按照迭代更新轮次,直到接近公式(4)的定点解的时刻, 这时得到的会接近不动点的解
- 对于有监督信号的结点,将其隐藏状态通过得到输出,进而算出模型的损失
- 反向传播时,权重的梯度从loss计算得到,可以得到和对最终隐藏状态的梯度,然后根据上一步中计算的梯度不断更新,经过次,得到对的梯度,然后该梯度用于更新模型的参数
2.3 GNN存在的问题
原始的GNN有如下的缺点:
- 对不动点使用迭代的方法来更新节点的隐藏状态,效率并不高
- 在迭代过程中,原始GNN使用相同的参数,而其他比较著名的模型在不同的网络层采用不同的参数,使得模型能够学习到更加深的特征表达,而且,节点隐藏层的更新是顺序流程,可以从GRU和LSTM的cell的结构中获取灵感。另外就是一些边(edges)上可能会存在某些信息特征不能被有效地考虑进去
- 如果需要学习节点的向量表示而不是图的表示,那么使用不动点的方法是不妥当的,因为在不动点的向量表示分布在数值上会非常的平滑,这样的向量对于区分不同的节点并无太大帮助
三. GNN系列拓展
3.1 Graph Types
原始的GNN输入的图结构只包含带有标签信息的节点和无向边,这是最简单的图结构,其它种类的图结构主要有有向图、异质图、带有边信息图和动态图,如下图:
有向/无向图(Directed/Undirected Graphs): 有向图里的边(Edges)是从一个节点指向另一个节点,比无向图携带更多的信息。无向图中的边也可以视为双向的边。例如DGP使用两种权重矩阵和来结合更加精确的结构化信息,DGP的传播方式如下:
其中,和分别是双亲(parents)和后代(children)的归一化邻接矩阵(同构/异构图(Homogeneous/Heterogeneous Graphs):同构图中的节点和边拥有相同的类型;异构图中节点和边是不同类型的。节点和边的类型在异构图中起着重要的作用,需要进一步考虑
带有边信息的图(Graphs with Edge Information):在这种图变体中,每一个边都带有额外的信息,比如权重和边的类型,可将原始的图转化为一个
二分图(bipartite graph)
,处理方式为将原始的边转化为一个节点以及两条新的边,G2S
的编码器使用如下的传播函数:
其中,和是不同边类型的传播参数静态/动态图(Static/Dynamic Graphs):如果输入特征或图的拓扑结构随着时间变化,就是动态图。
DCRNN
和STGCN
使用GNN获取空域信息,将该信息输入到一个序列模型;Structural-RNN
和ST-GCN
同时获取时间信息和空间信息
3.2 Propagation Types
传播(propagation)指的是汇集从邻居节点和连接的边的信息来对节点进行更新的过程,这个过程模型中获取节点(或边)的隐藏状态,对于信息传播步骤(propagation step),有几种主要的GNN变体,而在输出步骤(output step)中,通常使用简单的前向传播的神经网络
不同的GNN的信息传播变体使用下图进行列出,这些变体采用不同的信息传播方式来从邻居节点中获取信息,并通过设定的更新器(updater)来对节点的隐藏状态进行更新
不同类别模型的Aggregator计算方法和Updater计算方法如下表:
-
卷积(Convolution):这个方向上分为
频域方法
和非频域(空域)方法
-
频域方法使用图的频域表示,主要有以下几种模型:
- Spectral Network:卷积操作定义为傅里叶频域计算图拉普拉斯(graph Laplacian)的特征值分解,这个操作可以定义为使用卷积核对输入(每一个节点有一个标量值)的卷积操作,其中
其中,是标准化图拉普拉斯矩阵的特征向量矩阵,是
度矩阵(degree matrix)
,是图的邻接矩阵(adjacency matrix)
,为以特征值为对角线上的值的对角矩阵
,此操作会有较高的计算复杂度- ChebNet:根据切比雪夫多项式定理,认为可以通过截取多项式的前项来进行估计,因此,操作为
其中,表示矩阵最大的特征值,为切比雪夫系数向量,切比雪夫多项式定义为,且有以及。可以看出,这个操作是,因为在拉普拉斯中它是一个K阶多项式。由此避免了计算拉普拉斯的特征值
- GCN:论文限制了逐层的卷积操作,并设置来减缓过拟合的问题,它还近似了,最后简化的方程如下:
使用两个无限制的参数和。再通过设置来限制参数的数量之后,可以得到以下表达式:
值得一提的是,叠加使用这个操作会导致数值不稳定性以及梯度爆炸或消失(因为不断地乘以同一个矩阵),因此,该论文里面使用了重规整化操作(renormalization):
其中,最后,论文将模型扩展为含有个输入通道的信号以及个滤波器来用于提取特征
其中,是滤波器参数矩阵,是卷积信号矩阵
-
在所有这些频域方法中,学习得到的滤波器都是基于拉普拉斯特征分解,也就是取决于图的结构,这也就意味着,在一个特定结构上训练得到的模型,并不能直接应用到另外一个结构不同的图上
-
非频域的方法直接在图上定义卷积操作,也就是在空域上相邻的邻居节点上进行操作。这种非频域方法的主要难点在于如何定义拥有不同邻居数量的卷积操作以及保持CNN的局部不变性。主要的模型有如下一些:
- DCNN:提出了扩散卷积神经网络,转化矩阵用来定义节点的邻居,对于节点分类任务,有
其中是一个的输入特征张量(是节点的数量,是特征的维度),是一个的张量,包含矩阵的power series是来自于图邻接矩阵的度标准(degree-normalized)的转化矩阵
- DGCN:提出了对偶图卷积网络,同时考虑到图上的局部一致性和全局一致性,使用两组卷积网络来获取局部/全局的一致性,并采用一个无监督的loss来组合,第一个卷积网络和(公式16)相同,第二个卷积网络将邻接矩阵替换为
PPMI(positive pointwise mutual information)矩阵
其中,为PPMI矩阵,为的对角度矩阵
- GraphSAGE:提出了一个归纳框架,这个框架通过从一个节点的局部邻居中采样和聚合特征,来产生节点的embedding:
但是,上述的方程并不会采用所有的邻居节点进行计算,而是使用均匀采样来得到固定大小的邻居节点集合,该论文推荐使用三种聚合函数:
平均值聚合(Mean aggregator):使用如下方式计算:
平均值聚合和其他的聚合方式不同,因为它不用进行连接操作LSTM聚合(LSTM aggregator):基于LSTM的聚合器有更好的表达能力,然而LSTM以序列的方式顺序地处理输入,因此它并没有排列不变性,论文中采用重排列节点邻居的方式,在无序集合中使用LSTM操作。
池化聚合(Pooling aggregator):每一个邻居的隐藏状态输入到一个全连接层,然后使用最大池化操作应用到邻居节点集合
任何对称的函数都可以用来替换这里的最大池化操作
-
门机制(Gate):目前在信息传播步骤中使用的门机制类似于GRU和LSTM模型,这种机制可以减小原始GNN模型的约束,并提升在图结构中的长期的信息传播
GGNN:在信息传播步骤中使用GRU,将递归循环展开固定数量的步数,并使用按照时间序的反向传播来计算梯度。具体来说,传播的基本递归循环是模型如下:
按照第一个公式,节点首先从它的邻居节点汇集信息,其中为图邻接矩阵的子矩阵,表示节点和它的邻居节点的连接关系。然后,类似于GRU的节点更新函数将该节点前一个时刻的信息和与该节点相邻的其它节点的信息结合起来,以此来更新每一个节点的隐藏状态。汇集了节点周围节点的信息,和分别是更新门(update gate)
和重置门(reset gate)
。LSTM同样使用类似的方法来进行信息传播过程-
Child-Sum Tree-LSTM和N-ary Tree-LSTM:类似于标准的LSTM单元,每一个Tree-LSTM单元(为)包含
输入门(input gate)
和输出门(output gate)
,记忆单元(memory cell)
和隐藏状态(hidden state)
,但与LSTM不同的是,Tree-LSTM单元对每一个孩子节点都有一个遗忘门,这样就可以从孩子节点中选择性地汇集并组合信息。Child-Sum Tree-LSTM的转换方程如下:
是标准LSTM中在时刻的输入如果一个树每一个节点最多有个分支,并且节点所有的孩子节点都是有序的,那么可以使用
N-ary Tree-LSTM
,对于节点和分别表示在时刻,它的第个孩子节点的隐藏状态和记忆单元,转化方程为:
对每个孩子节点都赋予一个单独的参数矩阵,使得该模型相比于Child-Sum Tree-LSTM
能够学习得到更加细微的节点表示,这两种类型的Tree-LSTM都能够很容易地应用到图
-
注意力机制(Attention):注意力机制在很多基于序列任务(sequence-based tasks)比如机器翻译、机器阅读理解等等上都产生了非常好的效果。
-
GAT:将注意力机制引入到信息传播步骤,这个模型通过对它的邻居节点增加注意力来计算节点的隐藏状态,和self-attention策略类似
该论文定义了一个graph attentional layer,并通过叠加这种层来构建任意的图注意力网络,这个层计算节点对的
注意力系数(coefficients)
,计算方式如下:
其中,是节点对的注意力系数,表示图中节点的邻居节点集合,节点特征的输入集合是,其中是节点的个数,是每个节点的特征维度。这个层会产生一个新的节点特征集(可能有不同的特征维度),作为该层的输出,是共享的线性变换的权重矩阵,是单层的前向神经网络的权重向量,通过softmax函数对它进行归一化,然后使用LeakyReLU()非线性函数。最后每个节点的输出特征可以通过如下方程获得:
另外,这个注意力层采用multi-head attention使得网络学习过程更加稳定,它使用个独立的注意力来计算隐藏状态,然后将计算出的个特征连接(或者求平均),得到最终的输出表示
其中,是归一化的注意力系数,由第个注意力机制得到。这篇论文的注意力机制结构有如下几个特点:(1)node-neighbor pair的计算可以是并行化的,因此操作的效率高;(2)通过给邻居节点赋予任意的权重,可以用在有不同度的图节点上;(3)可以容易地用于归纳学习问题上
-
-
跳过连接(Skip connection):许多应用都会将图神经网络层进行叠加,以此来实现更好的结果,因为更多的层意味着每一个节点能够从更多的邻居节点中获取信息,但是,更深的模型并不会表现更好,反而可能表现更坏,主要因为随着指数个数上升的相邻节点数量,更多的层可能会汇集到更多的噪声信息。可以使用
残差网络(residual network)
,但是即使使用残差连接,有更多层的GCN在很多数据上并没有2层的GCN表现的更好- Highway GCN:类似于
highway network
,使用了逐层门机制(layer-wise gates)
,一个层的输出公式如下:
通过增加highway gates,在该论文指定的特定问题上,模型在4层的表现最好
- Highway GCN:类似于
分层池化(Hierarchical Pooling):在计算机视觉中,一个卷积层后通常会接一个池化层,来得到更加普遍的特征。与这种池化层类似的是,在图结构中,一种分层池化层也能够起到类似的效果,复杂的和大规模的图通常会包含丰富的分层结构,这种结构对于
节点层次(node-level)
和图层次(graph-level)
的分类任务非常重要