使用图神经网络的链接预测方法

近年来,图神经网络作为图表征学习的一类代表性方法发展迅速,并被广泛应用于社交网络、知识图谱、生物网络、分子结构等图数据中。在图机器学习中,一类重要的问题是链接预测问题。本文以图的同构性为切入点,介绍近年来使用图神经网络进行链接预测的方法。

背景介绍

图同构

我们首先介绍图的同构问题。给定两个图 G = ( V G , E G ) , H = ( V H , E H ) G=(V_G,E_G),H=(V_H,E_H) G=(VG,EG),H=(VH,EH),如果存在一个映射 π : V G → V H \pi:V_G\rightarrow V_H π:VGVH,使得:
( s , t ) ∈ E G    ⟺    ( π ( s ) , π ( t ) ) ∈ E H , (s,t)\in E_G \iff (\pi(s),\pi(t))\in E_H, (s,t)EG(π(s),π(t))EH,
那么 G , H G,H G,H 就是同构的,记作 G ≃ H G\simeq H GH,且称 π \pi π 是图 G G G H H H 的一个同构。将图的同构这一概念扩展,我们可以描述:

  1. 节点同构:令 v ∈ V G , w ∈ V H v\in V_G,w\in V_H vVG,wVH。如果存在从 G G G H H H 的一个同构 π \pi π,且 π ( v ) = w \pi(v)=w π(v)=w,那么节点 v v v w w w 是同构的。记作 ( v , G ) ≃ ( w , H ) (v,G)\simeq (w,H) (v,G)(w,H)

  2. 节点组同构:令 v = ( v 1 , v 2 , . . . v k ) ∈ V G k , w = ( w 1 , w 2 , . . . , w k ) ∈ V H k {v}=(v_1,v_2,...v_k)\in V_G^k,{w}=(w_1,w_2,...,w_k)\in V_H^k v=(v1,v2,...vk)VGk,w=(w1,w2,...,wk)VHk 分别为 k k k 个节点组成的有序节点组。如果存在从 G G G H H H 的一个同构 π \pi π,且 π ( v 1 ) = w 1 , π ( v 2 ) = w 2 , . . . , π ( v k ) = w k \pi(v_1)=w_1,\pi(v_2)=w_2,...,\pi(v_k)=w_k π(v1)=w1,π(v2)=w2,...,π(vk)=wk,那么节点组 v {v} v w {w} w 是同构的。记作 ( v , G ) ≃ ( w , H ) ({v},G)\simeq ({w},H) (v,G)(w,H)

消息传递神经网络

图神经网络的一个标准范式就是消息传递神经网络 (MPNN)。它的基本思想是:针对图中的每个节点 i i i,赋予一个变量表示 z i ( 0 ) {z}_i^{(0)} zi(0)。而后,重复下面的迭代过程:在第 t + 1 t+1 t+1 次迭代过程中,更新节点的变量表示
z i ( t + 1 ) = ϕ ( z i ( t ) , ⊕ j ∈ N ( i ) ψ ( z i ( t ) , z j ( t ) ) ) . {z}_i^{(t+1)}=\phi\left({z}_i^{(t)},\oplus_{j\in N(i)}\psi\left({z}_i^{(t)},{z}_j^{(t)}\right)\right). zi(t+1)=ϕ(zi(t),jN(i)ψ(zi(t),zj(t))).
其中, ψ , ϕ \psi,\phi ψ,ϕ 是含有可训练参数的函数, ⊕ \oplus 是满足置换不变性的函数(如 ∑ , max ⁡ \sum,\max ,max), N ( i ) N(i) N(i) 指节点 i i i 的邻居节点。

图卷积网络(GCN)就是一个典型的消息传递神经网络。它的每一步更新可以表示为:
z i ( t + 1 ) = ∑ j ∈ N ( i ) ∪ { i } 1 d e g ( i ) d e g ( j ) W z j ( t ) , {z}_i^{(t+1)}=\sum_{j\in N(i)\cup \{i\}} \frac{1}{\sqrt{deg(i)deg(j)}}{Wz}_j^{(t)}, zi(t+1)=jN(i){i}deg(i)deg(j) 1Wzj(t),
其中, d e g ( ⋅ ) deg(\cdot) deg() 表示节点的度数, W {W} W 为可训练的参数。

消息传递的表达能力上限

