【GNN】VGAE:利用变分自编码器完成图重构
今天学习的是 Thomas N. Kipf 的 2016 年的工作《Variational Graph Auto-Encoders》,目前引用量为 260 多。
VGAE 属于图自编码器,是图神经网络细分类别的一大类。Kipf 同学也非常厉害,其影响力最大的一篇论文莫过于 2017 年提出的 GCN 模型。
VGAE 全称为 Variational Graph Auto-Encoders,翻译过来就是变分图自编码器,从名字中我们也可以看出 VGAE 是应用于图上的变分自编码器,是一种无监督学习框架。
看到这可能不知道大家都没有疑问,至少我会有以下几点疑问:
- 自编码器是利用编码与解码对数据进行压缩,加上变分后的 VGAE 是什么?
- 自编码器是通过隐藏层节点数小于输入层节点数实现数据压缩,VGAE 如何实现?
- 自编码器预测的目标是输入,而 VGAE 要预测的是什么?
1.Introduction
我们知道自编码器的是通过减少隐藏层神经元个数来实现重构样本,自编码器为了尽可能复现输入数据,其隐藏层必须捕捉输入数据的重要特征,从而找到能够代表原数据的主要成分。
变分图自编码器也具有类似的目的,其主要是为图中节点找寻合适的 Embedding 向量,并通过 Embedding 向量实现图重构。其中获取到的节点 Embedding 可以用于支撑下游任务。
2.VGAE
2.1 VAE
在介绍 VGAE 之前,我们先介绍下 VAE(Variational Auto-Encoders)。VAE 了解清楚后,VGAE 也算完成了 80%。
VAE 最早来源于 2014 年 Kingma 的一篇论文《Auto-Encoding Variational Bayes》。该论文目前引用数超 8300 次,作者 Kingma 和 Kipf 都来自于阿姆斯特丹大学。
VAE 是变分贝叶斯(Variational Bayesian)和神经网络的结合。
简单介绍下变分贝叶斯方法:我们知道统计模型由观察变量 x、未知参数 θ\thetaθ 和隐变量 z 组成,生成模型是通过隐变量来估计观察变量:pθ(z)pθ(x∣z)p_{\theta}(z)p_{\theta}(x|z)pθ(z)pθ(x∣z)。但很多情况下,这个后验概率并容易得到(因变量和参数都不知道),所以我们就需要通过其他的方式来近似估计这个后验概率。贝叶斯统计学传统的推断方法是采用马氏链蒙特卡洛(MCMC)采样方法,通过抽取大量样本给出后验分布的数值近似,但这种方法的计算代价昂贵。而变分贝叶斯是把原本的统计推断问题转换成优化问题(两个分布的距离),并利用一种分析方法来近似隐变量的后验分布,从而达到原本统计推断的问题。
而 VAE 则是利用神经网络学习来学习变分推导的参数,从而得到后验推理的似然估计。下图实线代表贝叶斯推断统计的生成模型 pθ(z)pθ(x∣z)p_{\theta}(z)p_{\theta}(x|z)pθ(z)pθ(x∣z),虚线代表变分近似 qϕ(z∣x)q_{\phi} (z|x)qϕ(z∣x)。
这篇论文里最重要的就是公式,为了简单起见,不进行公示推导。直接说结论:作者提出了 AEVB(Auto-Encoding Variational Bayesian)算法来让 qϕ(z∣x)q_{\phi} (z|x)qϕ(z∣x) 近似 pθ(x∣z)p_{\theta}(x|z)pθ(x∣z),同时把最大似然函数的下界作为目标函数,从而避开了后验概率的计算,并且将问题转换为最优化问题,同时可以利用随机梯度下降来进行参数优化。
VAE 模型中,我们假设 qϕ(z∣x)q_{\phi} (z|x)qϕ(z∣x) 这个后验分布服从正态分布,并且对于不同样本来说都是独立的,即样本的后验分布是独立同分布的。可能大家会有个疑问:
- 为什么是服从正态分布?
- 为什么要强调是各样本分布是独立的?
对于第一个问题,这里只是做一个假设,只要是一个神经网络可以学到的分布即可,只是服从正态分布就是 VAE 算法,如果服从其他的分布就是其他的算法;
对于第二个问题,如果我们学到的各变量的分布都是一致的,如:
这样的结构无法保证通过学到的分布进行采样得到的隐变量 ziz_izi 能够与真实样本 xix_ixi 一一对应,所以就无法保证学习效果了。
所以 VAE 的每个样本都有自己的专属正态分布:
这样,我们便能通过每个样本的专属分布来还原出真实样本。
这也是论文中最重要的一点:
logqϕ(z∣x(i))=logN(z;μ(i),σ2(i),I)\log q_{\phi}(\mathbf{z}|\mathbf{x}^{(i)}) = \log N(\mathbf{z} ;\mathbf{\mu}^{(i)},\mathbf{\sigma}^{2(i)},\mathbf{I}) \\ logqϕ(z∣x(i))=logN(z;μ(i),σ2(i),I)
VAE 通过构建两个神经网络来分别学习均值和方差 μk=f1(Xk),logσk2=f2(Xk)\mu_k = f_1(\mathbf{X}_k),\log \sigma_k^2 = f_2(\mathbf{X}_k)μk=f1(Xk),logσk2=f2(Xk),这样我们便能得到样本 XkX_kXk 的专属均值和方差了,然后从专属分布中采样出 ZkZ_kZk,然后通过生成器得到 X^k=g(Zk)\mathbf{\hat X}_k = g(\mathbf{Z}_k)X^k=g(Zk),并通过最小化重构误差来进行约束 D(X^k,Xk)D(\mathbf{\hat X}_k, \mathbf{X}_k)D(X^k,Xk)。
但隐变量是通过采样得到的,而不是经过编码器算出来的。这样的重构过程中免不了受到噪声的影响,噪声会增加重构的难度,不过好在这个噪声的强度可以通过方差反应,方差可以通过一个神经网络得到计算,所以最终模型为了更好的重构会尽量让模型的方差为零,而方差为零时,就不存在随机性了,这样模型最终会是一组均值,便退化成了普通的 AutoEncoder。
为了防止噪声为零不再起作用,VAE 会让所有的后验分布都向标准正态分布看齐,衡量两个分布的距离,我们有 KL 散度:
Lμ,σ2=12∑i=1d(μi2+σi2−logσi2−1)L_{\mu, \sigma^2} = \frac{1}{2}\sum_{i=1}^d \big( \mu_i^2 + \sigma_i^2 - log\; \sigma_i^2 - 1 \big) \\ Lμ,σ2=21i=1∑d(μi2+σi2−logσi2−1)
其中,d 为隐变量的维度。
变分自编码中的变分是指变分法,用于对泛函 KL(p∣q)KL(p|q)KL(p∣q) 求极值。
我们将约束两个分布的 KL 散度加入到损失函数中,则有:
L=D(X^k,Xk)+12∑i=1d(μi2+σi2−logσi2−1)L = D(\mathbf{\hat X}_k, \mathbf{X}_k) + \frac{1}{2}\sum_{i=1}^d ( \mu_i^2 + \sigma_i^2 - log\; \sigma_i^2 - 1 ) \\ L=D(X^k,Xk)+21i=1∑d(μi2+σi2−logσi2−1)
简单来说,VAE 的本质就是利用两个编码器分别计算均值和方差,然后利用解码器来重构真实样本,模型结构大致如下:
2.2 VGAE
我们再来看一下变分图自编码,先来看下框架:
其中,X 为节点的特征矩阵,A 为邻接矩阵,先利用后验概率得到隐变量 Z,再用隐变量重构邻接矩阵 A。
VGAE 的编码器是一个两层的图卷积网络:
q(Z∣X,A)=Πi=1Nq(zi∣X,A)q(\mathbf{Z}|\mathbf{X},\mathbf{A}) = \Pi_{i=1}^N q(z_i|\mathbf{X},\mathbf{A}) \\ q(Z∣X,A)=Πi=1Nq(zi∣X,A)
其中,后验概率和 VAE 的解决方案一致:
q(zi∣X,A)=N(zi∣μi,diag(σi2))q(\mathbf{z}_i|\mathbf{X},\mathbf{A})=N(\mathbf{z}_i |\mu_i, diag(\sigma_i^2)) \\ q(zi∣X,A)=N(zi∣μi,diag(σi2))
其中,μ=GCNμ(X,A)\mu=GCN_{\mu}(\mathbf{X},\mathbf{A})μ=GCNμ(X,A) 是特征向量的均值;logσ=GCNσ(X,A)log\;\sigma=GCN_{\sigma}(X,A)logσ=GCNσ(X,A) 是节点向量的方差。
两层卷积神经网络定义为:
GCN(X,A)=A~ReLU(A~XW0)W1GCN(\mathbf{X},\mathbf{A}) = \mathbf{\widetilde{A}}\; ReLU(\mathbf{\widetilde A}\mathbf{X}\mathbf{W_0})\mathbf{W_1} \\ GCN(X,A)=A
其中,GCNμ(X,A)GCN_{\mu}(\mathbf{X},\mathbf{A})GCNμ(X,A) 和 GCNσ(X,A)GCN_{\sigma}(\mathbf{X},\mathbf{A})GCNσ(X,A) 共享第一层参数 W0W_0W0,不共享第二层参数 W1W_1W1;A~=D−1/2AD−1/2\mathbf{\widetilde A}=\mathbf{D}^{-1/2}\mathbf{A}\mathbf{D}^{-1/2}A=D−1/2AD−1/2 是对称标准化邻接矩阵。
VGAE 的解码器则是利用隐变量的内积来重构邻接矩阵:
p(A│Z)=∏i=1N∏j=1Np(Aij∣zi,zj)p(\mathbf{A}│\mathbf{Z})=∏_{i=1}^N∏_{j=1}^Np(A_{ij} |\mathbf{z}_i, \mathbf{z}_j) \\ p(A│Z)=i=1∏Nj=1∏Np(Aij∣zi,zj)
其中,p(Aij=1∣zi,zj)=σ(ziTzj)p(A_{ij}=1|\mathbf{z}_i,\mathbf{z}_j) = \sigma(\mathbf{z}_i^{T}\mathbf{z}_j)p(Aij=1∣zi,zj)=σ(ziTzj).
损失函数也是包括两部分:
L=Eq(Z∣X,A))[logp(A│Z)]−KL[q(Z│X,A)∣∣p(Z)]L=\mathbb{E}_{q(\mathbf{Z}|\mathbf{X}, \mathbf{A}))}[log\;p(\mathbf{A}│\mathbf{Z})]-KL[q(\mathbf{Z}│\mathbf{X},\mathbf{A})||p(\mathbf{Z})] \\ L=Eq(Z∣X,A))[logp(A│Z)]−KL[q(Z│X,A)∣∣p(Z)]
其中,p(Z)=ΠiN(zi∣0,I)p(\mathbf{Z})=\Pi_i N(\mathbf{z}_i|0,\mathbf{I})p(Z)=ΠiN(zi∣0,I) 表示
2.3 GAE
除了变分自编码器外,作者也提出了非概率模型的图自编码器(Graph Auto Encoder),公式如下:
A^=σ(ZZT)\hat {\mathbf{A}} = \sigma(\mathbf{Z}\mathbf{Z}^T) \\ A^=σ(ZZT)
其中,Z=GCN(X,A)\mathbf{Z} = GCN(\mathbf{X},\mathbf{A})Z=GCN(X,A)。
此时的损失函数只包括重构损失。
3.Experiment
简单看一下实验部分,主要是边预测问题,我们也可以看到 VGAE 是预测邻接矩阵的。
打星号的是不使用节点的特征。
4.Conclusion
总结:VGAE 利用神经网络学习后验分布从而实现编码过程,同时利用重构误差和 KL 散度进行参数优化,从而得到节点的隐变量作为节点的 Embeding。
5.Reference
- 《Variational Graph Auto-Encoders》
- 《Auto-Encoding Variational Bayes》
- 《变分自编码器(一):原来是这么一回事》
关注公众号跟踪最新内容:阿泽的学习笔记。
【GNN】VGAE:利用变分自编码器完成图重构相关推荐
- 【NIPS 2016图神经网络论文解读】Variational Graph Auto-Encoders (VGAE) 基于VAE的图变分自编码器
写在前面 论文题目:Variational Graph Auto-Encoders 论文作者:Thomas N. Kipf, Max Welling 论文组织:University of Amster ...
- (脑肿瘤分割笔记:四七)--自编码器和变分自编码介绍具有变分自编码器正则化的U型分割结构
本文只是记录个人阅读论文的感想与思考!难免存在错误!如若理解有误还请各位大佬指出!感谢! 目录 相关概念 自编码器(AE) 自编码器存在的问题 变分自编码器(VAE) 关于正则化的直观解释 论文一:3 ...
- 【生成模型】变分自编码器(VAE)及图变分自编码器(VGAE)
这段时间在学习机器学习中有关不确定性和概率分布的知识,发现了VAE这样一个有趣的方向,想抓紧时间整理一下VAE的主要思想和方法,然后思考如何迁移应用到自己的研究方向上. 从直观上理解VAE 变分自编码 ...
- AVGCN:利用人类注意力引导的图卷积网络进行轨迹预测
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家 ...
- 变分自编码器:球面上的VAE(vMF-VAE)
©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 在变分自编码器:VAE + BN = 更好的 VAE 中,我们讲到了 NLP 中训练 VAE 时常见的 K ...
- 变分自编码器系列:VAE + BN = 更好的VAE
©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 本文我们继续之前的变分自编码器系列,分析一下如何防止 NLP 中的 VAE 模型出现"KL 散度 ...
- 【TensorFlow-windows】学习笔记六——变分自编码器
#前言 对理论没兴趣的直接看代码吧,理论一堆,而且还有点复杂,我自己的描述也不一定准确,但是代码就两三句话搞定了. 国际惯例,参考博文 论文:Tutorial on Variational Autoe ...
- 变分自编码器(VAE)详解与实现(tensorflow2.x)
变分自编码器(VAE)详解与实现(tensorflow2.x) VAE介绍 VAE原理 变分推理 VAE核心方程 优化方式 重参数化技巧(Reparameterization trick) VAE实现 ...
- 【13】变分自编码器(VAE)的原理介绍与pytorch实现
文章目录 1.VAE的设计思路 2.VAE的模型架构 3.VAE的作用原理 4.VAE的Pytorch实现 1)参考代码 2)训练结果展示 3)生成结果展示 5.实现VAE中出现的问题 1.VAE的设 ...
最新文章
- 利用Certbot工具快速给网站部署Let's Encrypt免费SSL证书
- 华为宣布:免费培养K8s和微服务开发者
- 十年维护专家的“秘籍
- access mysql 同步,SQLServer2008 同步Access数据库
- 机器学习入门(三):神经网络起手式
- 初识iptables规则
- Python工具——tqdm:进度条
- biopython简介
- java更新word目录_java aspose.words 生成word目录和更新目录
- html 悬浮qq,js悬浮QQ在线客服代码(支持拖动)
- three.js 入门详解(一)
- 小猪短租陈驰:共享经济不是简单的资本游戏
- Wordpress关闭所有评论
- 优化 | 浅谈旅行商(TSP)的七种整数规划模型
- Chrome浏览器自带翻译功能不能使用了?看我的解决方法
- 这一年来在疫情下,作为沪漂的生活
- CogCreateSegmentTool工具
- 超级计算机紫金,紫金山天文台将用“天河一号”模拟宇宙成长
- HTML转为office WORD方案
- 查看浏览器的cookie