GNN (其它)

一、Deeper Insights into GCN[2018]

  1. 众所周知训练深度神经网络通常需要大量的标记数据。由于获得标记样本的成本较高,因此在很多情况下无法大量标记数据的需求无法满足。为了降低模型训练所需的标记数据量,最近很多研究集中在fewshot learning 上:学习一个分类模型,其中每个类别只有很少的标记数据。和 fewshot learning 密切相关的是半监督学习,其中大量未标记数据来辅助训练少量的标记数据。很多研究表明:如果使用得当,在训练中使用未标记数据可以显著提升模型的预测能力。

    关键问题是如何最大程度地有效利用未标记数据的结构信息和特征信息。目前已有一些基于神经网络的半监督学习模型取得成功,包括 ladder network, semi-supervised embedding, planetoid, graph convolutional network

    最近的图卷积神经网络 graph convolutional neural networks: GCNN 成功地推广了CNN 来处理图结构数据。《Semisupervised classification with graph convolutional networks》 提出了一种简化的 GCNN模型,称作图卷积网络 GCN ,并将其应用于半监督分类中。GCN 模型很自然地融合了图结构信息和节点特征信息,并在某些 benchmark 上明显优于许多 state-of-the-art 的方法。

    但是,GCN 模型面临很多其它神经网络模型类似的问题:

    • 用于半监督学习的 GCN 模型的工作机制尚不清楚。
    • 虽然 GCN 只需要少量的标记数据用于训练,但是GCN 仍然需要大量标记数据作为验证集从而用于超参数调优和模型选择。这违背了半监督学习的目的。

    论文 《Deeper Insights into Graph Convolutional Networks for Semi-Supervised Learning》 深入洞察 GCN 模型,并提出:GCN 模型的图卷积只是拉普拉斯平滑的一种特殊形式,这种平滑混合了节点及其周围邻域的特征。平滑操作使得同一个簇 cluster 中节点的特征相似,从而大大简化了分类任务,这是 GCN 表现出色的关键原因。

    但是,这也会带来过度平滑 over-smoothing 的潜在风险。如果 GCN 有很多层的卷积层,则最终输出的特征可能过于平滑,使得来自不同 cluster 之间的节点变得难以区分。如下图所示为 karate club 数据集分别使用 1、2、3、4、5GCN 训练的节点 embedding 可视化的结果,不同颜色表示不同的类别。可以看到,随着卷积层数量的增加,过度平滑很快发生。除此之外,使用很多层的卷积层也使得训练变得更加困难。

    但是卷积层数量太少也会有问题。在半监督学习中标记数据太少,这使得浅层 GCN 无法将标签信息有效地传播到整个图。这就是卷积滤波器局部性带来的困扰。如下图所示(Cora 数据集),随着训练的标签数据的减少,GCN 性能迅速下降。即使采用了额外的 500 个标记样本作为验证集(图中的 GCN with validation 曲线),GCN 的性能也是迅速下降。

    为了克服 GCN 模型的缺陷并实现模型的全部潜力,论文提出了一种共同训练Co-Training 方法和一种自训练 Self-Training 方法来训练 GCN

    • 通过将 GCN 和随机游走模型共同训练,从而利用随机游走模型补充 GCN 在探索全局图拓扑结构方面的不足。
    • 通过自训练,从而利用 GCN 的特征抽取能力来克服卷积滤波器的局部性。

    通过将 Co-TrainingSelf-Training 相结合,可以大大改善带少量标记数据的半监督学习的 GCN 模型,并使得它不需要额外的标记数据进行验证。如上图所示,论文提出的方法(红色曲线)在很大程度上超越了 GCN 的表现。

    论文贡献:

    • 对半监督 GCN 模型提供了新的洞察和分析。
    • 提出了改进半监督 GCN 模型的解决方案。

1.1 基本原理和相关工作

  1. 给定图 G=(V,E,X) ,其中 V={v1,,vn} 为节点集合, E 为边集合,X=[x1,x2,,xn]Rn×df 为节点的特征矩阵,xiRdf 为节点 vi 的特征向量,df 为特征维度。注意,为简单起见,这里我们仅讨论无向图。

    定义非负的邻接矩阵 A=[ai,j]Rn×n ;定义度矩阵 D=diag(d1,,dn),di=jai,j ;定义图拉普拉斯矩阵 L=DA 。定义归一化的图拉普拉斯矩阵为:对称版本为 Lsym=D1/2LD1/2 、非对称版本为 Lrw=D1L

    这里我们只考虑图上的半监督分类问题。假设标记节点集合为 Vl,剩余的未标记节点集合为 Vu=VVl 。其中 Vu 就是我们需要预测标签的节点集合。

1.1.1 基于图的半监督学习

  1. 基于图的半监督学习利用数据的拓扑结构从而可以通过很少的标签进行学习。很多基于图的半监督学习方法都采用聚类假设 cluster assumption:假设图上距离相近的节点倾向于共享相同的标签。采用这种假设的方法包括:最小割min-cuts 、随机最小割randomized min-cutsspectral graph transducer、标签传播 label propagation 及其变体、modified adsorptioniterative classification algorithm

    但是图仅仅代表拓扑结构信息,在很多应用场景中,数据还带有属性信息。如引文网络中,文档可以表示为描述其内容的 bag-of-words 向量。许多半监督学习方法试图联合建模图结构和特征属性。一个常见的想法是用一些正则器对supervised learner 进行正则化。例如:

    • LapSVM 使用流形正则化manifold regularization 从而通过拉普拉斯正则化器来正则化支持向量机。
    • deep semi-supervised embedding 用基于embedding 的正则器对深度神经网络进行正则化。
    • Planetoid 也通过联合预测一个节点的类别标签和上下文来正则化神经网络。

1.1.2 GCN

  1. Graph convolutional neural networks: GCNN 将传统的卷积神经网络推广到图数据。GCNN 主要有两种类型:空间 GCNN、谱域 GCNN

    • 空间 GCNN 将卷积视为 patch operator ,它基于节点邻域信息为每个节点构建一个新的 representation 向量。

    • 谱域 GCNN 通过谱域分解图信号 sRn,然后在谱分量 spectral component上应用谱域滤波器 gθ

      y=UKUsθi=gθ(λi),K=[θ1000θ2000θn]

      其中:图信号 s 每个原始对应于每个节点上的一个标量值;谱域滤波器 gθLsym 特征值的函数;K 为卷积核;U 为拉普拉斯矩阵特征向量 eigenvector 组成的矩阵。

  2. 谱域GCNN 需要显式计算图的拉普拉斯特征向量 eigenvector ,这对于很多实际的大图来讲是难以实现的。解决该问题的一种方法是对谱域滤波器进 gθ 进行 K 阶切比雪夫多项式近似:

    L~sym=2λmaxLsymIy=UKUsk=0KβkTk(L~sym)s

    其中:βkk 阶切比雪夫多项式的系数,Tk()k 阶切比雪夫多项式。

    《Semisupervised classification with graph convolutional networks》 通过限定 K=1 来简化该模型,从而得到:

    H(l+1)=σ(D~1/2A~D~1/2H(l)W(l))

    其中:A~=A+ID~A~ 的度矩阵;H(l) 为第 l 层的 hidden representationH(0)=XW(l) 为第 l 层的参数矩阵;σ() 为激活函数。

    这个简化的模型被称作 GCN

1.1.3 采用 GCN 的半监督分类

  1. 《Semisupervised classification with graph convolutional networks》 论文中,GCN 模型用于半监督分类。模型采用两层卷积层,并使用 softmax 分类器:

    Z=softmax(A^ReLU(A^XW(0))W(1))

    其中: A^=D~1/2A~D~1/2ReLU(.)ReLU 激活函数。

    损失函数为在所有标记数据上的交叉熵损失:

    L=viVlc=1Cyi,clogzi,c

    其中:

    • Vl 为标记的训练集,C 为类别数量。

    • yi 为节点 vi 的类别标记的 one-hot 向量。 yi,c{0,1}yi 的第 c 个元素,表示节点 vi 是否属于类别 c 。它满足:

      c=1Cyi,c=1yi,c{0,1}
    • zi 为节点 vi 预测属于各类别的概率。 zi,czi 的第 c 个元素,表示节点 vi 属于类别 c 的概率。它满足:

      c=1Czi,c=1.00.0zi,c1.0

    GCN 模型很自然地在卷积中结合了图拓扑结构和节点属性,其中未标记节点的属性和附近的标记节点的属性混合,并通过多层 GCN 传播到图上。实验表明,在某些 benchmark 上(如引文网络),GCN 性能明显优于很多 state-of-the-art 方法。

    这里的半监督学习仅考虑监督损失,而并未考虑无监督损失。还有一些工作会同时考虑监督损失和无监督损失。

1.2 分析

  1. 尽管 GCN 效果很好,但是我们还不清楚它的机制。这里我们仔细研究 GCN 模型,分析其原理并指出其局限性。

1.2.1 为什么 GCN 有效

  1. 为分析 GCN 工作良好的原因,我们将其与最简单的全连接网络 fully-connected networks:FCN 进行比较,其中layer-wise 传播规则为:

    H(l+1)=σ(H(l)W(l))

    可以看到 GCNFCN 的区别在于:GCNFCN 的左边乘以一个图卷积矩阵 graph convolution matrix A^=D~1/2A~D~1/2

    为分析图卷积矩阵的影响,我们在 Cora 引文网络上对比了 GCNFCN 在半监督分类上的性能,其中每个类别有 20 个标记数据。对比结果如下表所示,可以看到:即使只有一层,GCN 也要比 FCN 效果好得多。

    首先我们考虑单层的 GCN 网络,它包含两步:

    • 通过对节点特征矩阵 X 应用图卷积,从而生成一个新的 representation 矩阵 H

      H=D~1/2A~D~1/2X
    • 然后将新的 representation 矩阵 H 馈入一个全连接层。

    显然,图卷积是GCN 相对于 FCN 获得巨大性能提升的关键。

  2. 拉普拉斯平滑:假设我们向图中每个节点添加一个自连接 self-connection ,则新的邻接矩阵为 A~=A+I

    在输入特征每个维度上的拉普拉斯平滑 Laplacian Smoothing 定义为:

    hi=(1γ)xi+γ×j=1n(a~i,jd~i×xj),1in

    其中:

    • xi 为节点 vi 在某个维度上的取值(标量)。
    • hi 为节点 vi 在该维度上拉普拉斯平滑结果(标量)。
    • 0<γ1 为平滑参数,它控制当前节点 vi 在该维度上取值及其邻域取值之间的权重。
    • a~i,jA~ 的第 i 行、j 列元素; d~i=ja~i,j 为节点 vi 在新的邻接矩阵上的 degree

    我们以矩阵的形式重写拉普拉斯平滑:

    H=XγD~1L~X=(IγD~1L~)X

    其中 L~=D~A~

    γ=1 即仅使用邻域特征,则拉普拉斯平滑退化为:

    H=D~1A~X=D~1/2A~D~1/2X

    这刚好就是图卷积公式。因此,我们将图卷积视为拉普拉斯平滑的一种特殊形式,称作对称拉普拉斯平滑 Symmetric Laplacian Smoothing 。注意:虽然 γ=1 表示仅使用邻域特征,这里的平滑过程仍然包含当前节点的特征。因为每个节点都有一个自连接,所以每个节点都是自己的邻居。

    拉普拉斯平滑将节点的 representation 计算为自身以及邻域特征的加权平均。由于同一个 cluster 中的节点倾向于紧密连接 densely connected,因此平滑处理使得它们的 representation 彼此相似,这有助于后续的分类过程。从下图( Cora 引文网络)可以看到,仅使用一次拉普拉斯平滑操作就能够带来巨大的性能提升。

  3. 多层架构:从上图中我们也看到,虽然两层 FCN 相对于一层 FCN 有少许提升,但是两层 GCN 比一层 GCN 提升很大。这是因为在第一层 representation 上再次应用平滑会使得同一个 cluster 中节点的输出 representation 更为相似,进一步提升分类性能。