为了研究和提高图神经网络的性能,我们需要研究它的表达能力,来更好的理解哪些图的结构可以被它识别,而哪些结构则无法被区分。基于消息传递的方法的表达能力的上限可以很好地利用一个经典的图同构算法,即 Weisfeiler-Lehman(WL) 算法,来进行描述。该算法的流程如下:

  1. c v 0 ← h a s h ( x v ) , ∀ v ∈ V c^0_v\leftarrow \mathrm{hash}({x}_v), \forall v\in V cv0hash(xv),vV
  2. 重复下面步骤直至收敛:
  3. c v t + 1 ← h a s h ( c v t , { { c w t   ∣   w ∈ N ( v ) } } ) , ∀ v ∈ V \quad c_v^{t+1}\leftarrow \mathrm{hash}(c_v^t,\{\{c_w^t~|~w\in N(v)\}\}), \forall v\in V cvt+1hash(cvt,{{cwt  wN(v)}}),vV
  4. 返回 { { c v t   ∣   v ∈ V } } \{\{c_v^t~|~v\in V\}\} {{cvt  vV}}

该算法中,我们首先对所有节点都赋予一个“颜色” c v 0 c^0_v cv0 (如果节点有输入的特征 x v {x}_v xv,那么根据不同的特征赋予不同的颜色)。而后,我们根据每个节点的邻居节点的颜色,去更新该节点在下一次迭代时的颜色。这里的哈希函数 h a s h \mathrm{hash} hash 必须是单射的,即它将不同的输入映射到不同的输出。

我们以下面的这两个图为例(例子来源于 这里)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B8CraRMZ-1683535627234)(wl1.png)]

图1和图2的颜色表示在 WL 测试结束后的颜色分配,而初始时我们把所有节点都分配成一样的颜色,即 c v 0 = 1 , ∀ v ∈ V c_v^0=1,\forall v\in V cv0=1,vV
在这里插入图片描述

第一轮迭代中,我们首先将所有节点的邻居节点聚合起来,如下图所示。每个节点的标签此时有两个部分,分别是:它原来的标签,和它邻居节点的标签组成的多重集合。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5nSYDmHe-1683535627235)(wl3.png)]

下一步,我们需要“压缩”每个节点的标签来得到统一的表示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O8TJBVF0-1683535627235)(wl8.png)]

将此步骤不断重复,直到最后我们可以得到如下的颜色分配:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1kKoXtTb-1683535627235)(wl7.png)]

在此状态后,无论我们如何重复WL算法的迭代过程,图中所有不同颜色节点构成的划分不会再改变,因此到达了收敛阶段,算法完成。

WL 测试虽然能够判定大多数情况下的图同构问题,但仍有相当多一部分例外,两个图并非同构,但 WL 测试却分配给它们相同的颜色。这些例外对于链接预测的问题来说十分重要。下图中的 G , H G,H G,H 两个图明显具有不同的结构,但 WL 测试无法将它们区分。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LuJDfAfn-1683535627235)(wlfail.png)]

为了扩展 WL 测试的区分能力,学者们提出了更高维度的 WL 测试。这里,我们介绍 k-Folklore WL (k-FWL)算法。该算法对每个k节点组 v = ( v 1 , v 2 , . . . , v k ) {v}=(v_1,v_2,...,v_k) v=(v1,v2,...,vk) 赋予一个颜色;除此之外,它的基本过程与 WL 算法一致。

  1. c v 0 ← h a s h ( x v ) , ∀ v ∈ V k c^0_{{v}}\leftarrow \mathrm{hash}({x_v}), \forall {v}\in V^k cv0hash(xv),vVk
  2. 重复下面步骤直至收敛:
  3. c v t + 1 ← h a s h ( c v t , { { c w t   ∣   w ∈ N ( v ) } } ) , ∀ v ∈ V k \quad c_{{v}}^{t+1}\leftarrow \mathrm{hash}(c_{{v}}^t,\{\{c_{{w}}^t~|~{w}\in N({v})\}\}), \forall {v}\in V^k cvt+1hash(cvt,{{cwt  wN(v)}}),vVk
  4. 返回 { { c v t   ∣   v ∈ V k } } \{\{c_{{v}}^t~|~{v}\in V^k\}\} {{cvt  vVk}}

其中,一个节点组 v = ( v 1 , v 2 , . . . , v k ) {v=(v_1,v_2,...,v_k)} v=(v1,v2,...,vk) 的邻居 N ( v ) N({v}) N(v) 定义如下:每个 v {v} v N N N 个邻居( N N N 为图中节点的个数),且第 i i i 个邻居是由k个节点组构成的序列:
( ( i , v 2 , v 3 , . . . , v k ) , ( v 1 , i , . . . , v k ) , . . . , ( v 1 , v 2 , . . . , i ) ) . ((i,v_2,v_3,...,v_k),(v_1,i,...,v_k),...,(v_1,v_2,...,i)). ((i,v2,v3,...,vk),(v1,i,...,vk),...,(v1,v2,...,i)).
可以证明,对任意的 k ≥ 2 k\geq 2 k2, k + 1 k+1 k+1-FWL 的区分能力严格大于 k k k-FWL,且严格大于 WL。

