2016 NIPS | Variational Graph Auto-Encoders
Paper:https://arxiv.org/abs/1611.07308
Code: https://github.com/DaehanKim/vgae_pytorch
变分图自动编码器
GAE是GCN在Auto-Encoders (AE)的应用,非常容易理解,隐变量Z
就是图上的N
个节点经过GCN后的N*F
维特征,Encoder就是两层GCN, Decoder就是向量点积。可以将隐变量Z理解为某种意义上图的节点的相似度,通过向量点积得到的两个图节点的相似度越大,则两个节点之间存在边的概率越大。
VGAE是GCN在Variational Graph Auto-Encoders (VAE)的应用。Encoder用两个两层GCN分别得到N个均值和标准差,这两个GCN会共享第一层的参数,从而得到N个正态分布。Decoder仍然是向量点积。
变分图自动编码器(variational graph autoencoder,VGAE),它是基于变分自动编码器(variational auto-encoder,VAE)的无监督学习图结构数据的框架 该模型利用了潜在变量,并且有可能学习无向图的可解释潜在表示。
模型
其中,
X
X
X 为节点的特征矩阵,
A
A
A 为邻接矩阵,先利用后验概率得到隐变量
Z
Z
Z,再用隐变量重构邻接矩阵
A
A
A。
确定均值和方差
VGAE 的编码器是一个两层的图卷积网络:
q
(
Z
∣
X
,
A
)
=
∏
i
=
1
N
q
(
z
i
∣
X
,
A
)
q(Z|X,A) = \prod_{i=1}^{N}q(z_i|X,A)
q(Z∣X,A)=i=1∏Nq(zi∣X,A)
其中,后验概率和 VAE 的解决方案一致:
q
(
z
i
∣
X
,
A
)
=
N
(
z
i
∣
μ
i
,
d
i
a
g
(
σ
2
)
)
q(z_i|X,A)=N(z_i|\mu_i, diag(\sigma^2))
q(zi∣X,A)=N(zi∣μi,diag(σ2))
其中,
μ
=
G
C
N
μ
(
X
,
A
)
\mu=GCN_{\mu}(X,A)
μ=GCNμ(X,A) 是特征向量的均值;
l
o
g
σ
=
G
C
N
σ
(
X
,
A
)
log\sigma=GCN_{\sigma}(X,A)
logσ=GCNσ(X,A) 是节点向量的方差。
采样
既然已经得到了均值和方差(准确来说应该是均值向量和协方差矩阵),就可以通过采样得到 Z Z Z了,但是,采样操作无法提供梯度信息,也就是说,反向传播在采样操作无法计算梯度,也就无法更新 W 0 W_0 W0和 W 1 W_1 W1
在 G A E GAE GAE中,一旦 G C N GCN GCN中的 W 0 W_0 W0和 W 1 W_1 W1确定了,那么 G C N GCN GCN就是一个确定的函数,给定 X X X和 A A A,输出的 Z Z Z就是确定的。
这里有两个要注意的地方,第一个是
G
C
N
GCN
GCN的下标,
G
C
N
μ
GCN_{\mu}
GCNμ和
G
C
N
σ
GCN_{\sigma}
GCNσ中的
W
0
W_0
W0
共享但
W
1
W_1
W1是不同的,因此用下标来作区分;第二个是通过
G
C
N
σ
GCN_{\sigma}
GCNσ得到的是
l
o
g
σ
log_{\sigma}
logσ,这样可以方便后续的计算。
两层卷积神经网络定义为:
G
C
N
(
X
,
A
)
=
A
~
R
e
L
U
(
A
~
X
W
0
)
W
1
GCN(X,A)=\tilde{A}ReLU(\tilde{A}XW_0)W_1
GCN(X,A)=A~ReLU(A~XW0)W1
其中,
G
C
N
μ
(
X
,
A
)
GCN_{\mu}(X,A)
GCNμ(X,A)和
G
C
N
σ
(
X
,
A
)
GCN_{\sigma}(X,A)
GCNσ(X,A)共享第一层参数
W
0
W_0
W0, 不共享第二层参数
W
1
W_1
W1;
A
~
=
D
−
1
/
2
A
D
−
1
/
2
\tilde{A}=D^{-1/2}AD^{-1/2}
A~=D−1/2AD−1/2是对称标准化邻接矩阵。
VGAE 的解码器则是利用隐变量的内积来重构邻接矩阵:
p
(
A
∣
Z
)
=
∏
i
=
1
N
∏
i
=
1
N
p
(
A
i
j
∣
z
i
,
z
j
)
p(A|Z)=\prod_{i=1}^{N}\prod_{i=1}^{N}p(A_{ij}|z_i,z_j)
p(A∣Z)=i=1∏Ni=1∏Np(Aij∣zi,zj)
其中,
p
(
A
i
j
=
1
∣
z
i
,
z
j
)
=
σ
(
z
i
T
z
j
)
p(A_{ij}=1|z_i, z_j)=\sigma(z_i^Tz_j)
p(Aij=1∣zi,zj)=σ(ziTzj)
损失函数
基本思想与VAE思想相同,这是文中采用的优化目标
损失函数也是包括两部分:
L
=
E
Z
∣
X
,
A
[
l
o
g
(
A
∣
Z
)
]
−
K
L
(
q
(
Z
∣
X
,
A
)
∣
∣
p
(
Z
)
)
L=\mathbb{E}_{Z|X,A}[log(A|Z)]-KL(q(Z|X,A)||p(Z))
L=EZ∣X,A[log(A∣Z)]−KL(q(Z∣X,A)∣∣p(Z))
其中,
p
(
Z
)
=
∏
N
(
z
i
∣
0
,
I
)
p(Z)=\prod N(z_i|0,I)
p(Z)=∏N(zi∣0,I)表示