1.2.2 为什么失败

  1. 我们已经表明:图卷积本质上是一种拉普拉斯平滑。一个自然的问题是,GCN 中应该包含多少卷积层?显然层数不是越多越好。一方面,深层 GCN 非常难以训练;另一方面,反复应用拉普拉斯平滑可能会混合来自不同 cluster 的节点的信息,使得它们无法区分。

    我们用 karate club 数据集为例。该数据集包含 34 个节点、78 条边、两种节点类型。我们将隐层维度设为 16,输出层维度为 2。每个节点的特征向量为节点的 one-hot 向量。可以观察到拉普拉斯平滑对该数据集的影响。

    • 在进行一次平滑之后,不同类型节点之间的区分不明显。
    • 在进行两次平滑之后,不同类型节点之间的区分相当明显。
    • 在进行更多次平滑之后,不同类型节点被混合 mixing

    由于这是一个很小的数据集,而且两种类别节点之间存在很多连接,因此混合很快发生。

  2. 我们即将证明:通过多次重复应用拉普拉斯平滑,图的每个连通分量 connected component 内的节点 representation 将收敛到相同的值。对于对称拉普拉斯平滑,它们将收敛到与节点的 degree 的平方根成正比。

    连通分量:任意两点之间都存在路径来访问。

    假设图 Gk 个连通分量 {Ci}i=1k ,对于第 i 个连通分量定义一个示性向量 q(i)Rn ,其定义为:

    qj(i)={1,vjCi0,else 

    因此 q(i) 向量中元素为 1 的项对应于属于第 i 个连通分量的节点。

    定理:如果一个图没有bipartite components,则对于任意信号 sRn 以及 α(0,1] ,都有:

    limm+(IαLrw)ms=[q(1),,q(k)]w1limm+(IαLsym)ms=D1/2[q(1),,q(k)]w2

    其中 w1Rk,w2Rk 。即它们分别收敛到 {q(i)}i=1k 以及 {D1/2q(i)}i=1k 的线性组合。

    证明:LrwLsym 有相同的 n 个特征值 eigenvalues,但是有不同的特征向量 eigenvectors 。如果图没有 bipartite components,则所有特征值都位于 [0,2) 之间。 则 LrwLsym 对应于特征值 0 的特征空间 eigenspaces 分别由 {q(i)}i=1k 以及 {D1/2q(i)}i=1k 派生(即这些向量构成的线性空间)。

    对于 α(0,1] ,则 (IαLrw) 以及 (IαLsym) 的特征值都落在区间 (-1,1] 。因此特征值 1 对应的特征空间分别由 {q(i)}i=1k 以及 {D1/2q(i)}i=1k 派生。

    由于 (IαLrw) 以及 (IαLsym) 的所有特征值的绝对值都小于等于 1,所以经过多次反复相乘之后,它们的结果收敛到特征值 1 对应的特征向量的线性组合,即 {q(i)}i=1k 以及 {D1/2q(i)}i=1k 的线性组合。

  3. 注意,由于每个节点都添加了额外的自连接,因此图中没有 bipartite component 。根据上述结论,过度平滑 over-smoothing 将使得节点之间特征难以区分从而有损于分类性能。

  4. 上述分析总结了堆叠多层卷积层导致 GCN 过度平滑的问题,此外深层的 GCN 也难以训练。因此 《Semisupervised classification with graph convolutional networks》 使用的 GCN 采用两层卷积层。

    但是,由于图卷积是局部滤波器,即邻域节点的特征向量的线性组合,因此浅层 GCN 无法将标签信息充分传播到整个图上。如下图所示(Cora 数据集),随机训练标记数据的减少,GCN 算法的性能迅速下降。可以看到 GCN 准确率随着标记数据规模减少而下降的速度,要比 label propagation 下降速度快得多。由于标签传播label propagation 算法仅使用图结构,而 GCN 同时使用图结构和节点特征,因此这反应了 GCN 模型无法探索全局图结构。

  5. GCN 的另一个问题是,它需要额外的验证集来实现早停,这本质上是需要额外的标记数据作为验证集来执行模型选择。如果我们不使用验证集来训练 GCN,则其性能会大大降低。如上图所示,不带验证集的 GCN 性能(GCN without validation)要比带验证集的 GCN 性能(GCN with validation)差得多。

    《Semisupervised classification with graph convolutional networks》 使用了额外 500 个标记数据作为验证集,这远多于训练标记数据。这是不可取的,因为这违反了半监督学习的目的。此外,这也使得 GCN 和其它方法的比较不公平,因为其它方法(如标签传播)可能根本不需要验证集。

1.3 解决方案

  1. 我们总结了 GCN 模型的优缺点:

    • 优点:

      • 图卷积(拉普拉斯平滑)有助于分类问题。
      • 多层神经网络是功能强大的特征抽取器。
    • 缺点:

      • 图卷积是一个局部滤波器,在标记数据很少的情况下效果不理想。
      • 神经网络需要大量的标记数据作为验证集,从而进行模型选择。

      注:读者认为还有一个缺点是容易过度平滑。

    我们希望在克服缺点的同时充分利用 GCN 模型的优点。因此我们提出了 Co-TrainingSelf-Training 等思想。

1.3.1 Co-Training

  1. 我们提出将 GCN 和随机游走模型一起共同训练,因为后者可以探索全局图结构,从而解决卷积局部性的问题。

    具体而言,我们首先使用随机游走模型找到最置信 confidence 的节点(即,每个标记节点的最近邻居),然后将它们添加到标记数据集合从而训练 GCN

    《Semisupervised classification with graph convolutional networks》 不同,我们直接在训练集上优化 GCN ,无需任何其它标记数据来作为验证集。

  2. 我们使用 partially absorbing random walks:ParWalks 算法作为我们的随机游走模型。ParWalks 是一个二阶马尔科夫链,它在每个状态下都有部分吸收 partial absorption

    考虑下图的简单扩散过程:

    • 首先将单位能量(蓝色)注入到指定的节点。

    • 第一步,某些能量(红色)“存储” 在当前节点,剩余能量(蓝色)传播到邻居中。

    • 每当能量通过节点时,一部分能量就会保留在当前节点、剩余能量继续传播。

      随着该过程的持续,每个节点中存储的能量将累积,并且图中流动的能量越来越少。经过一定数量的step 后,几乎没有剩余能量流动,并且存储的能量总和几乎为 1

    正式地,考虑一个离散时间的随机过程 X={Xt:t0} ,状态空间为 N={1,2,,n} ,其中初始状态 X0=i 是给定的。则下一个状态 X1 是由转移概率 P(X1=jX0=i)=pi,j 来决定:

    P(Xt+2=jXt+1=i,Xt=k)={1,i=j,i=k0,ij,i=k,P(Xt+2=jXt+1=i)=pi,j,ik

    即:如果前一个状态和当前状态是相同的,则下一个状态也永远保持不变;否则下一个状态和前一个状态无关、仅和当前状态有关(类似于普通的随机游走)。

    对于图 G ,定义图上的 ParWalks 转移概率为:

    pi,j={λiλi+di,i=jai,jλi+di,ij

    其中:

    • λi0 为任意参数。当 λi>0 时我们说状态 i (或者说节点 vi )是一个吸收状态 absorbing state;当 λi=0 时我们说状态 i (或者说节点 vi )是一个transient state
    • ai,j 为节点 vi,vj 之间边的权重, di 为节点 videgree

    定义 Λ=diag(λ1,,λn) ,则 Λ 类似于一个正则化器,它控制每个节点的吸收状态, λi 越大则 pi,i 越大(意味着节点停留在原地的概率越大)。因此,我们称 Λ 为正则器矩阵 regularizer matrix

    我们关心的是从节点 vi 开始的随机游走被节点 vj 吸收的概率 ri,j 。令 R=[ri,j]Rn×n 为吸收概率矩阵,则可以证明:如果对于某个 iλi>0 ,则有 R=(Λ+L)1Λ

    我们可以求解 R 来得到每个标记数据的最近邻节点,但是涉及到矩阵的求逆。为降低计算复杂度,我们采用随机游走采样来快速逼近。

  3. ParWalks 算法:

    • 输入:

      • 图拉普拉斯矩阵 L
      • 正则化器矩阵 Λ
    • 输出:新的标记节点集合

    • 算法步骤:

      • 计算吸收概率矩阵 R=(Λ+L)1Λ

      • 对于每个类别 k ,假设 Sc 为类别 c 的标记节点集合,计算:

        pi=jScri,j,p=(p1,,pn)Rn

        即计算每个节点 vi 距离 Sc 中标记节点的吸收概率之和 pi ,即每个节点隶属于类别 c 的置信度。 p 为置信度向量 confidence vector

        然后从 {p1,,pn} 中挑选 top - t 个节点,并将这些节点添加到标签 c 对应的训练标记数据。

        用随机游走来描述就是:观察哪些节点开始的随机游走序列最容易被类别为 c 的节点所吸收,那么就将这些节点视为类别 c

1.3.2 Self-Training

  1. GCN “看到” 更多标记数据的另一个方法是对 GCN 进行 self-train 。具体而言,我们首先通过给定的标记数据来训练 GCN,然后通过比较 softmax 得分为每个类别选择最置信的未标记数据,然后将这些未标记数据添加到对应的类别的标记数据集合中。然后,我们使用扩展的标记数据集合来训练 GCN,并使用预先训练好的 GCN 来作为初始化。

    GCN 发现的最置信的样本应该和标记数据共享相似(但不相同)的 representation,将它们添加到标记数据集合有助于训练更强大和准确的分类器。此外,它还在以下场景补充了 Co-Training 方法:当图具有很多孤立的、小的连通分量时,此时无法通过随机游走来传播标签。

    Co-TrainingSelf-Training 本质都是寻找最置信的未标记数据,从而将它们加入到标记数据中来扩充标记数据集。

    • Co-Training 是通过图结构来寻找最置信的节点,方法是基于随机游走寻找最近邻节点,无需模型参与。
    • Self-Training 是通过图结构和节点特征来寻找最置信的节点,方法是基于 GCN 模型寻找最相似节点。
  2. Self-Training 算法:

    • 输入:训练好的 GCN 模型、图 G

    • 输出:新的标记节点集合

    • 算法步骤:

      • 计算所有节点的预测输出:Z=GCN(X)Rn×C
      • 对每个类别 c ,从 {zi,c}i=1n 中找到 top - t 个节点,并将这些节点添加到标签 c 对应的训练标记数据。
  3. 为提升标签多样性 diversity 并训练更鲁棒的分类器,我们提出联合 Co-TrainingSelf-Training 。具体而言:

    • 使用Co-TrainingSelf-Training 分别挖掘出各自最置信的未标记节点。
    • 使用二者未标记节点的并集来扩充标记数据集合,并继续训练 GCN,这称为 Union。其中使用预先训练好的 GCN 来作为二次训练的初始化。
    • 使用二者未标记节点的交集来扩充标记数据集合,并继续训练 GCN,这称为 Intersection。其中使用预先训练好的 GCN 来作为二次训练的初始化。

    注意:我们在扩展的标记数据上训练 GCN,无需任何额外其它验证数据。只要扩展的标记数据包含足够多的正确的标记数据,则我们的方法就有希望训练出良好的 GCN 分类器。

  4. 但是,训练一个 GCN 分类器需要多少标记数据?假设 GCN 层数为 τ,图的平均 degreed^ ,则我们提出通过求解 (d^)τ×ηn 来得到标记样本数量 η 的下界(根据定义有 |Vl|=η)。背后的思想是:估计一个 τ 层的 GCN 需要多少标记数据可以传播到整个图。

1.4 实验

  1. 数据集:我们在三种常用的引文网络上进行实验:CiteSeer, Cora, PubMed。每个数据集上,文档采用 bag-of-word 特征向量,文档之间的引文链接通过 0/1 值的邻接矩阵来描述。

    这些数据集的统计信息如下表所示。

  2. baseline 方法:

    我们和几种 state-of-the-art 方法比较,包括:带验证集的 GCN:GCN+V、不带验证集的 GCN:GCN-V、使用切比雪夫滤波器的 GCN(Cheby)、使用 ParWalks 的标记传播算法 label propagation:LPPlanetoid 算法、DeepWalk 算法、流形正则化 manifold regularization:ManiReg、半监督嵌入semi-supervised embedding:SemiEmbiterative classification algorithm:ICA

    我们对比了我们提出的 Co-Training、Self-Training、Union、Intersection 等方法。

  3. 参数设置:

    • 对于 ParWalks,我们设置 Λ=αI ,且 α=106

    • 对于 GCN,我们使用和 《Semisupervised classification with graph convolutional networks》 相同的超参数,这些超参数是模型在 Cora 数据集上验证好的:学习率 0.01、最多 200epochL2 正则化系数为 5×1042层卷积层、隐层维度16

    • 对于 GCN(Cheby),我们选择多项式的阶数为 K=2

    • 每次执行时,我们随机拆分标记数据,随机选择其中一小部分标记数据作为训练集,然后随机选择 1000 个标记数据作为测试集。

      • 对于 GCN +V ,我们还选择额外的 500个标记数据作为验证集。

      • 对于 GCN -V,我们仅简单地优化 GCN 的训练 accuracy

      • 对于所有方法,我们分别评估不同规模的训练标记数据的效果:

        • Cora,CiteSeer 数据集上,训练标记数据规模分别为 0.5%, 1%, 2%, 3%, 4%, 5%
        • PubMed 数据集上,训练标记数据规模为 0.03%, 0.05%, 0.1%, 0.3%

        我们选择这些比例是为了方便和 《Semisupervised classification with graph convolutional networks》 的实验结果进行比较。

      对于 Cora,CiteSeer 数据集,每种方法执行 50 轮并报告平均的 accuracy;对于 PubMed 数据集,每种方法执行 10 轮并报告平均的 accuracy

  4. 不同方法在各数据集上的效果如下表所示,其中每列测试准确率最高的方法以粗体突出显示,top 3 方法以下划线显示。

    结论:

    • 在每个数据集上,我们的方法大多数情况下都要比其它方法好得多。

    • 如果数据具有很强的流形结构(如 PubMed),则 Co-Training 效果更好;否则 Self-Training 效果更好。Self-TrainingPubMed 上表现较差,因为它未能充分利用图结构。

    • 当训练标记数据规模较大时,Intersection 效果更好,因为它会过滤很多扩展的、但是无效的标记数据;大多数情况下,Union 表现最佳,因为它为训练集添加了更多种多样的标签数据。

    • 当训练标记数据规模较小时,我们所有的方法都远远超越 GCN-V、并在大多数情况下超越了 GCN +V

      这验证了我们的分析,即 GCN 模型无法在标记数据较少时有效地将标签信息传播到整个图。

    • 随着训练标记数据规模的增加,大多数情况下我们的方法仍然优于 GCN +V ,这表明我们方法的有效性。

    • 当训练标记数据规模足够大时,我们方法和 GCN 表现差不多,这表明当标记数据充足时已经可以训练一个良好的 GCN 分类器。

    • Cheby 在大多数情况下表现不佳,这可能是由于过拟合造成的。

  5. 我们将我们的方法和其它 state-of-the-art 方法比较,比较结果如下表所示。实验配置和前面的相同,除了对于每个数据集我们对每个类别采样 20 个训练标记数据,这对应于 CiteSeer 训练集大小 3.6%Cora5.1%PubMed0.3%

    其它 baseline 直接拷贝自 《Semisupervised classification with graph convolutional networks》

    结论:我们方法的效果和 GCN 类似,并明显优于其它 baseline 方法。

  6. 我们方法一个常用的超参数是新添加标记数据的数量:添加太多标记数据会引入噪声,添加太少标记数据则无法训练出良好的 GCN 分类器。

    如前文所述,我们估计训练 GCN 所需要的总的标记数据量 η 的下界为:

    (d^)τ×ηn

    我们在实验中选择 3η 。实际上我们发现选择 2η,3η,4η 的效果差不多。

  7. 我们遵循 《Semisupervised classification with graph convolutional networks》 将卷积层数量设为 2 。我们观察到 2GCN 表现最好。当卷积层数量增加时,分类准确率急剧下降,这可能是因为过度平滑。

  8. 计算代价:

    • 对于 Co-Training,额外的计算开销是随机游走模型,这需要求解 R=(Λ+L)1Λ 。在我们的实验中,由于 Cora/CiteSeer 只有数千个节点,因此计算时间几乎可以忽略不记;而 PubMedMatlab R2015b 上花的时间也不到 0.38 秒。

      我们可以使用基于节点的 graph engine 进一步加速计算速度,因此我们方法的可扩展性不是问题。

    • 对于 Self-Training,我们只需要训练 GCN 几个额外的 epoch,它建立在预先训练好的 GCN 之上,因此收敛速度很快。因此 Self-Training 训练时间和 GCN 相当。

二、GNNEXPLAINER[2019]

  1. 图是强大的数据表示形式,而图神经网络Graph Neural Network: GNN 是处理图的最新技术。 GNN 能够递归地聚合图中邻域节点的信息,从而自然地捕获图结构和节点特征。

    尽管GNN 效果很好,但是其可解释性较差。由于以下几个原因,GNN 的可解释性非常重要:

    • 可以提高对 GNN 模型的信任程度。
    • 在越来越多有关公平fairness 、隐私privacy 、以及其它安全挑战safety challenge 的关键决策应用application 中,提高模型的透明度 transparency
    • 允许从业人员理解模型特点,从而在实际环境中部署之前就能识别并纠正模型的错误。

    尽管目前尚无用于解释 GNN 的方法。但是在更高层次,我们可以将包括 GNNNon-GNN 的可解释性方法分为两个主要系列:

    • 使用简单的代理模型 surrogate model 局部逼近locally approximate 完整模型full model,然后探索这个代理模型以进行解释。

      这可能是以模型无关model-agnostic 的方式来完成的,通常是通过线性模型 linear model 或者规则集合 set of rules 来学习预测的局部近似,可以充分代表预测结果。

    • 仔细检查模型的相关特征relevant feature,并找到high-level 特征的良好定性解释good qualitative interpretation ,或者识别有影响力的输入样本influential input instance

      如通过特征梯度 feature gradients、神经元反向传播中输入特征的贡献、反事实推理counterfactual reasoning 等。

    上述两类方法专注于研究模型的固有解释,而后验post-hoc 的可解性方法将模型视为黑盒,然后对其进行探索从而获得相关信息。

    但是所有这些方法无法融合关系信息,即图的结构信息。由于关系信息对于图上机器学习任务的成功至关重要,因此对 GNN 预测的任何解释都应该利用图提供的丰富关系信息、以及节点特征。论文 《GNNExplainer: Generating Explanations for Graph Neural Networks》 提出了 一种解释 GNN 预测的方法,称作 GNNEXPLAINERGNNEXPLAINER 接受训练好的GNN 及其预测,返回对于预测最有影响力的、输入图的一个小的子图small subgraph ,以及节点特征的一个小的子集small subset

    如下图所示,这里展示了一个节点分类任务,其中在社交网络上训练了 GNN 模型 Φ 从而预测体育活动。给定训练好的GNN Φ 以及对节点 vi 的预测 y^i=basketballGNNEXPLAINER 通过识别对预测 y^i 有影响力的输入图的一个小的子图、以及节点特征的一个小的子集来生成解释explanation ,如右图所示。

    • 通过检查 y^i 的解释 explanation,我们发现 vi 社交圈中很多朋友都喜欢玩球类游戏,因此 GNN 预测 vi 可能会喜欢篮球。
    • 同样地,通过检查 y^j 的解释 explanation我们发现 vj 社交圈中很多朋友都喜欢水上运动和沙滩运动,因此 GNN 预测 y^j=sailing (帆船运动)。

    GNNEXPLAINER 方法和 GNN 模型无关,可以解释任何 GNN 在图的任何机器学习任务上的预测,包括节点分类、链接预测、图分类任务。它可以解释单个实例的预测 single-instance explanation ,也可以解释一组实例的预测 multi-instance explanation

    • 在单个实例预测的情况下,GNNEXPLAINER 解释了 GNN 对于特定样本的预测。
    • 在多个实例预测的情况下,GNNEXPLAINER 提供了对于一组样本(如类别为“篮球”的所有节点)的预测的一致性解释(即这些预测的共同的解释)。

    GNNEXPLAINER 将解释指定为训练 GNN 的整个输入图的某个子图,其中子图基于 GNN 的预测最大化互信息mutual information 。这是通过平均场变分近似 mean field variational approximation ,以及学习一个实值graph mask 来实现的。这个 graph mask 选择了 GNN 输入图的最重要子图。同时,GNNEXPLAINER 还学习了一个 feature mask,它可以掩盖不重要的节点特征。

    论文在人工合成图、以及真实的图上评估GNNEXPLAINER 的效果。实验表明:GNNEXPLAINERGNN 的预测提供了一致而简洁的解释。

  2. 虽然解释GNN 问题没有得到很好的研究,但相关的可解释性 interpretability 和神经调试neural debugging 的问题在机器学习中得到了大量的关注。在high-level 上,我们可以将那些 non-graph neural network 的可解释性方法分为两个主要方向:

    • 第一个方向的方法制定了完整神经网络full neural network 的简单代理模型。这可以通过模型无关model-agnostic 的方式完成,通常是通过学习 prediction 周围的局部良好近似(例如通过线性模型或规则集合),代表预测的充分条件sufficient condition
    • 第二个方向方法确定了计算的重要方面,例如,特征梯度feature gradient、神经元的反向传播对输入特征的贡献、以及反事实推理。然而,这些方法产生的显著性映射 saliency map 已被证明在某些情况下具有误导性,并且容易出现梯度饱和等问题。这些问题在离散输入(如图邻接矩阵)上更加严重,因为梯度值可能非常大而且位于一个非常小的区域interval 。正因为如此,这种方法不适合用来解释神经网络在图上的预测。

    事后可解释性post-hoc interpretability 方法不是创建新的、固有可解释的模型,而是将模型视为黑箱,然后探测模型的相关信息。然而,还没有利用关系型结构(如graph)方面的工作。解释图结构数据预测的方法的缺乏是有问题的,因为在很多情况下,图上的预测是由节点和它们之间的边的路径的复杂组合引起的。例如,在一些任务中,只有当图中存在另一条替代路径形成一个循环时,一条边才是重要的,而这两个特征,只有在一起考虑时,才能准确预测节点标签。因此,它们的联合贡献不能被建模为单个贡献的简单线性组合。

    最后,最近的GNN 模型通过注意力机制增强了可解释性。然而,尽管学到的edge attention 值可以表明重要的图结构,但这些值对所有节点的预测都是一样的。因此,这与许多应用相矛盾,在这些应用中,一条边对于预测一个节点的标签是至关重要的,但对于另一个节点的标签则不是。此外,这些方法要么仅限于特定的GNN架构,要么不能通过共同考虑图结构和节点特征信息来解释预测结果。

  3. GNNEXPLAINER 提供了各种好处 ,包括可视化语义相关结构以进行解释的能力、以及提供洞察GNN 的错误的能力。

2.1 方法

  1. 定义图 G=(V,E,X) ,其中:

    • V={v1,,vn} 为节点集合,节点数量为 n
    • E={ei,j} 为边集合,ei,j=(vi,vj) ,边数量为 m
    • 每个节点 vi 关联一个特征向量 xiRd ,所有节点的特征向量拼接为特征矩阵 XRn×dd 为特征向量维度。

    不失一般性,我们考虑节点分类问题的可解释性。定义 f 为一个节点到类别标签的映射函数:f:V{1,,C} ,其中 C 为类别数量。GNN 模型 Φ 在训练集的所有节点上优化从而逼近 f ,然后用于预测未标记节点的label

  2. 我们假设GNN 模型 Φ 采用消息传递机制。在第 l 层,GNN 模型 Φ 的更新涉及三个关键计算:

    • 首先,模型计算每对节点pair 对之间传递的消息。节点pair(vi,vj) 之间的消息定义为:

      mi,j(l)=MSG(hi(l1),hj(l1),ri,j)

      其中:MSG(.) 为消息函数;hi(l1) 为节点 vi 在第 l1 层的 representationri,j 为节点 vivj 之间的关系。

    • 然后,对于每个节点 viGNN 聚合来自其邻域的所有消息:

      ai(l)=AGG({mi,j(l)vjNi})

      其中:AGG(.) 为一个邻域聚合函数;Ni 为节点 vi 的邻域集合。

    • 最后,对于每个节点 viGNN 根据 ai(l),hi(l1) 来计算 vi 在第 l 层的 representation

      hi(l)=UPDATE(ai(l),hi(l1))

      其中 UPDATE(.) 为节点状态更新函数。

    最终节点 viembeddingvi 在第 L 层输出的 representation

    zi=hi(L)

    对于采用 MSG,AGG,UPDATE 计算组成的任何 GNN ,我们的 GNNEXPLAINER 可以提供解释。

  3. 我们的洞察insight 是观察到:节点 v 的计算图computation graph 是由 GNNneighborhood-based 聚合来定义,如下图所示。这个计算图完全决定了用于生成节点 v 的预测 y^ 的所有信息。具体而言,节点 v 的计算图告诉 GNN 如何生成节点 vembedding z

    定义节点 v 的计算图 computation graphGc(v) ,它关联一个二元binary 邻接矩阵 Ac(v)Rn×n ,其中 Ac(v)[i,j]{0,1} 取值为01 ; 也关联一个特征矩阵 Xc(v)={xjvjGc(v)}

    GNN 模型 Φ 学习一个条件分布 PΦ(YvGc(v),Xc(v)) ,表示给定节点计算图 Gc(v)、节点特征矩阵 Xc(v) 的条件下,节点 v 属于各类别的概率。其中 Yv{1,,C} 为一个随机变量。

    一旦GNN 模型学到这样的分布之后,对于节点 vGNN 的类别预测结果为 y^=Φ(Gc(v),Xc(v)) ,意味着它完全由三个因素决定:模型 Φ、图结构信息 Gc(v) 、节点特征信息 Xc(v) 。这个观察结果意味着我们只需要考虑图结构 Gc(v) 和节点特征 Xc(v) 来解释 y^ ,如下图 A 所示。

    正式地讲,GNNEXPLAINER 为预测 y^ 生成解释explanation,记作 (GS,XSF) 。其中:

    • GS 为计算图的一个小的子图small subgraph ,如图 A 所示。

    • XSGS 关联的特征,XSF 为节点特征的一个小的特征子集 small subsetF 表示通过 mask F 来遮盖,即:XSF={xjFvjGS} ,如图B 所示。

      假设原始的节点特征集合为 A={A1,,Ad} ,则经过 mask F 遮盖之后的特征集合为:

      AF={At1,,AtF},1t1tFd

      它是原始特征集合的一个小的特征子集,且有:xjF=(xj,t1,xj,t2,,xj,tF)RF 为遮盖后的特征向量。

    下图中:

    • A 给出了一个 GNN 在节点 v 处的计算图 Gc(v) ,它用于得到节点 v 的类别预测 y^

      Gc(v) 中的某些边构成重要的消息传播路径(绿色),这些路径允许有用的节点消息跨 Gc(v) 传播并在节点 v 处聚合从而进行预测;相反,Gc(v) 中的另一些边不重要(橙色)。但是无论消息重不重要,在节点 vGNN 都会具有所有消息(包括不重要的消息)从而进行预测,这可能会稀释重要的消息。

      GNNEXPLAINER 的目标是识别少量对于预测至关重要的重要特征和路径(绿色)。

    • B 表示 GNNEXPLAINER 通过学习节点特征mask 来确定 GS 中节点的那些特征维度对于预测至关重要。

  4. 接下来我们详细描述 GNNEXPLAINER。给定训练好的 GNN 模型 Φ 以及一个预测 prediction (即单实例解释single-instance explanation)、或者一组预测(即多实例解释multi-instance explanation ), GNNEXPLAINER 将通过识别对模型 Φ 的预测影响最大的计算图的子图、节点特征的子集从而生成解释。

    在多实例解释中,GNNEXPLAINER 将每个实例的解释聚合在一起并自动抽取为一个原型proto。这个原型代表每个实例解释的公共部分,即proto 可以对所有这些实例进行解释。

2.1.1 单实例解释

  1. 给定一个节点 v ,我们的目标是识别对于该节点的 GNN 预测 y^ 很重要的子图 GSGc ,以及关联特征矩阵 XS={xjvjGS} 。现在我们不考虑特征 mask,这留待下一步讨论。

    我们使用互信息mutual information:MI 来刻画子图的重要性,并将 GNNEXPLAINER 形式化为以下最优化问题:

    maxGSMI(Y,(GS,XS))=H(Y)H(YG=GS,X=XS)

    其中:

    • H() 为熵,它表示GNN 对于节点 v 类别预测结果的不确定性程度。 Y{1,,C} 为代表 GNN 预测节点 v 类别的随机变量。

      注意:这里没有任何关于节点 v 真实类别的信息。也就是我们不关心 GNN 预测得准不准,而是仅关心哪些因素和 GNN 预测结果相关。

      H(Y) 其实是 H(YG=G,X=X) ,即以原始图、原始特征矩阵来进行的预测所得到的熵。

    • H() 为条件熵,它表当节点 v 的计算图被限制为子图 GS 、节点特征被限制为 XS 后,GNN 预测结果不确定性程度。

    MI 刻画了当节点 v 的计算图被限制为子图 GS 、节点特征被限制为 XS 后,预测结果为 y^=Φ(Gc,Xc) 的概率的变化。例如:

    • 考虑 vjGc(vi),vjvi 。如果从 Gc(vi) 中移除 vj ,使得预测结果为 y^i 的概率急剧降低,则节点 vjvi 预测的一个很好的解释。
    • 类似地,考虑 vj,vkGv(vi),vj,vkvi 。如果移除 vj,vk 之间的边,使得预测结果为 y^i 的概率急剧降低,则 (vj,vk) 之间的边是 vi 预测的一个很好的解释。
  2. MI(Y,(GS,XS)) 的第一项 H(Y) 为常数项,因为对于给定的、训练好的 GNN,节点 v 的预测结果是 y^ 的概率是已知的,和 GS 无关。则有:

    maxGSMI(Y,(GS,XS))=minGSH(YG=GS,X=XS)=maxGSEYGS,XS[logPΦ(YG=GS,X=XS)]

    因此,对于预测 y^ 的解释是一个子图 GS ,当 GNN 被限制在 GS 时最小化 Φ 不确定性 uncertainty 。在效果上,GS 最大化预测为 y^ 的概率。

    理论上当 GS=Gc 时,上式最大化。为了获得更紧凑的解释,我们对 GS 的大小施加约束,如 |GS|KM ,使得 GS 最多只有 KM 个节点。实际上这意味着 GNNEXPLAINER 旨在通过采取对预测提供最高互信息的 KM 个节点进行降噪。

  3. 直接优化 GNNEXPLAINER 的目标函数很困难,因为 Gc 有指数级的子图 GS 作为 y^ 的候选解释。因此,我们考虑子图 GS 的分数邻接矩阵fractional adjacency matrix,即 ASRn×n, 其中 AS[i,j][0.0,1.0]0~1.0 之间。此外我们施加约束 AS[j,k]Ac[j,k],使得没有边的节点之间 AS[j,k] 也为零。

    这种连续性松弛continuous relaxation 可以解释为 Gc 子图分布的变分近似variational approximation 。具体而言,我们将 GSG 视为一个随机图变量random graph variable,则目标函数变为:

    minGEGSGH(YG=GS,X=XS)

    我们假设目标函数是凸函数,则 Jensen 不等式给出以下的上界:

    minGH(YG=EG[GS],X=XS)

    实际上由于神经网络的复杂性,凸性假设不成立。但是通过实验我们发现:优化带正则化的上述目标函数通常求得一个局部极小值,该局部极小值具有高质量的解释性。

  4. 为精确地估计 EG ,我们使用平均场变分近似mean-field variational approximation ,并将 G 分解为多元伯努利分布multivariate Bernoulli distribution

    PG(GS)=(j,k)GcAS[j,k]

    这允许我们估计对于平均场近似的期望从而获得 AS ,其中 AS 的第 (j,k) 元素代表:节点 (vj,vk) 之间存在边的期望。

    • 我们从实验观察到:尽管 GNN 是非凸的,但是这种近似approximation 结合一个可以提升离散型discreteness 的正则化器一起,结果可以收敛到良好的局部极小值。

    • 可以通过使用邻接矩阵的计算图的掩码 Acσ(M) 替换要优化的 EG[GS] ,从而优化上式中的条件熵。即:

      minGH(YG=Acσ(M),X=XS)=minMc=1CPΦ(Y=cG=Acσ(M),X=XS)logPΦ(Y=cG=Acσ(M),X=XS)

      其中:

      • MRn×n 表示我们需要学习的mask 矩阵。
      • 表示逐元素乘积。
      • σ()sigmoid 函数,它将 mask 映射到 0.0~1.0 之间。

    GNNExplainer 的核心在于:用 0.0 ~ 1.0 之间的 mask 矩阵(待学习)来调整邻接矩阵,从而最小化预测的熵。但是,这种方法只关心哪个子图对预测结果最重要,并不关心哪个子图对 ground-truth 最有帮助。

    可以通过标签类别和模型预测之间的交叉熵来修改上式中的条件熵,从而得到哪个子图对 ground-truth 最有帮助。

    M 通过随机梯度下降来学习。

  5. 在某些应用application中,我们不关心模型预测结果的 y^ 的解释性,而更关注如何使得模型能够预测所需要类别的标签。这里我们可以使用标签类别和模型预测之间的交叉熵来修改上式中的条件熵,即:

    minMc=1CI[y=c]logPΦ(Y=cG=Acσ(M),X=Xc)
  6. 尽管有不同的动机和目标,在 Neural Relational Inference 中也发现了masking 方法。

  7. 最后,我们计算 σ(M)Ac 的逐元素乘积,并通过阈值移除 M 中的较小的值,从而得出节点 v 处模型预测 y^ 的解释 GS

2.1.2 图结构 & 节点特征

  1. 为确定哪些节点特征对于预测 y^ 最重要,GNNEXPLAINER 针对 GS 中的节点学习一个特征选择器 FGNNEXPLAINER 考虑 GS 中节点的特征子集 AF={At1,,AtF},1t1tFd ,其中每个节点特征选择后的特征向量为 xjF=(xj,t1,xj,t2,,xj,tF)。所有 GS 中节点的选择后的特征矩阵为 XSF

    我们通过一个 mask 来定义特征选择器:

    f=(f1,f2,,fd)

    其中 fi{0,1} 取值为01 ,当它为1 时表示保留对应特征,否则遮盖对应特征。因此 xjF 包含未被 F 掩盖mask out 的节点特征。

    我们定义特征 mask 矩阵为:

    F=[f1f2fdf1f2fdf1f2fd]R|GS|×d

    则有:XSF=XSF 。其中 表示逐元素乘积。

  2. 现在我们在互信息目标函数中考虑节点特征,从而得到解释explanation (GS,XSF)

    maxGS,FMI(Y,(GS,F))=H(Y)H(YG=GS,X=XSF)

    该目标函数同时考虑了对预测 y^ 的子图结构解释、节点特征解释。

  3. 从直觉上看:

    • 如果某个节点特征不重要,则 GNN 权重矩阵中的相应权重应该接近于零。mask 这类特征对于预测结果没有影响。
    • 如果某个节点特征很重要,则 GNN 权重矩阵中相应权重应该较大。mask 这类特征会降低预测为 y^ 的概率。

    但是在某些情况下,这种方法会忽略对于预测很重要、但是特征取值接近于零的特征。为解决该问题,我们对所有特征子集边际化marginalize,并在训练过程中使用蒙特卡洛估计从 XS 中节点的经验边际分布中采样得到边际分布。

    此外,我们使用 reparametrization 技巧将目标函的梯度反向传播到 mask 矩阵 F

    具体而言,为了通过 X 反向传播,我们 reparametrize X 为:

    X=Z+(XSZ)F, s.t. jfjKF

    其中:

    • Z 维从经验分布中采样到的随机变量。
    • KF 为要保留的最大特征数量。

    上式等价于:X=(1F)Z+FXS 。因此 X 由两部分加权和得到:

    • Z :来自于每个维度边际分布采样得到的,权重为 1F ,代表噪音部分。这是为了解决特征取值接近于零但是又对于预测很重要的特征的问题。
    • XS:来自于子图节点的特征向量,权重为 F ,代表真实信号部分。

    这种特征可解释方法可以用于普通的神经网络模型。

  4. 为了在解释explanation中加入更多属性,可以使用正则化项扩展 GNNEXPLAINER 的目标函数。可以包含很多正则化项从而产生具有所需属性的解释。

    • 例如,我们使用逐元素的熵来鼓励结构mask 和节点特征mask 是离散的。
    • 例如,我们可以将 mask 参数的所有元素之和作为正则化项,从而惩罚规模太大的mask
    • 此外, GNNEXPLAINER 可以通过诸如拉格朗日乘子Lagrange multiplier 约束、或者额外的正则化项等技术来编码domain-specific 约束。
  5. 最后需要重点注意的是:每个解释explanation 必须是一个有效的计算图。具体而言, (GS,XS) 需要允许 GNN 的消息流向节点 v ,从而允许 GNN 做出预测 y^

    重要的是,GNNEXPLAINER 的解释一定是有效的计算图,因为它在整个计算图上优化结构 mask。即使一条断开的边对于消息传递很重要,GNNEXPLAINER 也不会选择它作为解释,因为它不会影响 GNN 的预测结果。实际上,这意味着 GS 倾向于是一个小的连通子图small connected subgraph

    这是因为 GNNExplainer 会运行 GNN,如果计算图无效则运行 GNN 的结果失败或者预测效果很差,因此也就不会作为可解释结果。

2.1.3 多实例解释

  1. 有时候我们需要回答诸如 “为什么 GNN 对于一组给定的节点预测都是类别 c ” 之类的问题。因此我们需要获得对于类别 c 的全局解释。

    这里我们提出一个基于 GNNEXPLAINER 的解决方案,从而在类别 c 中的一组不同节点的各自单实例解释中,找到针对类别c 的通用的解释。这个问题与寻找每个解释图中最大公共子图密切相关,这是一个 NP-hard 问题。这里我们采用了解决该问题的神经网络方案,案称作基于对齐alignment-basedmulti-instance GNNEXPLAINER

  2. 对于给定的类 c,我们首先选择一个参考节点 reference node vc。直观地看,该节点是能够代表该类别的原型节点 prototypical node

    • 可以通过计算类别 c 中所有节点的 embedding 均值,然后选择类别 c 中节点 embedding 和这个均值最近的节点作为参考节点。
    • 也可以使用有关先验知识,选择和先验知识最匹配的节点作为类别 c 的参考节点。

    给定类别 c 的参考节点 vc ,以及它关联的reference 解释图 GS(vc) ,我们将类别 c 中所有节点的解释图都对齐到 GS(vc)

    利用微分池化differentiable pooling 的思想,我们使用一个松弛relaxed 的对齐矩阵alignment matrix来找到解释图 GS(v) 中的节点和 reference解释图 GS(vc) 中的节点之间的对应关系。设节点 v 待对齐的解释图的邻接矩阵和特征矩阵分别为 Av,Xv ,设参考节点的解释图的邻接矩阵和特征矩阵分别为 A,X 。我们定义松弛对齐矩阵 relaxed alignment matrix PRnv×n,则优化目标为:

    minP|PAvPA|+|PXvX|

    其中:

    • nvGS(v) 中节点数量,nGS(vc) 中节点数量。
    • P 的元素大于零且每一行的和为 1.0

    上式第一项表示:经过对齐之后, GS(v) 对齐后的邻接关系应该尽可能接近 A ;第二项表示:经过对齐之后, GS(v) 对齐后的特征矩阵应该尽可能接近 X

    实际上对于两个大图 GS(v)GS(vc) ,上述最优化问题很难求解。但是由于单实例解释生成的 GS(v)GS(vc) 都是简洁的、很小的图,因此可以有效地计算几乎最优的对齐方式。

  3. 一旦得到类别 c 中所有节点对齐后的邻接矩阵,我们就可以使用中位数来生成一个原型prototype 。之所以使用中位数,是因为中位数可以有效对抗异常值。即:

    Aproto=median(A~i)

    其中 A~i 为类别 c 中第 i 个节点的 explanation 的对齐后的邻接矩阵(即 PAiP )。

    原型 Aproto 允许我们深入了解属于某一类的节点之间共享的图结构模式。然后对于特定的节点,用户可以通过将节点 explanation 和类别原型进行比较,从而研究该特定节点。

  4. 在多个解释图的邻接矩阵对齐过程中,也可以使用现在的图库 graph library 来寻找这些解释图的最大公共子图,从而替换掉神经网络部分。

  5. 在多实例解释中,解释器explainer 不仅必须突出与单个预测的局部相关信息,还需要强调不同实例之间更高level 的相关性。

    这些实例之间可以通过任意方式产生关联,但是最常见的还是类成员class-membership关联。假设类的不同样本之间存在共同特征,那么解释器需要捕获这种共同的特征。例如,通常发现诱变化合物 mutagenic compounds 具有某些特定属性的功能团,如 NO2

    如下图所示,经验丰富的专家可能已经注意到这些功能团的存在。当 GNNEXPLAINER 生成原型prototype 时,可以进一步加强这方面的证据。下图来自于 MUTAG 数据集的诱变化合物。

2.1.4 扩展

  1. 机器学习任务的扩展:除了解释节点分类之外,GNNEXPLAINER 还可以解释链接预测和图分类,无需更改其优化算法。

    • 在预测链接 (vj,vk) 时,GNNEXPLAINER 为链接的两个端点学习两个mask XS(vj),XS(vk)
    • 在图分类时,目标函数中的邻接矩阵是图中所有节点邻接矩阵的并集 union

    注意:图分类任务和节点分类任务不同。由于图分类任务存在节点 embedding的聚合,因此解释 GS 不必是一个连通子图。根据不同的场景,某些情况下要求解释是一个连通子图,此时可以提取解释中的最大连通分量。

  2. 模型扩展: GNNEXPLAINER 能够处理所有基于消息传递的GNN,包括:Graph Convolutional Networks:GCNGated Graph Sequence Neural Networks:GGS-NNsJumping Knowledge Networks:JK-NetAttention Networks-GATGraph Networks:GN、具有各种聚合方案的 GNNLine-Graph NNsposition-aware GNN、以及很多其它 GNN 架构。

  3. GNNEXPLAINER 优化中的参数规模取决于节点 v 的计算图 Gc 的大小。具体而言,Gc(v) 的邻接矩阵 Ac(v) 等于掩码矩阵 M 的大小,其中 M 是需要被 GNNEXPLAINER 学习的。

    但是,由于单个节点的计算图通常较小,因此即使完整的输入图很大 GNNEXPLAINER 仍然可以有效地生成解释。

2.2 实验

  1. 数据集:

    • 人工合成数据集:我们人工构建了四种节点分类数据集,如下表所示。

      • BA-SHAPES 数据集:我们从 300 个节点的 Barabasi-Albert:BA 基础图、以及一组80 个五节点的房屋house 结构的主题 motif 开始,这些 motif 被随机添加到基础图的随机选择的节点上。进一步地我们添加 0.1×n 条随机边,从而得到经过扰动的合成图。

        根据节点的结构角色,节点为以下四种类型之一:house 顶部节点、house 中间节点、house 底部节点、非house 节点。

      • BA-COMMUNITY 数据集:是两个 BA-SHAPES 图的并集。节点具有正态分布的特征向量,并且根据其结构角色、社区成员(两种社区)分配为8种类别之一。

      • TREE-CYCLES:从 8-level 平衡二叉树为基础图、一组 80 个 六节点的环状 motif 开始,这些 motif 随机添加到基础图的随机选择的节点上。

      • TREE-GRID:和 TREE-CYCLES 相同,除了使用 3x3 的网格 motif 代替六节点的环 motif 之外。

    • 真实数据集:我们考虑两个图分类数据集。

      • MUTAG:包含 4337 个分子图的数据集,根据分子对于革兰氏阴性菌伤寒沙门氏菌Gram-negative bacterium S.typhimurium 的诱变作用mutagenic effect 进行标记。

      • REDDIT-BINARY:包含 2000个图的数据集,每个图代表Reddit 上讨论的话题 thread 。在每个图中,节点代表话题下参与讨论的用户,边代表一个用户对另一个用户的评论进行了回复。

        图根据话题中用户交互类型进行标记:r/IAmA, r/AskReddit 包含 Question-Answer 交互, r/TrollXChromosomes and r/atheism 包含Online-Discussion 交互。

  2. Baseline 方法:很多可解释性方法无法直接应用于图,尽管如此我们考虑了以下baseline 方法,这些方法可以为 GNN 的预测提供解释。

    • GRAD:基于梯度的方法。我们计算损失函数对于邻接矩阵的梯度、损失函数对于节点特征的梯度,这类似于显著性映射方法 saliency map approach

    • ATT:基于graph attention GNN:GAT 的方法。它学习计算图中边的注意力权重,并将其视为边的重要性。

      尽管 ATT 考虑了图结构,但是它并未考虑节点特征的解释,而且仅能解释 GAT 模型。

      此外,由于环cycle 的存在(如下图所示),节点的 1hop 邻居也是它的 2-hop 邻居。因此使用哪个注意力权重(1hop vs 2hop)也不是很清楚。通常我们将这些 hop 的注意力权重取均值。

  3. 实验配置:对于每个数据集,我们首先为这个数据集训练一个 GNN,然后使用 GARDGNNEXPLAINER 来对 GNN 的预测做出解释。

    注意,ATT baseline 需要使用 GAT 之类的图注意力架构,因此我们在同一个数据集上单独训练了一个 GAT 模型,并使用学到的边注意力权重进行解释。

    • 我们对所有的节点分类任务、图分类任务中调整权重正则化参数。这些超参数在所有实验中使用。

      • 子图大小正则化超参数为 0.005 ,该正则化倾向于得到尽可能小的子图。
      • 拉普拉斯正则化参数为 0.5
      • 特征数量正则化参数为 0.1,该正则化倾向于得到尽可能少的unmasked 特征。
    • 我们使用 Adam 优化器训练 GNN 和 解释方法 explaination methods

      • 所有 GNN 模型都训练 1000epoch,学习率为 0.001, 从而对节点分类数据集达到至少 85%的准确率、对于图分类数据集达到至少95%的准确率。

        对于所有数据集,train/valid/test 拆分比例为 80%:10%:10%

      • GNNEXPLAINER 使用相同的优化器和学习率,并训练 100 ~300epoch

        因为 GNNEXPLAINER 仅需要在少于 100 个节点的局部计算图上进行训练,因此训练 epoch 要更少一些。

    • 为了抽取解释子图 GS ,我们首先计算边的重要性权重(GRAD 的梯度、ATT 的注意力权重、GNNEXPLAINERmasked 邻接矩阵)。然后我们使用一个阈值来删除权重较低的边,从而得到 GS

      • 对于所有方法,我们执行线性搜索从而找到临界阈值,使得 GS 至少包含 KM 个节点。

      • 所有数据集的 ground truth explanation 是连接的子图。

        对于节点分类,我们将不同方法得到的 GS 中抽取连通分量(如前所述,对于 GNNEXPLAINER 方法来讲,GS 已经是连通的)来作为最终的解释。

        对于图分类,我们抽取 GS 的最大连通分量来作为最终的解释。

    • 超参数 KMKF 控制解释中的子图大小和特征数量,这可以从数据集相关的先验知识得到。

      • 对于人工合成数据集,我们将 KM 设置为 ground truth 的大小。
      • 对于真实世界数据集,我们设置 KM=10,KF=5
  4. 定量分析:对于人工合成数据集,我们已有 ground-truth 解释,然后使用这些ground-truth 来评估所有方法解释的准确性。具体而言,我们将解释问题形式化为二元分类任务,其中真实解释中的边视为label,而将可解释性方法给出的重要性权重视为预测得分。一种更好的可解释性方法对于真实解释的边的预测得分较高,从而获得更好的解释准确率。

    下表给出了人工合成数据集节点分类评估结果。实验结果表明:GNNEXPLAINER 的平均效果相比其它方法高出 17.1%

  5. 定性分析:

    • 在没有节点特征的 topology-based 预测任务中(如 BA-SHAPES、TREE-CYCLES),GNNEXPLAINER 正确地识别解释节点标签的motif

      如下图所示,A-B 给出了四个人工合成数据集上节点分类任务的单实例解释子图,每种方法都为红色节点的预测提供解释(绿色表示重要的节点,橙色表示不重要的节点)。可以看到 GNNEXPLAINER 能识别到 house, cycle, tridmotif,而 baseline 方法无法识别。

    • 我们研究图分类任务的解释。

      • MUTAG 实例中,颜色表示节点特征,这代表原子类型(氢H、碳C 等)。GNNEXPLAINER 可以正确的识别对于图类别比较重要的碳环、以及化学基团 NH2NO2,它们确实已知是诱变的 mutagenic 官能团。

      • REDDIT-BINARY 示例中,我们看到Question-Answe 图(B 的第二行)具有2~3 个同时连接到很多低 degree 节点的高 degree 节点。这是讲得通的,因为在 Reddit 的问答模式的话题中,通常具有 2~3 位专家都回答了许多不同的问题。

        相反,在 REDDIT-BINARY 的讨论模式discussion pattern 图(A 的第二行),通常表现出树状模式。

        GRAD,ATT 方法给出了错误的或者不完整的解释。例如两种baseline 都错过了 MUTAG 数据集中的碳环。

        此外,尽管 ATT 可以将边注意力权重视为消息传递的重要性得分,但是权重在输入图中的所有节点之间共享,因此 ATT 无法提供高质量的单实例解释。

    • 解释explanations 的基本要求是它们必须是可解释的interpretable,即,提供对输入节点和预测之间关系的定性理解。下图显式了一个实验结果,其中给出不同方法预测的解释的特征。特征重要性通过热力度可视化。

      可以看到:GNNEXPLAINER 确实识别出了重要的特征;而 gradient-based 无法识别,它为无关特征提供了较高的重要性得分。

      ground-truth 特征从何而来?作者并未讲清楚。

三、GCN 自监督学习[2020]

  1. 图卷积神经网络GCN 将卷积神经网络CNN 推广到了图结构数据,从而利用图的属性。在很多graph-based 任务(诸如节点分类、链接分类、链接预测、图分类任务)中,GCN 的性能优于传统方法,其中很多是半监督学习任务。这里我们主要讨论transductive 半监督节点分类任务,其中图包含大量未标记节点、少量的标记节点,任务目标是预测剩余未标记节点的label

    与此同时,自监督self-supervision 在计算机视觉领域引起了人们的广泛关注。自监督利用了丰富的未标记数据,旨在通过预训练pretraining(随后紧跟着微调finetuning)、多任务学习multi-task learning 等前置任务 pretext task帮助模型从未标记的数据中学习更可迁移的transferable 、更泛化generalizedrepresentation

    前置任务必须经过精心设计使得网络可以学习下游任务相关的语义特征。目前已经为 CNN 提出了很多前置任务,包括:旋转rotationexemplarjigsawrelative patch location 等等的prediction

    最近,《Using self-supervised learning can improve model robustness and uncertainty》 表示自监督学习可以作为辅助正则化auxiliary regularization 来提高鲁棒性robustness 和不确定性估计uncertainty estimation《Adversarial robustness: From selfsupervised pre-training to fine-tuning》 将对抗训练引入自监督,从而提供了第一个通用的鲁棒性预训练。

    简而言之,GCN 任务通常遇到具有大量未标记节点的transductive 半监督setting ,同时自监督在利用 CNN 中未标记数据方面扮演越来越重要的角色。因此我们自然地探讨以下有趣的问题:自监督学习能否在 GCN 中发挥类似的作用,从而提高其泛化性 generalizability和鲁棒性robustness

    论文《When Does Self-Supervision Help Graph Convolutional Networks?》 是第一个系统性地研究如何将自监督纳入 GCN 的文章。该论文研究了三个具体问题:

    • GCN 能否在分类任务中受益于自监督学习?如果答案是 yes ,那么如何将自监督融合到GCN 中从而最大化收益?
    • 前置任务的设计重要吗?GCN 有哪些有效的自监督前置任务?
    • 自监督还会影响 GCN 的对抗鲁棒性adversarial robustness 吗?如果是,如何设计前置任务?

    针对这三个问题,论文给出了三个回答:

    • 论文通过多任务学习multi-task learning 的方式将自监督纳入GCN 从而展示了自监督的有效性,即作为 GCN 训练中的正则化项。相对于预训练pretraining、自训练self-training 等自监督方式,多任务学习效果更好。

    • 论文基于图属性调研了三种自监督任务。除了之前工作提及的节点聚类node clustering 任务之外,论文还提出了两种新类型的任务:图划分graph partitioning 、图补全 graph completion

      作者进一步说明,不同的模型和数据集似乎倾向于不同的自监督任务。

    • 论文将上述发现进一步推广到对抗训练setting 中。论文提供的结果表明:自监督还可以提高GCN 在各种攻击下的鲁棒性,无需使用更大的模型或更多的数据。

  2. 相关工作:

    • graph-based 半监督学习:基于图的半监督学习的关键假设是,较大权重的边连接的节点更可能具有相同的标签。

      基于图的半监督学习方法有大量的工作,例如 mincutsBoltzmann machine 、和 graph random walk 。最近,图卷积网络 GCN 及其变体通过将假设从人工设计的方式扩展到数据驱动的方式,从而得到大家的青睐。

    • 自监督学习:自监督self-supervision 是神经网络在计算机视觉领域学习更可迁移的、更通用的、和更鲁棒的特征的一个有前途的方向。到目前为止,CNN 中自监督的使用主要分为两类:预训练和微调pretraining & finetuning ,以及多任务学习 multi-task learning

      • 在预训练和微调中,CNN 首先用自我监督的前置任务进行预训练,然后用带标签的监督的目标任务进行微调。
      • 在多任务学习中,网络是以目标监督任务和自监督任务的联合目标同时训练的。

      据我们所知,最近只有一项在GCN 中追求自监督的工作(《Multi-stage self-supervised learning for graph convolutional networks》),其中采用了通过 self-training 的节点聚类任务。然而,self-training 存在局限性,包括性能 "饱和saturation " 和退化。此外,它还限制了自监督任务的类型。

    • 图上的对抗性攻击和防御:与 CNN类似,GCN的广泛适用性和脆弱性提出了提高其鲁棒性的迫切要求。人们提出了几种算法来对图进行攻击和防御。

      • 《Adversarial attack on graph structured data》 通过 dropping edge,基于梯度下降、遗传算法和强化学习开发了攻击方法。
      • 《Adversarial attacks on neural networks for graph data》提出了一种基于FSGM 的方法来攻击edge 和特征。

      最近,出现了更多样化的防御方法。

      • 《Adversarial attack on graph structured data》 通过直接在扰动的图上进行训练来防御对抗性攻击。
      • 《Adversarial examples on graph data: Deep insights into attack and defense》 通过从连续函数中学习 graph 来获得鲁棒性。
      • 《Adversarial defense framework for graph neural network》 使用 graph refiningadversarial contrasting learning 来提升模型的鲁棒性。
      • 《Graphdefense: Towards robust graph convolutional networks》提出使用未标记数据的伪标签,增强了对大图的可扩展性。

3.1 自监督方式

  1. 给定图 G={V,E} ,其中 V={v1,v2,,vn} 为节点集合,E={ei,j} 为边集合,ei,j=(vi,vj) 代表节点 vi,vj 之间的边。

    • 每个节点 vi 关联一个特征向量 xiRd ,其中 d 为特征向量维度。所有节点的特征向量构成节点特征矩阵 XRn×d

    • 定义图邻接矩阵 ARn×n ,其中:

      ai,j=A[i,j]={1,(vi,vj)E0,else

      ai,j=aj,i

  2. 典型的采用两层的半监督分类GCN 模型定义为:

    Z=A^relu(A^XW0)W1

    其中:

    • A^=D~1/2(A+I)D~1/2D~A+I 的度矩阵。
    • W0,W1 为待学习的参数矩阵。

    这里我们没有对输出应用 softmax 函数,而是将其视为以下所述损失的一部分。

    我们将 A^relu(A^XW0) 视为通用的GCN 特征抽取器 fθ(X,A^) ,参数集合 θ={W0} 也可以包含 GCN 变体中对应网络架构的其它参数。因此,GCN 分解为特征抽取feature extraction 和线性映射linear transformation 两个部分:

    fθ(X,A^)=A^relu(A^XW0)Z=fθ(X,A^)Θ

    其中参数集 θ={W0} 以及 Θ=W1 从数据中学得。

  3. 考虑transductive 半监督任务。给定标记样本集合 V labelV|V label||V| ,以及label 矩阵 YRn×K 。其中 Klabel 维度,对于节点分类任务 K=1

    我们通过最小化输出和节点真实标记之间的损失来学习 GCN 模型的参数。即:

    Z=fθ(X,A^)Θθ,Θ=argminθ,ΘLsup(θ,Θ)=argminθ,Θ1|Vlabel|viVlabelL(zi,yi)

    其中:

    • zi 为节点 vi 的输出向量,yi 为节点 vilabel 向量。
    • L(,) 为单个样本的损失函数,Lsup 为所有监督样本的损失函数。
  4. 受到 CNN 中相关讨论的启发(《Scaling and benchmarking self-supervised visual representation learning》《Revisiting self-supervised visual representation learning》《Using self-supervised learning can improve model robustness and uncertainty》),我们调研了三种可能自监督任务(ss)来融合到 GCN 中。其中:自监督任务的节点集合为 Vss、节点特征矩阵 Xss、邻接矩阵 A^ss、标签矩阵 Yss :预训练和微调 Pretraining&Finetuning 、自训练Self-Training、多任务学习 Multi-Task Leraning

a. 预训练和微调

  1. 在预训练过程中,模型通过自监督任务来训练特征抽取器:

    Zss=fθ(Xss,A^ss)Θssθss,Θss=argminθ,ΘssLss(θ,Θss)=argminθ,Θss1|Vss|viVssLss(zss,i,yss,i)

    其中:

    • Θss 为线性映射的参数,它和target 任务的线性映射参数 Θ 不同。
    • θ 为特征抽取器的参数,它和 target 任务共享。
    • Lss(,) 为自监督任务单个样本的损失函数,Lss 为自监督任务所有样本的损失函数。

    然后在微调任务中,特征抽取器 fθ(,) 根据公式: θ,Θ=argminθ,ΘLsup(θ,Θ) 来训练,并使用 θss 来初始化参数 θ

  2. 预训练和微调可以说是有利于 GCN 的自监督方法的最直接的选择。但是我们发现:在大型数据集Pubmed 上,该方法几乎没有提高性能(见下表)。我们猜测是因为:

    • 预训练期间的目标函数 Lss(,) 和微调期间的目标函数 Lsup(,) 不同,二者之间存在gap

    • 在微调过程中,由于从一个目标函数(即 Lss(,) )切换到另一个不同的目标函数(即 Lsup(,) )时,由于 transductive 半监督学习使用浅层的 GCN,而这个浅层 GCN 的很容易被 overwrite

      至于为什么不用深层 GCN,是因为更深的 GCN 会导致过度平滑。

    下表为 PubMed 数据集上的预训练&微调 P&F 、多任务学习 MTL 的性能比较,其中自监督任务为图划分。数字表示分类准确率。

b. 自训练

  1. 《self-supervised learning for graph convolutional networks》GCN 中唯一进行自监督的工作,它是通过自训练来实现的。

    对于同时包含标记样本、未标记样本的数据集,典型的自训练pipeline

    • 首先对标记样本训练一个模型。
    • 然后对置信度很高的未标记样本分配伪标记pseudo-label
    • 接着将这些伪标记样本、标记样本视作新的标记样本进行下一轮训练。

    该过程可以重复几轮,并且每轮中都会对未标记样本分配伪标记。

    这篇论文的作者提出了 multi-stage self-supervised: M3S 训练算法,其中采用了自监督来对齐和完善未标记节点的伪标签。尽管在few-shot 实验中该方法的性能有所提高,但是随着标记率(标记样本的占比)提升,M3S 的性能增益趋于饱和。

c. 多任务学习

  1. 多任务学习同时考虑GCN 的目标任务target task和自监督任务,训练过程的目标函数为:

    Z=fθ(X,A^)Θ,Zss=fθ(Xss,A^ss)Θssθ,Θ,Θss=argminθ,Θ,Θss(α1Lsup(θ,Θ)+α2Lss(θ,Θss))

    其中:α1,α2>0 平衡损失函数 LsupLss 之间的重要性。

    因此目标任务和自监督任务共享相同的特征抽取器 fθ() ,但是它们具有各自的线性映射参数 ΘΘss ,如下图所示。

  2. 在多任务学习中,我们将自监督任务视为整个模型训练中的一个正则化项。

    正则化项在传统上广泛应用于图信号处理,著名的是图拉普拉斯正则化器 graph Laplacian regularizer: GLR,它惩罚了相邻节点之间的不相干(即不平滑)的信号。尽管 GLR 的有效性已经在图信号处理中得到了证明,但正则化器是根据平滑先验smoothness prior 人工设置的,没有数据的参与。

    而自监督任务扮演了一个正则化器的角色,它从未标记数据中学到,弱化了人工的先验指导。因此,一个合适的自监督任务将引入数据驱动的先验知识,从而提高模型的泛化能力。

    总而言之,多任务学习是三者中最通用的框架,并在训练过程中充当数据驱动的正则化器。它不对自监督任务类型做任何假设。经实验验证,它是所有三个方法中最有效的。

3.2 自监督任务

  1. 前面讲到我们可以通过自监督任务来训练 GCN,这里我们给出:针对GCN 都有哪些自监督任务。

    我们表明:通过利用图中丰富的节点信息、边信息,可以定义各种 GCN-specific 自监督任务(如下表所示),这些自监督任务可以帮助下游任务。

  2. 节点聚类node clustering:参考 M3S 的做法,一种构造自监督任务的直接方法是节点聚类。

    给定节点集合 V 、节点特征矩阵 X 、以及预定义的聚类大小 1K|V|K 为超参数),聚类算法将输出簇的集合 {Vclu,1,Vclu,2,,Vclu,K} ,其中:

    Vclu,kV,Vclu,kϕ,k=1,2,,Kk=1KVclu,k=V,Vclu,iVclu,j=ϕ;(ij)

    我们将每个节点分配它所属的类簇编号:yss,i=k if viVclu,k 。然后自监督任务即为监督分类任务。

    通过聚类算法来获得自监督任务的 node label 。采用何种聚类算法?论文这里没有讲述。

  3. 图划分graph partitioning :节点聚类相关的算法基于节点特征,其原理是对具有相似属性的节点进行分组。对节点进行分组的另一个思路是:基于图的拓扑结构。具体而言,如果两个节点之间存在强链接(即链接权重很大),则这两个节点很可能属于同一标签类别。因此我们提出使用图分区的基于拓扑结构 topology-based 的自监督任务。

    图分区是将图的节点划分为大致相等的子集,并使得跨子集的链接最小化。给定节点集合 V 、边集合 E、图的邻接矩阵 A 、预定义的划分数量 1K|V|K为超参数),图划分算法将输出一组节点集合 {Vpar,1,Vpar,2,,Vpar,K} ,其中:

    Vpar,kV,Vpar,kϕ,k=1,2,,Kk=1KVpar,k=V,Vpar,iVpar,j=ϕ;(ij)

    这类似于节点聚类。

    另外,对图划分施加平衡约束 balance constraint

    K×maxk|Vpar,k||V|1+ϵ

    其中 ϵ(0,1)

    图分区的目标是最小化 edgecut

    edgecut=12k=1KviVpar,k(vi,vj)E,vjVpar,kai,j

    我们将分区index 作为自监督任务的 labelyss,i=k if viVpar,k

    与基于节点特征的节点聚类不同,图划分提供了基于图拓扑结构的先验正则化,这类似于图拉普拉斯正则化器GLR (它也采用了 connection-prompting similarity 的思想 )。但是,GLR 已经注入injectGCN 架构中,它会对所有节点局部平滑它们的邻居节点。相反,图划分利用所有连接,对具有较高连接密度的节点群进行分组来考虑全局平滑性 global smoothness

  4. 图补全graph completion :受计算机视觉领域中的图像修复和补全的启发(它旨在补全图像的缺失像素),我们提出了一种的新的回归任务作为自监督任务:图补全。

    如下图所述,和图像补全image completion 任务类似,我们的图补全任务:

    • 首先,删除目标节点的特征来遮盖mask目标节点。
    • 然后,向 GCN 输入未遮盖的节点特征来恢复被遮盖的节点特征。

    我们设计这种自监督任务的原因如下:

    • 可以自由地获取completion label,即节点特征本身。
    • 我们认为图补全任务可以帮助网络更好地表示特征,从而教会网络从上下文 context 中抽取特征。

    还有一种自监督任务:链接预测。链接预测也同时利用了节点特征和图结构。

3.3 图对抗防御

  1. 通过为 GCN 引入三个自监督任务,可以使得GCN 在图半监督学习上获得更好的泛化能力。我们继续研究自监督任务在针对各种图对抗攻击的鲁棒性方面的表现。

    这里我们仅关注于单个节点的直接规避攻击direct evasion attack:基于目标节点 vi 的属性或链接的 node-specific 攻击(攻击满足某些约束条件),而训练好的模型(模型参数为 (θ,Θ) )在攻击前后预测不变。

    攻击者 g() 产生了扰动的特征矩阵 X 和扰动的邻接矩阵 A

    X,A=g(X,A,Y,vi,θ,Θ)

    其中 g() 将目标节点的属性、链接、label 、以及模型参数作为输入。

    攻击可以发生在链接link 上、节点特征上、或者二者同时攻击。

  2. 对抗防御 adversarial defense :一种有效的对抗防御方法(尤其是在图像领域)是采用对抗训练adversarial training 。在对抗训练中通过对抗样本adversarial examples 来增强训练集。 但是,由于在 transductive 半监督 setting 中的标记率较低,因此很难在图领域中生成对抗样本。

    《Graphdefense: Towards robust graph convolutional networks》 提出利用未标记节点来生成对抗样本。具体而言,他们训练了原始 GCN ,将伪标签 Ypseudo分配给未标记的节点。然后他们随机从未标记节点集合中选择两个不相交的子集 Vclean,Vattack ,并且攻击每个目标节点 viVattack 来生成随机扰动的特征矩阵 X 和邻接矩阵 A

    对图数据的对抗训练可以形式化为同时对标记节点的监督学习、以及对未标记节点( Vclean,Vattack )的伪标签 pseudo labelrecovering

    Z=fθ(X,A^)Θ,Z=fθ(X,A^)Θθ,Θ=argminθ,Θ(Lsup(θ,Θ)+α3×Ladv(θ,Θ))

    其中 α3 是对抗损失 Ladv 的权重。

  3. 带自监督的对抗防御:引入自监督学习以及对抗训练的 GCN 为:

    Z=fθ(X,A^)Θ,Z=fθ(X,A^)Θ,Zss=fθ(Xss,A^ss)Θssθ,Θ,Θss=argminθ,Θ,Θss(α1×Lsup(θ,Θ)+α2×Lss(θ,Θss)+α3×Ladv(θ,Θ))

    其中自监督损失函数也参与训练过程,它将扰动图作为输入(自监督的标签矩阵 Yss 也是从扰动图中生成)。

    CNN 中观察到:自监督可以提高鲁棒性和不确定性估计 uncertainty estimation,无需更大的模型或额外的数据。因此我们通过实验探索了这一点是否也适用于 GCN

    这里需要提前训练一个仅包含监督任务的 GCN 模型从而获得伪标签。

3.4 实验

  1. 数据集如下所示,N 表示特征维度:

  2. 三种自监督方式、三种自监督任务的对比。其中 M3S 的超参数设置为原始论文的默认值。表中:

    • 每个结果都采用不同的随机数种子随机执行50次,并报告平均的准确率和标准差。

    • Clu: Node ClusteringPar: Graph PartitionComp: Graph Completion 表示三种自监督任务;P&T:pretraining&finetuningM3SMTL:multi-task learning 表示三种自监督方式。

      P&T-Clu 表示自监督方式和自监督任务的组合。

    • 红色数字表示在该数据中,超过 GCN 至少 0.8 的、表现最佳的两项。

    • GCN 一栏,灰色数字表示公开发表的结果。

    结论:

    • 三种自监督方式中,预训练&微调为小型数据集 Cora 提供了一些改善,但对于大型数据集 CiteseerPubMed 却几乎没有改善。即使是采用不同的自监督任务,结论也是如此。

      这证明了我们之前的猜测:尽管在预训练阶段通过自监督任务 Lss 学到关于图结构和特征的信息,但是这些信息可能在微调期间大量丢失,因为微调期间仅针对目标监督损失 Lsup

      GCN 中特别观察到这种信息丢失的可能原因是:在微调过程中,从一个目标函数切换到另一个目标函数时,在 transductive 半监督学习 setting 中使用的浅层 GCN很容易被 overwritten

    • 剩下的两种自监督方式相比于原始 GCN,在节点分类上得到更大的提升。

      和预训练&微调相比,自学习、多任务学习的自监督方式都通过一个优化问题(即,一个联合损失函数)从而将自监督融合到 GCN 中,二者本质上都会给 GCN 中的原始公式带来额外的自监督损失。它们的区别在于:使用了哪些伪标签以及如何为未标记的节点生成伪标签。

      • 在自训练的情况下,伪标签和目标任务标签类型相同,并且这些伪标签根据未标记节点 embedding 和标记节点 embedding 之间的邻近性来分配。

      • 在多任务学习的情况下,伪标签不再局限于目标任务标签类型,而是可以通过探索未标记数据的图结构和节点特征来构造伪标签。并且多任务学习中的目标监督学习和自监督学习仍然通过 grap embedding 来耦合。

        因此和自训练相比,多任务学习可以更通用(在伪标签方面),并且可以更多地利用图数据(通过正则化)。

  3. 我们通过一组实验来回答三个问题:

    • 多任务自监督学习对于 SOTA GCN 是否有帮助?

      下表显示:不同的自监督任务可以在不同程度上对不同数据集上的不同网络体系结构有帮助。表中红色数字表示每个 SOTA 方法最佳的两个性能(包括没有自监督学习的版本)。

    • 多任务自监督何时、并且为什么能帮助 SOTA GCN

      我们注意到:图分区任务通常对所有三个数据集上的所有三个 SOTA 都有利,而节点聚类任务对 PubMed上的 SOTA没有好处。

      如前所述,多任务学习将自监督任务引入到GCN 中,从而作为数据驱动的正则化。不同的自监督任务代表不同的先验条件:

      • 基于特征的节点聚类假设特征相似性,从而意味着 target-label 相似性,并且可以将具有相似特征的遥远节点分组在一起。

        当数据集很大,且特征维度相对较低时(如 PubMed),基于特征的聚类可能难以提供有效的伪标签。

      • 基于拓扑的图分区假设拓扑结构的连接性,从而意味着 target-label 相似性。这对于所有三个引文网络数据集都是安全的。

        另外,图分区作为一个分类任务并不会过于强调该假设。因此,由于图分区代表的先验是通用且有效的,因此可以使得 GCN 任务受益(至少对于实验中的数据集以及对应的目标任务而言)。

      • 同时考虑拓扑结构和节点特征的图补全任务假设特征相似性、以及图的小范围邻域内的平滑性。它可以极大地提高目标任务性能,尤其是当邻域规模较小时(如在所有三个数据集中平均 degree 最小的 Citeseer )。

        但是,面对具有更大邻域的稠密图、更困难的补全任务时(如PubMed 数据集,它有更大、更稠密的图,且待补全的特征是连续的),回归任务面临很大挑战。

        话虽如此,图补全的潜在先验信息可以极大地有利于其它任务。

    • GNN 架构会影响多任务自监督吗?

      对于每个 GNN架构,所有三个自监督的任务都能提高某些数据集的性能(PubMed 上的 GMNN 除外)。

      • 对于 GCN,GAT,GIN 而言,改善更为明显。我们推测:通过各种先验的数据正则化可以使这三种架构(尤其是 GCN)受益。

      • 相反,带图补全自监督学习的 GMNN 没有什么改善。GMNN 将统计关系学习 statistical relational learning:SRL 引入到体系架构中,从而对节点及其邻居之间的依赖关系进行建模。

        考虑到图补全有助于 content-based representation,并且起着和 SRL 相似的作用,因此自监督先验和体系结构的先验可能相似,因此它们的组合可能没有效果。

      • 同样,GraphMix 在架构中引入了一种数据增强方法 Mixup,从而优化特征 embedding。这也和图补全任务的目标重叠从而降低了图补全任务的效果。

  4. 多任务自监督学习除了给 GCN 带来 graph embedding 泛化能力的提升之外,还有哪些额外的好处?

    我们还对 GCN 进行了针对 Nettack 的多任务自监督的对抗实验,从而检验它在鲁棒性方面的潜在优势。

    我们首先以相同的扰动强度 nperturb=2 来生成对抗训练中的攻击,从而检验鲁棒的泛化能力robust generalization 。对于每个自监督任务,将超参数设置和前面实验一样。每个实验重复5次并报告平均的实验结果,因为对测试节点的攻击过程非常耗时。实验结果如下表所示。结论:

    • 节点聚类更有效地抵抗特征攻击。在对抗训练中,节点聚类为 GCN 提供了扰动特征先验 perturbed feature prior从而增强了 GCN 抵抗特征攻击的能力。

    • 图分区更有效地抵抗链接攻击。在对抗训练中,图分区为 GCN 提供了扰动链接先验 perturbed link prior ,从而增强了 GCN 抵抗链接攻击的能力。

    • 令人惊讶的是,在 Cora 数据集上,图补全可以针对链接攻击将对抗准确率提升 4.5%(相对于 AdvT)、针对链接且特征的攻击将对抗准确率提升8.0% (相对于 AdvT)。

      图补全也是针对 Citeseer 的链接攻击、链接且特征攻击的最佳自监督任务之一,尽管提升幅度较小(1%) 。

      这和我们在前文的推测一致:同时考虑基于拓扑和基于特征的图补全构建了链接和特征上的扰动先验 perturbation prior,这有利于 GCN 抵抗链接攻击或链接且特征攻击。

    注:下表为在 Cora 数据集上的对抗训练(AdvT ),带或者不带自监督学习。攻击发生在链接Links、节点特征 Feats、链接且节点特征Links&Feats 。红色表示在每种攻击场景中最佳的两个表现。

    注:下表为在 Citeseer 数据集上的对抗训练(AdvT ),带或者不带自监督学习。

  5. 此外,我们产生具有不同扰动强度的攻击(nperturb{1,2,3,4}),以检验我们结论的普遍性。实验结果表明:通过在对抗训练中引入自监督,GCN仍然可以提高其鲁棒性,从而应对各种强度的各种攻击。

  6. 结论:我们简单总结如下:

    • 首先,在将自监督纳入 GCN 的三种方案中:

      • 多任务学习可以作为正则化器,并通过适当的自监督任务使得 GCN 的效果得到一致地提升。
      • 预训练&微调将目标函数从自监督损失转换为目标监督损失,这很容易 overwrite 浅层 GCN,并获得有限的性能提升。
      • 自训练受限于分配了哪些伪标签,以及使用哪些数据来生成伪标签。它的性能提升在 few-shot learning 中更明显,并随着标记率的提升而逐渐减少。
    • 其次,通过多任务学习,自监督任务提供了有益的先验来提升 GCN 的性能。

      • 节点聚类提供节点特征的先验。
      • 图分区提供图结构的先验。
      • 图补全同时提供节点特征、图结构的先验,从而帮助 GCN 进行得到 context-based representation

      另外,自监督任务是否有助于SOTA GCN 取决于数据集是否生成针对目标任务的高质量的伪标签,以及自监督的先验是否补充了现有体系结构的先验。

      链接预测作为自监督任务,也同时提供节点特征、图结构的先验。

    • 最后,对抗训练中多任务自监督提高了GCN 抵御各种图攻击的鲁棒性。

      • 节点聚类提供节点特征的先验,因此可以更好地抵御节点特征攻击。
      • 图分区提供图结构的先验,因此可以更好地抵御链接攻击。
      • 图补全同时提供节点特征、图结构的先验,因此能同时抵御节点特征攻击、链接攻击,一致地提高了鲁棒性。

四、GNN 公平比较[2019]

  1. 多年以来研究人员对于学术界的一些缺陷提出了担忧,如机器学习、科学领域的实验的可重复性reproducibility 和可复制性replicability

    最近,图神经网络已经成为图上的机器学习的标准工具,但是这些模型的实验在很多情况下是模棱两可ambiguous 或者不可复现的。一些常见的可复现问题包括: 超参数的选择、数据集的拆分。而且,一些论文的模型评估代码缺失或不完整的。另外,不同论文在节点特征、边的特征选取上也未标准化。

    实际上对模型的评估包括两个不同的阶段:

    • 模型选择:在验证集上通过超参数调优来选择最优超参数,这对应着模型选择。
    • 模型评估:在测试集上对选择出来的模型进行效果评估。

    显然,如果没有把这两个阶段很好地区分,则可能会导致对模型真实性能的过于乐观和有偏的估计。这使得模型评估的结果不置信。这也使得其它竞争者也很难在严格的评估程序下超越这种不置信的结果。

    有鉴于此,论文《A FAIR COMPARISON OF GRAPH NEURAL NETWORKS FOR GRAPH CLASSIFICATION》 提出了使用标准化、且可复现的实验环境来为 GNN 框架提供公平的性能比较。具体而言,作者在严格的模型选择、模型评估框架内进行了大量的实验,其中所有模型均使用相同的特征、相同的数据集拆分来进行比较。

    其次,论文研究了当前 GNN 模型是否、以及何种程度上可以有效地利用图结构。为此,作者添加了两个领域特定的 domain-specific 、结构无感知的 structure-agnostic 基准方法baseline (这些方法没有利用结构信息),其目的是从节点特征中区分出结构信息的贡献。令人惊讶的是,作者发现这些 baseline 甚至在某些数据集上的性能甚至优于 GNN

    最后,作者研究了节点degree 在社交数据集中作为特征的影响。作者证明:提供 degree 可以提高性能,并且对达到良好结果所需要的 GNN 层数也有影响。

    作者表明:这项工作并非旨在确定性能最佳(或最差)的 GNN,也并未否认大家在开发这些模型上的努力。作者只是试图为 GNN 建立标准、统一的评估框架,以便模型之间可以进行公平、客观地比较。

  2. 相关工作:

    • GNNGNN的核心是为图中的每个节点计算一个状态,这个状态根据相邻节点的状态迭代更新。GNN 最近得到了普及,因为它可以有效地从图中自动提取相关的特征。

      在过去,处理复杂图结构的最流行的方法是使用核函数kernel function 来计算与任务相关的特征。然而,这种核函数是非适应性 non-adaptive 的,而且通常计算成本很高,这使得GNN更有吸引力。

      尽管在这项工作中,我们特别关注为图分类而设计的架构,但所有的 GNN 都共享节点邻域上的 "卷积 " 的概念。例如:

      • GraphSAGE 首先对邻域执行sum 池化、均值池化、或最大池化的聚合,然后它在卷积之上应用线性投影更新 node representation 。它还依靠邻域采样方案来保持计算复杂度不变。
      • 相反,Graph Isomorphism Network: GIN 建立在GraphSAGE 的局限性之上,用 multi-set 上的任意聚合函数来扩展GraphSAGEGIN 模型被证明在理论上与 Weisfeiler-Lehman 的图同构测试 graph isomorphism test 一样强大。
      • 最近,《On the limitations of representing functions on sets》给出了在 setmulti-set 上学习排列不变函数permutation-invariant function 所需的隐单元数量的上限。
      • 与上述方法不同,Edge-Conditioned Convolution: ECC 为每个 edge label 学习一个不同的 parameter 。因此,邻域聚合是根据特定的 edge parameter 进行加权的。
      • 最后,Deep Graph Convolutional Neural Network: DGCNN 提出了与 GCN 的表述类似的卷积层。

      一些模型还利用了池化方案,在卷积层之后应用,以减少图的大小。例如:

      • ECC 的池化方案通过一个可以预先计算的可微分的 pooling map 来粗化图形。
      • 同样,DiffPool提出了一种自适应的池化机制,根据监督准则来对节点进行折叠。在实践中,DiffPool 将可微分的图编码器与其池化策略相结合,因此该架构是可以端到端的训练。
      • 最后,DGCNN与其他工作的不同之处在于,节点是通过一种名为 SortPool 的特定算法进行排序和对齐的。
    • 模型评估:

      • 《Pitfalls of graph neural network evaluation》的工作与我们的贡献有类似的目的。具体而言,作者在节点分类任务上比较了不同的 GNN,表明结果高度依赖于所选择的特定 train/validation/test split ,以至于改变 split 会导致巨大的不同性能排名。因此,他们建议在多个 test split 上评估 GNN,以实现公平的比较。

        尽管我们在一个不同的setting 中操作(图分类而不是节点分类),但我们遵循作者的建议,在一个受控和严格的评估框架下评估模型。

      • 最后,《Are we really making much progress? A worrying analysis of recent neural recommendation approaches》的工作批评了大量的神经推荐系统,其中大多数都是不可复制的,表明其中只有一个真正比简单的 baseline 有所提高。

4.1 风险评估&模型选择

  1. 这里对风险评估risk assessment (也称作模型评估model evaluation )和模型选择model selection 过程进行概述,从而明确本文遵循的实验过程。我们首先给出总体评估框架,如下图所示。

    • 使用外层 kout-fold 交叉验证来估计模型的泛化性能,即模型评估。

    • 使用内层的 hold-out 或者 kinn-fold 交叉验证来选择最优的超参数,即模型选择。

      如果采用了 kinn-fold 交叉验证,则模型选择成本会放大 kinn 倍。

    模型评估期间也需要重新训练模型(利用寻找到的最优超参数在训练集+验证集上)。

  2. 风险评估(也称作模型评估):风险评估的目的是对一类模型的性能进行估计。

    如果未明确给出测试集,则常用的方式是采用 k-fold 交叉验证Cross Validation:CVk-fold CV 使用 k 个不同的 train/test 拆分来评估模型的泛化性能。

    • 对于每一个拆分,我们进行模型选择过程仅仅使用训练集来选择超参数。此时测试集不会参与模型选择。

      由于模型选择是针对每个 train/test 拆分单独执行的,因此我们就获得了不同的“最优” 超参数配置。这就是为什么我们指的是一类模型的性能。

    • 然后我们将所有拆分中的测试集性能取均值,则得到这一类模型的性能估计。

  3. 模型选择(也称作超参数调优):模型选择的目的是在一组候选超参数配置中选择特定验证集上最优的配置。

    如果未明确提供验证集,则可以使用留出法hold-out 进行 train/validation 拆分,或者一个内层的 k-fold 交叉验证。

    模型选择的一个关键点是:验证集的性能是真实泛化能力的有偏估计。因此,模型选择的评估结果(即验证集性能)往往过于乐观。这个问题已经在论文 《On over-fitting in model selection and subsequent selection bias in performance evaluation》 中进行了详细记录。

    这也是为什么我们的主要贡献是将模型选择、模型评估清晰地分开。这也是很多文献缺少的、或含糊不清的地方。

  4. 模型选择算法Select

    • 输入:

      • 训练集 D
      • 超参数选择集合 Θ
    • 输出:最佳超参数 θ

    • 算法步骤:

      • 将训练集 D 拆分为trainvalid 两个集合 Dtrain,Dvalid

      • 初始化验证集评估指标 Pθ=ϕ 空集。

      • 对每组超参数 θΘ,循环执行:

        • 训练模型 modelTrain(Dtrain,θ)
        • 评估验证集 PθPθEval(model,Dvalid)
      • 将验证集表现最好的模型挑选出来,并返回对应的超参数:θargmaxθPθ

    如果是 kinn 折交叉验证,那么需要拆分 kinn 次,然后考虑每组超参数在这 kinn 个验证集上的性能均值。这需要训练 |Θ|×kinn 次。

  5. 模型评估算法Assessment

    • 输入:

      • 数据集 D
      • 超参数选择集合 Θ
    • 输出:模型的性能

    • 算法步骤:

      • D 拆分为 kfoldD1,,Dk

      • 循环执行 i=1,,k

        • 选择 Di 为测试集 Dtest,选择剩余的 jiDi 为训练集 Dtrain

        • 根据模型选择算法选择最优的超参数:θ=Select(Dtrain,Θ)

        • 通过最佳的超参数重复训练 R 次模型,每次权重使用不同的随机数来初始化。即 r=1,R

          • modelrTrain(Dtrain,θ)
          • prEval(modelr,Dtest)
        • 然后将 R 次在测试集上的评估结果取均值:perfi=r=1Rpr/R

      • 最终将 k fold 的结果取均值:i=1kperfi/k

4.2 可重复性

  1. 我们首先简要回顾了五种不同的最新 GNN 模型,重点介绍了原始论文中的实验配置问题以及实验结果的可重复性。我们的观察仅基于原始论文的内容和可用的代码。

    我们挑选 GNN 模型的原则:论文的实验使用 10-fold CV 评估性能、同行评审过、很强的架构差异、热门的模型。具体而言我们选择了 GGCNN, DiffPool, ECC, GIN, GraphSAGE 等五个模型。每个模型的详细说明请参考各自的论文。

  2. 我们考察evaluation 质量和可重复性的标准是:

    • 是否提供了数据预处理、模型选择、模型评估的代码。
    • 是否提供了数据集拆分。
    • 是否进行了分层stratification 拆分,即拆分前后每个集合中的类别比例保持不变。
    • 是否报告了 10-fold CV 的均值和标准差,且是否在测试集上进行(即模型评估)、而不是在验证集上进行(相当于模型选择)。

    我们总结了这五个模型的可重复性,如下表所示。其中:(Y) 表示满足条件;(N) 表示不满足条件;(A) 表示模棱两可ambiguity ,即不清楚是否满足条件; (-) 表示信息不足,即没有关于该条件的任何信息。

    注意,这里不包括 GraphSAGE,因为原始论文没有直接将其应用于图分类任务。

    • DGCNN:作者使用 10-fold CV 来评估模型。所有数据集的模型结构都是固定的(比如网络层数、隐层维度),然后仅使用一个随机的 CV fold 来调优 learning rateepoch 数量,然后将这两个超参数应用到其它 fold 。尽管这种做法仍然可以接受,但是可能会导致性能欠佳。而且,作者没有提供模型选择的复现代码。

      此外,作者对10fold 进行评估,并报告了10 个最终得分的均值,这使得标准差偏小。此外,其它对比模型并没有使用相同的过程。

      最后,CV 数据集拆分可以正确地分层拆分并可以公开获得,使得可以评估过程可以复现。

    • DiffPool:尚不清楚是否在测试集而不是验证集上获得了报告的结果。尽管作者声称使用了 10-fold CV,但是未报告 DiffPool 及其竞争对手的标准差。

      此外,作者确认对验证集应用了早停来防止过拟合。不幸的是,模型选择代码和验证集拆分都不可用。

      此外,根据代码,数据被随机拆分(未分层拆分)并且没有设置随机种子,因此每次执行代码时,拆分都是不同的(因此无法复现)。

    • ECC:论文报告说 ECC10-fold 评估的,但结果不包含标准差。和 DGCNN 相似,超参数是预先固定的,因此尚不清楚是否以及如何进行模型选择。重要的是,在代码中没有对数据预处理、数据分层拆分stratification 、数据拆分、模型选择的任何参考。

    • GIN:作者正确地列出了所有已调优的超参数。但是,正如论文和公开的评论里明确指出的,他们报告了 10-fold CV 的验证准确率。换句话讲,报告的结果涉及模型选择,而不是模型评估。模型选择的代码并未提供。

    • GraphSAGE:原始论文没有在图分类数据集上测试该模型,但是 GraphSAGE 在其它论文中经常作为 Baseline。因此,图分类的 GraphSAGE 结果应该附有代码以复现实验。尽管如此,报告 GraphSAGE 结果的两个工作(DiffPool, GIN) 都没有这样做。

    结论:我们的分析表明,就评估质量和结果可复现而言,GNN 的工作很少遵循良好的机器学习规范。

4.3 实验

  1. 我们采用严格实践来使用模型选择和模型评估框架,从而对 9 个数据集(4 个化学数据集,5 个社交数据集)来重新评估上述 5 个模型。此外,我们还是实现了两个 baseline,其目的是了解GNN 是否能够利用结构信息。

    • 所有模型均已通过 Pytorch Geometrics 库来实现,这个库提供了图的预处理程序,并使得图卷积的定义更容易实现。有时我们发现论文和相关代码之间存在差异,此时我们遵从论文中的规范。
    • 由于 GraphSAGE 在原始工作中并未应用于图分类,因此我们选择了最大池化全局聚合函数对图进行分类。此外,我们未使用 GraphSAGE 等人定义的采样邻域聚合方案,而是直接使用整个邻域。
  2. 数据集:所有图数据集都是公开可用的,代表了文献中最常用于比较 GNN 的那些数据集。

    • D&D, PROTEINS, NCI1, ENZYMES为化合物数据集, IMDB-BINARY, IMDB-MULTI, REDDIT-BINARY, REDDIT-5K, COLLAB 为社交网络数据集。数据集的统计信息如下所示。
    • 当节点特征(即 node label 列)不可用时,我们要么为所有节点赋予特征1 ,要么为所有节点赋予节点的 degree。另外,遵从文献的做法,对于 ENZYMES 数据集使用 18 个附加的节点属性。

  3. 特征:在 GNN 文献中,常见的做法是将节点结构属性作为节点特征。如:

    • DiffPooldegree 和聚类系数coefficient 作为节点的特征。
    • GIN 使用节点 degreeone-hot 向量作为节点的特征向量。GIN 之所以如此选择是平衡了性能的提升(sum 函数的单射性质) 和模型的泛化能力(无法将模型推广到任意 degree 的图)。

    一般而言,良好的实验做法建议所有模型应该使用相同的输入形式来进行一致性consistently 的比较。这就是为什么我们使用相同的节点特征重新评估所有模型的原因。具体而言,对于化学领域,我们使用一种通用配置;对于社交领域,我们使用两种可选配置。

    • 对于化学领域,节点特征为原子类型的 one-hot 编码。但是在 ENZYMES 上,我们遵循文献并使用了18 种附加特征。

    • 在社交领域,节点没有特征。我们对所有节点使用无差别的特征(即所有节点特征均为 1 )、或者使用节点 degree 作为特征。因此,我们能够了解模型所施加的结构归纳偏置structural inductive bias 是否有效。即,模型是否能够隐式地学到图的结构特征。

      已经有论文(《Leveraging label-independent features for classification in sparsely labeled networks: An empirical study》)研究了向图的通用机器学习模型种添加结构特征的效果,因此这里我们重点关注节点 degree 特征。

  4. baseline 方法:我们对化学数据集、社交数据集使用两种截然不同的 baseline

    • 对于除ENZYMES 以外的所有化学数据集,我们采用分子指纹技术Molecular Fingerprint technique

      • 首先应用全局sum 池化,即通过将图中所有节点的特征加在一起来统计图中每个类型原子出现的次数。
      • 然后应用带 ReLU 激活函数的单层 MLP
    • 在社交数据集和 ENZYMES(由于存在附加特征):

      • 我们首先在节点特征上应用单层 MLP
      • 然后是全局sum 池化。
      • 最后是一个用于分类的单层 MLP

    注意:这两个baseline 都没有使用图的拓扑结构,即结构无感知的。因此这两个baseline 作为一个参考标准,可以评估特定数据集上 GNN 的有效性。

    实际上,如果 GNN 的性能接近结构无感知的baseline,则可以得出两个结论:

    • 该任务不需要拓扑结构信息就可以有效地解决。这个结论可以通过 domain-specific 的专家的专业知识进行验证。
    • GNN 没有充分利用图结构信息。这个结论很难验证,因为多种因素会起作用,如:训练数据集的规模、体系结构所施加的结构归纳偏置、用于模型选择的超参数等。

    但是,GNN 性能相对于这些结构无感知baseline 的显著提升,是图拓扑结构有效利用的证据。因此,结构无感知baseline 对于了解是否、以及如何改进模型至关重要。

  5. 实验配置:我们使用 10-fold CV 进行模型评估,并使用内层 holdout 技术(90%:10%training/validation 拆分)来进行模型选择。

    每次选择模型之后,我们在整个训练 fold 上训练三次模型,并随机保留数据的 10% 来进行早停。我们需要采用这三个独立的训练来平滑不利的随机权重初始化的影响。

    最终的测试 fold 得分是这三个训练模型的测试得分均值。

    • 我们采用 patience 参数为 n 的早停策略。如果经过了 nepoch 而验证集的性能没有任何改善,则训练将停止。

      高的 n 值对于验证集得分的波动不敏感从而更有利于模型选择,但是也会有更多的计算量作为代价。

    • 数据集拆分是预先计算好的,所以模型选择、模型评估都是在相同的数据集拆分上进行的。

    • 所有数据都是分层拆分的,这使得每个集合中各类别的比例和原始数据集是保持不变的。

  6. 超参数:我们通过网格搜索来执行超参数调优。我们总是包含其它论文中用到的超参数。其中包括:

    • 对所有模型都通用的超参数:卷积层数、embedding 空间维度、学习率、早停标准(基于验证集准确率或者验证集损失)。
    • model-specific 的超参数:正则化项、dropout、以及模型特有的其它超参数。

    所有超参数搜索空间如下表所示。

  7. 我们的实验涉及大量训练。对所有模型,超参数搜索规模从 3272 种可能的配置(具体取决于超参数数量)。完成一次模型评估过程需要超过 47000 次(以单次训练次数为单位)。如此大量的工作需要同时利用 CPUGPU 的并行性,从而在合理的时间内完成实验。

    我们重点强调某些情况下(如社交网络数据集中的 ECC),当单个超参数配置的训练需要超过 72 个小时,这使得对单个网格的搜索需要持续一个月。因此,由于需要大量的实验和大量的计算资源,我们将完成一次训练的时间限制为 72 个小时。

  8. 下表给出了我们的实验结果,包括平均准确率和标准差。上表为化学数据集的结果、下表为社交网络数据集的结果,最佳结果以粗体突出显示。OOR 表示超出资源限制(Out of Resources) ,要么是时间超出(单次训练时间超过 72 小时)、要么是 GPU 内存超出。

    总体而言:

    • GIN 似乎在社交网络数据集上非常有效。

    • D&D, PROTEINS, ENZYMES 数据集上,没有一个 GNN 能够超越 baseline 方法。

      相反,在 NCI1 上,GNN 明显超越了baseline 。这表明:GNN 确实利用到了NCI1 的图的拓扑结构信息。

    • NCI1 上,即使是非常多参数的 baseline 也无法完全拟合训练集。我们考虑具有 10000 个隐单元、没有正则化的 baseline,它仅达到 67% 的训练准确率。

      相反, GNN 很容易地对训练集过拟合(训练准确率接近 100%)。这表明结构信息极大地影响了拟合训练集的能力。

    • 在社交网络数据集上,将节点 degree 作为特征是有利的。

  9. baseline 的重要性:我们的研究结果还表明:结构无感知的baseline 是了解 GNN 有效性、并提取有用的洞察insight 的重要工具。

    例如,在 D&D, PROTEINS, ENZYMES 数据集上,没有一个 GNN 能够超越 baseline。我们认为:这些 SOTAGNN 模型还不能完全利用这些数据集上的结构。

    实际上在化学领域,众所周知:结构特征和分子特性是存在相关性的。而这些GNN 模型并没有成功地利用到拓扑结构信息。

    因此,我们推荐 GNN 的从业者在未来工作中包括 baseline 比较,从而更好地刻画他们的贡献程度。

    结论:结构无感知的 baselien 很重要,它可以评估 GNN 模型是否捕获了图结构信息。

  10. 节点 degree 效果:我们的研究结果还表明:使用节点 degree 作为输入特征几乎总是有益于社交网络数据集上的模型性能,某些时候甚至提高得非常多。

    • degree 信息平均使得 baseline 模型的效果提升大约 15%,因此在很多数据集上都有竞争力。具体而言,baselineIMDB-BINARY 上达到了最佳性能。

    • 相反,添加 degree 特征对于大多数 GNN 而言并不重要,因为它们可以从结构中自动推断出这类信息。

      DGCNN 是一个值得注意的例外,它明确地需要节点 degree 信息从而在所有数据集上表现良好。

    此外,我们观察到:在添加节点 degree 作为特征之后,模型的排名发生翻天覆地的变化。这就带来一个问题:对节点采用结构特征(如节点degree、聚类系数 clustering coefficient)之后,对模型性能的影响。这留待以后的工作。

    最后,我们还想知道:采用节点 degree 特征之后,是否会影响解决任务所需的模型层数。因此,我们通过计算 10 个不同 fold 中超参数调优得到的最优层数的中位数来研究这个问题。我们观察到一个总体趋势(其中 GraphSAGE 是唯一的例外):degree 的使用使得所需的网络层数减小了大约1层,如下表所示(1 表示所有节点的特征都是相同的,即无信息的特征)。这可能是由于大多数架构在第一层就发现计算 degree 很有用的事实。

    结论:节点特征很重要,像 degree 之类的节点统计特征的引入可以改变 GNN 模型、 baseline 模型的效果和排名。

  11. 最后我们将测试结果的均值和文献报告的结果相比较。此外,我们还汇总了 10 个不同模型选择中(因为是 10-fold CV ),验证集的均值,即平均验证准确率。

    • 我们的测试准确率在大多数情况下和文献中报告的有所不同,并且这两个结果之间的差距通常都是一致的(文献报告的普遍高估)。
    • 平均验证准确率始终高于或等于测试准确率。这是预料之中的。

    最后,我们再次强调我们的结果是:在严格的模型选择和评估协议的框架内获得的;公平地为所有模型使用相同的数据集拆分、数据特征;可复现。

    结论:必须评估测试集,验证集的指标往往会高估模型的能力。

    但是从下图中发现:验证集的排名与测试集的排名相一致。这个现象没有理论上保证,仅仅是从实验数据中观察到。

五、GNN 评估陷阱[2018]

  1. 图的半监督节点分类是图挖掘中的一个经典问题,最近提出的图神经网络graph neural network:GNN 在这个任务上取得了瞩目的成就。尽管取得了巨大的成功,但是由于实验评估程序的某些问题,我们无法准确判断模型所取得的进展:

    • 首先,很多提出的模型仅仅是在《Revisiting semi-supervised learning with graph embeddings》 给出的三个数据集(CORA,CiteSeer,PubMed) 上、且使用该论文相同的train/validation/test 数据集拆分上评估的。

      这种实验配置倾向于寻找最过拟合overfit the most 的模型,并且违反了train/validation/test 拆分的目的:寻找泛化能力最佳best generalization 的模型。

    • 其次,在评估新模型的性能时,新模型和 baseline 通常采用不同的训练程序。例如,有的采用了早停策略,有的没有采用早停策略。这使得很难确定新模型性能的提升是来自于新模型的优秀架构,还是来自于训练过程或者超参数配置。这使得对新模型产生不公平的好处unfairly benefit

    有鉴于此,论文《Pitfalls of Graph Neural Network Evaluation》 表明现有的 GNN 模型评估策略存在严重缺陷。

    为解决这些问题,论文在 transductive 半监督节点分类任务上对四种著名的 GNN 架构进行了全面的实验评估。论文在同一个框架内实现了四个模型:GCN, MoNet, GraphSage, GAT

    在评估过程中,论文专注于两个方面:

    • 对所有模型都使用标准化的训练和超参数选择过程。在这种情况下,性能的差异可以高度确定地 high certainty 归因于模型架构的差异,而不是其它因素。

    • 对四个著名的引文网络数据集进行实验,并为节点分类问题引入四个新的数据集。

      对于每个数据集使用 100 次随机 train/validation/test 拆分,对于每次拆分分别执行20 次模型的随机初始化。

      这种配置使得我们能够更准确地评估不同模型的泛化性能,而不仅仅是评估模型在一个固定测试集的上的性能。

    论文声明:作者不认为在 benchmark 数据集上的准确性是机器学习算法的唯一重要特性。发展和推广现有方法的理论,建立与其他领域的联系(和适应来自其他领域的思想)是推动该领域发展的重要研究方向。然而,彻底的实证评估对于理解不同模型的优势和局限性至关重要。

    实验结果表明:

    • 考虑数据集的不同拆分会导致模型排名的显著不同。
    • 如果对所有模型都合理地调整超参数和训练过程,那么简单的 GNN 架构就可以超越复杂的 GNN 架构。

5.1 模型和数据集

  1. 考虑图上的transductive 半监督节点分类问题。本文中我们比较了以下四种流行的图神经网络架构:

    • Graph Convolutional Network: GCN:是早期的模型,它对谱域卷积执行线性近似。
    • Mixture Model Network: MoNet:推广了 GCN 架构从而允许学习自适应的卷积滤波器。
    • Graph Attention Network: GAT :采用一种注意力机制从而允许在聚合步骤中以不同的权重加权邻域中的节点。
    • GraphSAGE :侧重于 inductive 节点分类,但是也可用于 transductive 配置中。我们考虑原始论文中的三个变体:GS-mean, GS-meanpool, GS-maxpool

    所有上述模型的原始论文和参考实现均使用不同的训练程序,包括:不同的早停策略、不同的学习率衰减decay、不同的 full-batch /mini-batch 训练。如下图所示:

    不同的实验配置使得很难凭实验确定模型性能提升的背后原因。因此在我们的实验中,我们对所有模型都使用标准化的训练和超参数调优程序,从而进行更公平的比较。

    此外,我们考虑了四个 baseline 模型,包括:逻辑回归Logistic Regression: LogReg、多层感知机 Multilayer Perceptron: MLP、标签传播Label Propagation: LabelProp 、归一化的拉普拉斯标签传播Normalized Laplacian Label Propagation: LabelProp NL 。其中: LogReg,MLP 是基于属性的模型,它们不考虑图结构;LabelProp, LabelProp NL 仅考虑图结构而忽略节点属性。

  2. 数据集:

    我们考虑四个著名的引文网络数据集:PubMed, CiteSeer, CORA, CORA-Full。其中 CORA-FullCORA 的扩展版本。

    我们还为节点分类任务引入了四个新的数据集:Coauthor CSCoauthor PhysicsAmazon ComputersAmazon Photo

    • Amazon ComputersAmazon PhotoAmazon co-purchase 图的一部分。其中:节点代表商品、边代表两个商品经常被一起购买,节点特征为商品评论的 bag-of-word,类别标签label 为产品类目category
    • Coauthor CSCoauthor Physics 是基于 Microsoft Academic Graphco-authorship 图。其中:节点代表作者、边代表两名作者共同撰写过论文,节点特征为每位作者论文的论文关键词,类别标签为作者最活跃的研究领域。

    我们对数据集进行了标准化,其中对 CORA_full 添加了 self-loop,并删除CORA_full 样本太少的类别。 我们删除了 CORA_full 中样本数量少于 50 个节点的 3 个类别,因为我们对这些类别无法执行很好的数据集拆分(在后续数据集拆分中,每个类别至少要有 20 个标记节点作为训练集、30 个标记节点作为验证集)。

    对于所有数据集,我们将图视为无向图,并且仅考虑最大连通分量。

    数据集的统计量如下表所示。其中:

    • Label rate 为数据集的标记率,它表示训练集的标记节点的占比。因为我们对每个类别选择 20 个标记节点作为训练集,因此:

      Label rate=×20
    • Edge density 为图的链接占所有可能链接的比例,它等于:

      Edge density=×(1)/2

5.2 实验配置

  1. 模型架构:我们保持原始论文/参考实现中相同的模型架构,其中包括:层layer 的类型和顺序、激活函数的选择、dropout 的位置、L2 正则化位置的选择。

    我们还将 GATattention head 数量固定为 8MoNet 高斯核的数量固定为 2

    所有模型都有 2 层:input features --> hidden layer --> output layer

  2. 训练过程:为了更公平的比较,我们对所有模型都使用相同的训练过程。对于所有的模型:

    • 相同的优化器,即:带默认参数的 Adam 优化器。
    • 相同的初始化,即:根据 Glorot 初始化权重,而 bias 初始化为零。
    • 都没有学习率衰减。
    • 相同的最大训练 epoch 数量。
    • 相同的早停准则、相同的 patience、相同的验证频率validation frequency
    • 都使用 full-batch 训练,即:每个 epoch 都使用训练集中的所有节点。
    • 同时优化所有的模型参数,包括:GATattention weightsMoNetkernel parameters、所有模型的权重矩阵。
    • 所有情况下,我们选择每个类别 20 个带标签的节点作为训练集、每个类别 30 个带标签的节点作为验证集、剩余节点作为测试集。

    我们最多训练 100kepoch,但是由于我们使用了严格的早停策略,因此实际训练时间大大缩短了。具体而言,如果总的验证损失(数据损失 +正则化损失)在 50epoch 都没有改善,则提前停止训练。一旦训练停止,则我们将权重的状态重置为验证损失最小的 step

  3. 超参数选择:我们对每个模型使用完全相同的策略进行超参数选择。具体而言,我们对学习率、hidden layer 维度、 L2 正则化强度、dropout rate 执行网格搜索。搜索空间:

    • 隐层维度:[8, 16, 32, 64]
    • 学习率:[0.001, 0.003, 0.005, 0.008, 0.01]
    • dropout rate[0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]
    • attention 系数的 dropout rate(仅用于 GAT):[0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]
    • L2 正则化强度:[1e-4, 5e-4, 1e-3, 5e-3, 1e-2, 5e-2, 1e-1]

    对于每个模型,我们选择使得 Cora 数据集和 CiteSeer 数据集上平均准确率最高的超参数配置。这是对每个数据集执行 100 次随机 train/validation/test 拆分、对于每次拆分分别执行20 次模型的随机初始化从而取得的。所选择的最佳超参数配置如下表所示,这些配置用于后续实验。

    这里应该针对不同数据集进行超参数调优,而不是所有数据集都采用相同的超参数(即,在 Cora 数据集和 CiteSeer 数据集上平均准确率最高的超参数配置)。

    注意:

    • GAT 有两个 dropout rate:节点特征上的 dropout、注意力系数上的 dropout
    • 所有 GraphSAGE 模型都有额外的权重用于 skip connection,这使得实际的 hidden size 翻倍。因此这里 GS-meanEffective hiden size = 32
    • GS-meanpool/GS-maxpool 具有两个 hidden size:隐层的 size、中间特征转换的 size
    • GAT 使用 8headmulti-head 架构,而 MoNet 使用 2head

5.3 实验结果

  1. 所有 8 个数据集的所有模型的平均准确率(以及标准差)如下表所示。结果是在100 次随机 train/validation/test 拆分、对于每次拆分我们分别执行20 次模型的随机初始化上取得的。

    对每个数据集,准确率最高的得分用粗体标记。N/A 表示由于 GPU RAM 的限制而无法由 full-batch 版本的 GS-maxpool 处理的数据集。

    结论:

    • 首先,在所有数据集中,基于 GNN 的方法(GCN, MoNet, GAT, GraphSAGE) 显著优于 baseline 方法(MLP, LogReg, LabelProp, LabelProp NL) 。

      这符合我们的直觉,并证明了与仅考虑属性或仅考虑结构的方法相比,同时考虑了结构和属性信息的、基于 GNN 的方法的优越性。

    • 其次,GNN 方法中没有明显的winner 能够在所有数据集中占据主导地位。

      实际上,在8 个数据集中的 5 个数据集,排名第二、第三的方法得分和排名最高的方法得分,平均相差不到 1%

      如果我们有兴趣对模型之间进行比较,则可以进行pairwise t-test 。这里我们考虑模型之间的相对准确率作为 pairwise t-test 的替代。具体而言:

      • 首先对每个数据集进行随机拆分。
      • 然后在这个拆分中,训练并得到每个模型的准确率(已经对 20 次随机初始化取平均)。
      • 对于这个拆分中,准确率最高模型的准确率为最优准确率。我们将每个模型的准确率除以最优准确率,则得到相对准确率。
      • 然后我们对模型根据相对准确率排名,1 表示最佳、10 表示最差。

      对于每个模型,考虑所有拆分的排名、以及平均相对准确率,如下表所示。我们观察到:GCN 在所有模型中实现最佳性能。

      尽管这个结论令人惊讶,但是在其它领域都有类似报道。如果对所有方法均谨慎地执行超参数调优,则简单的模型通常会超越复杂的模型。

    • 最后,令人惊讶的是 GAT 针对 Amazon ComputersAmazon Photo 数据集获得的结果得分相对较低,且方差很大。

      为研究这个现象,我们可视化了Amazon Photo 数据集上不同模型的准确率得分。尽管所有 GNN 模型的中位数median 得分都很接近,但是由于某些权重初始化,GAT 模型的得分非常低(低于 40%)。尽管这些异常值较少出现(2000 次结果中有 138 次发生),但是这显著降低了 GAT 的平均得分。

  2. 我们评估 train/validation/test 拆分的效果。为此,我们执行以下简单实验:将数据集按照 《Revisiting semi-supervised learning with graph embeddings》 中的随机拆分(仅拆分一次),然后运行四个模型并评估模型的相对准确率。

    可以看到:如果执行另外一次随机拆分(拆分比例都相同),则模型的相对准确率排名完全不同。

    这证明了单次拆分中的评估结果的脆弱和误导性。考虑到小扰动的情况下,GNN 的预测可能发生很大变化,这进一步明确了基于多次拆分的评估策略的必要性。

六、AGL [2020]

  1. 为了利用图机器学习技术来解决工业级的图分析任务,我们需要构建一个可扩展的scalable 、容错性的fault-tolerance、同时包含训练和推理的学习系统。但是由于图的数据依赖性,图机器学习任务的计算图和传统机器学习任务完全不同。

    • 在传统机器学习任务中,我们假设样本之间的计算图相互独立。这也是现有的、经典的参数服务器parameter server 框架假设的数据并行性。

    • 但是在图机器学习任务中,每个节点的计算图依赖于该节点 k-hop 邻居。

      这种数据依赖性使得我们不再能够将训练或推理样本存储在磁盘中、然后通过 piepeline 来访问。相反,我们必须将图数据存储在内存中以便快速访问数据。这使得我们无法基于现有的参数服务器框架简单地构建用于图学习任务的学习和推理系统。

    多家公司致力于为各种图机器学习技术设计新颖的系统架构:

    • Facebook 展示了一种大规模graph embedding 系统 PyTorch-BigGraph: PBG,该系统旨在从 multi-relation 数据中生成无监督的节点 embedding。但是 PBG 不适合处理丰富属性的图(节点属性或边属性)。

    • 已有 Deep Graph Library: DGLPyTorch Geometric: PyGAliGraph 用于大规模、带属性的图上训练 GNN

      • DGL、PyG 被设计为单机系统,它通过在巨型机(如具有 2TB 内存的 AWS x 1.32 x large)来处理工业级的图数据。
      • AliGraph 是一个分布式系统,它实现了分布式的、内存的图存储引擎graph store engine,该引擎需要在训练 GNN 模型之前独立部署。

    但是,实际的工业级图数据可能非常庞大。Facebook 中的社交网络包括超过 20 亿节点和超过1万亿条边,蚂蚁金服Ant Financial 的异质金融网络、阿里巴巴Alibaba 电商网络包含数十亿节点和数千亿条以及丰富的属性信息。下表总结了几个最新的 SOTA 图机器学习系统报告的图数据的规模。考虑到节点、边关联的特征,这种规模的图数据可能会产生高达 100TB 的数据。

    这些数据不可能存储在像 DGL 这样的单机中。此外,保存图数据的图存储引擎和 worker 之间的通信将非常庞大。例如,假设包含节点的子图包含 1000 个节点、10000 条边,我们有一个 batch 的子图,这可能会导致 1MBbulk 在图存储引擎和 worker 之间通信,这是我们无法容忍的。另外,这需要结构良好的、足够大带宽的网络。

    总之:

    • 首先,现有的工业级的学习系统要求图数据要么在单台机器的内存中(这使得工业级数据无法存储)、要么要求图数据在自定义的图存储引擎中(这导致图存储引擎和 worker 之间的庞大通信开销)。这使得学习系统无法扩展到更大规模的图数据。
    • 其次,它们需要额外的开发来支持 graph store,无法很好地利用已有的基础设施(例如 MapReduce 或者参数服务器)来实现容错的目的。
    • 最后,大多数学习系统都侧重于图模型的训练,但是忽略了系统的完整性。例如,忽略了部署图模型时优化 inference 任务。

    考虑所有这些问题,论文 《AGL: A Scalable System for Industrial-purpose Graph Machine Learning》 提出了 Ant Graph machine Learning system: AGL ,这是用于工业级图学习的集成系统。

  2. AGL 系统设计的关键洞察是基于图神经网络计算图背后的消息传递方案。

    • GNN 的训练阶段,我们提出构造 k-hop 邻域。该邻域提供节点的完备信息的子图,从而用于计算基于消息传递机制的、每个节点的 k-hop embedding

      将原始图分解为小的子图片段pieces(即 k-hop邻域)的好处是每个节点的计算图独立于其它节点。这意味着我们仍然可以享受经典的参数服务器框架所具有的容错性、灵活的模型一致性等优势,而无需付出额外的精力来维护图存储引擎。

    • GNN 的推断阶段,我们提出将训练好的KGNN 模型划分为 K 个分片slice、以及一个和模型预测相关的分片。

      通过分片,在第 k 层我们首先合并每个节点的入边 in-edge 邻居的 embedding ,然后将自己的 embedding 传播到各自的出边 out-edge 邻居。 k1 开始到 K

    • 我们将训练和推断阶段的消息传递机制抽象化,然后简单地使用 MapReduce 来实现它们。

      由于 MapReduce 和参数服务器已经成为工业界常用的基础设置,因此即使在价格低廉且广泛使用的商用机器上,我们的图机器学习系统仍然可以受益于诸如容错性、可扩展性之类的属性。

    • 此外,和基于 DGL,AliGraph 等架构的推断相比,我们的推断的实现最大程度地利用了每个的 embedding,从而显著加速了推断工作。

    • 此外,我们提出了几种技术从而加速训练过程中的、从 model-leveloperator-level 的浮点数计算。

    结果,和 DGL/PyG 相比,我们在单台机器上成功地加速了 GNN 的训练,并在实际应用场景中使用商用机器的 CPU 集群实现了近线性near-linear 的加速。实验结果表明:在具有 6.23×109 个节点、3.38×1011 条边的大规模图上,AGL 使用 100worker可以在14 个小时内训练完一个 2-layer GAT 模型,其中包括 1.2×108 个目标节点target nodes ,训练7epoch 模型就达到收敛。

    另外,模型只需要 1.2 小时即可完成对整个图的推断。

    据我们所知,这是 graph embedding 的最大规模的应用,并证明了我们的系统在实际工业场景的高可扩展性和效率。

6.1 消息传递机制

  1. 这里我们重点介绍 GNN 中的消息传递机制。然后我们介绍了 K-hop 邻域的概念,从而帮助实现图学习任务中的数据独立性。消息传递机制、K-hop 邻域在我们的系统设计中都起着重要的作用。

  2. 定义有向图 G={V,E,A,X,E} ,其中:

    • V 为节点集合,EV×V 为边的集合。

    • AR|V|×|V| 为邻接矩阵。

      • Ai,j>0 表示节点 vjvi 之间存在有向边,且边的权重为 Ai,j
      • Ai,j=0 表示节点 vjvi 之间不存在有向边。
    • XR|V|×dn 为所有节点的特征构成的特征矩阵,第 ixiRdn 为节点 vi 的特征向量,dn 为节点特征向量的维度。

    • ER|V|×|V|×de 为所有边的特征构成的特征张量,第 (i,j) 维度 ei,jRde 为有向边 vjvi 的特征向量,de 为边特征向量的维度。

    • 这里我们认为无向图是特殊的有向图。对于无向图的每条边 (vi,vj) ,我们分解为两条有向边 (vjvi),(vivj)

    • 定义 Nv+ 为节点 v 的入边 in-edge 邻居集合,Nv 为节点 v 的出边 out-edge 邻居集合:

      Nv+={u:Av,u>0},Nv={u:Au,v>0}

      节点 v 的所有邻居定义为:Nv=Nv+Nv

    • 节点 v 的所有入边的集合记作 Ev+ ,节点 v 的所有出边的集合记作 Ev ,节点 v 的所有边的集合记作 Ev

      Ev+={(uv):Av,u>0},Ev={(vu):Au,v>0}Ev=Ev+Ev
  3. AGL 主要关注基于消息传递机制的 GNN 。在 GNN 的每一层都通过聚合目标节点的in-edge 邻居的信息从而生成intermediate embedding 。在堆叠几层 GNN layer 之后,我们得到了 final embedding,它集成integrate 了目标节点的整个感受野。

    具体而言,第 kGNN layer 的计算范式paradigm 为:

    hv(k+1)=ϕ(k)({hi(k)}i{v}Nv+,{ev,u}Av,u>0;Wϕ(k))

    其中:

    • hv(k) 为节点 v 在第 k 层的 intermediate embedding ,并且 hv(0)=xv
    • 函数 ϕ(k) 的参数为 Wϕ(k) ,它的输入包括:节点 v 及其入边邻居的 embedding、节点 v 的入边关联的边特征。

    可以在消息传递机制中表达GNN 的上述计算。即:

    • 收集 keys(如 node id)以及对应的 values(如 embedding)。

    • 对于每个节点:

      • 首先merge入边邻居的所有 values,从而使得目标节点具有新的 value
      • 然后通过出边来将新的value 传播propagate 到其它节点。

    经过 K 次这样的融合、传播过程,我们完成了 GNN 的计算。后续讨论中我们将这种机制推广到 GNN 的训练和推断过程中。

  4. 定义节点 vk-hop 邻域为 Gvk=(Vvk,Evk,Xvk,Evk), 其中:

    • Vvk={v}{u:d(v,u)k} 为所有距离节点 v 小于等于k 的节点组成的集合。

      d(v,u) 表示从节点 u 到节点 v 的最短路径。

    • Evk={(u,u):(u,u)E and uVvk and uVvk} 为起点、终点都位于 Vvk 中的边的集合。

    • XvkVvk 中所有节点的特征向量组成。

    • EvkEvk 中所有边的特征向量组成。

  5. 定理:节点 vk-hop 邻域为 Gvk=(Vvk,Evk,Xvk,Evk) 包含了 sufficientnecessary 的信息来使得一个 kGNN 模型生成节点 vembedding

    该定理可以通过数学归纳法来证明。这个定理显示了 GNN 的计算和 k-hop 邻域之间的关系。可以看到:在一个 kGNN 模型中,节点 v 的第 k 层的 embedding 仅取决于其 k-hop 邻域,而不是整个图。

6.2 系统

  1. 这里我们首先概述我们的 AGL 系统,然后我们详细说明了三个核心模块(即 GraphFlat、GraphTrainer、GraphInfer ),最后我们给出了一个demo 来说明如何使用AGL 系统实现简单的 GCN 模型。

6.2.1 系统总览

  1. 我们构建 AGL 的主要动机是:

    • 工业界渴望一个支持图数据训练和推断的集成系统,并且具有可扩展性scalability,同时具有基于成熟的工业基础设施(如 MapReduce、参数服务器等)的容错性。

      即,工业界不需要具有巨大内存和高带宽网络的单个巨型机或自定义的图存储引擎,因为这对于互联网公司升级其基础设施而言代价太大。

      我们试图提供一种基于成熟和经典基础设施的解决方案,该方案易于部署,且同时享受容错性等各种优点。

    • 其次,我们需要基于成熟的基础设施扩展到工业级规模图数据的解决方案。

    • 最后,除了优化训练之外,我们的目标是在图上加速推断任务。因为在实践过程中,与未标记数据(通常需要推断数十亿节点)相比,标记数据通常非常有限(例如只有千万级别)。

  2. 设计 AGL 的原则是基于 GNN 背后的消息传递机制。即,对于每个节点我们首先合并其入边in-edge 邻居的信息,然后向该节点的出边 out-edge 邻居传播消息。

    我们将这种规则反复应用于训练和推断过程,并设计了 GraphFlatGraphTrainerGraphInfer

    • GraphFlat 在训练过程中生成独立的 K-hop 邻域。
    • GraphTrainer 训练节点的 embedding
    • GraphInfer 通过训练好的 GNN 模型来推断节点的 embedding
  3. 根据动机和设计原则, AGL 利用 MapReduceParameter Server 等几种强大的并行体系架构,通过精心设计的分布式实现来构建每个组件。结果,即使将 AGL 部署在具有相对较低的算力和有限内存的计算机的集群上,AGL 和几种先进的系统相比,仍然具有相当的效果effectiveness 和更高的效率efficiency 。而且,AGL 具有对数十亿节点、数千亿边的工业级规模的图执行完整的图机器学习的能力。

    下图描述了 AGL 的系统架构,它由三个模块组成:

    • GraphFlat:是基于消息传递的、高效的efficient 、分布式的distributed 生成器,用于生成包含每个目标节点完整信息子图的 K-hop 邻域。这些小的 K-hop 邻域被展平flattenprotobuf 字符串,并存储在分布式文件系统上。

      由于 K-hop 邻域包含每个目标节点的足够的和必要的信息,因此我们可以将其中的一个或者batch 加载到内存中,而不是加载整个图,并且可以像其他任何传统学习方法一样进行训练。

      此外,我们提出了一种重索引 re-indexing 技术以及一个采样sampling 框架,从而处理真实应用场景中的 hub 节点(具有非常多的邻居)。

      我们的设计基于以下观察:标记节点的数量是有限的,我们可以将标记节点关联的那些 K-hop 邻域存储在磁盘中,而不会花费太多代价。

    • GraphTrainer:基于GraphFlat 保证的数据独立性,GraphTrainer 利用许多技术(如 pipeline、剪枝pruning、边分区edge-partition )来降低 I/O 开销,并在训练 GNN 模型期间优化浮点数计算。

      结果,即使在基于商用机器的通用 CPU 集群上,GraphTrainer 在实际工业场景中也能获得很高的近线性 near-linear 加速。

    • GraphInfer:这是一个分布式推断模块,可以将 KGNN 模型分成 K 个分片 slice,并基于 MapReduce 应用 K 次消息传递。

      GraphInfer 最大限度地利用了每个节点的 embedding,因为第 k 层的所有intermediate embedding 都将传播到下一轮的消息传递。这显著提高了推断速度。

    可以看到,AGL 仅适用于基于消息传递的半监督 GNN 模型。

6.2.2 GraphFlat

  1. 训练 GNN 的主要问题是图数据之间固有的数据依赖性。要对每个节点进行前向传播,则我们必须读取节点关联的邻居、以及邻居的邻居,依此类推。这使得我们无法在现有的参数服务器上部署这类模型,因为参数服务器假设数据并行。

    此外,对于大多数工业公司而言,开发额外的图存储引擎来查询每个节点的子图代价太大。

    并且这种做法也无法利用现有成熟、且容错性好的常规基础设施。

    但是,目标节点的 k-hop 邻域提供了足够的、必要的信息来生成第 k 层节点 embedding。因此,我们可以根据目标节点,将工业级规模的图划分为大量的、微小的 k-hop 邻域,然后在训练阶段将其中的一个或一批(而不是整个图)加载到内存中。

    沿着这个思路,我们开发了 GraphFlat,一个高效的 k-hop 邻域的分布式生成器。此外,我们还进一步引入了重索引 re-indexing 策略,并设计了一个采样框架来处理 hub 节点并确保 GraphFlat 的负载均衡。

  2. 分布式的k-hop 邻域生成器:我们基于消息传递的机制设计一个分布式 pipeline 来生成 k-hop 邻域,并使用 MapReduce 基础设施来实现它。下图说明了这个 pipeline 的工作流。

    背后的关键洞察是:对于每个节点 v ,我们首先从入边邻居 Nv+ 接受、合并信息,然后将合并后的消息传播给出边邻居 Nv 。通过反复执行该过程 k 次,我们得到节点 vk-hop 邻域。

    假设我们将node tableedge table 作为输入。假设 node table 由节点 ID、节点特征组成,edge table 由源节点ID、目标节点 ID、边特征组成。生成 K-hop 邻域的 piepline 的总体流程如下:

    • Map 阶段:Map 阶段仅在pipeline 的开始执行一次。对于某个节点,Map 阶段生成三种信息:自身信息(即节点特征)、入边信息(入边的特征和入边的邻居节点)、出边信息(出边的特征和出边的邻居节点)。

      注意:我们将节点 ID 设为 shuffle key,并将各种信息作为 value,从而用于下游的 Reduce 阶段。

    • Reduce 阶段:Reduce 阶段运行 K 次从而生成 K-hop 邻域。

      在第 k 轮中:

      • reducer 首先收集相同 shuffle key (即相同的节点 id )的所有的 values(即三种类型的信息),然后将自己的信息self information和入边信息作为新的self information 。注意:新的 self information 是节点的 k-hop 邻域。

      • 然后,新的 self information 传播到出边的节点。

        注意:在下一个 reduce 阶段之前,所有出边的信息保存不变。

      • 最后,reducer 向磁盘输出新的数据记录,其中每个节点 id 作为 shuffle key,而更新后的信息作为新的 value

    • Storing 阶段:在经过 KReduce 阶段之后,最终的 self information 就是节点的 K-hop 邻域。

      我们将所有目标节点的 self information 转换为 protobuf 字符串,并存储到分布式文件系统中。

    在整个 MapReduce pipeline 中,关键操作是合并 merging 和传播 propagation。 在每轮迭代中,给定节点 v ,我们将其self information 和上一轮的入边信息合并,然后合并后的结果作为节点 vself information 。然后,我们将新的 self information 通过出边传播到出边节点。在 pipeline 的最后,每个目标节点的 k-hop 邻域将展平flattenprotobuf 字符串。这就是为什么我们将这个 pipeline 称作 GraphFlat

    注意,由于节点的 k-hop 邻域将这个节点和其它节点区分开,因此我们也将其称作 GraphFeature

    在整个迭代过程中,updatepropagate 的都是节点的 self information,边的信息保持不变(边的方向、特征、权重)。

  3. 采样和重索引:前面介绍的分布式 pipeline 在大多数情况下都能很好地工作。但是由于存在 hub 节点,因此图的 degree 可能会发生倾斜,尤其是在工业场景中。这使得某些节点的 k-hop 邻域可能覆盖几乎整个图。

    • 一方面,在GrapFlatReduce阶段,处理此类hub 节点的 reducer 可能会比其它 reducer 慢得多,因此会不利于 GraphFlat 的负载均衡。
    • 另一方面,这些 hub 节点的巨大的 k-hop 邻域可能使得 GraphFlat 和下游模型训练产生 Out Of Memory:OOM 问题。
    • 此外,倾斜的数据也可能导致训练到的 GNN 模型的准确率较差。

    因此,我们采用了重索引re-indexing 策略,并为 GraphFlat 中的 reducer 设计了一个采样框架。下图说明了 GraphFlat 中带重索引和采样策略的 reducer。在执行重索引、采样策略时引入了三个关键组件:

    • 重索引 Re-indexing:当某个 shuffle key (即节点 ID)的入度超过预定阈值(如 10k)时,我们将通过添加随机后缀来更新 shuffle key。这个随机后缀用于将原始shuffle key 的数据记录随机划分到更小的块 piece
    • 采样框架Sampling framework:我们建立了分布式采样框架,并实现了一套采样策略(如:均匀采样、加权采样),从而降低 k-hop 邻域的规模,尤其是对于那些 hub 节点。
    • 倒排索引 Inverted indexing:该组件负责用原始的shuffle key 来替换重索引的 shuffle key。之后,数据记录将输出到磁盘,等待用于下游任务。

    在采样之前,重索引组件将同一个 hub 节点关联的数据记录均匀地映射到一组 reducer。这有助于缓解那些 hub 节点可能引起的负载均衡问题。然后,采样框架针对 shuffle key 随机采样其一小部分数据记录。此后,合并、传播操作就像原始 Reducer 一样执行。接下来,倒排索引组件将重索引的 shuffle key 恢复为原始的 shuffle key(即节点 ID)从而应用于下游任务。

    通过重索引,我们将 hub 节点的处理过程划分为一组 reducer,从而很好地保持了负载均衡。通过采样,我们将 k-hop 邻域的规模降低到可接受的大小。

6.2.3 GraphTrainer

  1. 为了对 GraphFlat 生成的 k-hop 邻域进行有效的训练,我们实现了分布式的图训练框架: GraphTrainer。如下图所示。

    GraphTrainer 的总体架构遵循参数服务器的设计,参数服务器由两部分组成:

    • workerworker 在模型训练期间执行大量计算。
    • serverserver 在模型训练期间维持图模型参数的最新版本。

    由于 k-hop 邻域包含足够的、必要的信息来训练 GNN 模型,因此 GraphTrainer 的训练 worker 变得相互独立。它们只需要处理自己的数据分区partition 即可,不需要与其它 worker 进行额外的交流。因此,GNN 模型的训练变得类似于传统机器学习模型的训练(在传统的机器学习模型中,每个 worker 的训练数据都是独立的)。

    此外,由于大多数 k-hop 邻域都是很小的子图,占用的内存很少,因此 GraphTrainer 中的训练 worker 仅需要部署在计算资源(即 CPU、内存、网络带宽)有限的商用机器上。

    考虑到 k-hop 邻域的性质以及 GNN 训练计算的特点,我们提出了几种优化策略,包括训练 training pipeline、图剪枝graph pruning、边划分edge partition ,从而提高训练效率。

  2. 训练工作流 workflow:训练工作流主要包含两个阶段,即子图向量化subgraph vectorization、模型计算。我们以节点分类任务为例来说明这两个阶段。

    在节点分类任务中,可以将一个 batch 的训练样本形式化为三元组的集合:

    B={<TargetedNodeID, Label, GraphFeature>}

    和直接执行模型计算的常规机器学习模型的训练过程不同,GNN 的训练过程必须将 GraphFeature 描述的子图合并在一起,然后将合并的子图向量化为以下三个矩阵:

    • 邻接矩阵 AB:包含合并子图的节点和边的稀疏矩阵,矩阵中的边按照 destination 节点排序(因为是有向图)。
    • 节点特征矩阵 XB:包含合并子图的节点的特征的特征矩阵。
    • 边特征矩阵 EB:包含合并子图的边的特征的特征矩阵。

    注意:这三个矩阵包含有关 B 中所有目标target节点的 k-hop 邻域的所有信息。它们将与节点 IDlabel 一起馈入模型计算阶段。基于这三个矩阵以及目标节点的 IDlabel,模型计算阶段负责执行前向传播计算和反向传播计算。

  3. 优化策略:这里我们详细阐述三种不同级别的、graph-specific 的优化策略,从而提高训练效率。即: training pipelinebatch-level)、图剪枝graph pruninggraph-level)、边分区edge partitionedge-level)。

    • training pipeline:在 GNN 模型训练期间,每个 worker 首先从磁盘读取一个 batch 的训练数据,然后执行子图向量化和模型计算。按顺序依次执行这些步骤非常耗时。

      为解决这个问题,我们构建了一个包含两阶段的 pipeline:预处理阶段(包括数据读取和子图向量化)、模型计算阶段。

      这两个阶段以并行的方式执行。由于预处理阶段所花费的时间相对于模型计算阶段更短,因此经过几轮训练之后,总的训练时间几乎等于仅执行模型计算所花的时间。

    • graph training:给定batch B 的三个矩阵 AB,XB,EB ,我们有:

      HB(k+1)=Φ(k)(HB(k),AB,EB;WΦ(k))

      其中:

      • HB(k)B 中所有目标节点的所有 k-hop 邻域中节点的第 kintermediate embedding 构成的矩阵。
      • Φ(k) 表示第 k 层的聚合函数。

      假设一共有 K 层,则 B 中所有k-hop 邻域中所有节点最终的 embeddingHB(K) 。但是,上式包含大量不必要unnecessary 的计算。

      • 一方面,只有 B 中的目标节点是标记节点。仅仅这些标记节点的 embedding 需要提供给模型的剩余部分(比如损失函数计算的部分)。这意味着 HB(K) 中剩余的 embedding 对于模型的剩余部分来讲是不必要的。
      • 另一方面,三个矩阵 AB,XB,EB 只能为目标节点提供足够的、必要的信息。因此,由于缺乏足够的信息,HB(K) 中剩余的 embedding 可能无法正确生成。

      为解决这些问题,我们提出了一种图剪枝策略,从而减少上述不必要的计算。给定目标节点 v,对于任意节点 u,我们令 d(v,u) 表示从节点 u 到节点 v 的最短路径。

      给定一个 batch 的目标节点 VB,对于任意节点 u ,我们定义节点 uVB 的距离为:

      d(VB,u)=min({d(v,u)}vVB)

      在深入研究 GNN 模型的计算范式之后,我们有以下观察:给定第 kembedding 之后,第 k+1embedding 的感受野变为 1-hop 邻域。这种观察促使我们从 AB 中裁剪不必要的节点和边。

      具体而言,在第 k 层中,我们将 d(VB,u)>Kk+1 的所有节点 u 及其关联的边,都从AB 中裁剪掉,从而生成一个裁剪的邻接矩阵 AB(k)

      因此,上式重写为:

      HB(k+1)=Φ(k)(HB(k),AB(k),EB;WΦ(k))

      注意:如果将邻接矩阵视为稀疏张量,则模型计算中仅涉及非零值。本质上,图裁剪策略是减少每层邻接矩阵中的非零值的数量。因此,它确实有助于减少大多数GNN 算法中的不必要的计算。此外,每个 AB(k) 都可以在子图向量化阶段预先计算好。借助于 training pipeline 策略,几乎不需要额外的时间来执行图剪枝。

      上图的右侧给出了一个示例,从而说明针对一个目标节点(即节点 A)的图剪枝策略。

      读者注:随着 k 的增加,我们需要越来越少的邻域节点就可以生成目标节点的 embedding

    • Edge partitioning:如上式所示,聚合器 Φ(k) 用于沿着每个节点在稀疏邻接矩阵 AB(k) 中的边,从而聚合每个节点的信息。在模型计算阶段,将会频繁地应用稀疏矩阵乘法等几种聚合算子aggregation operator ,这使得聚合的优化对于图机器学习系统而言变得非常重要。

      但是,传统的深度学习框架(例如 TensorFlow,PyTorch)很少解决该问题,因为它们不是专门为图机器学习系统设计的。

      为解决该问题,我们提出了一种边分区策略来并行地执行图聚合。关键的洞察是:节点仅沿着指向它的边(入边)来聚合信息。如果具有相同目标节点的所有边都可以使用同一个线程来处理,那么多线程聚合将非常有效。因为任何两个线程之间都不会发生冲突。为实现该目标,我们将稀疏邻接矩阵划分为 t 部分,并且确保具有相同 destination 节点的边落在相同的分区partition

      边分区策略在上图的中间部分的顶部区域来说明。

      在边分区之后,每个分区将由一个线程独立地执行聚合操作。

      • 一方面,一个 batch 的训练样本中,节点的数量通常远大于线程数。
      • 另一方面,在GraphFlat 中应用采样之后,每个节点的邻居数量(即邻接矩阵中每行的非零项的数量)不会太大。

      因此,多线程聚合可以实现负载均衡load balancing ,从而在训练 GNN 模型时获得显著加速。

