讨论 2021-12-23 = ###### tags: `tutorials` `Fudan` `2021` ## 浅谈VAE和隐变量 隐变量的引入往往是为了拆分问题,把一个问题拆成两部分或多部分。把问题拆分本身并不直接带来好处,但往往可以让我们更好的利用先验知识。比如,我们有十个随机数生成器,每一个的规律都服从高斯分布,但我们不知道他们具体的参数,同时游戏规则是我们按泊松分布随机从十个生成器选一个,再利用它生成随机数。在一场景下,如果我们直接建模最后的随机数,其分布的形式并不好直接确定,但如果是两段式,那么我们很清楚,一段是泊松,一段是高斯,只要求解参数即可。 同样的,现实中,尤其是很多实际工程中,我们是知道各部分服从那种分布的,但整个系统中,和可能有一部分是未知的,或者多部分叠加后的形式很难确定。在这些情况下,问题拆分都是很有必要的。 ## 隐变量 ### HMM  ### RBM  ### EM和VAE \begin{align} \log P(x) =& \log \sum_z P(x,z) \\ =& \log \sum_z P(x,z) \frac{Q(z)}{Q(z)} \\ =& \log \sum_z Q(z) \frac{P(x|z) P(z)}{Q(z)} \\ =& \log \mathbb{E}_{z \sim Q(z)} \frac{P(x|z) P(z)}{Q(z)} \\ \geq& \mathbb{E}_{z \sim Q(z)} \log \frac{P(x|z) P(z)}{Q(z)} \\ \end{align} 求解Q有两种常见方法,EM和VAE 如果$\frac{P(x|z)P(z)}{Q(z)}=c$,那么Jensen不等式可以取等号,又因为Q是一个分布,和为1。所以一个很朴素的选法就是让$Q(z)=\frac{P(x,z)}{\sum_z P(x,z)}=P(z|x)$,这也是EM中的E步。不过这里显然需要$P(z|x)$是可以求的,也是tractable。 如果不能,则可用VAE,引入一个新的参数估计Q,不论它是什么,都可以联合学习。 ### VAE推导方法1 \begin{align} \log P(x) =& \log \sum_z P(x,z) \\ =& \log \sum_z P(x,z) \frac{Q(z|x)}{Q(z|x)} \\ =& \log \sum_z Q(z|x) \frac{P(x|z) P(z)}{Q(z|x)} \\ =& \log \mathbb{E}_{z \sim Q(z|x)} \frac{P(x|z) P(z)}{Q(z|x)} \\ \geq& \mathbb{E}_{z \sim Q(z|x)} \log \frac{P(x|z) P(z)}{Q(z|x)} \\ \geq& \mathbb{E}_{z \sim Q(z|x)} [\log P(x|z) + \log P(z) -\log Q(z|x)] \\ \geq& \mathbb{E}_{z \sim Q(z|x)} \log P(x|z) - \mathrm{KL}(Q(z|x)||P(z)) \end{align} 我们可以发现Q(z|x)可以被替换成任意分布,但它的影响是什么呢? ### VAE推导方法2 \begin{align} \mathrm{KL}(Q(z|x)||P(z|x)) =& \mathbb{E}_{z \sim Q(z|x)} [\log Q(z|x) - \log P(z|x)] \\ =& \mathbb{E}_{z \sim Q(z|x)} [\log Q(z|x) - \log P(x|z) - \log P(z) + \log P(x)] \\ =& -\mathbb{E}_{z \sim Q(z|x)} \log P(x|z) + \mathrm{KL}(Q(z|x)||P(z)) + \log P(x) \\ \log P(x) =& \mathrm{KL}(Q(z|x)||P(z|x)) + \mathbb{E}_{z \sim Q(z|x)} \log P(x|z) - \mathrm{KL}(Q(z|x)||P(z)) \\ \log P(x) \geq& \mathbb{E}_{z \sim Q(z|x)} \log P(x|z) - \mathrm{KL}(Q(z|x)||P(z)) \end{align} 由第二种方法可知,$\mathrm{KL}(Q(z|x)||P(z|x))$决定了VAE所求的ELBO和真实$P(x)$之间的差距,所以$Q$的选取是非常重要的。 ### 两种collapse 一是KL项太大,model完全不使用z,二是KL项太小,decoder退化 ### CVAE $$\log P(x|c) \geq \mathbb{E}_{z \sim Q(z|x)} \log P(x|c,z) - \mathrm{KL}(Q(z|x)||P(z|c))$$ 事实上,$P(z|c)$可以对于每个$c$都是标准正态分布,实际就退化为了$P(z)$ ### 逆变换采样 隐变量另一个用途是作为生成模型,其试图找到一种方式来建模$P(X)$,即数据分布,更具体来讲,可以不停的从$P(X)$采样出数据点。而其中一类方法是通过分布变换来实现这样一点的,分布变换指的是从一个分布中采样得到一个样本$z$,通过一个确定性函数$f(\cdot)$可以把$z$映射到另一分布。这种采样方法也称之为逆变换采样。 对一个随机变量X,它的累计分布函数, $$F(x)=P(X\leq x)=\int_{-\inf}^x p(x) dx $$ 假如存在严格单调递增函数$T: [0,1] \rightarrow R$,我们可以把0,1间的均匀分布$U$映射到实数轴上,让$T(U)=X$,所以, $$F(x)=P(X\leq x)=P(T(U)\leq x)=P(U\leq T^{-1}(x))$$ 又因为$U$的累计分布在0,1区间就是$P(U\leq u)=u$,所以上式变为$F(x)=T^{-1}(x)$,可推出$F^{-1}(u) = T(u)$,即$F^{-1}(u)=x$ 所以我们可以通过从均匀分布采样来得到其他分布的采样点。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up