相关资源
论文:http://www.ifmlab.org/files/paper/graph_bert.pdf
代码:https://github.com/jwzhanggy/Graph-Bert
这篇文章2020年发表于arXiv,借鉴了Transformer,提出一种仅使用注意力机制的图神经网络。
Motivation
主流的GNNs过度依赖图上的连接,导致了几个严重的性能问题:
- suspended animation problem:当模型深度到达一定上限时,网络将不会对训练数据相应;
- over-smoothing problem:模型深度到达一定上限时,学习到的节点嵌入将没有差异。
- 在图内无法实现并行计算。
Contributions
- 提出了新的图神经网络;
- 用无监督的任务对模型进行预训练,同时学习图的局部属性和图的总体属性;
- 预训练的模型可以微调并迁移到其他的学习任务上。
Model
Subgraph Batching
这一步的终极目的其实是对于每个节点采样得到局部子图。Subgraph Batching使得Graph-Bert能够在大尺寸图上并行计算。
- 矩阵
S
S
S:文中称该
S
S
S为图亲密度矩阵(graph intimacy matrix)。
S
S
S的计算基于Pagerank算法:
S = α ( I − ( 1 − α ) ⋅ A ˉ ) − 1 S=\alpha(I-(1-\alpha)·\bar A)^{-1} S=α(I−(1−α)⋅Aˉ)−1
不懂pagerank算法的可以参考知乎这篇文章。 A ˉ = A D − 1 \bar A=AD^{-1} Aˉ=AD−1, D D D是度矩阵。 A ˉ \bar A Aˉ可以看成是状态转移矩阵,前面一项 I I I表示每个节点都可以以相等的概率转移到所有其他节点,后面的 ( 1 − α ) ⋅ A ˉ (1-\alpha)·\bar A (1−α)⋅Aˉ表示节点以状态转移矩阵中相应的概率转移到相应节点。(其实可以理解成前面一项是随机转移,后面一项是按照图的连接来转移)。 - Node Context:基于
S
S
S矩阵,作者又提出了一个新概念,对于节点
v
i
v_i
vi,定义其局部的node context为:
Γ
(
v
i
)
=
{
v
j
∣
v
j
∈
V
\
{
v
i
}
∧
S
(
v
i
,
v
j
)
>
θ
i
}
\Gamma\left(v_{i}\right)=\left\{v_{j} \mid v_{j} \in V\backslash\left\{v_{i}\right\} \wedge S(v_i,v_j)>\theta_i\right.\}
Γ(vi)={vj∣vj∈V\{vi}∧S(vi,vj)>θi}。
看起来有点乱……其实意思就是如果节点 v j v_j vj与 v i v_i vi之间的亲密度值超过某个阈值 θ i \theta_i θi,那么该 v j v_j vj就可以参与构成目标节点 v i v_i vi的node context,且节点 v j v_j vj不可以取 v i v_i vi。 θ i \theta_i θi的取值在文中选择为排序 S ( i , : ) S(i,:) S(i,:)后的第 k k k个值,这样 Γ ( v i ) \Gamma(v_i) Γ(vi)就可以包含top-k的亲密的节点。 - subgraph:得到 Γ ( v i ) \Gamma (v_i) Γ(vi)后,可以继续得到节点 v i v_i vi的局部图,该局部图的节点集为 V i = Γ ( v i ) ∪ { v i } V_i=\Gamma(v_i)\mathop{\cup}\{v_i\} Vi=Γ(vi)∪{vi},该局部图为 g i = ( V i , ∅ ) g_i=(V_i,\varnothing) gi=(Vi,∅),所有节点的局部图为 G = ( g 1 , g 2 , … , g ∣ V ∣ ) G=(g_1,g_2,\ldots,g_{|V|}) G=(g1,g2,…,g∣V∣)表示所有节点的局部图集合。该局部图内是没有连接的。
编码
熟悉Transformer的同学知道,其为了捕捉位置属性,定义了位置编码组件来用一个向量表示单词的位置,融合位置向量和单词原始属性作为输入。Graph-Bert同样也提出了编码。其实图本来应该是无序的,但由于作者做了采样,在一个子图内部,可以根据亲密度的大小做一个排序,或者根据其他算法给节点以label,使得子图内部的节点是有序的。编码工作不仅包含拓扑位置的编码,还包含节点自身的特征等等。
- Raw Feature Vector Embedding:
e j ( x ) = E m b e d ( x j ) ∈ R d h × 1 e^{(x)}_j=Embed(x_j)\in R^{d_h\times 1} ej(x)=Embed(xj)∈Rdh×1
E m b e d Embed Embed可以是CNN,可以是LSTM、BERT或者简单线性变化。 - Weisfeiler-Lehman Absolute Role Embedding:
WL算法可以标记节点在图中的角色,在图中担任相同角色的不同节点将会有相同的WL编码。定义该编码为 W L ( v i ) ∈ R WL(v_i)\in R WL(vi)∈R,借鉴Transformer的位置编码,得到:
- Intimacy based Relative Positional Embedding:对于
v
j
∈
V
i
v_j\in V_i
vj∈Vi,基于亲密度矩阵,用
P
(
v
j
)
P(v_j)
P(vj)表示节点
v
j
v_j
vj相对于
v
i
v_i
vi的亲密度位置。
e j ( p ) = Position-Embed ( P ( v j ) ) ∈ R d n × 1 e^{(p)}_j=\text{Position-Embed}(P(v_j))\in R^{d_n\times 1} ej(p)=Position-Embed(P(vj))∈Rdn×1 - Hop based Relative Distance Embedding:对于
v
j
∈
V
i
v_j\in V_i
vj∈Vi,用
H
(
v
j
,
v
i
)
H(v_j,v_i)
H(vj,vi)表示在原始图中,
v
j
v_j
vj到达
v
i
v_i
vi需要的hops数。
e j ( d ) = Position-Embed ( H ( v j ; v i ) ∈ R d h × 1 e^{(d)}_j=\text{Position-Embed}(H(v_j;v_i)\in R^{d_h\times 1} ej(d)=Position-Embed(H(vj;vi)∈Rdh×1
最后节点的编码可以表示成这四个编码的和,作为
v
j
v_j
vj在子图
g
i
g_i
gi的中输入(是的没错,讲到现在也只是输入而已……)
h
j
(
0
)
=
Aggregate
(
e
j
(
x
)
,
e
j
(
r
)
,
e
j
(
p
)
,
e
j
(
d
)
)
h_j^{(0)}=\text{Aggregate}(e^{(x)}_j,e^{(r)}_j,e^{(p)}_j,e^{(d)}_j)
hj(0)=Aggregate(ej(x),ej(r),ej(p),ej(d))
用
H
(
0
)
H^{(0)}
H(0)表示
g
i
g_i
gi中所有节点的输入编码,也就是
H
(
0
)
=
[
h
i
(
0
)
,
h
i
,
j
(
0
)
,
…
,
h
i
,
k
(
0
)
]
T
∈
R
(
k
+
1
)
×
d
h
H^{(0)}=[h_i^{(0)},h_{i,j}^{(0)},\ldots,h_{i,k}^{(0)}]^T\in R^{(k+1)\times d_h}
H(0)=[hi(0),hi,j(0),…,hi,k(0)]T∈R(k+1)×dh
第
l
l
l层的输出可以计算为:
H
(
l
)
=
G-Transformer
(
H
(
l
−
1
)
)
=
s
o
f
t
m
a
x
(
Q
K
T
d
h
)
V
+
G
−
R
e
s
(
H
(
l
−
1
)
,
X
i
)
H^{(l)}=\text{G-Transformer}(H^{(l-1)})\\ =softmax(\frac{QK^T}{\sqrt{d_h}})V+G-Res(H^{(l-1)},X_i)
H(l)=G-Transformer(H(l−1))=softmax(dhQKT)V+G−Res(H(l−1),Xi)
这里用到了自注意力机制,即
Q
=
H
(
l
−
1
)
W
Q
l
Q=H^{(l-1)}W^l_Q
Q=H(l−1)WQl,
K
=
H
(
l
−
1
)
W
K
l
K=H^{(l-1)}W^l_K
K=H(l−1)WKl,
V
=
H
(
l
−
1
)
W
V
l
V=H^{(l-1)}W^l_V
V=H(l−1)WVl。
假设一共有
D
D
D层,
g
i
g_i
gi的最后一层的输出为
H
(
D
)
H^{(D)}
H(D),最终节点
v
i
v_i
vi的节点嵌入表示为
z
i
=
Fusion
(
H
(
D
)
)
z_i=\text{Fusion}(H^{(D)})
zi=Fusion(H(D))。
总体看来,模型框架图如下:
后面作者介绍了两个预训练任务,分别是节点原始属性重建和图的结构重建:
- 节点原始属性重建:节点原始属性为
x
i
x_i
xi,
x
^
i
=
F
C
(
z
i
)
\hat x_i=FC(z_i)
x^i=FC(zi)。
l 1 = 1 ∣ V ∣ ∑ v i ∈ V ∣ ∣ x i − x ^ i ∣ ∣ 2 \mathcal{l}_1=\frac{1}{|V|}\sum_{v_i\in V}||x_i-\hat x_i||_2 l1=∣V∣1vi∈V∑∣∣xi−x^i∣∣2 - 图的结构重建:原始图的亲密度矩阵为
S
S
S,
s
^
i
,
j
=
z
i
T
z
j
∣
∣
z
i
∣
∣
∣
∣
z
j
∣
∣
\hat s_{i,j}=\frac{z_i^Tz_j}{||z_i||||z_j||}
s^i,j=∣∣zi∣∣∣∣zj∣∣ziTzj。
l 2 = 1 ∣ V ∣ 2 ∣ ∣ S − S ^ ∣ ∣ F \mathcal{l}_2=\frac{1}{|V|^2}||S-\hat S||_F l2=∣V∣21∣∣S−S^∣∣F