讨论 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
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