介绍完上面的研究背景后,我们接下来介绍使用图神经网络进行链接预测的方法,并逐一分析它们的表达能力、时间复杂度等。

图自编码器

如何使用图神经网络进行链接预测?既然 GNN 为图中的每个节点学习一个向量表示,而一个链接 ( s , t ) (s,t) (s,t) 由两个节点 s , t s,t s,t 组成,那么最直接的办法就是聚合 s , t s,t s,t 的节点表示来得到链接 ( s , t ) (s,t) (s,t) 的表示:
p ( s , t ) = f ( z s , z t ) . p(s,t)=f({z}_s,{z}_t). p(s,t)=f(zs,zt).
其中, z s , z t {z}_s,{z}_t zs,zt 分别是 s , t s,t s,t 对应的向量表示, f f f 是一个函数。一个例子是 VGAE[2],它的形式为:
p ( s , t ) = σ ( z s ⊙ z t ) . p(s,t)=\sigma ({z}_s \odot {z}_t). p(s,t)=σ(zszt).

如上所述,图自编码器的想法和实现都十分简单,但它是否能够完全解决链接预测的问题?答案是否定的。以下图为例,假设我们需要分别预测链接 ( v 1 , v 2 ) (v_1,v_2) (v1,v2) 以及 ( v 1 , v 3 ) (v_1,v_3) (v1,v3) 是否存在。容易发现,在下图中,节点 v 1 , v 4 v_1,v_4 v1,v4 是互相对称的;节点 v 2 , v 3 v_2,v_3 v2,v3 是互相对称的。因此,在使用 GNN 得到的节点表示中, v 1 v_1 v1 的节点表示一定与 v 4 v_4 v4 相同; v 2 v_2 v2 的节点表示则一定与 v 3 v_3 v3 相同。从而,通过自编码器得到的链接 ( v 1 , v 2 ) (v_1,v_2) (v1,v2) 以及 ( v 1 , v 3 ) (v_1,v_3) (v1,v3) 的预测结果也一定相同。这显然是不正确的,因为在该图中节点 v 1 v_1 v1 与节点 v 2 , v 3 v_2,v_3 v2,v3 之间的相对位置完全不同。从而,我们知道,图自编码器无法记录两个节点间的相对位置信息,因而并不十分适用于链接预测任务。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xzvqbUlE-1683535627236)(a1.png)]

Labeling trick

那么,如何才能区分这样不同的链接?首先,我们回顾一下,MPNN 为每个节点学习一个向量表示,从而擅长于区分图同构节点同构。那么,我们是否可以将链接预测这一任务中的链接同构问题转化为图同构或者节点同构问题?Labeling trick给出了将链接同构转化为图同构的方法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-adDzzdnh-1683535627236)(2fwl.png)]

如上图,在原图 G G G 中预测目标链接 ( v 1 , v 2 ) (v_1,v_2) (v1,v2)时,我们对所有节点增加额外的标签,将 v 1 , v 2 v_1,v_2 v1,v2 标记得与其他节点不同,从而得到左图 G 1 G_1 G1。同样的,在预测目标链接 ( v 1 , v 3 ) (v_1,v_3) (v1,v3)时,我们将 v 1 , v 3 v_1,v_3 v1,v3 标记得与其他节点不同,得到右图 G 2 G_2 G2。这样,我们将 ( v 1 , v 2 ) (v_1,v_2) (v1,v2) ( v 1 , v 3 ) (v_1,v_3) (v1,v3) 的同构问题转化为了两个图的同构问题。事实上,我们有如下结论:
( ( v 1 , v 2 ) , G ) ≃ ( ( v 1 , v 3 ) , H )    ⟺    G 1 ≃ G 2 . ((v_1,v_2),G)\simeq ((v_1,v_3),H) \iff G_1\simeq G_2. ((v1,v2),G)((v1,v3),H)G1G2.
从而,链接同构的问题被严格转换成了 G 1 G_1 G1 G 2 G_2 G2 的同构问题。使用 MPNN 学习诱导出的图 G 1 , G 2 G_1,G_2 G1,G2 的表示,我们可以增强它的表示能力。例如下图:

