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 XX 为节点的特征矩阵,A AA 为邻接矩阵,先利用后验概率得到隐变量 Z ZZ,再用隐变量重构邻接矩阵 A AA。
确定均值和方差
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 ZZ了,但是,采样操作无法提供梯度信息,也就是说,反向传播在采样操作无法计算梯度,也就无法更新 W 0 W_0W0和W 1 W_1W1
在G A E GAEGAE中,一旦G C N GCNGCN中的W 0 W_0W0和W 1 W_1W1确定了,那么G C N GCNGCN就是一个确定的函数,给定X XX和A AA,输出的Z ZZ就是确定的。
这里有两个要注意的地方,第一个是G C N GCNGCN的下标,G C N μ GCN_{\mu}GCNμ和G C N σ GCN_{\sigma}GCNσ中的W 0 W_0W0
共享但W 1 W_1W1是不同的,因此用下标来作区分;第二个是通过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_1GCN(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_0W0, 不共享第二层参数W 1 W_1W1;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)表示