6.2.4 GraphInfer

  1. 在工业级规模的图上执行 GNN 模型推断可能是一个棘手的问题。

    • 一方面,推断任务的数据规模和使用频率可能比工业场景中训练任务的数据规模和使用频率高得多。这需要一个设计良好的推断框架来提高推断任务的效率。
    • 另一方面,由于 GraphFeatures 描述的不同 k-hop 邻域可能会相互重叠,因此直接在 GraphFeatures 上进行推断可能会导致大量重复 embedding 推断,因此变得非常耗时。

    因此,我们通过遵循消息传递机制设计了 GraphInfer,它是一种用于大型图上进行 GNN 模型推断的分布式框架。

    • 我们首先执行层次的模型分割hierarchical model segmentation,从而将训练好的 KGNN 模型拆分为 K+1 个分片 slices

    • 然后,基于消息传递机制,我们开发了 MapReduce pipeline ,从而从底层到高层的顺序推断不同的分片slice

      具体而言,第 kReduce 阶段加载第 k 个模型分片slice,合并入边in-edge邻居上一层embedding 来生成第 k 层的 intermediate embedding。然后通过出边out-edge 传播这些 intermediate embeddingdestination node 从而用于第 k+1 层的 Reduce 阶段。

    下图描述了 GraphInfer 的整体架构。

    这就是模型并行。因为推断期间只需要前向传播,不需要反向传播,因此不需要维持 GNN 的节点状态,因此可以通过 map-reduce 来计算。

  2. GraphInfer 总结如下:

    • 层次的模型分割Hierarchical model segmentation:一个 K 层的 GNN 模型以模型层次方面拆分为 K+1 个分片slice。具体而言,第 k 个分片slice由第 kGNN layer 的所有参数组成,而第 K+1 个分片slice 由最终prediction layer 的所有参数组成。

    • Map阶段:类似于 GraphFlat,这里的 Map 阶段仅仅在 pipeline 的开始运行依次。对于每个节点,Map 阶段也生成三种信息,即:自信息 self information、入边信息 in-edge information、出边信息 out-edge information

      然后,节点ID 设置为 shuffle key、各种信息设置为 value,从而用于下游的 Reduce 阶段。

    • Reduce 阶段:Reduce 阶段运行 K+1 轮,其中前 K 轮将生成第 K 层的节点 embedding,最后一轮将执行最终预测。

      • 对于前 K 轮,reducer 的作用类似于 GraphFlat。但是在合并阶段,reducer 这里不会生成 k-hop 邻域,而是加载其模型分片slice 从而根据self-information、in-edge information 从而推断节点 embedding,并将结果设置为新的 self-information

        注意,在第 K 轮中,reducer 推断出第 K 层的的节点 embedding,只需要将其输出给最后一个 Reduce 阶段,而不是将所有三种信息都输出给最后一个 Reduce 阶段。

      • 最后的 Reduce 阶段负责推断最终的预测得分,并将其作为推断结果输出。

    上述 pipeline 中没有重复的推断,这在很大程度上减少了时间成本。此外,在对整个图的一部分执行推断任务的情况下,类似于 GraphTrainer 中的剪枝策略也可以在 pipeline 中使用。值得注意的是,我们还在 GraphInfer 中实现了前面介绍的采样和索引策略,从而保持与 GraphFlat 中数据处理的一致性,这可以为基于 GraphFlatGraphTrainer 训练的模型提供无偏推断。