在这里插入图片描述

上图分别为 Rook’s 4x4 和 Shrikhande 图。假设目标链接为蓝色节点对。2-FWL测试无法区分两个链接,而使用上述的 labeing trick 后,1-WL 测试即可区分两个链接。

缺点

当然,labeling trick 也有一些缺点。最大的缺点在于,它的时间复杂度相当高:每计算一个目标链接,它就需要重新标注一遍图,再在诱导出的图上重新运行一遍 GNN 模型。因此,所有基于 labeling trick 的方法都需要首先抽取出目标链接附近节点构成的子图,再在子图上进行训练和预测。总的来说,labeling trick 方法进行链接预测的一般工作流程为:

  1. 在目标链接 ( i , j ) (i,j) (i,j) 的附近抽取子图 G i j G_{ij} Gij
  2. G i j G_{ij} Gij 上进行 labeling trick;
  3. G i j G_{ij} Gij 上运行 GNN;
  4. 得到最终的链接表示。

算法复杂度

给定一个图 G = ( V , E ) G=(V,E) G=(V,E),假设使用的 GNN 模型是 GCN,不使用子图抽取,则预测 k k k 个目标链接需要:

  • 时间: O ( T ( M + N ) ) O(T(M+N)) O(T(M+N)) T T T 为 GCN 层数, M , N M,N M,N 分别是边和节点的个数;
  • 空间: O ( M + N ) O(M+N) O(M+N)

Labeling trick 的实现

此处,我们介绍 SEAL[3]。它实现的 labeling trick 方法为 Double Radius Node Labeling(DRNL):给定图 G G G 和目标链接 ( i , j ) (i,j) (i,j)

  1. 抽取 ( i , j ) (i,j) (i,j) 周围的 h h h 跳子图 G i j G_{ij} Gij,其中 G i j G_{ij} Gij 的节点 V i j V_{ij} Vij 满足:
    V i j = { k   ∣   d ( k , i ) ≤ h   o r   d ( k , j ) ≤ h } , V_{ij}=\{k~|~d(k,i)\leq h~\mathrm{or}~d(k,j)\leq h\}, Vij={k  d(k,i)h or d(k,j)h},
    其中 d ( k , i ) d(k,i) d(k,i) 表示 k , i k,i k,i 之间的最短距离。

  2. 节点标注:

    • 赋予 i , j i,j i,j 标签 1 1 1
    • 距离 i , j i,j i,j 的距离为 { 1 , 1 } \{1,1\} {1,1} 的节点标签为 2 2 2
    • 距离 i , j i,j i,j 的距离为 { 1 , 2 } \{1,2\} {1,2} 的节点标签为 3 3 3
    • f ( k ) = 1 + min ⁡ ( d i , d j ) + d 2 ( d / 2 + d % 2 − 1 ) f(k)=1+\min (d_i,d_j)+\frac{d}{2}(d/2+d\%2-1) f(k)=1+min(di,dj)+2d(d/2+d%21),其中 d = d i + d j d=d_i+d_j d=di+dj

在 SEAL 的实验中, h = 1 h=1 h=1

Labeling trick 的扩展

综上所述,labeling trick 的四步:

  1. 在目标链接 ( i , j ) (i,j) (i,j) 的附近抽取子图 G i j G_{ij} Gij
  2. G i j G_{ij} Gij 上进行 labeling trick;
  3. G i j G_{ij} Gij 上运行 GNN;
  4. 得到最终的链接表示。

其中,时间主要消耗在针对每个目标链接对应的不同的子图上运行 GNN。那么,可否改变步骤 2、3 的顺序,从而相当于我们在原图上只运行一遍 GNN,而在预测不同的链接时,才对节点进行额外的标注?这正是 ELPH[5]、 GDGNN[6] 的想法。ELPH 的基本过程如下:

  1. 根据原图 G G G,构建一个增强的图 G ′ G' G G ′ G' G 与目标链接无关);
  2. G ′ G' G 上运行一次 GNN,得到节点表示;
  3. 在预测目标链接 ( i , j ) (i,j) (i,j) 时,有
    p ( i , j ) = ψ ( z i ⊙ z j , { B i j [ d ] , A i j [ d i , d j ]   ∣   ∀ d , d i , d j ∈ [ k ] } ) , p(i,j)=\psi (z_i \odot z_j, \{\mathcal{B}_{ij}[d],\mathcal{A}_{ij}[d_i,d_j]~|~\forall d,d_i,d_j\in[k]\}), p(i,j)=ψ(zizj,{Bij[d],Aij[di,dj]  d,di,dj[k]}),
    预测链接 ( i , j ) (i,j) (i,j) 用到两部分信息,分别是基于节点表示的预测 z i ⊙ z j z_i \odot z_j zizj 以及后面的针对链接 ( i , j ) (i,j) (i,j) 的标注(具体标注的方法此处不再赘述,但它与 GNN 的运行无关)。从而,尽管我们仍然需要针对每个目标链接 ( i , j ) (i,j) (i,j) 进行不同的标注 B i j [ d ] , A i j [ d i , d j ] \mathcal{B}_{ij}[d],\mathcal{A}_{ij}[d_i,d_j] Bij[d],Aij[di,dj],但只需要在原图上运行一遍 GNN,效率得到了极大的提升。

