VAE 原理
似然生成模型:给定一个数据集 $x_D$,训练使得模型最大化似然 $p_\phi(x_D)$。
1. ELBO 的定义和公式
VAE 的目标是对数据 $x$ 的分布 $p(x)$ 进行建模,但直接优化 $p(x)$ 通常不可行。通过引入潜变量 $z$,对对数边际似然 $\log p(x)$ 进行变分下界(ELBO)的近似:
$$ \log p(x) = \mathbb{E}_ {q_\phi(z|x)} \left[\log \frac{p(x, z)}{q_\phi(z|x)} \right] + \text{KL}\left[q_\phi(z|x) | p(z|x)\right] $$
- 第一项是 ELBO,即对 $\log p(x)$ 的下界:
$$ \text{ELBO} = \mathbb{E}_ {q_\phi(z|x)}[\log p(x, z) - \log q_\phi(z|x)] $$
- 第二项是 KL 散度,用于衡量模型 $q_\phi(z|x)$ 和真实后验 $p(z|x)$ 的差异。
2. ELBO 和 $\log p(x)$ 的关系
ELBO 是 $\log p(x)$ 的下界,差值由 KL 散度决定:
$$ \log p(x) - \text{ELBO} = \text{KL} \left[q_\phi(z|x) | p(z|x)\right] $$
如果 KL 散度为 0,意味着 $q_\phi(z|x) = p(z|x)$,此时 ELBO 与 $\log p(x)$ 相等。
3. 为什么优化 VAE 等价于最大化 ELBO?
VAE 的建模框架是通过 encoder(推断网络) $q_\phi(z|x)$ 和 decoder(生成网络) $p_\theta(x|z)$,学习数据 $x$ 与潜变量 $z$ 的关系。
- $q_\phi(z|x)$:近似 $p(z|x)$
- $p_\theta(x|z)$:从潜变量生成数据
通过最大化 ELBO:
- 第一项(重构误差): 提升模型 $p_\theta(x|z)$ 对数据的生成质量。
- 第二项(KL 散度): 减少 $q_\phi(z|x)$ 与真实分布 $p(z|x)$ 的偏差。
4. KL 散度的意义
- KL 散度反映了 encoder $q_\phi(z|x)$ 对真实后验 $p(z|x)$ 的拟合程度。
- 目标:最小化 KL 散度,使得 $q_\phi(z|x)$ 尽可能接近 $p(z|x)$。
- 限制:直接优化 KL 散度不可行,因为真实分布 $p(z|x)$ 是未知的。
5. VAE 优化的核心
- ELBO 最大化既可以:
- 提高生成器 $p_\theta(x|z)$ 的重构能力。
- 让推断器 $q_\phi(z|x)$ 更接近真实后验 $p(z|x)$。
这使得 VAE 能够有效学习数据的隐变量结构,完成生成与重构任务。
结论
VAE 的核心思想是通过最大化 ELBO,在生成数据 $x$ 和隐变量 $z$ 的关系中找到一个平衡:
- KL 散度最小化 → encoder 近似真实后验
- 重构误差最小化 → decoder 生成的样本逼近真实数据分布
ELBO(Evidence Lower Bound)
1. ELBO 的分解公式
通过链式法则和 KL 散度的定义,ELBO 被分解为两部分:
$$ \text{ELBO} = \mathbb{E}_ {q_\phi(z|x)}[\log p_\theta(x|z)] - D_\text{KL}[q_\phi(z|x) | p(z)] $$
第一项(Reconstruction Term):
$$ \mathbb{E}_ {q_\phi(z|x)}[\log p_\theta(x|z)] $$
- 表示从潜变量 $z$ 生成原始数据 $x$ 的能力。
- 目标是最大化重构概率,即让生成的 $x$ 尽可能接近原始数据。
第二项(Prior Matching Term):
$$ D_\text{KL}[q_\phi(z|x) | p(z)] $$
- 表示 encoder 生成的潜变量 $z$ 的分布 $q_\phi(z|x)$ 和先验分布 $p(z)$ 之间的差异。
- 目标是最小化 KL 散度,使得潜变量分布接近先验分布(通常是标准正态分布 $N(0, I)$)。
2. 两个部分的作用和优化目标
重构项(Reconstruction Term)
- 作用:
- 优化 decoder 的重构能力,确保从潜变量 $z$ 恢复出输入数据 $x$。
- 优化目标:
- 最大化 $\mathbb{E}_ {q_\phi(z|x)}[\log p_\theta(x|z)]$,提高生成质量。
先验匹配项(Prior Matching Term)
- 作用:
- 通过最小化 KL 散度,让 encoder 生成的潜变量分布 $q_\phi(z|x)$ 接近先验 $p(z)$。
- 优化目标:
- 最小化 $D_\text{KL}[q_\phi(z|x) | p(z)]$,确保隐变量空间的规范性。
3. 两部分如何协作?
- 重构项:优化生成能力(decoder)
- 先验匹配项:优化潜变量分布(encoder)
这两个部分是一个平衡过程:
- 重构能力越强,样本越真实。
- 潜变量越符合先验分布,生成过程越稳定且泛化能力更好。
4. 为什么需要先验匹配项?
如果去掉先验匹配项(KL 散度部分),VAE 会退化为普通自编码器(AE):
- AE 没有对潜变量空间进行规范化,生成器难以生成新样本。
- 只能进行重构,而无法作为生成模型使用。
5. 总结
VAE 的 ELBO 分解为:
- 重构项:提升生成器的质量。
- 先验匹配项:保证潜变量分布的规范性。
通过最大化 ELBO,VAE 在生成质量与潜变量空间规范性之间取得平衡。
重参数化技巧(Reparameterization Trick)
1. 定义
重参数化技巧是 VAE 中用于解决随机采样导致参数不可导的问题的方法。通过引入一个可分解的噪声变量,使采样过程对模型参数可导,从而支持梯度反传。
2. 为什么需要重参数化?
在 VAE 中,潜变量 $z$ 从正态分布中采样:
$$ z \sim \mathcal{N}(\mu_\phi(x), \sigma_\phi^2(x)) $$
直接采样会导致采样过程(包含参数 $\phi$)不可导,无法优化模型参数。
3. 实现方法
通过重参数化,将采样写成确定性变换:
$$ z = \mu_\phi(x) + \sigma_\phi(x) \cdot \epsilon $$
其中:
- $\mu_\phi(x)$:encoder 输出的均值
- $\sigma_\phi(x)$:encoder 输出的标准差
- $\epsilon \sim \mathcal{N}(0, I)$:从标准正态分布采样的独立噪声
关键点:
- 分离随机性与参数:随机性来自 $\epsilon$,与网络参数 $\phi$ 无关。
- 保持采样分布不变:经过变换后,$z$ 仍然符合原分布。
4. 好处
- 可导性:采样过程对参数可导。
- 优化效率:梯度计算高效。
- 灵活性:适用于任意可微分采样分布。
5. 过程总结
- Encoder:
- 输入 $x$,输出 $\mu_\phi(x)$ 和 $\sigma_\phi(x)$。
- 随机性分离:
- 采样 $\epsilon \sim \mathcal{N}(0, I)$。
- 计算 $z = \mu_\phi(x) + \sigma_\phi(x) \cdot \epsilon$。
- Decoder:
- 使用 $z$ 生成数据 $x$ 的重构结果。
6. 总结
重参数化技巧是 VAE 的核心步骤,通过可导变换解决采样带来的优化问题,使 VAE 既保留随机性又能高效训练。