6.2.5 示例

  1. 下面的代码展示了AGL 的用法:通过GraphFlat 执行数据生成、通过 GraphTrainer 进行模型训练、通过 GraphInfer 执行模型推断。此外,我们还给出了有关如何实现简单 GCN 模型的示例。

  2. 对于前面描述的每个模块,我们分别提供了一个封装良好的接口。

    • GraphFlat 将原始输入转换为 k-hop 邻域。用户只需要选择一种采样策略,并准备一个 node table 和一个 edge table,即可为目标节点生成 k-hop 邻域。这些 k-hop 邻域是 GraphTrainer 的输入,并被形式化为三元组的集合 B={<TargetedNodeID, Label, GraphFeature>}
    • 然后,通过为 GraphTrainer 提供一组配置,如模型名称、输入、分布式训练配置(worker 数量、参数服务器数量) 等等,将在集群上分布式训练 GNN 模型。
    • 之后,GraphInfer 将加载训练好的模型以及推断数据,从而执行推断过程。

    这样,开发人员只需要关心 GNN 模型的实现即可。

  3. 这里我们以 GCN 为例,说明如何在 AGL 中开发 GNN 模型。

    • 首先,我们应该使用子图向量化函数subgraph vectorize functionGraphFeature 解析为邻接矩阵、节点特征矩阵、边特征矩阵(如果需要)。

    • 然后,通过调用剪枝函数pruning function 启用剪枝策略,则会生成一个邻接矩阵的列表adj_list

    • 然后,adj_list 中的第 k 个元素(代表者第 k 层邻接矩阵的剪枝)以及第 k1 层的 intermediate embedding 将被馈入第 k 层。

      注意,在每个 GCNLayer 中,通过调用聚合函数aggregator function,信息将从入边的邻居聚合到目标节点。

    通过这些接口,可以快速实现 GNN 模型,并且与单台机器的代码没有什么区别。