Partial labeling trick

上面讲述的 labeing trick 将链接同构问题转化为了图同构问题,那么我们是否可以通过类似的方法将它转化为节点同构问题?答案也是可以的,以下图为例。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HEcJmgka-1683535627236)(plt.jpg)]

要预测原图 G G G 中以节点 v 1 v_1 v1 为端点的链接 ( v 1 , v 2 ) (v_1,v_2) (v1,v2),我们只需要标注节点 v 1 v_1 v1,使其与其它节点不同,得到诱导出的图 G 1 G_1 G1 如上所示。我们有:
( ( v 1 , v 2 ) , G ) ≃ ( ( v 1 , v 3 ) , G )    ⟺    ( v 2 , G 1 ) ≃ ( v 3 , G 1 ) . ((v_1,v_2),G)\simeq ((v_1,v_3),G) \iff (v_2,G_1)\simeq (v_3,G_1). ((v1,v2),G)((v1,v3),G)(v2,G1)(v3,G1).
从而,我们将链接同构问题转化为了节点同构问题。这个方法的优点在于,平均来说相比于 labeing trick,我们只需要运行 1 / N 1/N 1/N 次 GNN 即可。从而,一般情况下这种方法可以在整个图上进行学习,而无需抽取目标链接周围的子图。

算法复杂度

给定一个图 G = ( V , E ) G=(V,E) G=(V,E),假设我们要:

  • 预测一个链接:
    • 时间: O ( T ( M + N ) ) O(T(M+N)) O(T(M+N)) T T T 为 GCN 层数, M , N M,N M,N 分别是边和节点的个数;
    • 空间: O ( M + N ) O(M+N) O(M+N)
  • 预测所有头节点(尾节点)相同的链接:
    • 时间、空间与上面相同。

从而,平均意义上 partial labeling trick 计算每一个目标链接需要时间 O ( M / N ) O(M/N) O(M/N),与 GCN 计算一个目标节点需要的平均时间相同。

实现

此处我们简要介绍 NBFNet[7]。NBFNet 通过参数化 Bellman-Ford 算法得到了 partial labeling trick。考虑图中单源最短路径的表示:
d ( s , t ) = min ⁡ e ∈ V ( d ( e ) + e d g e ( e , t ) ) , d(s,t)=\min_{e\in V}(d(e)+edge(e,t)), d(s,t)=eVmin(d(e)+edge(e,t)),
参数化上面的式子,可以得到:
h t ( l + 1 ) = A g g r e g a t e ( { M e s s a g e ( h e ( l ) , w q ( e , r , t ) )   ∣   ( e , r , t ) ∈ G } ∪ { h t ( 0 ) } ) h_t^{(l+1)}=\mathrm{Aggregate}(\{\mathrm{Message}(h_e^{(l)},w_q(e,r,t))~|~(e,r,t)\in G\}\cup \{h_t^{(0)}\}) ht(l+1)=Aggregate({Message(he(l),wq(e,r,t))  (e,r,t)G}{ht(0)})

在预测任意首节点为 s s s 的链接时,NBFNet 首先重新标注图:
h v ( 0 ) = I n d i c a t o r ( s , r , v ) h_v^{(0)}=\mathrm{Indicator}(s,r,v) hv(0)=Indicator(s,r,v)
剩余的部分等同于在该图上运行一个 GNN。

总结 Labeling trick

  • GNN 擅长学习节点、图的结构;
  • 将链接预测问题转化为节点分类、图分类问题;

Higher-order 表示

既然 GNN 能够学习节点表示,那么我们直接扩展 GNN 的结构,使其能够直接学习链接表示。一般来说,我们需要:

  • 对所有的节点对 ( s , t ) ∈ V × V (s,t)\in V\times V (s,t)V×V 赋予一个对应的向量表示 z s , t z_{s,t} zs,t
  • z s , t z_{s,t} zs,t 上进行消息传递。

