---
# System prepended metadata

title: 讨论 2022-11-01

---

讨论 2022-11-01
=

## 生成模型与概率图模型（一）

首先，生成模型试图找到一种方式来建模$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区间就是$F(u)=u$，所以上式变为$F(x)=T^{-1}(x)$,可推出$F^{-1}(u) = T(u)$，即$F^{-1}(u)=x$
所以我们可以通过从均匀分布采样来得到任意分布的采样点。

### Generative Adversarial Network (GAN)
GAN模型是生成模型，其目的是通过逆变换采样，把已知的噪声样本映射到数据样本，GAN通过一个博弈游戏来找到最合适的映射。简单来说，GAN设定了两个角色，一个是造假者，一个是审查者，造假者需要尽可能地骗过审查者，而审查者需要尽可能分辨真伪。而造假者就是我们最终要的生成器。具体形式如下

$$ \mathrm{argmin}_\theta \mathrm{argmax}_\phi \mathbb{E}_{z\sim P_{data}} \log D_\phi(z) + \mathbb{E}_{z\sim P_\theta} \log (1-D_\phi(z)), \quad P_\theta(z) = P(z=G(z';\theta)),z'\sim N(0,1) $$
其中G，D是两个模型，对应造假者和审查者。简单分析上式，不难发现D的最优取值是$\frac{P_{data}}{P_{data}+P_\theta}$
当D是唯一变量时，对原式求导即可得到。
\begin{align}
& \mathbb{E}_{z\sim P_{data}} \log D(z) + \mathbb{E}_{z\sim P_\theta} \log (1-D(z)) \\
= & \sum_z P_{data}(z) \log D(z) + P_\theta(z) \log (1-D(z)) \\
\nabla_{D(z)} = &  P_{data}(z) \frac{1}{D(z)} + P_\theta(z)\frac{1}{1-D(z)} * (-1) = 0 \\
& P_{data}(z) \frac{1}{D(z)} = P_\theta(z) \frac{1}{1-D(z)} \\
& D(z) = \frac{P_{data}(z)}{P_{data}(z)+P_\theta(z)} 
\end{align}

此时，再将D的最优值代回原式，可得
$$ \mathbb{E}_{z\sim P_{data}} \log \frac{P_{data}}{P_{data}+P_\theta} + \mathbb{E}_{z\sim P_\theta} \log (1-\frac{P_{data}}{P_{data}+P_\theta}) $$
显然，$P_{data} = P_\theta$时，上式最大，为$-\log2-\log2 = -\log4$，我们之后在把原式减去$-\log4$得
\begin{gather}
\mathbb{E}_{z\sim P_{data}} \log \frac{P_{data}}{P_{data}+P_\theta} + \mathbb{E}_{z\sim P_\theta} \log (1-\frac{P_{data}}{P_{data}+P_\theta}) -(-\log4) \\
= \mathbb{E}_{z\sim P_{data}} \log \frac{2P_{data}}{P_{data}+P_\theta} + \mathbb{E}_{z\sim P_\theta} \log (\frac{2P_\theta}{P_{data}+P_\theta}) \\
= \mathrm{KL}(P_{data}|\frac{P_{data}+P_\theta}{2})+\mathrm{KL}(P_\theta|\frac{P_{data}+P_\theta}{2}) \\
= 2\mathrm{JSD}(P_{data}||P_\theta)
\end{gather}
所以最优的D其实是$2\mathrm{JSD}(P_{data}||P_\theta)-\log4$
由此可以看出GAN为什么有效，它本质上拉近了数据分布和生成分布之间的JSD距离，这是非常合理的，也是生成模型的一大追求。但需要注意的是只有在D取最优值时，它才度量了JSD距离，如果不是最优，没有任何保证。所以GAN的收敛性也是假定每步D先收敛到最优，G再收敛，如此迭代直到二者平衡。在实际中，我们也要保证D的学习略快于G，才能提供良好的学习信号。

## Variational Auto Encoder（VAE）

VAE的目标就是通过auto encoder的形式，找到逆变换采样所需的映射函数。它的核心想法是引入一个隐变量，Z，把对X的直接估计，转换为估计$P(X|Z)$

### 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$的选取是非常重要的。

### VAE解释1
VAE的第一种解释是噪声信道，Encoder $Q(z|x)$的输出会经过一个噪声信道，传递给 Decoder $P(x|z)$，而KL项决定了噪声的强弱。

### VAE解释2
VAE追求最小表示，不论z的维度设定为多少，KL项会使model用尽量少的表达能力去传递信号。这等同于用最小的维度来传递信息，因为可以找到一种映射方法，让某一些维度尽量稳定来高效的传递信息，而让其他维度贴近噪声分布。

### 两种collapse
一是KL项太大，model完全不使用z，二是KL项太小，decoder退化
 


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

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

### 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，不论它是什么，都可以联合学习。
