TL;DR
本文是将变分自编码器(Variational Auto-Encoders)迁移到了图领域,基本思路是:用已知的图经过编码(图卷积)学到节点向量表示的分布,在分布中采样得到节点的向量表示,然后进行解码(链路预测)重新构建图。
Algorithm/Model
假设已具有自编码器AE和变分自编码器VAE的基础知识,可以参考另一篇文章自编码器变形和变分自编码器理论介绍及其 PyTorch 实现,下面介绍如何将自编码器引入图结构中。
输入为邻接矩阵A 和节点特征矩阵X , 通过编码器(GCN)可以得到节点向量的低维表示高斯分布(μ,σ2),然后通过解码器生成图结构(链路预测)。模型架构如下所示:
编码器 Encoder
编码器为简单的两层图卷积网络:
q(Z∣X,A)=i=1∏Nq(zi∣X,A)
其中q(zi∣X,A)=N(zi∣μi,diag(σi2)),μ 表示节点向量的均值μ=GCNμ(X,A),σ 表示节点向量的方差logσ=GCNσ(X,A)。
两层图卷积网络的定义如下:
GCN(X,A)=A~ReLU(A~XW0)W1
其中A~=D−1/2AD−1/2。μ=GCNμ(X,A) 和logσ=GCNσ(X,A) 共享W0,但W1不同。采用变量这一步与变分自编码器相同都使用重参数技巧。
解码器 Decoder
解码器计算图中任意两点之间存在边的概率来重构图:
p(A∣Z)=i=1∏Nj=1∏Np(Aij∣zi,zj)
其中p(Aij=1∣zi,zj)=sigmoid(ziTzj)。
损失函数包括生成图和原始图之间的距离度量,以及节点表示向量分布和正态分布的KL散度两部分:
L=Eq(Z∣X,A))[logp(A∣Z)]−KL[q(Z∣X,A)∥p(Z)]
其中L=Eq(Z∣X,A))[logp(A∣Z)]是交叉熵函数,p(Z)=∏iN(0,I) 表示高斯先验。
图自编码器 GAE
作者在论文中还提出了图自编码器,编码器是简单的两层图卷积网络:
Z=GCN(X,A)
解码器同样是根据两点间存在边的概率来重构图:
A~=sigmoid(ZZT)
损失函数来衡量生成图和原始图间的差异:
L=Eq(Z∣X,A)[logp(A∣Z)]
Experiments
Thoughts
文章作为图自编码器的开山之作非常经典,但又仅将自编码器来处理图结构数据,为考虑的点相对而言较多,例如图中节点的位置等等。
联系作者