我们直到,消息传递需要在每个节点的邻居处聚合信息。如何定义 ( s , t ) (s,t) (s,t) 的邻居节点 N ( s , t ) N(s,t) N(s,t)?目前来说,方法主要有两种,分别对应于 2-WL 和 2-FWL 图同构测试。

  • 2-WL: N ( s , t ) = ( { { ( s , e )   ∣   e ∈ V } } , { { ( e , t )   ∣   e ∈ V } } ) N(s,t)=(\{\{(s,e)~|~e\in V\}\},\{\{(e,t)~|~e\in V\}\}) N(s,t)=({{(s,e)  eV}},{{(e,t)  eV}})
  • 2-FWL: N ( s , t ) = { { ( ( s , e ) , ( e , t ) )   ∣   e ∈ V } } N(s,t)=\{\{((s,e),(e,t))~|~e\in V\}\} N(s,t)={{((s,e),(e,t))  eV}}

定义了邻居后,我们就可以同样运行消息传递,来计算节点对的向量表示。这种方法的缺点在于,由于共有 N 2 N^2 N2 个节点对存在,算法的时间、空间复杂度都相当高。

实现

此处我们介绍 EdgeTransformer[8]。它实现了 2-FWL 的消息传递模式。假设 X ∈ R N × N × d \mathbf{X}\in \mathbb{R}^{N\times N\times d} XRN×N×d 是图的全连接张量表示,其中 X [ i , j , : ] \mathbf{X}[i,j,:] X[i,j,:] 对应于边 ( i , j ) (i,j) (i,j) 的表示, X [ i , i , : ] \mathbf{X}[i,i,:] X[i,i,:] 对应于节点 i i i 的表示。在每一层,有
X ′ = F F N ( L N ( X + T r a i n g u l a r A t t e n t i o n ( L N ( X ) ) ) ) , \mathbf{X}'=\mathrm{FFN}(\mathrm{LN}(\mathbf{X}+\mathrm{TraingularAttention}(\mathrm{LN}(\mathbf{X})))), X=FFN(LN(X+TraingularAttention(LN(X)))),

其中, F F N FFN FFN 为一个全连接层,独立地应用于每个 X [ i , j , : ] \mathbf{X}[i,j,:] X[i,j,:] L N \mathrm{LN} LN 表示 layer normalization, T r a i n g u l a r A t t e n t i o n \mathrm{TraingularAttention} TraingularAttention 是论文中提出的注意力计算方法,实际上是 2-FWL 的计算模式,它对每个 X [ i , j , : ] \mathbf{X}[i,j,:] X[i,j,:],输出一个向量 a i j ∈ R d a_{ij}\in\mathbb{R}^d aijRd
a i j = W O ∑ l ∈ [ 1 , N ] α i l j v i l j , a_{ij}=W^O \sum_{l\in[1,N]} \alpha_{ilj}v_{ilj}, aij=WOl[1,N]αiljvilj,
α i l j = s o f t m a x l ∈ [ 1 , N ] q i l k l j / d , \alpha_{ilj}=\mathrm{softmax}_{l\in[1,N]} q_{il}k_{lj}/\sqrt{d}, αilj=softmaxl[1,N]qilklj/d ,
q i l = W q x i l , q_il=W^q x_{il}, qil=Wqxil,
k l j = W k x l j , k_{lj}=W^k x_{lj}, klj=Wkxlj,
v i l j = V 1 x i l ⊙ V 2 x l j . v_{ilj}=V^1 x_il \odot V^2 x_lj. vilj=V1xilV2xlj.

Partial higher-order 表示

由上面的讨论可知,higher-order 表示主要的空间复杂度来源于它的邻居定义并没有考虑到图的稀疏性。为了将稀疏性也考虑在内,我们可以稍微修改一下邻居的定义方法[9][10]:

P a r t i a l   2 − W L : N ( s , t ) = ( { { ( s , e )   ∣   e ∈ N ( s ) } } , { { ( e , t )   ∣   e ∈ N ( t ) } } ) \mathrm{Partial ~ 2-WL}: N(s,t)=(\{\{(s,e)~|~e\in N(s)\}\},\{\{(e,t)~|~e\in N(t)\}\}) Partial 2WL:N(s,t)=({{(s,e)  eN(s)}},{{(e,t)  eN(t)}})
P a r t i a l   2 − F W L : N ( s , t ) = { { ( ( s , e ) , ( e , t ) )   ∣   e ∈ N ( s ) } } . \mathrm{Partial ~ 2-FWL}: N(s,t)=\{\{((s,e),(e,t))~|~e\in N(s)\}\}. Partial 2FWL:N(s,t)={{((s,e),(e,t))  eN(s)}}.

