Loading

VAE的实现及其原理分析

VAE的实现及其原理分析

[[2021-09-20]] 需要补全 对VAE的分析和介绍
[[VAE 推导]]

模型总结

  1. VAE 构建了编码器encoder和解码器decoder, 可与GAN对比理解
  2. encoder的作用是训练出一个能够生成正态分布参数\(\mu\), log\(\sigma^{2}\) 的神经网络
  3. 通过encoder产生的正态分布\(N_{e}\),利用重采样产生\(x\sim N(0,1)\), 继而可以获得\(N_{e}\)对应的隐变量\(z\)
  4. 上述步骤中,我们获得了隐变量\(z\)以及该隐变量所在的正态分布\(N_{e}\)的参数
  5. decoder的作用是训练一个能够解码隐变量的正态分布参数的神经网络, decoder并没有刻意的训练均值\(\mu\), 与对数方差log\(\sigma^{2}\) , 解码过程包含在decoder的整个过程中
  6. 整个过程中, encoder与decoder并没有直接产生符合要求的数据,而是产生符合采样点所在的分布概率根据相对应的变换,得到隐变量与解码隐变量的参数,继而得到目的数据

VAE的模型实现

  1. 构建编码器与解码器
  2. 编码器捕获数据的特征分布,即给定每一个样本点刻画该样本所在正态分布的均值和方差
  3. 解码器将生成结果与真实结果对比,通过神经网络直接还原样本
  4. 重参化技巧用于从隐空间中生成样本,该技巧使得Encoder可以被训练
  5. 具体实现参见Zhihu原帖
    VAE模型实现

损失函数

  1. 重构损失 reconstruction loss [[交叉熵]]
    1. \(loss_{reconstruction} = \mathbb{E}_{z \sim q (z|x)}\log P(x|z)\)
  2. KL 散度损失
    1. \(loss = 0.5 * \sum( \mu^2 + \sigma^2 - \log(\sigma^2) - 1 )\)

实际上,对于重构误差的计算,我们经常将其以下面的式子进行计算:
binary_crossentropy(x, x_output), where x and x_output is input and output of autoencoder respectively.

以最常见的分子生成为例,我们需要生成符合目标条件的特征分布,这个特征分布被认为是隐变量\(z\),在此阶段,是为了获得其分布。所以 encoder

重参化技巧 Reparameterization Trick

为了能够从Encoder的返回的均值和方差中采样得到\(z\), 即\(z \sim p(z|X_k)\), 采样得到一个新的\(z\)
我们知道, 分布\(p(z|X_k)\)属于正态分布,但是均值\(\mu\), 方差\(log\sigma^2\)都是靠模型算出来的,我们要靠这个过程反过来优化均值方差的模型,但是“采样”这个操作是不可导的,而采样的结果是可导的。
\(N(\mu,\sigma2)\)中采样一个\(z\),相当于从\(N(0,I)\)中采样一个\(\epsilon\),然后让\(z =\epsilon \times \sigma + \mu\) 。将标准正态分布\(x \sim N(0,1)\) 转换为均值为\(\mu\), 方差为\(\sigma\)的正态分布\(x \sim N(\mu,\sigma^{2})\), 转化过程即为\(z =\epsilon \times \sigma + \mu\)标准正态分布与一般正态分布转换

原理分析

如果需要从一堆样本中生成与这些样本相似的新样本,我们该如何做?我们期望这些新样本的外观与性质与原样本相似,也可以认为他们符合同一特征分布,我们可以将这个无法被明确表达的特征分布称之为隐变量,这个是代码中出现的以latent开头的所有变量的本意,隐藏的难以被发现的却有存在的能够描述样本某些性质特征的一个变量。通常隐变量以字母\(z\)代替。

