---
# System prepended metadata

title: 讨论 2021-12-23
tags: [Fudan, '2021', tutorials]

---

讨论 2021-12-23
=

###### tags: `tutorials` `Fudan` `2021`

## 浅谈VAE和隐变量

隐变量的引入往往是为了拆分问题，把一个问题拆成两部分或多部分。把问题拆分本身并不直接带来好处，但往往可以让我们更好的利用先验知识。比如，我们有十个随机数生成器，每一个的规律都服从高斯分布，但我们不知道他们具体的参数，同时游戏规则是我们按泊松分布随机从十个生成器选一个，再利用它生成随机数。在一场景下，如果我们直接建模最后的随机数，其分布的形式并不好直接确定，但如果是两段式，那么我们很清楚，一段是泊松，一段是高斯，只要求解参数即可。

同样的，现实中，尤其是很多实际工程中，我们是知道各部分服从那种分布的，但整个系统中，和可能有一部分是未知的，或者多部分叠加后的形式很难确定。在这些情况下，问题拆分都是很有必要的。

## 隐变量
### HMM
![](https://i.imgur.com/i285IV7.png)

### RBM
![](https://i.imgur.com/zBZuonP.png)

### 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$
所以我们可以通过从均匀分布采样来得到其他分布的采样点。