Morris et al.[11] 证明了使用 MPNN, Partial 2-WL 方法表达能力严格大于 2-WL;然而,Partial 2-FWL 的表达能力却小于 2-FWL。

实现

我们简要介绍一下 [10] 中的实现方法。同样假设 X ∈ R N × N × d \mathbf{X}\in \mathbb{R}^{N\times N\times d} XRN×N×d 是图的张量表示。那么

A i j ( 0 ) = X [ i , j ] , A_{ij}^{(0)}=\mathbf{X}[i,j], Aij(0)=X[i,j],
A ( l + 1 ) = f ( c o n c a t ( B ( l ) , A ( l ) ) , A^{(l+1)}=f(\mathrm{concat}(B^{(l)},A^{(l)}), A(l+1)=f(concat(B(l),A(l)),
B i j ( l ) = ∑ k ∈ [ N ] g ( A i k ( l ) ) ⊙ ( A k j ( l ) ) B_{ij}^{(l)}=\sum_{k\in[N]} g(A^{(l)}_{ik})\odot(A_{kj}^{(l)}) Bij(l)=k[N]g(Aik(l))(Akj(l))

从而,计算过程需要 O ( N 3 ) O(N^3) O(N3) 时间和 O ( N 2 ) O(N^2) O(N2) 空间。[10] 提出了该算法的局部版本 (local version),对应于 partial higher-order 表示。计算过程中,只考虑 N ( s , t ) = { { ( ( s , e ) , ( e , t ) )   ∣   e ∈ N ( s ) } } N(s,t)=\{\{((s,e),(e,t))~|~e\in N(s)\}\} N(s,t)={{((s,e),(e,t))  eN(s)}};计算过程中,也只考虑张量 A , B A,B A,B 的非 0 部分。

总结

综合上面的讨论,给定两个图 G = ( V G , E G ) , H = ( V H , E H ) G=(V_G,E_G),H=(V_H,E_H) G=(VG,EG),H=(VH,EH) s , t ∈ V G , p , q ∈ V H s,t\in V_G,p,q\in V_H s,tVG,p,qVH,那么下面的陈述是等价的:

  • ( ( s , t ) , G ) ≃ ( ( p , q ) , H ) ((s,t),G)\simeq ((p,q),H) ((s,t),G)((p,q),H)
  • 使用 partial labeing trick 得到 G s , H p G_s,H_p Gs,Hp,且 ( t , G s ) ≃ ( q , H p ) (t,G_s)\simeq (q,H_p) (t,Gs)(q,Hp)
  • 使用 labeling trick 得到 G s , t , H p , q G_{s,t},H_{p,q} Gs,t,Hp,q,且 G s , t ≃ H p , q G_{s,t}\simeq H_{p,q} Gs,tHp,q

推广上述结论,给定图 G = ( V G , E G ) , H = ( V H , E H ) G=(V_G,E_G),H=(V_H,E_H) G=(VG,EG),H=(VH,EH),假设我们要学习 k − k- k节点组的表示:
v = ( v 1 , v 2 , . . . , v k ) ∈ V G k , w = ( w 1 , w 2 , . . . , w k ) ∈ V H k , \mathbf{v}=(v_1,v_2,...,v_k)\in V_G^k,\mathbf{w}=(w_1,w_2,...,w_k)\in V_H^k, v=(v1,v2,...,vk)VGk,w=(w1,w2,...,wk)VHk,

那么对任意的 0 ≤ i ≤ k 0\leq i\leq k 0ik,下面的陈述是等价的:

  • 使用 (partial) labeling trick 部分标注节点 v 1 , v 2 , . . . , v i v_1,v_2,...,v_i v1,v2,...,vi w 1 , w 2 , . . . , w i w_1,w_2,...,w_i w1,w2,...,wi,分别得到图 G v i , H w i G_{\mathbf{v}_i},H_{\mathbf{w}_i} Gvi,Hwi,且 ( ( v i + 1 , v i + 2 , . . . , v k ) , G v i ) ≃ ( ( w i + 1 , w i + 2 , . . . , w k ) , H w i ) . ((v_{i+1},v_{i+2},...,v_k),G_{\mathbf{v}_i})\simeq ((w_{i+1},w_{i+2},...,w_k),H_{\mathbf{w}_i}). ((vi+1,vi+2,...,vk),Gvi)((wi+1,wi+2,...,wk),Hwi).

实验

同质图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hkWe9ziW-1683535627237)(exp1.png)]

异质图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EROWHNQk-1683535627237)(exp2.png)]

