论文标题 | Variational Graph Auto-Encoders
论文来源 | NIPS 2016
论文链接 | https://arxiv.org/abs/1611.07308
源码链接 | https://github.com/tkipf/gae

TL;DR

本文是将变分自编码器(Variational Auto-Encoders)迁移到了图领域,基本思路是:用已知的图经过编码(图卷积)学到节点向量表示的分布,在分布中采样得到节点的向量表示,然后进行解码(链路预测)重新构建图。

Algorithm/Model

假设已具有自编码器AE和变分自编码器VAE的基础知识,可以参考另一篇文章自编码器变形和变分自编码器理论介绍及其 PyTorch 实现,下面介绍如何将自编码器引入图结构中。

输入为邻接矩阵AA 和节点特征矩阵XX , 通过编码器(GCN)可以得到节点向量的低维表示高斯分布(μ,σ2)(\mu, \sigma^2),然后通过解码器生成图结构(链路预测)。模型架构如下所示:

编码器 Encoder

编码器为简单的两层图卷积网络:

q(ZX,A)=i=1Nq(ziX,A)q(Z | X, A)=\prod_{i=1}^{N} q\left(z_{i} | X, A\right)

其中q(ziX,A)=N(ziμi,diag(σi2))q\left(z_{i} | X, A\right)=N\left(z_{i} | \mu_{i}, \operatorname{diag}\left(\sigma_{i}^{2}\right)\right)μ\mu 表示节点向量的均值μ=GCNμ(X,A)\mu=G C N_{\mu}(X, A)σ\sigma 表示节点向量的方差logσ=GCNσ(X,A)\log \sigma=G C N_{\sigma}(X, A)

两层图卷积网络的定义如下:

GCN(X,A)=A~ReLU(A~XW0)W1G C N(X, A)=\tilde{A} \operatorname{Re} L U\left(\tilde{A} X W_{0}\right) W_{1}

其中A~=D1/2AD1/2\tilde{A}=D^{-1 / 2} A D^{-1 / 2}μ=GCNμ(X,A)\mu=G C N_{\mu}(X, A)logσ=GCNσ(X,A)\log \sigma=G C N_{\sigma}(X, A) 共享W0W_0,但W1W_1不同。采用变量这一步与变分自编码器相同都使用重参数技巧。

解码器 Decoder

解码器计算图中任意两点之间存在边的概率来重构图:

p(AZ)=i=1Nj=1Np(Aijzi,zj)p(A | Z)=\prod_{i=1}^{N} \prod_{j=1}^{N} p\left(A_{i j} | z_{i}, z_{j}\right)

其中p(Aij=1zi,zj)=sigmoid(ziTzj)p\left(A_{i j}=1 | z_{i}, z_{j}\right)=\operatorname{sigmoid}\left(z_{i}^{T} z_{j}\right)

损失函数包括生成图和原始图之间的距离度量,以及节点表示向量分布和正态分布的KL散度两部分:

L=Eq(ZX,A))[logp(AZ)]KL[q(ZX,A)p(Z)]L=E_{q(Z | X, A))}[\log p(A | Z)]-K L[q(Z | X, A) \| p(Z)]

其中L=Eq(ZX,A))[logp(AZ)]L=E_{q(Z | X, A))}[\log p(A | Z)]是交叉熵函数,p(Z)=iN(0,I)p(Z)=\prod_{i} N(0, I) 表示高斯先验。

图自编码器 GAE

作者在论文中还提出了图自编码器,编码器是简单的两层图卷积网络:

Z=GCN(X,A)Z=G C N(X, A)

解码器同样是根据两点间存在边的概率来重构图:

A~=sigmoid(ZZT)\tilde{A}=\operatorname{sigmoid}\left(Z Z^{T}\right)

损失函数来衡量生成图和原始图间的差异:

L=Eq(ZX,A)[logp(AZ)]L=E_{q(Z | X, A)}[\log p(A | Z)]

Experiments

Thoughts

文章作为图自编码器的开山之作非常经典,但又仅将自编码器来处理图结构数据,为考虑的点相对而言较多,例如图中节点的位置等等。

联系作者