简单的图的参数介绍: \(\mathcal { G } = ( V , E , A )\)node
图网络有不少结构, 这里按照最新的综述论文 A Comprehensive Survey on Graph Neural Networks 文中的分类方式, 主要分为:算法
这里主要介绍图卷积网络GCN. 由于GCN在捕获结构化依赖上扮演着中心角色.api
Inspired by the huge success of convolutional networks in the computer vision domain, a large number of methods that re-define the notation of convolutionfor graph data have emerged recently.网络
These approaches are under the umbrella of graph convolutional networks (GCNs). The first prominent research on GCNs is presented in Bruna et al. (2013), which develops a variant of graph convolution based on spectral graph theory [20]. Since that time, there have been increasing improvements, extensions, and approximations on spectral-based graph convolutional networks [12], [14],[21], [22], [23].架构
As spectral methods usually handle the whole graph simultaneously and are difficult to parallel or scale to large graphs, spatial-based graph convolutional networks have rapidly developed recently [24], [25], [26],[27]. These methods directly perform the convolution in the graph domain by aggregating the neighbor nodes' information. Together with sampling strategies, the computation can be performed in a batch of nodes instead of the whole graph[24], [27], which has the potential to improve the efficiency.app
将应用于传统数据的卷积操做, 泛化到了图数据上面. 关键是学习一个函数f, 来经过集成本身和邻居的特征生成节点的表示. GCN在构建其余复杂的图神经网络的任务上, 扮演着重要的角色. 包括auto-encoder-based models, generative models, spatial-temporal networks等.dom
对于GCN而言, 在集成邻居的过程的时候, 使用的权重是无参数的, 而GAN(图注意力网络)使用了一个端到端神经网络架构捕获的权重, 来使得更重要的节点拥有更大的权重.(这里更多的是表述空域的GCN)异步
对于图卷积网络, 实际上是在尝试经过图谱理论或者局部空间来定义图卷积的方式来在图数据上复制CNN的成功.ide
使用图结构和节点内容信息做为输入, GCN的输出使用如下不一样的机制, 能够关注于不一样的图分析任务.函数
这里有一个总结的表, 总结了主要方法的状况:
对于图卷积网络, 是能够经过半监督/全监督/无监督的方式进行端到端训练的, 注意取决于学习任务和标签信息的获取.
基于图信号处理的知识, 图上的卷积能够被定义为: \(\mathbf { x } * _ { G } \mathbf { g } _ { \theta } = \mathbf { U } \mathbf { g } _ { \theta } \mathbf { U } ^ { T } \mathbf { x }\)
其中\(\mathbf { g } _ { \theta } = \operatorname { diag } \left( \mathbf { U } ^ { T } \mathbf { g } \right)\)表示滤波器. 能够看作是L特征值的函数, 也就是 \(g _ { \theta } ( \Lambda )\).
这里有\(\mathbf { x } \in \mathbf { R } ^ { N }\), xi表示第i个节点的值(这里至关于节点的特征向量长度只有1).
这个等式计算消耗大, 计算L的特征分解对于大图来讲多是很是昂贵的.
在后续的改进中, 这里的信号的设定被进一步扩展, 输入信号表示为: \(\mathbf { X } ^ { k } \in \mathbf { R } ^ { N \times f _ { k - 1 } }\), 这里\(f_k-1\)表示输入通道数, \(f_k\)表示输出通道数. 滤波器也整合表示为\(\mathbf { g } _ { \theta } = \Theta _ { i , j } ^ { k }\), 表示为:
\(\mathbf { X } _ { : , j } ^ { k + 1 } = \sigma \left( \sum _ { i = 1 } ^ { f _ { k - 1 } } \mathbf { U } \Theta _ { i , j } ^ { k } \mathbf { U } ^ { T } \mathbf { X } _ { \mathbf { s } , i } ^ { k } \right) \quad \left( j = 1,2 , \cdots , f _ { k } \right)\)
这里的 \(\sigma\) 表示的是一个非线性转换.
以后有人利用切比雪夫多项式来近似表示了滤波器, 进一步简化了公式的计算:
\(\mathbf { g } _ { \theta } = \sum _ { i = 1 } ^ { K } \theta _ { i } T _ { k } ( \tilde { \boldsymbol { \Lambda } } ) ,\) where \(\tilde { \boldsymbol { \Lambda } } = 2 \Lambda / \lambda _ { \max } - \mathbf { I } _ { \mathrm { N } }\)
Chebyshev polynomials are defined recursively by \(T _ { k } ( x ) = 2 x T _ { k - 1 } ( x ) - T _ { k - 2 } ( x )\) with \(T _ { 0 } ( x ) = 1\) and \(T _ { 1 } ( x ) = x\)
所以卷积操做进一步表示为:
\(\begin{aligned} \mathbf { x } * _ { G } \mathbf { g } _ { \theta } & = \mathbf { U } \left( \sum _ { i = 1 } ^ { K } \theta _ { i } T _ { k } ( \tilde { \boldsymbol { \Lambda } } ) \right) \mathbf { U } ^ { T } \mathbf { x } \\ & = \sum _ { i = 1 } ^ { K } \theta _ { i } T _ { i } ( \tilde { \mathbf { L } } ) \mathbf { x } \\ \text { where } \tilde { \mathbf { L } } = 2 \mathbf { L } / \lambda _ { \max } - \mathbf { I } _ { \mathrm { N } } \end{aligned}\)
这个时候, 能够看这个表达式, 这个卷积的计算只依赖于中心节点的K阶邻居.(K步之内可达的节点). 并且这样定义的滤波器也是稀疏的.
当前面的公式中, K=1的时候, 而且使得 \(\lambda_{max}=2\), 则进一步简化为:
\(\mathbf { x } * _ { G } \mathbf { g } _ { \theta } = \theta _ { 0 } \mathbf { x } - \theta _ { 1 } \mathbf { D } ^ { - \frac { 1 } { 2 } } \mathbf { A } \mathbf { D } ^ { - \frac { 1 } { 2 } } \mathbf { x }\)
为了进一步减小参数, 以免过拟合, 这里进行了进一步简化, 让两个 \(\theta\) 相反. 也就是\(\theta = \theta _ { 0 } = - \theta _ { 1 }\), 这就获得了最终简化后的定义:
\(\mathbf { x } * _ { G } \mathbf { g } _ { \theta } = \theta \left( \mathbf { I } _ { \mathbf { n } } + \mathbf { D } ^ { - \frac { 1 } { 2 } } \mathbf { A } \mathbf { D } ^ { - \frac { 1 } { 2 } } \right) \mathbf { x }\)
这里最终表示为:
\(\mathbf { X } ^ { \mathbf { k } + \mathbf { 1 } } = \tilde { \mathbf { A } } \mathbf { X } ^ { \mathbf { k } } \Theta\)
where \(\tilde { \mathbf { A } } = \mathbf { I } _ { \mathbf { N } } + \mathbf { D } ^ { - \frac { 1 } { 2 } } \mathbf { A } \mathbf { D } ^ { - \frac { 1 } { 2 } }\)
经过一阶ChebNet定义的图卷积在空间上是局部的, 这弥补了谱方法与空域方法的差异. 输出的每行表示每一个节点经过一个加权集成了自身和相邻节点的信息了的线性转换来得到的潜在表征.
然而, 一阶ChebNet主要的问题是, 在批量训练过程当中,随着1stChebNet层数的增长,计算代价呈指数增加. 最后一层中的每一个节点必须在之前的层中递归地扩展其邻域. 一些工做已这对这些问题进行了改进.
为了探索没有被图拉普拉斯矩阵指定的隐藏结构关系, 有人提出了AGCN, AGCN用一个所谓的残差图来扩充一个图,这个图是经过计算节点之间的成对距离来构造的, 尽管可以捕获互补的关系信息, 可是它的计算复杂度为\(O(N^2)\).
谱方法主要依赖于拉普拉斯矩阵的分解, 它有三种影响:
对于谱方法, 一般它们都须要载入整个图到内存中, 来应用图卷积, 这对于处理大的图来讲, 不是颇有效率.
空域方法定义卷积主要基于节点的空间关系. 为了关联图和图像, 图像的每一个像素认为是节点. 每一个像素直接链接到它的相邻像素.
因为相邻节点的特殊排序,可训练权值能够在不一样的位置共享。相似地,对于通常图,基于空间的图卷积采用中心节点表示和其邻居表示的聚合来得到该节点的新表示。为了探索节点感觉域的深度和宽度,一般的作法是将多个图形卷积层堆叠在一块儿.
根据卷积层叠加方法的不一样,空间GCN又可分为基于递归(recurrent-based)的GCN和基于合成(composition-based)的空间GCN两大类. 基于递归的方法使用相同的图卷积层来更新隐藏表示,而基于合成的方法使用不一样的图卷积层来更新隐藏表示.
基于递归的方法主要想法是更新节点节点的隐藏状态直到获得一个稳定的固定点. 这是经过施加对递归函数的约束,或者使用门控递归单元结构,或者异步地和随机地更新节点潜在表示。
这是图神经网络的早期工做, GNN递归更新节点的潜在表征, 直到收敛. 换句话说,从扩散过程的角度来看,每一个节点与邻居交换信息直到达到平衡为止。
为了处理异质图(heterogeneous graph), 这类GNN的空间图卷积被定义为
\(\mathbf { h } _ { v } ^ { t } = f \left( 1 _ { \mathbf { v } } , 1 _ { c o } [ v ] , \mathbf { h } _ { n e } ^ { t - 1 } [ v ] , \mathbf { l } _ { n e } [ v ] \right)\)
这里使用了针对节点v的标签属性, 边的标签属性, 其邻居在时间步t的隐藏表征, 以及其邻居的标签属性.
为了确保收敛, 递归函数必须是一个约束映射, 这个会在映射以后压缩两点之间的距离. 若f()是一个神经网络, 那么一个惩罚项就会使用在参数的Jacobian矩阵上.
Jacobian矩阵是一阶偏导数以必定的方式排列成的矩阵.
GNN使用Almeida-Pineda算法来训练模型. 核心思想是经过运行传播过程到达固定点,而后给出收敛解的后向过程.
GGNN使用门控递归单元(GRU)做为递归函数, 来说递归下降为一个固定的步数.
GGNN的空间图卷积定义为:
\(\mathbf { h } _ { v } ^ { t } = G R U \left( \mathbf { h } _ { v } ^ { t - 1 } , \sum _ { u \in N ( v ) } \mathbf { W h } _ { u } ^ { t } \right)\)
不一样于GNN, GGNN使用基于时间的反向传播算法(BPTT)来学习参数, 它的优点在于不用再学习约束参数来确保收敛了. 然而,BPTT训练的缺点是它牺牲了时间和存储的效率. 尤为是在处理大图的时候, GGNN会在全部节点上运行递归函数屡次, 须要全部节点的中间态被存储下来.
为了提高学习效率, SSE算法用来随机地更新节点的潜在表征, 以一种异步的方式. 下面是SSE的迭代算法.
如上, SSE迭代评估节点潜在表征而且使用抽样的批数据更新参数.
为了确保收敛到稳态, 递归函数被定义为一个历史状态和新状态的加权平均.
\(\mathbf { h } _ { \mathbf { v } } ^ { t } = ( 1 - \alpha ) \mathbf { h } _ { \mathbf { v } } ^ { t - 1 } + \alpha \mathbf { W } _ { \mathbf { 1 } } \sigma \left( \mathbf { W } _ { 2 } \left[ \mathbf { x } _ { \mathbf { v } } , \sum _ { u \in N ( v ) } \left[ \mathbf { h } _ { \mathbf { u } } ^ { t - 1 } , \mathbf { x } _ { \mathbf { u } } \right] \right] \right) \; (10)\)
上式中, 第二项应该是新的结果, 结合第一项的历史状态, 能够获得新的真正的状态.
虽然对邻域信息的求和隐含地考虑了节点度,但这种求和的规模是否影响该算法的稳定性还是个问题.
基于合成的方法更新节点表征, 经过堆叠多个图卷积层.
MPNN包含两个阶段, 消息传送阶段(message passing phase)和读出阶段(readout phase). 消息传送阶段实际上运行T步的空间图卷积. 图卷积操做经过消息函数\(M_t()\)和一个更新函数\(U_t()\)来定义:
\(\mathbf { h } _ { v } ^ { t } = \mathbf { U } _ { t } \left( \mathbf { h } _ { v } ^ { t - 1 } , \sum _ { w \in N ( v ) } M _ { t } \left( \mathbf { h } _ { v } ^ { t - 1 } , \mathbf { h } _ { w } ^ { t - 1 } , \mathbf { e } _ { v w } \right) \right)\)
经过函数M传递来自旧状态的消息获得新的状态, 使用U来结合新旧状态进行更新, 获得当前时间的真正状态.
这里的读出阶段其实是一个池化操做, 产生了一个整个图的表征, 基于每一个单独节点的隐藏表征. 它被定义为:
\(\hat { \mathbf { y } } = R \left( \mathbf { h } _ { v } ^ { T } | v \in G \right)\)
经过函数R的输出, 最终的表征y被用来处理图级预测任务. 不少的其余工做均可以看作是使用了U,M的不一样形式的结果.
引入了聚合函数的概念来定义图的卷积, 聚合函数实质上是聚合节点的邻域信息. 它必须对节点顺序的排列具备不变性, 例如求均值、和、极大值函数等.
这样的图卷积操做能够被定义为:
\(\mathbf { h } _ { v } ^ { t } = \sigma \left( \mathbf { W } ^ { t } \cdot aggregate _ { k } \left( \mathbf { h } _ { v } ^ { t - 1 } , \left\{ \mathbf { h } _ { u } ^ { k - 1 } , \forall u \in \mathcal { N } ( v ) \right\} \right)\right.\)
GraphSage并无在全部节点上更新状态, 而是提出了一个批学习算法, 这个提高了对于大图的可扩展性. 其学习过程主要有三步:
对于GraphSage而言, 计算损耗随着跳的阶段的增长, 而呈指数增加. 这致使该算法不能有太深的结构, 然而, 实际测试, 跳两步的GraphSage已经能够是实现很高的性能了.
空域方法定义图卷积, 经过集成来自邻居的特征信息. 更具不一样的堆叠图卷积层的方式, 主要分类两种, 一种是基于递归的要得到节点的稳态的方法, 一种是基于组合的要去合并更高阶的邻域信息的方法.
在训练时, 每一层中, 两种方法都必须更新全部节点的隐藏状态. 然而, 将全部的中间状态存储到内存中并非一个有效的策略. 为了解决这个问题, 一些训练策略被提出来, 包括针对组合方法的子图训练(GraphSage)和针对递归方法的随机异步训练(SSE)
泛化卷积神经网络到图结构数据的另外一个关键点, 那就是图池化模块了. 尤为是对于图级分类任务.
和原始CNN中的池化模块相似, 图池化模块能够容易的减小方差和经过从原始特征数据中下采样来减小计算复杂度.
Mean/max/sum池化是实现这一点的最原始和最有效的方法,由于在池化窗口中计算均值/最大/和值是快速的。
\(\mathbf { h } _ { G } = m e a n / \max / \operatorname { sum } \left( \mathbf { h } _ { 1 } ^ { T } , \mathbf { h } _ { 2 } ^ { T } , \ldots , \mathbf { h } _ { n } ^ { T } \right)\)
做为针对图数据的早期卷积网络, 谱方法已经在许多图相关分析任务中取得了不错的结果. 这些模型出如今已有的在图信号处理的理论基础上. 经过设计新的图信号滤波器, 能够设计新的图卷积网络.
做为最先的图形数据卷积网络,基于谱的模型在许多与图形相关的分析任务中取得了使人印象深入的结果. 这些模型具备很好的吸引力,由于它们具备图形信号处理的理论基础. 经过设计新的图信号滤波器[23],咱们能够从理论上设计新的图卷积网络。
然而,基于谱的模型有几个缺点, 咱们从效率、通常性和灵活性三个方面来讲明这一点:
所以,空间模型近年来受到愈来愈多的关注.