6.3 实验

  1. 数据集:我们使用三个数据集,包括两个流行的数据集Cora,PPI,以及一个工业级的社交网络User-User Graph: UUG(由支付宝 Alipay 提供)。

    • Cora:引文网络数据集,包含2708 个节点、5429 条边。每个节点关联一个 1433 维的特征,节点属于七种类别中的一个。

    • PPI:蛋白质相互作用数据集,由 24 个独立的图组成。这些图一共包含56944 个节点、818716 条边。每个节点关联一个 50 维的特征,节点属于121 种类别种的几个。

    • UUG:包含从支付宝的各种场景中收集的大量社交关系,其中节点代表用户、边代表用户之间的各种关系。它包含高达 6.29×109 个节点、3.38×1011 条边。每个节点关联一个 656 维特征,节点属于两个类别中的一种。

      据我们所知,这是所有文献中图机器学习任务的最大规模的属性图 attributed graph

    根据之前论文的配置,我们将 Cora,PPI 数据集分别拆分为三部分:training/validation/test 。对于 UUG 数据集,我们一共有 1.5×108 个标记节点,我们选择其中的 1.2×108 个节点作为训练集、5×106 个节点作为验证集、1.5×107 个节点作为测试集。注意:训练集、验证集、测试集相互之间没有交叉的。

    所有这些数据集的统计信息见下表所示。

  2. 评估的配置:我们将 AGL 和两个著名的开源图机器学习系统进行比较,从而证明我们系统的有效性effectiveness、效率effciency、和可扩展性scalability

    • Deep Graph Library:DGL:一个 Python package,可以基于现有的面向张量的框架(如 PyTorch/MXNet)为图结构数据提供接口。
    • PyTorch Geometric:PyG:一个基于 PyTorch 的深度学习库,用于对不规则结构的数据(如 Graph图、点云point cloud、流形manifold)进行深度学习。

    对于每个系统,我们分别在两个公共数据集(Cora,PPI)上评估了三种广泛使用的 GNNGCN、GAT、GraphSAGE。另外,我们将这三个模型对应的原始论文报告的那些 GNN 的性能作为 baseline

    为了公平地进行比较,我们仔细地调优了这些 GNN 的超参数(如学习率、dropout ratio 等)。对于 Cora,PPI 的实验,embedding size 分别设置为 1664 。所有的 GNN 模型使用 Adam 优化器优化,最多训练 200epoch

    对于 UUG 数据集,embedding size 仅为 8

    为了减小方差,我们为每个实验记录了 10 次运行后的平均结果。

    注意,在评估公共数据集的训练效率时,所有系统都在独立容器(机器)上以相同的CPUIntel Xeon E5-2682 v4@2.50GHz)运行。

    对于 UUG 实验,我们将系统部署在蚂蚁金服的集群上,从而验证我们的 AGL 在工业场景中的真实性能。注意,这里集群并不是只有我们这个任务,还有其它任务此时都在这个集群上运行,这在工业环境中很常见。我们通过改变 worker 数量来分析收敛曲线和加速比,从而验证AGL 的可扩展性。

    但是,DGLPyG 都无法在 UUG 数据集上运行,因为这两个系统无法支持分布式模式,并且以单机模式运行会导致 OOM 问题。因此我们不包括 DGLPyGUUG 数据集上的结果。

  3. 评估指标:我们从几个方面来评估AGL

    • 首先,我们报告 Cora,PPI 的准确率和 micro-F1 得分,从而证明不同系统训练的GNN 模型的有效性。
    • 其次,我们报告训练阶段每个 epoch 的平均时间成本,从而证明不同系统的训练效率。
    • 此外,我们使用 UUG 数据集训练节点分类模型,并对整个 User-User Graph 进行推断。通过报告训练阶段和推断阶段的时间成本,我们证明了 AGL 在工业场景的优越性。
    • 最后,我们报告了工业级的 UUG 数据集的收敛曲线和训练的加速比,从而证明了 AGL 的可扩展性。

