从直观上理解VAE
变分自编码器(Variational Auto-Encoders,VAE)是深度生成模型的一种形式(GAN也是其中一种),VAE是基于变分贝叶斯推断的生成式网络结构。传统自编码器是通过数值方式描述潜在空间的不同,而VAE以概率的方式描述潜在空间的不同,是一种无监督式学习的生成模型。
VAE模型结构
现在学习VAE的模型结构是什么样的。如下图所示,模型分为两个部分:推断网络(编码器encoder)和生成网络(decoder)。
- 推断网络:用于原始输入数据的变分推断,生成隐变量的变分概率分布情况;
- 生成网络:根据生成的隐变量变分概率分布还原为原始数据近似概率分布。


在VAE中,假设 p ( Z ∣ X ) p(Z|X) p(Z∣X)(后验分布)是满足正态分布的。给定一个真实样本 K k K_k Kk,假设存在一个专属于 X k X_k Xk的分布 p ( Z ∣ X k ) p(Z|X_k) p(Z∣Xk),进一步假设这个分布是正态分布(独立的、多元的)。由于这个专属性,有多少个样本X就有多少个正态分布,能更好让decoder做还原。
VAE原理分析
KL散度
KL散度是两个概率分布的差值,要想保证 q ( z ∣ x ) q(z|x) q(z∣x)与 p ( z ∣ x ) p(z|x) p(z∣x)尽可能相似,我们的目的即是最小化这个KL散度:
m i n K L ( q ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) minKL(q(z|x)||p(z|x)) minKL(q(z∣x)∣∣p(z∣x))
转换一下,通过最大化下式,即最小化了上式:
E q ( z ∣ x ) l o g p ( z ∣ x ) − K L ( q ( z ∣ x ) ∣ ∣ p ( z ) ) E_{q(z|x)}logp(z|x)-KL(q(z|x)||p(z)) Eq(z∣x)logp(z∣x)−KL(q(z∣x)∣∣p(z))
其中, E q ( z ∣ x ) l o g p ( z ∣ x ) E_{q(z|x)}logp(z|x) Eq(z∣x)logp(z∣x)表示重构的可能性, m i n K L ( q ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) minKL(q(z|x)||p(z|x)) minKL(q(z∣x)∣∣p(z∣x))表示要学习的分布 q ( z ∣ x ) q(z|x) q(z∣x)有多逼近真实的后验分布 p ( z ∣ x ) p(z|x) p(z∣x).
损失函数
损失函数包含两部分:
L ( x , x ^ ) + K L ( q ( z ∣ x ) ∣ ∣ p ( z ) ) L(x,\hat{x})+KL(q(z|x)||p(z)) L(x,x^)+KL(q(z∣x)∣∣p(z))
分布标准化处理
有博主把这一部分写得非常清楚,借鉴一部分过来供大家理解学习,出处附在参考资料中。

重参数技巧(reparameterization trick)
为什么要用重参数技巧?在decoder过程中,我们要从 p ( z ∣ x ) p(z|x) p(z∣x)中采样一个 z z z出来,尽管采样的结果 p ( z ∣ x ) p(z|x) p(z∣x)是一个分布(已知高斯分布的参数,故可求导训练),但是随机采样这个过程是不可求导训练的。
如何解决这个问题?用重参数技巧。从 N ( μ , σ 2 ) N(\mu,\sigma^2) N(μ,σ2)中采样一个 z z z出来,相当于从 N ( 0 , I ) N(0,I) N(0,I)中采样一个 ϵ \epsilon ϵ出来,然后做参数的线性变换让 z = μ + ϵ × σ . z=\mu+\epsilon\times\sigma. z=μ+ϵ×σ.

图生成模型:变分图自编码器(VGAE)
主要思想
将变分自编码器(VAE)迁移到图领域中(graph),将已知图通过图卷积层(GCN)编码(decoder),学习到节点向量表示的分布,在分布中采样得到节点的向量表示,然后解码(link prediction)重构图。
模型结构

输入:邻接矩阵A和特征矩阵X
过程:通过编码器(图卷积网络)学习节点低维向量表示的均值 μ \mu μ和方差 σ \sigma σ,然后用解码器(链路预测)生成图。
编码器是简单的两层GCN网络:
q ( Z ∣ X , A ) = ∑ i = 1 N q ( z i ∣ X , A ) q(Z|X,A)=\sum_{i=1}^N q(z_i|X,A) q(Z∣X,A)=i=1∑Nq(zi∣X,A)
其中, 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)), μ \mu μ是节点向量表示 μ = G C N μ ( X , A ) \mu = GCN_{\mu}(X,A) μ=GCNμ(X,A)的均值, σ \sigma σ是节点向量表示的方差 l o g σ = G C N σ ( X , A ) log\sigma=GCN_\sigma(X,A) logσ=GCNσ(X,A)。
两层卷积网络定义如下:
G C N ( X , A ) = A ~ R e L U ( A ~ X W 0 ) W 1 GCN(X,A)=\widetilde{A} ReLU(\widetilde{A}XW_0)W_1 GCN(X,A)=A
ReLU(A
XW0)W1
其中, A ~ = D ^ − 1 2 A ^ D ^ − 1 2 \widetilde{A}=\widehat{D}^{-\frac{1}{2}}\widehat{A}\widehat{D}^{-\frac{1}{2}} A
=D
−21A
D
−21, A ^ = A + I \widehat{A}=A+I A
=A+I, D ^ \widehat{D} D
是 A ^ \widehat{A} A
对应的度矩阵。
值得注意的是, 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不同。采样过程和VAE相同,都是用了重参数技巧(reparameterization trick)。
损失函数
损失函数包含两部分:生成图和原始图之间的距离度量、节点表示向量分布和正态分布的散度。
L = E q ( Z ∣ X , A ) [ l o g p ( A ∣ Z ) ] − K L [ q ( Z ∣ X , A ) ∣ ∣ P ( Z ) ] L=E_q(Z|X,A)[logp(A|Z)]-KL[q(Z|X,A)||P(Z)] L=Eq(Z∣X,A)[logp(A∣Z)]−KL[q(Z∣X,A)∣∣P(Z)]
其中, E q ( Z ∣ X , A ) [ l o g p ( A ∣ Z ) ] E_q(Z|X,A)[logp(A|Z)] Eq(Z∣X,A)[logp(A∣Z)]是交叉熵损失函数。
理解到VAE的思想后,理解VGAE就会稍轻松一些,VAE用在CV领域比较多,通过生成模型生成具有相似特征的图像,但是将VAE应用到graph领域,有什么价值呢?在前面的推导中,VGAE得到图节点编码后,两两计算节点间存在边的概率大小,基于此重构图。可以看到,VGAE其实有做链路预测(link prediction) 的作用,举个简单的例子:在推荐系统中,通过重构图来捕获user与item之间可能的connection。
补充:图自编码器(GAE)
参考资料
- 变分自编码器是什么?
- PAPER:《Auto-Encoding Variational Bayes》
- 从自编码器到变分自编码器(其二)
- 变分自编码器(一):原来是这么一回事
- VGAE(Variational graph auto-encoders)论文详解
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216510.html原文链接:https://javaforall.net
