变分自编码器(八):估计样本概率密度
By 苏剑林 | 2021-12-09 | 70685位读者 |在本系列的前面几篇文章中,我们已经从多个角度来理解了VAE,一般来说,用VAE是为了得到一个生成模型,或者是做更好的编码模型,这都是VAE的常规用途。但除了这些常规应用外,还有一些“小众需求”,比如用来估计x的概率密度,这在做压缩的时候通常会用到。
本文就从估计概率密度的角度来了解和推导一下VAE模型。
两个问题 #
所谓估计概率密度,就是在已知样本x1,x2,⋯,xN∼˜p(x)的情况下,用一个待定的概率密度簇qθ(x)去拟合这批样本,拟合的目标一般是最小化负对数似然:
Ex∼˜p(x)[−logqθ(x)]=−1NN∑i=1logqθ(xi)
但这纯粹都只是理论形式,还有诸多问题没有解决,主要可以归为两个大问题:
1、用什么样的qθ(x)去拟合;
2、用什么方法去求解上述目标。
混合模型 #
第一个问题,我们自然是希望qθ(x)的拟合能力越强越好,最好它有能力拟合所有概率分布。然而很遗憾的是,神经网络虽然理论上有万能拟合能力,但那只是拟合函数的能力,并不是拟合概率分布的能力,概率分布需要满足qθ(x)≥0且∫qθ(x)dx=1,后者通常难以保证。
直接的做法做不到,那么我们就往间接的角度想,构建混合模型:
qθ(x)=∫qθ(x|z)q(z)dz=Ez∼q(z)[qθ(x|z)]
其中q(z)通常被选择为无参数的简单分布,比如标准正态分布;而qθ(x|z)则是带参数的、以z为条件的简单分布,比如均值、方差跟z相关的标准正态分布。
从生成模型的角度来看,上述模型被解释为先从q(z)中采样z,然后传入qθ(x|z)中生成x的两步操作。但本文的焦点是估计概率密度,我们之所以选择这样的qθ(x|z),是因为它有足够的拟合复杂分布的能力,最后的qθ(x)表示为了多个简单分布qθ(x|z)的平均,了解高斯混合模型的读者应该知道,这样的模型能够起到非常强的拟合能力,甚至理论上能拟合任意分布,所以分布的拟合能力有保证了。
重要采样 #
但式(2)是无法简单积分出来的,或者说只有这种无法简单显式地表达出来的分布,才具有足够强的拟合能力,所以我们要估计它的话,都要按照Ez∼q(z)[qθ(x|z)]的方式进行采样估计。然而,实际的场景下,z和x的维度比较高,而高维空间是有“维度灾难”的,这意思是说在高维空间中,我们哪怕采样百万、千万个样本,都很难充分地覆盖高维空间,也就是说很难准确地估计Ez∼q(z)[qθ(x|z)]。
为此,我们要想办法缩小一下采样空间。首先,我们通常会将qθ(x|z)的方差控制得比较小,这样一来,对于给定x,能够使得qθ(x|z)比较大的z就不会太多,大多数z算出来的qθ(x|z)都非常接近于零。于是我们只需要想办法采样出使得qθ(x|z)比较大的z,就可以对Ez∼q(z)[qθ(x|z)]进行一个比较好的估计了。
具体来说,我们引入一个新的分布pθ(z|x),假设使得qθ(x|z)比较大的z服从该分布,于是我们有
qθ(x)=∫qθ(x|z)q(z)dz=∫qθ(x|z)q(z)pθ(z|x)pθ(z|x)dz=Ez∼pθ(z|x)[qθ(x|z)q(z)pθ(z|x)]
这样一来我们将从q(z)“漫无目的”的采样,转化为从pθ(z|x)的更有针对性的采样。由于qθ(x|z)的方差控制得比较小,所以pθ(z|x)的方差自然也不会大,采样效率是变高了。注意在生成模型视角下,pθ(z|x)被视为后验分布的近似,但是从估计概率密度的视角下,它其实就是一个纯粹的重要性加权函数罢了,不需要特别诠释它的含义。
训练目标 #
至此,我们解决了第一个问题:用什么分布,以及怎么去更好地计算这个分布。剩下的问题就是如何训练了。
其实有了重要性采样的概念后,我们就不用考虑什么ELBO之类的了,直接使用目标(1)就好,代入qθ(x)的表达式得到
Ex∼˜p(x)[−logEz∼pθ(z|x)[qθ(x|z)q(z)pθ(z|x)]]
事实上,如果Ez∼pθ(z|x)这一步我们通过重参数只采样一个z,那么训练目标就变成
Ex∼˜p(x)[−logqθ(x|z)q(z)pθ(z|x)],z∼pθ(z|x)
这其实已经就是常规VAE的训练目标了。如果采样M>1个,那么就是
Ex∼˜p(x)[−log(1MM∑i=1qθ(x|zi)q(zi)pθ(zi|x))],z1,z2,⋯,zM∼pθ(z|x)
这就是“重要性加权自编码器”了,出自《Importance Weighted Autoencoders》,它被视为VAE的加强。总的来说,通过重要性采样的角度,我们可以绕过传统VAE的ELBO等繁琐推导,也可以不用《变分自编码器(二):从贝叶斯观点出发》所介绍的联合分布视角,直接得到VAE模型甚至其改进版。
文章小结 #
本文从估计样本的概率密度这一出发点介绍了变分自编码器VAE,结合重要性采样,我们可以得到VAE的一个快速推导,完全避开ELBO等诸多繁琐细节。
转载到请包括本文地址:https://kexue.fm/archives/8791
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Dec. 09, 2021). 《变分自编码器(八):估计样本概率密度 》[Blog post]. Retrieved from https://kexue.fm/archives/8791
@online{kexuefm-8791,
title={变分自编码器(八):估计样本概率密度},
author={苏剑林},
year={2021},
month={Dec},
url={\url{https://kexue.fm/archives/8791}},
}
December 30th, 2021
你好苏神~,我小白看得不太明白,变分自编码器训练完之后可以像流模型一样获取到最后的样本概率密度q(z)吗
样本密度是p(x),q(z)是隐变量密度。
之前在学习 TTS 模型的时候,看过一篇综述,作者 Tan et al. (2021) 把 flow-based 和 VAE-based 两种模型总结在了一起,当时觉得两种模型共性还挺多的,但是没想很多,目前看 两种模型都是为了得到一个好的编码器,对样本密度的学习各有各的做法。
Tan, Xu, Tao Qin, Frank Soong, and Tie-Yan Liu. 2021. “A Survey on Neural Speech Synthesis.” http://arxiv.org/abs/2106.15561.
flow-based 和 VAE-based 都有编码解码功能,至于最终是看重编码还是解码,还是看个人需求吧。
是的,最近在看这方面的方法,感觉的确是各有各的优势。感谢苏神解答。
(GANs) min
https://lilianweng.github.io/lil-log/assets/images/three-generative-models.png
从损失函数和图像上看还是比较清楚的。
挺不错的。
December 31st, 2021
苏神,做了重要性采样后,我能理解可以不用漫无目的”的采样了。但是有个问题想要请教下,我看了下原论文 Burda, Grosse, and Salakhutdinov (2016) 实际上可以得到一个更加丰富的特征表示(IWAEs learn richer latent space representations than VAEs)。这个你知道怎么理解么?
我去看了前人工作 Dayan et al. (1995) 和 Bornschein and Bengio (2015) ,后者也是在 helmholtz machine 基础上做了重要性采样,但是似乎没有’更加丰富的特征表示’的论述。
---
Bornschein, J?rg, and Yoshua Bengio. 2015. “Reweighted Wake-Sleep.” http://arxiv.org/abs/1406.2751.
Burda, Yuri, Roger Grosse, and Ruslan Salakhutdinov. 2016. “Importance Weighted Autoencoders.” http://arxiv.org/abs/1509.00519.
Dayan, Peter, Geoffrey E Hinton, Radford M Neal, and Richard S Zemel. 1995. “The Helmholtz Machine.” Neural Computation 7 (5): 889–904.
按道理,IWAE中采样个数越多,对encoder的依赖就越弱,也就是说IWAE理论上强化了生成效果,弱化了编码效果,所以我也不理解这句话是什么意思,
我也是很懵逼,我先 mark 下,回头要是看到相关,我补充过来。
July 7th, 2022
从eq4到eq5, 为什么可以仅考虑采样一次?
eq4是log\_sum, eq5是sum\_log, 应该说eq5是eq4的一个下界吧
因为引入了后验分布p_{\theta}(z|x)。我们希望学出一个接近确定性变换的生成分布q_{\theta}(x|z),即q_{\theta}(x|z)的方差会很小,那么相应地学出来的后验分布p_{\theta}(z|x)方差也会很小,所以采样一个也可以做有效的估计。甚至可以反过来理解,就是我们通过只采样一个,迫使它往方差小的方向去学。
确实, 非常认同, 这里的下界或者说近似, 也对应了vae中只优化elbo而对KL(q_\phi(z|x)|p_\theta(z|x))的不处理, 不知道这样的直接丢掉em中的kl项有没有什么坏处
https://proceedings.neurips.cc/paper/2018/file/25db67c5657914454081c6a18e93d6dd-Paper.pdf
老哥, 看看这篇文章
August 27th, 2022
请问苏神,这个IWAE能降低方差么?
理论上可以。
June 19th, 2024
由于qθ(x|z)的方差控制得比较小,所以pθ(z|x)的方差自然也不会大
两个问题:
1. 请问这里的由于,所以关系如何理解?这两个方差有啥必然关系吗?
2. 实际中是如何控制qθ(x|z)的方差比较小的,做法是什么?
因为重构损失通常占主导,所以VAE首先更倾向于AE,AE的话为了降低训练难度,同样会倾向于得到一个一对一的映射(因为一对多意味着更难),所以encoder、decoder的分布方差会尽量小。
August 21st, 2024
请问苏神,通过这种VAE-based方法估计得到的p_\theta(x),是不是无法给出某个给定样本x_i的概率?另外,可以通过VAE来估计样本分布的熵吗
本文中的q_{\theta}(x),不就代表了VAE估计的x的概率(密度)吗?
November 17th, 2024
请问苏神,这个方法能估计出x的概率分布函数吗?
概率分布函数是指啥?概率密度函数还是累积概率函数?
November 19th, 2024
@苏剑林|comment-25800
CDF,累积概率函数
如果我没理解错,只有一维概率密度才能良好定义累积概率函数,但如果是一维的分布,似乎没必要搞那么复杂了,有更好的选择,比如 https://kexue.fm/archives/10007