naive Graph Neural Network
图神经网络
basis
CNN的输入为图像 image
RNN的输入为序列 sequence
GNN的输入为图 Graph
用什么来表示图呢?最容易想到的就是邻接矩阵A,他包含了一个图的所有信息。将图的邻接矩阵输入的一个MLP中可以得到图的embedding
z
G
=
M
L
P
(
A
[
1
]
⊕
A
[
2
]
⊕
…
⊕
A
[
∣
V
∣
]
)
\mathbf{z}_{\mathcal{G}}=\mathbf{M L P}(\mathbf{A}[1] \oplus \mathbf{A}[2] \oplus \ldots \oplus \mathbf{A}[|\mathcal{V}|])
zG=MLP(A[1]⊕A[2]⊕…⊕A[∣V∣])
不过这一模型不是permutation invariant,它会受到邻接矩阵中节点的任意顺序影响,了解语音信号处理的朋友应该知道这一定义,即置换不变性。而下面介绍的GNN则是个permutation equivariant模型
f
(
P
A
P
⊤
)
=
f
(
A
)
(Permutation Invariance)
f
(
P
A
P
⊤
)
=
P
f
(
A
)
(Permutation Equivariance),
\begin{aligned} f\left(\mathbf{P A P}^{\top}\right)=f(\mathbf{A}) & \text { (Permutation Invariance) } \\ f\left(\mathbf{P A P}^{\top}\right)=\mathbf{P} f(\mathbf{A}) & \text { (Permutation Equivariance), } \end{aligned}
f(PAP⊤)=f(A)f(PAP⊤)=Pf(A) (Permutation Invariance) (Permutation Equivariance),
Message Passing
先给出一些符号定义:graph
G
=
(
V
,
E
)
\mathcal{G}=(\mathcal{V}, \mathcal{E})
G=(V,E);node features
X
∈
R
d
×
∣
V
∣
\mathbf{X} \in \mathbb{R}^{d \times|\mathcal{V}|}
X∈Rd×∣V∣;node embeddings
z
u
,
∀
u
∈
V
\mathbf{z}_{u}, \forall u \in \mathcal{V}
zu,∀u∈V。
我们用
h
u
(
k
)
\mathbf{h}_{u}^{(k)}
hu(k)表示每个节点
u
u
u 在GNN第
k
k
k 层中对应的hidden embedding,则GNN中的节点信息传播过程可以表示为:
h
u
(
k
+
1
)
=
UPDATE
(
k
)
(
h
u
(
k
)
,
AGGREGATE
(
k
)
(
{
h
v
(
k
)
,
∀
v
∈
N
(
u
)
}
)
)
=
UPDATE
(
k
)
(
h
u
(
k
)
,
m
N
(
u
)
(
k
)
)
\begin{aligned} \mathbf{h}_{u}^{(k+1)} &=\operatorname{UPDATE}^{(k)}\left(\mathbf{h}_{u}^{(k)}, \text { AGGREGATE }^{(k)}\left(\left\{\mathbf{h}_{v}^{(k)}, \forall v \in \mathcal{N}(u)\right\}\right)\right) \\ &=\operatorname{UPDATE}^{(k)}\left(\mathbf{h}_{u}^{(k)}, \mathbf{m}_{\mathcal{N}(u)}^{(k)}\right) \end{aligned}
hu(k+1)=UPDATE(k)(hu(k), AGGREGATE (k)({hv(k),∀v∈N(u)}))=UPDATE(k)(hu(k),mN(u)(k))
从上图可以更直观的理解这一过程,整个过程包含UPDATE 和 AGGREGATE 两个部分,对应于信息的更新和信息的汇聚。
m N ( u ) \mathbf{m}_{\mathcal{N}(u)} mN(u) 表示从邻节点获取到的信息,初始时 h u ( 0 ) = x u \mathbf{h}_{u}^{(0)}=\mathbf{x}_{u} hu(0)=xu,经过k轮message passing后得到网络的输出 z u = h u ( K ) , ∀ u ∈ V \mathbf{z}_{u}=\mathbf{h}_{u}^{(K)}, \forall u \in \mathcal{V} zu=hu(K),∀u∈V
对于node embedding初始化时的node features x u , ∀ u ∈ V \mathbf{x}_{u}, \forall u \in \mathcal{V} xu,∀u∈V,在通常情况下有很多选择,比如生物网络中的基因表达特征或社会网络中的文本特征。如果没有这些特征,也可以图本身的node statistics(移步另一专栏)
Motivations and Intuitions
为什么这一信息传播机制是有效的?
在每次迭代时,每个节点都从其局部邻域聚合信息,随着这些迭代的进行,每个节点嵌入包含越来越多的来自图的更深处的信息。准确地说,在第一次迭代(k = 1)之后,每个节点嵌入都包含来自其1-hop邻域的信息,即每个节点嵌入都包含其直接图邻居的特征信息,这些特征在图中可以通过一条长度为1的路径到达;第二次迭代后(k = 2),每个节点嵌入包含来自其2-hop邻域的信息;一般情况下,经过k次迭代后,每个节点嵌入都包含k-hop邻域信息。
这些“信息”是什么?
- structural information about the graph
- feature-based information (类似CNN)
Basic GNN
最基本的GNN模型可以定义为:
h
u
(
k
)
=
σ
(
W
s
e
l
f
(
k
)
h
u
(
k
−
1
)
+
W
neigh
(
k
)
∑
v
∈
N
(
u
)
h
v
(
k
−
1
)
+
b
(
k
)
)
\mathbf{h}_{u}^{(k)}=\sigma\left(\mathbf{W}_{\mathrm{self}}^{(k)} \mathbf{h}_{u}^{(k-1)}+\mathbf{W}_{\text {neigh }}^{(k)} \sum_{v \in \mathcal{N}(u)} \mathbf{h}_{v}^{(k-1)}+\mathbf{b}^{(k)}\right)
hu(k)=σ⎝⎛Wself(k)hu(k−1)+Wneigh (k)v∈N(u)∑hv(k−1)+b(k)⎠⎞
W
self
(
k
)
,
W
neigh
(
k
)
∈
R
d
(
k
)
×
d
(
k
−
1
)
\mathbf{W}_{\text {self }}^{(k)}, \mathbf{W}_{\text {neigh }}^{(k)} \in \mathbb{R}^{d^{(k)} \times d^{(k-1)}}
Wself (k),Wneigh (k)∈Rd(k)×d(k−1)是可学习的参数;
b
(
k
)
∈
R
d
(
k
)
\mathbf{b}^{(k)} \in \mathbb{R}^{d^{(k)}}
b(k)∈Rd(k)是bias,通常也可以忽略,但是可以使模型获取更优的表现,所以其实是必须的,上式也可以写为:
m
N
(
u
)
=
∑
v
∈
N
(
u
)
h
v
\mathbf{m}_{\mathcal{N}(u)}=\sum_{v \in \mathcal{N}(u)} \mathbf{h}_{v}
mN(u)=v∈N(u)∑hv
UPDATE ( h u , m N ( u ) ) = σ ( W self h u + W neigh m N ( u ) ) \operatorname{UPDATE}\left(\mathbf{h}_{u}, \mathbf{m}_{\mathcal{N}(u)}\right)=\sigma\left(\mathbf{W}_{\text {self }} \mathbf{h}_{u}+\mathbf{W}_{\operatorname{neigh}} \mathbf{m}_{\mathcal{N}(u)}\right) UPDATE(hu,mN(u))=σ(Wself hu+WneighmN(u))
上面是node-level的模型,graph-level的也非常类似
Self-loops
为了防止过拟合,需要在基础模型上进行改进。加入self-loop可以防止节点特征在不断获取邻节点信息后丢失原有特征。
H
(
t
)
=
σ
(
(
A
+
I
)
H
(
t
−
1
)
W
(
t
)
)
\mathbf{H}^{(t)}=\sigma\left((\mathbf{A}+\mathbf{I}) \mathbf{H}^{(t-1)} \mathbf{W}^{(t)}\right)
H(t)=σ((A+I)H(t−1)W(t))
W
self
\mathbf{W}_{\text {self }}
Wself 和
W
neigh
\mathbf{W}_{\text {neigh }}
Wneigh 可以统一为一个矩阵。
Aggregation
Neighborhood Normalization
当某个节点的邻节点数量不同会导致各个节点敏感度不同,因此需要进行归一化,常用的方式比如取平均:
m
N
(
u
)
=
∑
v
∈
N
(
u
)
h
v
∣
N
(
u
)
∣
\mathbf{m}_{\mathcal{N}(u)}=\frac{\sum_{v \in \mathcal{N}(u)} \mathbf{h}_{v}}{|\mathcal{N}(u)|}
mN(u)=∣N(u)∣∑v∈N(u)hv
或是symmetric normalization
m
N
(
u
)
=
∑
v
∈
N
(
u
)
h
v
∣
N
(
u
)
∣
∣
N
(
v
)
∣
\mathbf{m}_{\mathcal{N}(u)}=\sum_{v \in \mathcal{N}(u)} \frac{\mathbf{h}_{v}}{\sqrt{|\mathcal{N}(u)||\mathcal{N}(v)|}}
mN(u)=v∈N(u)∑∣N(u)∣∣N(v)∣hv
Aggregators
aggregation function有很多的选择,比如:
m
N
(
u
)
=
MLP
θ
(
∑
v
∈
N
(
u
)
MLP
ϕ
(
h
v
)
)
\mathbf{m}_{\mathcal{N}(u)}=\operatorname{MLP}_{\theta}\left(\sum_{v \in N(u)} \operatorname{MLP}_{\phi}\left(\mathbf{h}_{v}\right)\right)
mN(u)=MLPθ⎝⎛v∈N(u)∑MLPϕ(hv)⎠⎞
m
N
(
u
)
=
MLP
θ
(
1
∣
Π
∣
∑
π
∈
Π
ρ
ϕ
(
h
v
1
,
h
v
2
,
…
,
h
v
∣
N
(
u
)
∣
)
π
i
)
\mathbf{m}_{\mathcal{N}(u)}=\operatorname{MLP}_{\theta}\left(\frac{1}{|\Pi|} \sum_{\pi \in \Pi} \rho_{\phi}\left(\mathbf{h}_{v_{1}}, \mathbf{h}_{v_{2}}, \ldots, \mathbf{h}_{v_{|\mathcal{N}(u)|}}\right)_{\pi_{i}}\right)
mN(u)=MLPθ(∣Π∣1π∈Π∑ρϕ(hv1,hv2,…,hv∣N(u)∣)πi)
其中
ρ
ϕ
\rho_{\phi}
ρϕ可以是处理时序输入的神经网络(如LSTM)
Neighborhood Attention
对聚合过程中每个节点信息赋予不同的权重,得到Graph Attention Network (GAT):
m
N
(
u
)
=
∑
v
∈
N
(
u
)
α
u
,
v
h
v
\mathbf{m}_{\mathcal{N}(u)}=\sum_{v \in \mathcal{N}(u)} \alpha_{u, v} \mathbf{h}_{v}
mN(u)=v∈N(u)∑αu,vhv
权重
α
\alpha
α 为:
α
u
,
v
=
exp
(
a
⊤
[
W
h
u
⊕
W
h
v
]
)
∑
v
′
∈
N
(
u
)
exp
(
a
⊤
[
W
h
u
⊕
W
h
v
′
]
)
\alpha_{u, v}=\frac{\exp \left(\mathbf{a}^{\top}\left[\mathbf{W h}_{u} \oplus \mathbf{W h}_{v}\right]\right)}{\sum_{v^{\prime} \in \mathcal{N}(u)} \exp \left(\mathbf{a}^{\top}\left[\mathbf{W h}_{u} \oplus \mathbf{W h}_{v^{\prime}}\right]\right)}
αu,v=∑v′∈N(u)exp(a⊤[Whu⊕Whv′])exp(a⊤[Whu⊕Whv])
其中
⊕
\oplus
⊕为concatenation。
该公式还有一些变形,如
α
u
,
v
=
exp
(
h
u
⊤
W
h
v
)
∑
v
′
∈
N
(
u
)
exp
(
h
u
⊤
W
h
v
′
)
\alpha_{u, v}=\frac{\exp \left(\mathbf{h}_{u}^{\top} \mathbf{W} \mathbf{h}_{v}\right)}{\sum_{v^{\prime} \in \mathcal{N}(u)} \exp \left(\mathbf{h}_{u}^{\top} \mathbf{W h}_{v^{\prime}}\right)}
αu,v=∑v′∈N(u)exp(hu⊤Whv′)exp(hu⊤Whv)
α u , v = exp ( MLP ( h u , h v ) ) ∑ v ′ ∈ N ( u ) exp ( MLP ( h u , h v ′ ) ) \alpha_{u, v}=\frac{\exp \left(\operatorname{MLP}\left(\mathbf{h}_{u}, \mathbf{h}_{v}\right)\right)}{\sum_{v^{\prime} \in \mathcal{N}(u)} \exp \left(\operatorname{MLP}\left(\mathbf{h}_{u}, \mathbf{h}_{v^{\prime}}\right)\right)} αu,v=∑v′∈N(u)exp(MLP(hu,hv′))exp(MLP(hu,hv))
Over-smoothing
过平滑是图神经网络里一个非常核心的问题,在多轮迭代后,某些节点的“个性”会丢失,使得许多节点的特征趋向与邻节点相同。这一问题限制了GNN网络层数的加深。
一些处理思路和图神经网络深度应用将在后续文章介绍