6.3.1 公开数据集

  1. 这里我们报告了两个公共数据集(Cora,PPI)上AGLDGL,PyG 的对比,从而评估不同系统的效果和效率。

  2. 效果Effectiveness:下表给出了不同的图机器学习系统实现的三个GNN 模型(GCN,GAT,GraphSAGE)在两个公共数据集、一个工业数据集上的效果。

    评估指标为:对于 Cora 数据集为准确率、对于 PPI 数据集为 micro-F1、对于 UUG 数据集为 AUC。同时我们还报告了这些 GNN 模型在原始论文中提供的结果作为 baseline

    结论:

    • 在这两个公共数据集上,AGL 实现和训练的所有这三个GNN 模型的性能都可以和 PyG/DGL 中的模型相媲美。

      大多数情况下,GNN 模型的性能偏差都小于 0.01。但是,对于 PPI 上的 GraphSAGE ,这三个系统的性能均高于 baseline,这是由于传播阶段的差异所致。具体而言,在聚合邻域信息时,这三个系统采用 add 算子,而原始论文使用 concat 算子。

    • 此外,AGL 的这三个 GNN 模型都可以很好地在 UUG 上工作并取得合理的结果。其中 GAT 的效果最佳,这是可以预期的,因为它为不同邻居学习了不同的权重。

  3. 效率Efficiency:基于 PPI 数据集,我们比较了三个图机器学习系统上训练的不同深度(1 层、2 层、3 层)的不同 GNN 模型(GCN, GraphSAGE, GAT )的训练效率。

    下表报告了所有训练任务每个 epoch 的平均时间成本。同时我们还给出了不同优化策略的结果(即图剪枝、边分区)。具体而言:

    • 下标为 Base 表示不采用任何优化策略的原始 pipeline 方法。
    • 下标为 +pruning 表示采用图剪枝优化策略的方法。
    • 下标为 +partition 表示采用边分区优化策略的方法。
    • 下标为 +pruning&partition 表示同时采用图剪枝和边分区优化策略的方法。

    注意,我们的系统是专为工业级规模的图而设计的。在训练阶段,数据将从磁盘而不是内存加载(PyGDGL 就是从内存加载)。因此我们将 AGLBase 视为公平的 baseline 。尽管我们的系统是为工业级规模的图上分布式训练 GNN 模型而设计的,它也证明了在单机模式standalone modeCPU 的出色的训练速度。下表为单机模式下,PPI 数据集训练阶段每个 epoch 的时间成本(单位秒)。

    通常在训练阶段,AGLPyG 相比实现了 5 ~ 13 倍的加速、与 DGL 相比实现了 1.2 ~ 3.5 倍的加速。对于所有不同深度的三个GNN 模型上,AGL 在不同程度上都优于其它两个图机器学习系统。

    此外,我们还进一步验证了所提出的优化策略(即图剪枝、边分区)的优越性。

    • 首先,图剪枝策略或边分区策略在不同 GNN 模型上都能很好地工作。这可以通过比较 AGL + pruning vs AGL_base、以及 AGL + edge partitioning vs AGL_base 得以证明。

      并且,当采用 AGL + pruning + partition 时,这两种优化策略可以实现更大的提升。

    • 其次,这两种策略在不同情况下的加速比有所不同。

      • 边分区策略在 GCN, GraphSAGE 中的加速比要比 GAT 更高。
      • 图剪枝策略在训练1GNN 模型时不起作用,但是在训练更深层 GNN 时效果很好。

      这种观察是由于两种策略背后的不同见解 insight 引起的。图剪枝策略旨在减少不必要的计算(通过裁剪不会用于传播信息给目标节点的边来进行)。边划分策略以一种有效的、并行的方式实现了邻居之间的信息聚合。

      • 一方面,这两种策略优化了训练 GNN 模型的一些关键step,因此它们能够使得GNN 模型的训练受益。

      • 另一方面,也存在一些限制。

        • 例如,如果我们训练一个 1 层的 GNN 模型,则图剪枝策略不起作用是合理的。因为每条边在将信息传播到目标节点中都扮演着角色,并且没有不必要的计算。
        • 此外,如果模型包含比沿着边聚合信息更稠密的计算(如计算注意力),则这些策略的效果将会被降低,因为稠密的计算将占据总时间成本中的大部分。

