讨论 2020-10-29 = ###### tags: `tutorials` `Fudan` `2020` # 经典模型及算法导览 (一) ## Variational Auto Encoder(VAE) VAE是一个我个人很喜欢的生成模型,我认为在很多方面它都是优于GAN和Normalizing flow的,但本次我们不深入这个话题。以VAE本身的推导和介绍为主。 首先,与所有生成模型一样,VAE试图找到一种方式来建模$P(X)$,即数据分布,更具体来讲,我们希望找到一种方式,可以不停的从$P(X)$采样出数据点。而VAE是通过分布变换来实现这样一点的,分布变换指的是从一个分布中采样得到一个样本$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区间就是$F(u)=u$,所以上式变为$F(x)=T^{-1}(x)$,可推出$F^{-1}(u) = T(u)$,即$F^{-1}(u)=x$ 所以我们可以通过从均匀分布采样来得到任意分布的采样点。 VAE的目标就是通过auto encoder的形式,找到这个映射函数。 ### 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$的选取是非常重要的。 ### 先验分布 很多工作假设$P(z)$为标准正态分布,这个假设可以这样理解, $$P(z) \sim N(0,1), P(z)=\sum_x P(z,x)=\sum_x P(z|x)P(x)=\mathbb{E}_x P(z|x) $$ 也就是说我们需要数据集所对应的z满足标准正态分布,而不是每一个样本点。 另外P(z)可以任意选择,甚至是带参数,可学习的。 ### mini-batch 上述推导中没有涉及数据集的问题,实际上,我们要求的不是 $\max P(x)$而是$\max \frac{1}{N} \sum_x P(x)$. 所以相应的VAE目标为 \begin{align} \max \quad & \frac{1}{N}\sum_x [\mathbb{E}_{z \sim Q(z|x)} \log P(x|z) - \mathrm{KL}(Q(z|x)||P(z))] \\ \max \quad & \frac{1}{N}\sum_x \mathbb{E}_{z \sim Q(z|x)} \log P(x|z) - \frac{1}{N}\sum_x \mathrm{KL}(Q(z|x)||P(z))] \end{align} 我们可以看到,当使用SGD方法时,对前后两项的估计可能误差是不一样的,所以当batch size很小时,会增加一个对KL项的额外系数,让其在整个epoch上和为1. ### VAE解释1 VAE的第一种解释是噪声信道,Encoder $Q(z|x)$的输出会经过一个噪声信道,传递给 Decoder $P(x|z)$,而KL项决定了噪声的强弱。 ### VAE解释2 VAE追求最小表示,不论z的维度设定为多少,KL项会使model用尽量少的表达能力去传递信号。这等同于用最小的维度来传递信息,因为可以找到一种映射方法,让某一些维度尽量稳定来高效的传递信息,而让其他维度贴近噪声分布。 ### 两种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)$
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.