生成新的样本,也就是获得样本的真实分布\(P(x)\),局限于我们能收集得到的样本,我们只能得到样本的实际分布\(P(x|z)\), 然而受限于自然界中的各种因素,如观测误差,计算误差等,我们只能希望得到一个无比接近实际分布的可求解分布\(q(x|z)\), 所以,基于生成模型的本质便在于寻找这样的分布\(q\).

我们引入KL散度(\(KL \space Divergence\))这一概念,KL散度\((KL \space Divergence)\)是用来衡量两个分布是否相似的一个统计值:

\[KL(p(x)||q(x)) = \int p(x) \ln \frac{p(x)}{q(x)}\mathbf{d}x \]

%% 整个证明过程暂时忽略 %%

  1. KL 散度为非负数
  2. 为了获得\(P(x)\), 证据下界evidence lower bounder (ELBO)

\[\begin{aligned} D_{K L}\left(q_{\phi}(Z \mid X)|| p_{\phi}(Z \mid X)\right) &=\sum_{i=1}^{N}\left[q_{\phi}(Z \mid X) \log \left(q_{\phi}(Z \mid X)\right)-q_{\phi}(Z \mid X) \log \left(p_{\phi}(Z \mid X)\right)\right] \\ &=\int q_{\phi}(Z \mid X) \log \frac{q_{\phi}(Z \mid X)}{p_{\phi}(Z \mid X)} d Z \\ &=\int q_{\phi}(Z \mid X) \log q_{\phi}(Z \mid X) d Z-\int q_{\phi}(Z \mid X) \log p_{\phi}(Z \mid X) d Z \\ &=\mathbb{E}_{q}\left[\log q_{\phi}(Z \mid X)\right]-\mathbb{E}_{q}\left[\log p_{\phi}(Z \mid X)\right] \\ &=\mathbb{E}_{q}\left[\log q_{\phi}(Z \mid X)\right]-\mathbb{E}_{q}\left[\log \frac{p_{\phi}(Z, X)}{p_{\phi}(X)}\right] \\ &=\mathbb{E}_{q}\left[\log q_{\phi}(Z \mid X)\right]-\mathbb{E}_{q}\left[\log p_{\phi}(Z, X)\right]+\mathbb{E}_{q}\left[\log p_{\phi}(X)\right] \\ &=\mathbb{E}_{q}\left[\log q_{\phi}(Z \mid X)\right]-\mathbb{E}_{q}\left[\log p_{\phi}(Z, X)\right]+\log p_{\phi}(X) \end{aligned}\]

\(\log p_{\phi}(X) = D_{K L}(q_{\phi}(Z \mid X)|| p_{\phi}(Z \mid X)) -(\mathbb{E}_{q}\left[\log q_{\phi}(Z \mid X)\right]-\mathbb{E}_{q}\left[\log p_{\phi}(Z, X)\right])\)

真实分布\(\log p_{\phi}(X)\)应为一常数,由于KL散度始终非负,如果构造的分布\(\log q_{\phi}\)和真实分布\(\log p_{\phi}\)十分接近,那么\(D_{KL} \approx 0\)

则满足

\[\begin{aligned} \log p_{\phi}(X) &= \mathbb{E}_{q}\left[\log q_{\phi}(Z \mid X)\right]-\mathbb{E}_{q}\left[\log p_{\phi}(Z, X)\right] + D_{KL} \\ &\ge \mathbb{E}_{q}\left[\log q_{\phi}(Z \mid X)\right]-\mathbb{E}_{q}\left[\log p_{\phi}(Z, X)\right] \end{aligned} \]

我们称 \(\mathbb{E}_{q}[\log q_{\phi}(Z \mid X)-\log p_{\phi}(Z, X)]\)为证据下界,记作ELBO

\[\log P(x) - \mathbf{D}[Q(z|X)||P(z|X)] = \mathbb{E}_{z \sim Q}[\log P(X|z)] - \mathbf{D}[Q(z|X)||P(z)] \]

posted @ 2022-10-09 13:26  MarkL124950  阅读(203)  评论(0)    收藏  举报