6.3.2 工业数据集

  1. 我们使用MapReduce 和参数服务器来实现 AGL,并将其部署在由一千多台计算机组成的 CPU 集群中,每台计算机由具有 64G 内存、200G HDD32-core CPU 组成。然后我们对工业数据集(即 UUG 数据集)进行实验,从而证明 AGL 在工业场景中的可扩展性和效率。

  2. 工业级的训练:可扩展性scalability 是工业级图机器学习系统最重要的标准之一。这里我们集中在两个方面评估 AGL 的训练可扩展性,即收敛convergence 和加速比speedup 。为此,我们使用不同数量的worker 来在工业级的 UUG 数据集上训练 GAT 模型,并且在下图中分别报告了收敛性和加速比的结果。

    • 收敛性:左图给出了 AGL 在收敛性方面的训练可扩展性。其中 y 轴表示 GNN 模型的 AUCx 轴表示训练的 epoch 数量。

      一般而言,无论训练 worker 的数量如何,AGL 最终都可以收敛到相同水平的 AUC。如左图所示,尽管分布式模式下需要更多的训练 epoch 数量,但是收敛曲线最终达到单机训练的 AUC 相同的水平。因此,在分布式训练下可以保证模型的有效性,这证明了 AGL 无需考虑收敛性就可以扩展到工业级规模的图。

      这里是训练 AUC 还是验证 AUC?论文并未讲清楚。

      此外可以看到:在相同 epoch 情况下,分布式训练的效果通常略差于单机。这似乎是一个普遍现象。

    • 加速比:我们还展示了加速比方面的训练可扩展性。如右图所示,AGL 实现了近线性near-linear 的加速,斜率约为 0.8 。这意味着如果将训练 worker 的数量增加一倍,则训练速度将提高到 1.8 倍。

      注意:

      • 在实验中,我们将训练 worker 的数量从 1 扩展到 100,间隔为 10 。结果,AGL 实现了持续的高的加速比,并且斜率几乎不降低。例如,当训练 worker 的数量达到 100 个时,我们的速度加快 78 倍,仅略低于预期的 80
      • 所有这些实验都是在实际生产环境中的集群上进行的。可能在同一台物理机上运行了不同的任务。随着训练 worker 的增加,网络通信的开销可能会略有增加,从而导致加速比曲线的斜率扰动。这再次证明了AGL 系统在工业级场景中的鲁棒性。

  3. 值得注意的是,在 UUG 上训练 2GAT 模型只需要大约 14 个小时,直到收敛为止。具体而言:

    • GraphFlat 使用大约 1000worker 需要 3.7 个小时来生成 GraphFeature
    • GraphTrainer 只需要 100worker 大约 10 个小时来训练 GAT 模型。

    整个 pipeline 可以在 14 个小时内完成,这对于工业级应用而言非常出色。

    如果只有 100worker,那么需要 37 个小时来生成 GraphFeature,此时总的 pipeline 耗时为 47 个小时。可以看到:最大的时间消耗在 GraphFeature 生成上面。

    此外,在训练阶段,训练任务的每个 worker 只需要 5.5 GB 的内存(总计 550GB ),这远远少于存储整个图的内存成本(35.5 TB) 。

    总之,由于 AGL 巧妙的体系结构的设计,AGL 满足了在工业级图上训练 GNN 模型的工业可扩展性的要求。

  4. 工业级的推断:我们在整个 UUG 数据集上评估了 GraphInfer 的效率,数据集包含 6.23×109 个节点、3.38×1011 条边。在下表中,我们报告了推断任务消耗的时间和资源。

    由于没有图机器学习系统能够处理如此大的图,因此我们将 GraphInfer 和基于 GraphFeature 的原始推断模块进行了比较。注意,所有这些实验的并发度concurrency 都相同,即 1000worker

    可以看到:GraphInfer 在时间成本和资源成本上始终优于原始推断模块。对于两层的 GAT 模型(模型生成的 embedding 维度为 8 维),GraphInfer 需要大约 1.2 小时来推断 62.3 亿个节点的预估得分,这大约是原始推断模块所花费时间的 1/4 。此外,GraphInfer 还分别节省了 50%CPU 成本、76% 的内存成本。

    与基于 GraphFeature 的原始推断模块相比,GraphInfer 通过采用消息传递方案避免了重复计算,这就是它优于原始推断模块的原因。

七、AliGraph [2019]

  1. 传统的图分析任务经常受到计算复杂度、空间复杂度的困扰,而一种新的、称之为 graph embedding:GE 的范式为解决这类问题提供了一条有效途径。具体而言,GE 将图数据转换为低维空间,从而可以最大程度地保留图的拓扑结构和内容信息。之后,生成的 embedding 将作为特征输入到下游机器学习任务中。

    此外,通过结合深度学习技术,人们提出了 图神经网络 Graph Neural Network:GNNCNN 使用共享权重以及多层架构来提升模型的学习能力。图是典型的局部链接结构,共享权重可以显著降低计算代价,而多层架构是捕获各种尺寸特征的同时处理层次模式hierarchical pattern 的关键。因此,GNNCNN 在图上的推广。

    目前已有很多 GEGNN 算法,但是它们主要集中在简单的图数据上。现实世界商业场景相关的绝大多数图数据具有四个属性:大规模large-scale、异质性heterogeneous、带属性attributed、动态性dynamic 。例如,当今的电商网络通常包含数十亿个具有各种类型和丰富属性的节点、边,并且随着时间的推移而迅速演变。

    这些特性带来了巨大挑战:

    • 如何提高大规模图上 GNN 的时间和空间效率?
    • 如何优雅地将异质信息整合为统一的 embedding 结果?
    • 如何统一定义要保留的拓扑结构信息和属性信息(它们位于不同的空间)?
    • 如何在动态图上设计有效的增量 GNN 方法?

    为应对上述挑战,已有大量的工作来设计效率高、效果好的 GNN 方法。下表给出了流行的 GEGNN 模型的分类,其中包括阿里巴巴内部开发的模型(黄色阴影表示)。如图所示,大多数现有方法同时集中于一个或者两个特点。但是现实世界中的商业数据通常面临更多挑战。为了缓解这种情况,阿里巴巴的一篇论文《AliGraph: A Comprehensive Graph Neural Network Platform》提出了一种针对 GNN 的全面而系统的解决方案。论文设计并实现了一个叫做 AliGraph 的平台,该平台提供了系统和算法来解决实际的问题(即前面提出的四个问题)从而很好地支持了各种 GNN 方法和应用。

  2. AliGraph 的主要贡献:

    • 系统:在 AliGraph 的基础组件中,我们构建了一个支持 GNN 算法和应用application 的系统。该系统架构是从通用 GNN 方法抽象而来的,由存储层 storage layer、采样层sampling layer、算子层 operator layer 组成。

      具体而言:

      • 存储层应用了三种新的技术来存储大规模的原始数据,从而满足 high-level 操作和算法对数据的快速访问要求。这三种技术为:结构化structural 和属性特定attributed specific 的存储、图分区、缓存某些重要节点的邻居。
      • 采样层优化了 GNN 方法中的关键采样操作。我们将采样方法分为遍历 TRAVERSE 、邻居NEIGHBORHOOD、负采样NEGATIVE 三种采样,并提出了无锁方法在分布式环境中执行采样操作。
      • 算子层在 GNN 算法中提供了两个常用的算子的优化实现,即 AGGREGATECOMBINE

      我们使用一种缓存策略来存储一些中间结果以加快计算过程。这些组件经过共同设计和共同优化,从而使得整个系统有效且可扩展。

    • 算法:该系统提供了灵活的接口来设计 GNN 算法。我们表明:所有现有的GNN 方法都可以在我们的系统上轻松实现。

      此外,我们还针对实际需求内部开发了几种新的 GNN,并在这里详细介绍了其中的六种(上表中的黄色阴影表示的),每种方法在处理实际问题时都更加灵活实用。

    • 评估:我们的 AliGraph 平台实际上已经部署在阿里巴巴公司中,从而支持各种业务场景,包括阿里巴巴电商平台的商品推荐、个性化搜索。

      通过对具有 4.92 亿节点、68.2 亿条边以及丰富属性的真实世界数据集进行广泛的实验,AliGraph 在图构建方面的执行速度提高了一个量级(5 分钟 vs SOTAPowerGraph 平台的数小时)。

      在训练方面,AliGraph 使用新颖的缓存策略可以将运行速度提高 40%~50%,并通过改进的 runtime 达到大约 12 倍的加速比。

      我们在 AliGraph 平台上内部开发的 GNN 模型将归一化的评估指标提升了 4.12% ~ 17.19%(如下图所示)。这些数据是从阿里巴巴电商平台淘宝收集而言,我们将数据集贡献给社区从而促进社区进一步的发展。

      因此实验结果从系统和算法两个层面都验证了 AliGraph 的效率和效果。

  3. 相关工作:

    • 同质图 homogeneous graph

      • DeepWalk 首先通过随机行走在图上生成一个语料库,然后在语料库上训练一个 skip-gram 模型。
      • LINE通过同时保留一阶邻近性和二阶接近性来学习 node presentation
      • NetMF 是一个统一的矩阵分解框架 unified matrix factorization framework ,用于从理论上理解和改进 DeepWalkLINE
      • Node2Vec 增加了两个超参数来控制随机游走过程。
      • SDNE提出了一种结构保留的emebdding 方法。
      • GCN 使用卷积运算来融合了邻居的 feature representation
      • GraphSAGE 提供了一种归纳式方法 inductive approach ,将结构信息与节点特征相结合。
    • 异质图 heterogeneous graph

      • 对于具有多种类型节点和/或边的图,PMNE 提出了三种方法将 multiplex network 投影到连续向量空间。
      • MVE 使用注意力机制将具有多个视图的网络嵌入到一个 collaborated embedding 中。
      • MNE 为每个节点使用一个 common embedding 和几个附加 embedding (每个边类型对应一个附加的 emebdding ),这些embedding 是由一个统一的 network embedding 模型共同学习的。
      • Mvn2Vec通过同时建模 preservationcollaboration 来探索 embedding result
      • HNE 联合考虑内容和拓扑结构是 unified vector representation
      • PTE 从标签信息中构建大规模异质文本网络,然后将其嵌入到低维空间。
      • Metapath2VecHERec 形式化了 meta-path based 的随机行走从而构建节点的异质邻域,然后利用 skip-gram 模型来进行 node embedding
    • 属性图attributed graphattributed network embedding的目的是寻求低维vector representation 从而同时保留拓扑和属性信息。

      • TADW通过矩阵分解将节点的文本特征纳入 network representation learning
      • LANE 顺利地将标签信息纳入attributed network embedding ,同时保留了它们的相关性。
      • AANE 使联合学习过程以分布式方式完成,以加速 attributed network embedding
      • SNE提出了一个通用框架,通过捕获结构邻近性和属性邻近性来嵌入社交网络。
      • DANE 可以捕获高非线性,并同时保留拓扑结构和节点属性的各种邻近性。
      • ANRL 使用邻域增强自编码器对节点属性信息进行建模,并使用skip-gram 模型来捕获网络结构。
    • 动态图 dynamic graph

      • 实际上,一些静态方法也可以基于static embedding 来更新 new node 从而处理动态网络。
      • 考虑到新节点对原始网络的影响,《Dynamic network embedding: An extended approach for skip-gram based network embedding》扩展了 skip-gram 方法来更新原始节点的 embedding
      • 《Dynamic network embedding by modeling triadic closure process》专注于捕获 triadic structure property 从而用于学习 network embedding
      • 同时考虑到网络结构和节点属性,《Attributed network embedding for learning in a dynamic environment》 侧重于更新 streaming networktop 特征向量 eigen-vector 和特征值 eigen-value

7.1 基本概念

  1. 给定图 G=(V,E,A) ,其中 V 为所有节点的集合,E 为所有边的集合,A 为邻接矩阵。如果节点 u,v 之间存在连接,则 Au,v>0 表示连接的权重;否则 Au,v=0 。注意,这里 G 可以为有向图也可以为无向图。如果是有向图,那么 Au,vAv,u ;如果是无向图,那么有 Au,v=Av,u

    对于每个节点 u ,定义其邻居集合为 Nu 。对于有向图,进一步地我们将入边in-edge 邻居集合记作 Nu+、出边out-edge邻居集合记作 Nu

    n=|V| 为所有节点的数量,m=|E| 为所有边的数量。

  2. 为全面描述现实世界中的商业数据,实际的图中通常包含丰富的内容信息,例如多种类型的节点、多种类型的边、节点属性、边属性等。因此我们定义了属性异质图Attributed Heterogeneous Graph:AHG G=(V,E,A,TV,TE,AV,AE) ,其中:

    • V 为节点集合,E 为边集合,A 为节点的邻接矩阵。

    • TV:VFV 为节点的类型映射函数, TE:EFE 为边的类型映射函数。其中 FV 为节点类型集合,FE 为边类型集合。

      为了确保异质性,我们要求 |FV|2 或/和 |FE|2

    • AV 为节点属性的映射函数,它将每个节点映射到节点属性向量(可能有多个向量组成);AE 为边属性的映射函数,它将每条边映射到边属性向量(可能有多个向量组成)。

      对于节点 vV ,我们假设它的第 i 个属性向量为 xv,i ;对于边 eE,我们假设它的第 i 个属性向量为 we,i

    一个典型的属性异质图如下图所示,其中包含两种类型的节点(user 节点和 item 节点)、四种类型的边。

  3. 现实世界的图通常随时间动态演化。给定一个时间区间 [1, T],动态图Dynamic Graph是一个图序列 {G(1),G(2),,G(T)} 。 对于每个 1tTG(t) 为一个简单的图或者一个属性异质图。

    为了便于说明,我们采用上标 (t) 表示对象在时刻 t 的状态。如 V(t) 为时刻 t 的图 G(t) 的节点集合、E(t) 为时刻 t 的图 G(t)的边集合。

  4. 给定输入图 G(它是简单图或属性异质图),embedding 问题是将图 G 转换为 d 维空间,使得图属性尽可能地被保留。其中 d 为预先给定的维度, d|V|

    GNN 是一种特殊的 graph embedding 方法,它通过在图上应用神经网络来学习 embedding 结果。

    注意,本文中我们专注于 node-levelembedding 。即对于每个节点 vV,我们输出一个 d 维的 embedding 向量 hvRd 。这里暂时不考虑边的 emebdding 、子图的 embedding、甚至整个图的 embedding

7.2 系统

  1. 在我们的 AliGraph 平台中,我们设计并实现了一个底层系统(蓝色实线的方框标记)从而很好地支持高级 GNN 算法和应用程序。接下来我们详细介绍该系统。

7.2.1 GNN 算法框架

  1. 这里我们为 GNN 算法抽象出一个通用的框架。一系列经典的 GNN 算法,如 Structure2Vec, GCN, FastGCN, AS-GCN, GraphSAGE 可以通过对这个框架的算子进行实例化来实现。

  2. GNN 框架算法:

    • 输入:图 Gembedding 维度 dN,每个节点 vV 的属性向量 xv ,最大hop 邻域 kmaxN

    • 输出:每个节点 vVembedding 向量 hvRd

    • 算法步骤:

      • 对每个节点 vV ,初始化 hv(0)=xv

      • 迭代 k=1,2,,kmax ,迭代步骤为:

        • 对每个节点 vV,执行:

          • 对节点 v 的邻域进行采样: SvSAMPLE(Nv)
          • 聚合节点 v 的采样邻域:hNvAGGREGATE(hu(k1),uS)
          • 生成节点 v 的新的embeddinghv(k)COMBINE(hv(k1),hNv)
        • 归一化所有节点 vVembedding 向量 hv(k)

      • 对所有节点 vV,返回 hv=hv(kmax) 作为节点 vfinal embedding

  3. GNN 框架的输入包括图 Gembedding 维度 dN、每个节点 vV 的属性向量 xv 、最大hop 邻域 kmaxNGNN 框架的输出为每个节点 vVembedding 向量 hvRd ,然后将 embedding 馈入到下游机器学习任务,如节点分类、链接预测任务等。

    GNN 框架首先将节点 v 的节点 embedding hv(0) 初始化为输入的属性向量 xv 。然后在第 k 轮迭代时,每个节点 v 聚合邻域的 embedding 来更新自己的 embedding

    具体而言:

    • 首先使用 SAMPLE 函数来对节点 v 的邻域 Nv 采样从而获得邻域子集 S
    • 然后通过 AGGREGATE 函数来聚合 S 中所有节点的 embedding 来获得邻域 embedding hNv
    • 然后使用 COMBINE 函数来拼接 hNvhv(k1) 来生成 hv(k)
    • 处理完所有节点之后,将 embedding 向量归一化normalized
    • 最后,经过 kmax 步之后,返回 hv(kmax) 作为节点 vfinal embedding hv
  4. 基于上述 GNN 算法框架,我们自然地构建了 AliGraph 平台的系统架构。该平台整体上由五层组成,其中底部三层用于支撑顶部的算法层algorithm layer 和应用层 application layer

    • 存储层storage layer 可以组织和存储各种原始数据,从而满足high-level 操作和算法对快速访问数据的要求。
    • 在此基础上,结合 GNN 算法框架,我们发现 SAMPLE, AGGREGATE, COMBINE 这三个主要的算子operator 在各种 GNN 算法中起着重要作用。其中 SAMPLE 算子为 AGGREGATE, COMBINE 奠定基础,因为它直接控制了后者需要处理的信息的范围。因此我们设计了 sampling layer 来访问存储,从而快速、正确地生成训练样本。
    • 在采样层的上方, operator layer 专门优化了 AGGREGATECOMBINE 函数。
    • 在系统顶部,可以在algorithm layer 构建 GNN 算法,并在 application layer 服务于实际任务。

7.2.2 存储层

  1. 这里我们讨论如何存储和组织原始数据。注意,存储真实世界的图的空间成本非常大。常见的电商网络可能包含数百亿节点和数千亿边,其存储成本很容易超过 10TB。大规模的图为有效的图访问带来了巨大的挑战,尤其是在集群的分布式环境中。

    为了很好地支持high-level 算子和算法,我们在 AliGraph 的存储层应用了以下三种策略:图分区 graph partition、属性的分离存储separate storage of attributes 、重要节点的邻居缓存caching neighbors of important vertices

a. 图分区
  1. AliGraph 平台建立在分布式环境上,因此整个图被划分并分别存储在不同的 worker 中。图分区的目标是最小化交叉边crossing edge 的数量。其中交叉边指的是:一条边的两个节点位于不同的 worker 上。

    已有一些文献提出了一系列算法。这里我们实现了四种内置的图分区算法,这四种算法适用于不同的情况。

    • MEIS 算法:适用于稀疏图。
    • 节点cut 和边 cut 分区算法:适用于稠密图。
    • 2-D 分区算法:适用于 worker 数量固定的场景。
    • 流式streaming-style分区策略:适用于边频繁更新的场景。

    用户可以根据自己的需求选择最佳的分区策略。此外,用户还可以将其它的图分区算法实现为系统中的插件。

  2. MEIS 算法背后的基本思想非常简单:

    • 粗化阶段coarsening phase:将图 G 粗化coarsen 为一个很小的子图。在这个阶段,图的规模不断缩减。
    • 初始划分阶段initial partitioning phase:对这个子图一分为二bisection
    • 逆粗化阶段uncoarsening phase:把这个子图的划分不断映射回原始的大图,映射过程中不断微调refine划分边界。

    这个过程如下图所示。

  3. 节点cut 和边 cut 分区算法:

    • edge-cuts:已有一些方法的目标是将节点均匀分配给worker 从而使得 cut edges (跨机器的边)数量最小化。但是这种方式对于幂律分布的图low graph 效果非常差。因此 edge-cuts 使用随机的节点划分。

      定理:如果节点被随机分配到 p 个机器上,则期望的跨机器的边的比例为:

      E[|cut edges||E|]=11p

      进一步地,如果节点 degree 分布服从指数为 α 的幂律分布,则每个节点的期望的跨机器的边的比例为:

      E[|cut edges||V|]=(11p)E[Dv]=(11p)h(α1)h(α)

      其中:Dv 为节点 vdegreeh(α)=d=1|V|1dα 为幂律分布的归一化常数。

    • vertex-cut:我们既可以按照节点来划分graph,也可以按照边来划分 graph。节点的 degree 的分布是高度倾斜的,但是每条边相邻的节点数量的分布是恒定的(如每条边仅与两个节点相连)。因此 vertex-cut 具有更好的潜力。

      vertex-cut 中,每条边都分配给单个机器,并且在所有机器之间cut 节点。如果相邻的两条边位于不同的机器,则相邻边的共同节点在这两台机器之间拷贝。

      如下图所示分别为 edge-cut(按节点划分并切割边)、vertex-cut(按边划分并切割节点)。虚线节点表示被拷贝的 ghost 节点,1,2,3 表示三台机器。

      定理:如果边被随机分配到 p 个机器上,则期望的被切割节点比例为:

      E[|cut vertex||V|]=p|V|vV(1(11p)Dv)

      其中 Dv 为节点 vdegree

      进一步地,如果节点 degree 分布服从指数为 α 的幂律分布,则期望的被切割节点比例为:

      E[|cut vertex||V|]=pph(α)d=1|V|1(p1p)ddα

      其中 h(α)=d=1|V|1dα 为幂律分布的归一化常数。

    随机的vertex-cut 实现了很好的预期的性能,在机器之间获得了几乎完美的平衡。α 越大则拷贝节点的比例越大(replication factor ),但是随机的vertex-cut 也获得了更好的收益。

  4. 2D 划分算法:从原理上将,2D 划分算法将图的邻接矩阵划分为 k×k (行 x 列)一共 k 个分块,并将 k 个分块分配到 p 台机器。其中要求少数分块具有大量的非零元素、大部分分块具有少量的非零元素。

    如下图所示为 2D 划分到 6 台机器上的情况,每种颜色代表一台机器。对角线的 block 包含大量的非零元素,非对角线的 block 包含少量的非零元素。

  5. 流式分区:在流式分区中,我们将以 edge stream 的形式将节点分发到各个 worker。当节点到达时,一个 partitioner 决定将节点放置在哪个 worker 上。节点一旦放置则永不移动。

    • edge stream 的顺序可以是随机的、广度优先搜索、深度优先搜索。
    • 边可以是有向的或者无向的。如果是无向图,则每条边在流中出现两次。
    • 我们运行分区算法访问已经落地的节点定义的整个子图,或者仅仅是有关这个子图的局部信息(直接邻域)。

    流式分区理论上可以处理非常大的图(只要集群资源足够),并且只需要加载一次图,并且只需要很少的通信成本。

  6. Partition and Caching 算法:

    • 输入:图 G ,分区数量 pcache 深度 h,阈值 τ1,,τh (用于指定 h 层的重要的节点)

    • 输出:p 个子图

    • 算法步骤:

      • 初始化 pgraph server

      • 分区:对于每条边 e=(u,v)E 执行:

        • j=ASSIGN(u) 。其中 ASSIGN(.) 为图分区函数,它根据边 e 来对节点分区。
        • 将边 e 发送到第 jpartition
      • 缓存:对每个节点 vV 执行:

        • for k1 to h

          • 计算 Di(k)(v)Do(k)(v)
          • 如果 Di(k)(v)Do(k)(v)τk ,则在 v 的分区上缓存节点 v 的、从 hop 1hop k 的出边邻居。
b. 属性的分离存储
  1. 对于异质图,我们需要在每个 worker 进行中存储分区图的结构和属性。

    • 图的结构信息可以通过邻接表简单地存储。即,对于每个节点 v,我们存储其邻域集合 Nv

    • 对于节点和边上的属性,不宜将它们一起存储在邻接表中。有两个原因:

      • 属性通常占用更多的空间。例如存储节点 ID 的空间成本最多为 8 个字节,但是存储节点上的属性的空间成本可能从 0.1KB1KB
      • 不同节点或边之间的属性有很大的重叠。例如,很多节点可能具有表示性别的标签 man

      因此,单独存储属性更为合理。

  2. AliGraph 中,我们通过构建两个索引集合 IV,IE 来存储节点和边上的属性。

    • IV 中的每一项关联节点上的一个unique 属性。
    • IE 中的每一项关联边上的一个 unique 属性。

    如下图所示,在邻接表中:

    • 对于每个节点 u ,我们存储属性 AV(u)IV 中的索引。
    • 对于每条边 (u,v),我们存储属性 AE(u,v)IE 中的索引。

    NDNL 分别为平均邻居数量、平均属性长度。令 NA 为节点和边上的 distinct 属性的数量。显然,我们的属性分离存储策略将空间成本从 O(nNDNL) 下降到 O(nND+NANL)

  3. 毫无疑问,属性的分离存储将增加检索属性的访问时间。平均而言,每个节点需要访问索引 IE 最多 ND 次就可以收集它的所有邻居的属性。

    为缓解这个问题,我们添加了两个缓存组件cache components ,分别将 IVIE 中频繁访问的项缓驻留在cache 中。我们对每个 cache 采用least recently used:LRU 策略来更新cache 内容。

c. 重要节点的邻居缓存
  1. 在每个 worker 中,我们进一步提出了一种在局部cache 某些重要节点的邻居的方法从而降低通信成本。

    直观的想法是:如果节点 v 经常被访问,我们可以将 v 的出边邻居out-neighbors存储在它出现的每个分区中。这样就可以大大降低访问 v 邻居的成本。

    但是,如果 v 的邻居数量很大,则存储 v 邻居的多个副本将导致巨大的存储成本。为了更好地平衡trade-off,我们定义了一个指标来评估每个节点的重要性,这个指标决定了是否值得缓存一个节点。

    • 定义 Di(k)(v) 为节点 vk-hop 入边邻居 in-neighbors ,它衡量了缓存节点 v 邻居的收益。

      因为 v 入边邻居越多,则缓存邻居之后可以从高速缓存中获取邻居节点和边的特征,而不需要从索引集合中遍历地检索。

    • 定义Do(k)(v) 为节点 vk-hop 出边邻居 out-neighbors。它衡量了缓存节点 v 邻居的成本。

      因为邻居节点也需要以该邻居节点为 key 来缓存当前节点(作为该邻居的邻居),因此 v 出边越多则需要缓存的节点数量越多。

    因此,定义节点vk-th 重要性为:

    Imp(k)(v)=Di(k)(v)Do(k)(v)

    仅当节点 v 的重要性 Imp(k)(v) 足够大时,才会缓存节点 v 的出边邻居。

    注意:这里考虑的是有向图。对于无向图,入边邻居等于出边邻居,则 Imp(k)(v)=1 恒成立。

  2. Partition and Caching 算法给出了缓存重要节点的出边邻居的过程。 h 为我们考虑的邻居的最大深度,τk 为用户指定的、 k-hop 邻居的阈值。如果 Imp(k)(v)τk ,则我们缓存节点 v 的从 1...k-hop 出边邻居。

    • 注意,将 h 设置为一个比较小的数字(通常为 2)就足以支持一系列实际中的 GNN 算法。
    • 实际上我们发现 τk 不是敏感参数。通过实验评估,将 τk 设置为 0.2 左右的较小的值可以在缓存成本和收益之间取得最佳平衡。
  3. 有趣的是,我们发现要缓存的节点只是整个图的很小一部分。现实世界中节点的、直接相连的 in-degree Di(1)(v)out-degree Do(1)(v) 通常服从幂律分布 power-law distribution 。即,图中的极少数节点具有较大的 in-degreeout-degree

    有鉴于此,我们得出两个定理:

    • 定理一:如果 in-degreeout-degree 服从幂律分布,则对于任意 k1,图中节点的 k-hopin-degreeout-degree 也服从幂律分布。

      该定理可以通过数学归纳法证明,具体过程参考原始论文。

    • 定理二:如果图的in-degreeout-degree 服从幂律分布,则图中节点的 importance 取值也服从幂律分布。

      该定理可以直接证明,具体过程参考原始论文。

    定理二表明:图中的极少数节点具有较大的 importance 。这意味着我们只需要缓存少量的、重要的节点即可显著降低图遍历的成本。

    虽然要缓存的节点比较少,但是这些节点覆盖的邻居节点集合比较大,整体空间占用也比较高。