参考文献

[1] Labeling Trick: A Theory of Using Graph Neural Networks for Multi-Node Representation Learning. Zhang et al, NeurIPS 2021.

[2] Variational Graph Auto-Encoders. Kipf et al. NeurIPS 2016 Workshop.

[3] Link prediction based on graph neural networks. Zhang et al. NeurIPS 2018.

[4] Inductive relation prediction by subgraph reasoning. Teru et al. ICML 2020.

[5] Graph Neural Networks For Link Prediction With Subgraph Sketching. Chamberlain et al. ICLR 2023.

[6] Geodesic Graph Neural Network for Efficient Graph Representation Learning. Kong et al. NeurIPS 2022.

[7] Neural Bellman-Ford Networks: A General Graph Neural Network Framework for Link Prediction. Zhu et al. NeurIPS 2021.

[8] Systematic Generalization with Edge Transformers. Bergen et al. NeurIPS 2021.

[9] Weisfeiler and Leman Go Neural: Higher-order Graph Neural Networks. Morris et al. AAAI 2018.

[10] Two-Dimensional Weisfeiler-Lehman Graph Neural Networks for Link Prediction. Hu et al. ArXiv.

[11] Weisfeiler and Leman go sparse: Towards scalable higher-order graph embeddings. Morris et al. NeurIPS 2020.

图片
图片

欢迎关注北京大学王选计算机研究所数据管理实验室微信公众号“图谱学苑“
实验室官网:https://mod.wict.pku.edu.cn/
微信社区群:请回复“社区”获取

实验室开源产品图数据库gStore:
gStore官网:http://www.gstore.cn/
GitHub:https://github.com/pkumod/gStore
Gitee:https://gitee.com/PKUMOD/gStore

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我们可以使用Python中的DGL库来实现这个简单的神经网络进行链接预测。以下是一个简单的代码示例: ```python import dgl import torch import torch.nn as nn # 构造数据集 g = dgl.graph(([0, 1, 2, 3], [1, 2, 3, 4])) # 定义一个包含5个节点和4条边的 g.ndata['feat'] = torch.randn(5, 10) # 每个节点有一个10维的特征向量 g.edata['feat'] = torch.randn(4, 5) # 每条边有一个5维的特征向量 g.apply_edges(lambda edges: {'feat': torch.cat([edges.src['feat'], edges.dst['feat']], dim=1)}) # 将每条边的特征向量定义为源节点和目标节点的特征向量的拼接 # 定义一个简单的神经网络模型 class GNN(nn.Module): def __init__(self, in_dim, hidden_dim, out_dim): super(GNN, self).__init__() self.conv1 = dgl.nn.GraphConv(in_dim, hidden_dim) self.conv2 = dgl.nn.GraphConv(hidden_dim, out_dim) def forward(self, g): h = g.ndata['feat'] h = self.conv1(g, h) h = torch.relu(h) h = self.conv2(g, h) return h # 训练模型 model = GNN(20, 16, 1) # 输入特征向量是源节点和目标节点特征向量拼接,所以输入维度为20(10+10) criterion = nn.BCEWithLogitsLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.01) for epoch in range(100): logits = model(g) labels = g.edata['label'] loss = criterion(logits, labels) optimizer.zero_grad() loss.backward() optimizer.step() print('Epoch %d | Loss: %.4f' % (epoch, loss.item())) # 预测链接 model.eval() with torch.no_grad(): logits = model(g) scores = torch.sigmoid(logits) _, indices = torch.topk(scores.view(-1), 2) # 输出得分最高的两条边 src, dst = g.find_edges(indices) print('Top 2 edges are:') for i in range(len(src)): print('%d -> %d' % (src[i].item(), dst[i].item()))) ``` 在这个代码示例中,我们首先构造了一个包含5个节点和4条边的,并使用随机向量作为节点和边的特征向量。我们将每条边的特征向量定义为源节点和目标节点的特征向量的拼接。接下来,我们定义了一个简单的神经网络模型,模型的输入特征向量是源节点和目标节点特征向量拼接,所以输入维度为20(10+10)。我们使用BCEWithLogitsLoss作为损失函数,Adam作为优化器进行模型训练。最后,我们使用训练好的模型进行链接预测,输出得分最高的两条边。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值