7.2.3 采样层

  1. GNN 算法需要聚合邻域信息来生成每个节点的 embedding。但是,现实世界的 degree 分布通常会倾斜,这使得卷积运算难以执行。为解决这个问题,现有的 GNN 通常采用各种采样策略来采样邻域的子集。由于采样的重要性,在我们的系统中我们抽象出了一个采样层来优化采样策略。

  2. 正式地,采样函数接受一个节点集合 VT 作为输入,并返回一个更小的节点集合 VSVT 作为输出,其中 |VS||VT| 。通过全面了解当前的 GNN 模型,我们抽象出三种不同的采样器,即:

    • TRAVERSE:用于从整个分区的子图中采样一个 batch 的节点或者边。
    • NEIGHBORHOOD:用于从节点的邻域中采样节点作为上下文。邻域可以是直接邻域或者 k-hop 邻域。
    • NEGATIVE:用于生成负样本从而加快训练过程的收敛速度。
  3. 在之前的工作中,采样方法在提高 GNN 算法的效率和准确性方面起着重要作用。在我们的系统中,我们将所有采样器都视为插件,它们每个都可以独立地实现。上述三种类型的采样器可以实现如下:

    • TRAVERSE:可以从局部子图获取数据。

    • NEIGHBORHOOD:可以从局部存储获取1-hop 邻域,也可以从局部cache 获取k-hop 邻域。如果节点的邻居没有被缓存,则需要调用远程的 graph server

      当获取一个 batch 节点的邻域时,我们首先将这些节点划分为多个 sub-batch,然后每个 sub-batch 节点的邻域从相应的 graph server 返回,然后将返回结果组合在一起。

    • NEGATIVE:通常从局部 graph server 获得负采样。对于某些特殊情况,可能需要从其它graph server 进行负采样。

      负采样在算法上很灵活,我们不需要在一个 batch 中调用所有的 graph server

    总之,下述代码给出了一个典型的采样阶段:

  4. 通过使用带动态权重的几种有效的采样策略,我们可以加快训练速度。我们在采样器的反向传播阶段实现了权重更新操作,类似于算子的梯度反向传播。因此,当需要权重更新时,我们应该做的是为采样器注册一个梯度函数。权重更新的模式(同步的或者异步的)取决于模型训练算法。

  5. 目前为止,读取和更新都将在内存中的 graph storage 上进行,这可能会导致性能下降。根据邻域要求,图将按照源节点进行划分。基于此,我们将graph server 上的节点分为几组。每一组都与一个 request-flow bucket 相关联。在这个request-flow bucket 中,包括读取、更新在内的所有操作都将与该组中的节点相关。bucket 是无锁的队列。

    如下图所示,我们将每个bucket 绑定到一个 CPU core,然后bucket 中的每个操作都将被顺序处理而不会加锁。这将进一步提高系统效率。

7.2.4 算子层

  1. 经过采样之后,得到的输出将被对齐aligned,然后我们可以轻松地对采样后的集合进行处理。

    我们需要一些 GNN-like 算子来处理这些采样后的结果。在我们的系统中,我们抽象了两种算子,即 AGGREGATECOMBINE

    • AGGREGATE:收集每个节点的邻域信息从而产生单个结果。例如, AGGREGATE 将一系列向量 huRd 映射到单个向量 hNvRd ,其中 u 属于节点 v 采样后的邻域集合。hNv 为中间结果,用于进一步生成 hv

      AGGREGATE 函数充当卷积算子的作用,因为它从周围邻域收集信息。在不同的 GNN 方法中采用了不同的聚合函数,如均值池化、最大池化、LSTM 等。

    • COMBINE:它给出如何使用邻域信息来更新节点的 embedding。例如,COMBINE 函数将两个向量 hv(k1)Rd,hNvRd 映射到单个向量 hv(k)Rd

      COMBINE 函数可以将前一层的信息以及邻域信息整合到一个统一的空间中。通常在现有的 GNN 方法中,将 hv(k1)hNv 相加(或拼接),然后馈入到一个深度神经网络中。

  2. 典型的算子由前向计算和反向计算组成。采样器和 GNN-like 算子不仅执行前向计算,而且在需要时会反向计算从而更新参数。这样我们可以将整个模型作为一个网络从而进行端到端的训练。

    SAMPLE 类似,AGGREGATE, COMBINE 也是 AliGraph 的插件,可以独立地实现。基于算子,用户可以快速搭建 GNN 模型。

  3. 考虑到图数据的特点,可以使用大量优化从而获得更好的性能。

    为了进一步加速这两个算子的计算,我们通过具体化materialization hv(k) 的中间向量的策略来实现。注意到在训练过程中的每个 mini-batch,我们可以为mini-batch 中的所有节点共享一组采样的邻居。同样地,我们可以为同一个 mini-batch 中的所有节点之间共享向量 hv(k),1kkmax 。为此:

    • 我们对 mini-batch 中的所有节点存储 kmax 个向量 h^v(1),,h^v(kmax) ,并将其视为新的向量。
    • 然后在 AGGREGATE 函数中,我们通过 h^v(1),,h^v(kmax) 来获取 h^Nv
    • 最后,我们在 COMBINE 函数中通过 h^Nvhv(k1) 来计算 h^v(k)

    通过这种策略,可以大大降低算子上的计算成本。这本质上是空间换时间的策略。

    这种方式避免了针对 mini-batch 中的每个子图来进行独立地计算,因为独立地计算每个子图可能会导致重复计算。

7.3 GNN 方法

  1. 这里我们讨论GNN 算法的设计。我们表明:现有的 GNN 可以轻松地在 AliGraph 上构建。此外,我们还提出了一系列新的 GNN 算法,从而解决前面概述的、在 embedding 真实世界图数据的四个挑战。所有这些都是 AliGraph 平台的算法层的插件。

  2. 由于我们的 AliGraph 平台时从通用 GNN 算法中抽象出来的,因此可以在该平台上轻松实现所有的 GNN。这里以 GraphSAGE 为例,其它 GNN 可以用类似的方式实现,由于篇幅所限我们这里省略。

    • 注意到, GraphSAGE 采用了简单的node-wise 采样,从而在每个节点的邻域集合中采样一个小的子集。显然,使用我们的 SAMPLING 算子可以轻松实现其采样策略。
    • 然后,我们需要实现 AGGREGATECOMBINE 函数。GraphSAGE 可以通过加权平均的方式实现 AGGREGATE 函数。也可以使用更复杂的函数,如最大池化、LSTM 等。

    对于其它的 GNN 方法(如 GCN, FastGCN, AS-GCN )中,我们可以对 SAMPLING, AGGREGATE, COMBINE 采用不同的策略。

  3. 除了已有的 GNN 算法之外,我们还开发了一些内部的 GNN 。我们内部开发的 GNN 专注于各个不同方面,如采样(AHEP)、多重性(GATNE)、多模态(Mixture GNN)、层次性(Hierarchical GNN)、动态性(Evolving GNN)、多源信息(Bayesian GNN)。

7.3.1 AHEP

  1. HEP: Heterogeneous Embedding Propagation 尝试通过聚合每种类型的邻居来重构节点embedding

    对于每个节点 vV,定义其类型为 c 的邻域为 Nv(c)Nv 。对于每种类型的邻域我们聚合邻域的embedding 为:

    g~v(c)=uNv(c)sv,uuNv(c)sv,uhu

    其中 sv,u 为邻域节点 u 的权重,它根据 (v,u) 边的特征来计算。计算方式为:

    sv,u=σ(λφ(v,u)f(v,u)+bφ(v,u))

    其中:

    • σ() 为非线性激活函数。
    • f(v,u) 为边 (v,u) 的特征向量。
    • λφ(v,u) 为对应于边类型 φ(v,u) 的权重参数,它在相同类型的边上共享。
    • bφ(v,u) 对应于边类型 φ(v,u)bias 参数,它在相同类型的边上共享。

    注意:sv,u 只能在节点 v 的相同类型的邻域上进行比较,无法跨邻域比较。

    然后我们将所有类型的邻域的 embedding 向量进行拼接,从而得到总的邻域 embedding 向量:

    g~v=CONCAT(g~v(c1),,g~v(cK))

    最后我们根据总的邻域 embedding 向量来重构节点 vembedding h~v

    h~v=σ(Wϕ(v)g~v+bϕ(v))

    其中:

    • Wϕ(v) 是对应于节点类型 ϕ(v) 的权重矩阵,它在相同的节点类型上共享。
    • bϕ(v) 为对应于节点类型 ϕ(v)bias 向量,它在相同的节点类型上共享。

    我们的重构损失为 hinge loss

    l(v,u)=[γ+π(h~v,hv)π(h~v,hu)]

    其中:

    • π(h~v,hv)=12h~vhv22 为重构距离。
    • u 为负采样的节点,γ>0 为松弛参数。

    物理意义为:节点 v 重构之后的 embedding和节点 v 原始 embedding 之间的距离,要小于节点 v 重构之后的 embedding 和随机选择的节点 u 原始 embedding 之间的距离。

  2. 除了重构损失之外,如果有监督信息则 HEP 还会考虑监督损失。则总的损失为:

    L=L1+α×L2+β×Ω(Θ)

    其中:

    • L1 为监督损失,L2 为无监督的重构损失,Ω(Θ) 为正则化项。
    • α,βtrade-off 系数。
  3. AHEP 算法(HEP with adaptive sampling )旨在缓解异质图上传统的 embedding 传播 embedding propagation:EP 算法(HEP)沉重的计算和存储成本。

    AHEP中,我们对重要邻居进行采样,而不是考虑整个邻域。在这个过程中:

    • 我们通过节点的结构信息和特征信息设计了一个指标,从而评估了邻居的重要性。

    • 然后,不同类别邻居根据各自的概率分布独立地进行采样。

      我们精心设计了概率分布,从而最大程度地减少采样方差。

    实验分析表明:AHEP 运行速度要比 HEP 快得多,同时具有相当的准确率。

7.3.2 GATNE

  1. General Attributed Multiplex HeTerogeneous Network Embedding:GATNE 旨在处理节点、边上具有异质信息和属性信息的图。在 GATNE 中,每个节点的最终 embedding 由三部分组成:

    • 通用 embedding:每个节点 vi 有一个 base embedding biRd ,它在所有子视图(每种类型的边构成一个子视图)上都相同。

    • specific emebdding(即子视图的 embedding):边类型为 r 的节点和边构成了一个子视图 Gr 。节点 viGr 上第 k 层(k=1,2,,K)的 embedding 的迭代方程为:

      ui,r(k)=agg({uj,r(k1)vjNi,r})

      其中:

      • Ni,r为节点 vi 在视图 Gr 上的邻居节点集合。
      • agg(.) 为聚合函数,它可以为均值聚合,也可以为池化聚合。

      则节点 vi 在子视图 Gr 中的 emebddingui,r=ui,r(K)Rssedge embedding 维度。

      所有子视图 embedding 通过 self-attention 机制来加权聚合。假设边的类型取值为 R ,则我们拼接节点 vi 的所有类型的 embedding 得到节点 viembedding 矩阵:

      Ui=(ui,1,,ui,|R|)Rs×|R|

      我们使用 self-attention 机制来计算每个子视图的加权系数 ai,r,从而线性组合 {ui,1,,ui,|R|} ,得到节点 viedge embedding

      ai,r=softmax(wrtanh(WrUi))R|R|u^i,r=Uiai,r
    • 属性 embedding:每个节点 vi 都带有特征向量 xi

    final embedding 由通用 embeddingspecific embedding、属性 embedding 组成。它们分别刻画了结构信息、异质信息、属性信息。节点类型为 z 的节点 vi 在子视图 Gr 中的 final embedding 为:

    vi,r=bi+αrMrUiai,r+βrDzxi

    其中 αr,βrtrade-off 系数,Mr,Dz 为可训练的映射矩阵。

    这里三种类型的 embeddingfinal 时候才进行交互。实际上如果在一开始的时候就交互,可能会得到更好的 embedding 。这就是特征交互的 pre-fusepost-fuse 之间的重要区别。

7.3.3 Mixture GNN

  1. Mixture GNN 用于处理具有多模态的异质图。在该模型中,我们扩展了同质图上的 skip-gram 模型来适配异质图上的多义性场景polysemous situation

    • 在传统的 skip-gram 模型中,我们尝试通过最大化似然来找到参数为 θgraph embedding

      Lθ=logPrθ(Nvv)=uNvlogPrθ(uv)

      其中 Nv 为节点 v 的邻域,Prθ(uv)softmax 函数。

    • 在我们的异质图中,每个节点属于多个意义sense。为区分它们,令 P 为节点意义的已知分布,则目标函数为:

      Lploy,θ=logPrP,θ(Nvv)=uNvlogPrP,θ(u,v)

      注意:这个分布 P 是待求的、未知的。

      此时,很难结合负采样方法来直接优化上述公式。一种可选的方法是推导出上式的一个新的下界 Llow,然后尝试优化 Llow 。我们发现下界 Llow 的项可以通过负采样近似。这就是 EM 算法的思想。

      结果,可以通过稍微修改现有的工作(如 Deepwalk, node2vec )中的采样过程,可以轻松实现训练过程。

7.3.4 Hierarchical GNN

  1. 当前 GNN 方法本质上是平的flat,并且无法学习图的 hierarchical representation。这种限制在显式研究各种类型的用户行为的相似性时尤为突出。Hierarchical GNN 结合了层次结构以增强GNN 的表达能力。

    H(k)R|V|×d 表示GNN 经过 k 步之后的节点 embedding 矩阵,A 为图 G 的邻接矩阵。传统的 GNN 迭代式地通过结合 H(k1)A、可训练的参数 θ(k) 来学习 H(k) 。其中 H(0) 初始化为 X ,其中 X 为节点特征矩阵。

    在我们的 Hierarchical GNN 中,我们以 layer-to-layer 的方式来学习节点 embedding 。具体而言:

    • A(l)X(l) 为第 l 层的邻接矩阵和节点特征矩阵。令节点 embedding 矩阵 Z(l) 为通过单层 GNN 以及输入 A(l),X(l) 学到的。

    • 我们对图的节点聚类,从而得到邻接矩阵 A(l+1) 。为学到这样的聚类,我们定义 S(l) 为第 l 层待学习的分配矩阵 assignment matrix

      S(l) 中的元素 Si,j(l) 表示第 l 层的“节点” i (它实际上是一个粗化的节点,即一个簇)被分配到第 l+1 层的“节点” j (它也是一个粗化的节点,即一个簇)。

      S(l) 可以通过在另一个 pooling GNN 以及输入 A(l),X(l) 上应用 softmax 函数来获得。

    • 当有了 Z(l),S(l) 之后,我们可以得到新的、粗化的邻接矩阵 A(l+1)=S(l)A(l)S(l) ,以及新的特征矩阵 X(l+1)=S(l)Z(l)

    如实验所验证的,多层 Hierarchical GNN 比单层的传统 GNN 效果更好。

    这就是 DiffPool 的核心思想。

7.3.5 Evolving GNN

  1. Evolving GNN 用于对动态网络的节点进行 embedding ,即学习图序列 {G(1),G(2),,G(T)} 中的节点 embedding

    为了捕获动态图的演变性质evolving nature,我们将演变的链接划分为两种类型:

    • 代表大多数边的合理变化的正常演变normal evolution
    • 代表罕见的、异常的演变边evolving edge 的突然burst连接。

    基于这两种类型的边,动态图中所有节点的 embedding 以交错的方式interleave manner 学习。具体而言,在时间戳 t

    • G(t) 上的正常链接和burst 链接通过 GraphSAGE 集成在一起,从而得到 G(t) 中每个节点 vembedding hv
    • 然后,我们通过使用变分自编码器Variational Autoencoder:VAE 以及 RNN 模型来预测 G(t+1) 中的 normal 链接和 burst 链接。

    该过程以迭代方式进行,从而在每个时间戳 t 输出每个节点 vembedding 结果。

7.3.6 Bayessian GNN

  1. Bayessian GNN 模型通过贝叶斯框架集成了两种信息源:知识图 embedding (如 symbolic)、行为图 embedding(如 relation)。具体而言,它模仿了认知科学中的人类理解过程。在该过程中,每种认知都是通过调整特定任务下的先验知识来驱动的。

    • 给定知识图 GG 中的实体(节点)v, 仅考虑 G 本身就可以学到basic embedding hv ,它表征了 G 中的先验知识。

    • 然后,根据 hv 和针对任务的矫正项 δv 来得到 task-specific embedding zv 。即:

      zvf(hv+δv)

      其中 f() 是一个非线性函数。

    注意,学到精确的 δvf() 似乎是不可行的,因为每个实体 v 具有不同的 δv 并且 f() 函数非常复杂。为解决该问题,我们通过考虑二阶信息从而应用一个从 hvzv 的生成模型。具体而言:

    • 对于每个实体 v ,我们从高斯分布 N(0,sv2) 中采样它的矫正项 δv,其中 svhv 决定。

    • 然后,对于每对实体 pair(v1,v2) ,我们根据另一个高斯分布来采样 (zv1zv2)

      N(fϕ(hv1+δv1)fϕ(hv2+δv2),diag(σv12+σv22))

      其中 ϕf() 函数的可训练参数。

    • δv 的后验均值为 μv^ϕ^ 为结果参数,则最终我们将 hv+μv^ 作为知识图的矫正的 embeddingfϕ^(hv+μv^)task-specific 的矫正的 embedding

7.4 实验

7.4.1 平台能力评估

  1. 这里我们将从storage(图构建和邻居缓存)、samplingoperator 等角度评估 AliGraph 平台中底层系统的性能。所有实验都在下表中描述的Taobao-smallTaobao-large上进行,后者的存储规模是前者的六倍。它们都是从淘宝电商平台获取的、代表用户和 item 的子图。

  2. 图构建:图构建的性能在图计算平台中起着核心作用。AliGraph 支持来自不同文件系统的各种原始数据。下图给出了两个数据集上图构建的时间成本和 worker 数量的关系。

    可以看到:

    • 随着 worker 数量的增加,图构建的时间明显降低。
    • AliGraph 可以在几分钟内构建大图,如Taobao-large 五分钟构建完成。

    这比大多数SOTA 的实现要快很多(例如 PowerGraph 需要几个小时)。

  3. 缓存邻居的效果:我们研究了缓存重要节点的 k-hop 邻居的影响。在我们的缓存算法中,我们需要通过分析 Di(k)Do(k) 来设置 Imp(v) 的阈值。

    在实验中,我们在本地缓存所有节点的 1-hop 邻居(直接邻居),并且调整阈值从而控制2-hop 邻域的缓存。我们将阈值逐渐从 0.05 增加到 0.45 从而测试其敏感性sensitivity 和有效性effectiveness

    下图给出了被缓存的节点数量的百分比和阈值之间的关系。我们注意到:随着阈值的增加,被缓存的节点数量百分比在下降。当阈值小于 0.2 时,百分比下降速度较快;当阈值大于等于0.2 时,百分比相对稳定。这是因为如定理中所证明的那样,节点的 importance 服从幂律分布。

    为了在缓存成本和收益之间取得平衡,我们将阈值设置为 0.2,此时只需要缓存大约 20% 的额外节点。

    我们还比较了基于 importance 的缓存策略以及另外两种策略:随机策略(它随机选择一部分比例节点,然后缓存这些节点的邻域)、LRU 策略。下图说明了时间成本和缓存节点比例之间的关系。

    我们发现我们的方法相对于随机策略节省了大约 40%~50% 的时间、相对于LRU 策略节省了大约50%~60% 的时间。原因很简单:

    • 随机选择的节点不太可能被访问。
    • 由于 LRU 策略经常替换缓存的节点,因此会产生额外的成本。
    • 基于重要性的缓存节点更可能被其它节点访问到。

  4. 采样的效果:我们以 512batch size20%cache rate 来测试采样策略的影响。下表给出了三种采样策略的时间成本。我们发现:

    • 采样方法非常有效,它们可以在几毫秒到不超过 60 毫秒内完成。
    • 采样时间随着图的大小缓慢增长。尽管 Taobao-largeTaobao-small 的六倍,但是这两个数据集的采样时间却非常接近。

    这些观察结果证明了我们对采样方法的实现是有效且可扩展的。

  5. Operators 的效果:我们进一步检查了我们的 AGGREGATECOMBINE 算子的影响。下表给出了这两个算子的时间成本,以及我们提出的实现方案可以加速一个量级。

    这仅仅是因为我们通过缓存策略来消除中间 embedding 向量的冗余计算。这再次证明了我们 AliGraph 平台的优越性。

    W/O Our Implementation 表示不采用我们方法的实现方式。

7.4.2 算法效果评估

  1. 数据集:我们使用两个数据集,包括来自 Amazon 的公开数据集,以及 Taobao-small 数据集。我们没有考虑 Taobao-large 是因为考虑到一些baseline 模型的可扩展性问题。

    下表给出了数据集的统计信息。这些数据集都是属性异质图。

    • 亚马逊公共数据集包含亚马逊公司电子产品类目下的产品元数据。在图中,每个节点代表了带属性的商品,并且每条边代表同一个用户的共同查看co-view或者共同购买 co-buy 行为。
    • Taobao-small 具有两种类型的节点,即用户和商品,以及用户和商品之间的四种类型的边:点击click、添加收藏add-to-preference 、添加购物车add-to-cart 、购买buy

  2. baseline 方法:

    • 同质的 graph embedding 方法:DeepWalk, LINE, Node2Vec 。这些方法仅用于同质图,并且仅使用结构信息。

    • 带属性的 graph embedding 方法: ANRL。它可以通过同时捕获结构信息和属性信息来生成 embedding

    • 异质的 graph embedding 方法:Metapath2Vec, PMNE, MVE, MNE

      Metapath2Vec 只能处理具有多种节点类型的图,而其它三种方法只能处理具有多种类型边的图。PMNE 涉及三种不同的方法来扩展 Node2Vec 方法,分别表示为 PMNE-n, PMNE-r, PMNE-c

    • GNN-based 方法:Structure2Vec, GCN, Fast-GCN, AS-GCN, GraphSAGE, HEP

    为公平起见,所有算法都是通过在系统上应用优化的算子来实现的。如果模型无法处理属性以及多种类型的节点,则在 embedding 中我们忽略这些信息。对于同质的、基于 GNN 的模型,我们为具有相同边类型的每个子图生成 embedding,然后将它们拼接在一起成为最终结果。

    注意,在我们的实验中,我们并未针对所有baseline 来比较我们提出的每一种 GNN 算法。这是因为每种算法的设计重点不同。

  3. 评估指标:我们评估了所提出方法的效率和效果。

    • 可以通过算法的执行时间简单地评估效率。
    • 为了评估效果,我们将算法应用于链接预测任务。我们随机抽取一部分数据作为训练集,将剩余部分作为测试集。为了衡量效果,我们使用了四个常用指标,即 ROC-AUCPR-AUCF1-scorehit recall rate:HR Rate

    值得注意的是:每个指标是在不同类型的边之间取平均的。

    这里的评估结果仅供参考,因为不同实验中的指标未能统一,此外也没有进行科学的超参数调优、n-fold 交叉验证。

  4. 超参数:对于所有算法,我们选择 embedding 向量的维度为 200

  5. AHEP 算法:AHEP 算法的目标是在不牺牲太多准确率的情况下快速获得 embedding 结果。

    在下表中,我们给出了在 Taobao-small 数据集上 AHEP 和它的竞争对手的比较结果。N.A. 表示算法无法合理的时间内结束;O.O.M. 表示算法由于内存溢出而终止。

    在下图中,我们说明了不同算法的时间和空间成本。x 表示算法无法合理的时间内结束。显然,我们观察到:

    • Taobao-small 数据集上,HEPAHEP 是仅有的两种可以在合理时间和空间限制下产生结果的算法。但是,AHEPHEP 要快 2~3 倍,并且比 HEP 使用更少的内存。

      从下图指标来看,AHEP 的时间与 HEP 相差无几?

    • 就结果质量而言,AHEPROC-AUCF1-scoreHEP 可比。

    这些实验结果说明 AHEP 可以使用更少的时间和空间来产生可比于 HEP 的结果。

  6. GATNE 算法:GATNE 的目标旨在处理节点和边上都有异质信息和属性信息的图。我们在下表给出了 GATNE 和它的竞争对手的结果。显然,我们发现 GATNE 在所有指标上都优于所有现有方法。

    例如,在 Taobao-small 数据集上,GATNEROC-AUC 提升 4.6%PR-AUC 提升 1.84%F1-score 提升 5.08%。这仅仅是因为 GATNE 同时捕获了节点和边的异质信息和属性信息。同时,我们发现 GATNE 的训练时间随着 worker 数量增加而几乎线性减少。

    GATNE 模型在 150worker 下,不到2 个小时就可以收敛。这验证了 GATNE 方法的高效性和可扩展性。

  7. Mixture GNN:我们将 Mixture GNN 方法和 DAEβ-VAE 方法在 Taobao-small 数据集上进行对比。下表给出了将 embedding 结果应用于推荐任务的点击召回率 hit recall rate。可以看到 Mixture GNNhit recall rate 提升大约2%

  8. Hierarchical GNN:我们将 Hierarchical GNN 方法和 GraphSAGETaobao-small 数据集上进行比较。结果见下表所示。可以看到 F1-score 提升大约 7.5%。这表明 Hierarchical GNN 可以产生效果更好的 embedding

  9. Evolving GNN:我们将 Evolving GNN 方法和其它方法在 multi-class 链接预测任务上进行比较。对比的方法包括:DeepWalk,DANE,DNE,TNE,GraphSAGE 等。这些竞争对手无法处理动态图,因此我们在动态图的每个快照上运行算法,并报告所有时间戳的平均性能。

    下表给出了 Taobao-small 数据集的比较结果。我们很容易发现在所有指标上,Evolving GNN 优于所有其它方法。

  10. Bayesian GNN:该模型的目标是将贝叶斯方法和传统 GNN 模型相结合。我们对比了 GraphSAGE 模型。下表给出了在 Taobao-small 数据集上推荐结果的 hit recall rate。注意,我们同时考虑了商品品牌粒度以及类目粒度。显然,使用Bayesian GNN 时,hit recall rate 分别提高了 1%3%