变分自编码器(VAE)的原理与推断生成过程
字数 2667 2025-11-04 20:47:20
变分自编码器(VAE)的原理与推断生成过程
题目描述
变分自编码器(Variational Autoencoder, VAE)是一种结合了深度学习和变分推断的生成模型。它的目标是从观测数据(如图像)中学习数据的潜在结构,并能够生成新的、与原始数据相似的数据样本。与传统的自编码器不同,VAE不仅学习数据的压缩表示(编码),还学习潜在空间的概率分布,从而支持有意义的采样和生成。
解题过程
-
问题建模
- 假设我们有一个数据集 \(\mathbf{X} = \{ \mathbf{x}^{(1)}, \mathbf{x}^{(2)}, \dots, \mathbf{x}^{(N)} \}\),其中每个 \(\mathbf{x}\) 是一个数据点(如一张图片的像素向量)。
- VAE假设每个数据点 \(\mathbf{x}\) 是由某个未观察到的潜在变量 \(\mathbf{z}\) 生成的。生成过程是:先从先验分布 \(p(\mathbf{z})\)(通常为标准正态分布 \(\mathcal{N}(0, I)\))中采样一个潜在变量 \(\mathbf{z}\),然后通过条件分布 \(p_{\theta}(\mathbf{x} | \mathbf{z})\)(由解码器网络参数化)生成 \(\mathbf{x}\)。
- 我们的目标是学习生成模型的参数 \(\theta\),使得似然 \(p_{\theta}(\mathbf{x}) = \int p_{\theta}(\mathbf{x} | \mathbf{z}) p(\mathbf{z}) d\mathbf{z}\) 尽可能大。但由于积分难处理,直接优化似然困难。
-
变分下界(ELBO)的推导
- 引入一个近似后验分布 \(q_{\phi}(\mathbf{z} | \mathbf{x})\)(由编码器网络参数化),来逼近真实后验 \(p_{\theta}(\mathbf{z} | \mathbf{x})\)。
- 通过变分推断,我们可以推导出对数似然的证据下界(ELBO):
\[ \log p_{\theta}(\mathbf{x}) \geq \mathbb{E}_{q_{\phi}(\mathbf{z} | \mathbf{x})} \left[ \log p_{\theta}(\mathbf{x} | \mathbf{z}) \right] - D_{\text{KL}} \left( q_{\phi}(\mathbf{z} | \mathbf{x}) \| p(\mathbf{z}) \right) = \text{ELBO}(\theta, \phi; \mathbf{x}) \]
- 其中:
- 第一项是重构损失,衡量解码器从潜在变量 \(\mathbf{z}\) 重构数据 \(\mathbf{x}\) 的能力。
- 第二项是KL散度,约束近似后验 \(q_{\phi}(\mathbf{z} | \mathbf{x})\) 接近先验 \(p(\mathbf{z})\),起到正则化作用。
-
网络结构设计
- 编码器(推断网络):输入数据 \(\mathbf{x}\),输出近似后验 \(q_{\phi}(\mathbf{z} | \mathbf{x})\) 的参数。通常假设 \(q_{\phi}(\mathbf{z} | \mathbf{x}) = \mathcal{N}(\mathbf{z}; \mu_{\phi}(\mathbf{x}), \sigma_{\phi}^2(\mathbf{x}) I)\),因此编码器输出均值 \(\mu_{\phi}\) 和方差 \(\sigma_{\phi}^2\)。
- 解码器(生成网络):输入潜在变量 \(\mathbf{z}\),输出生成分布 \(p_{\theta}(\mathbf{x} | \mathbf{z})\) 的参数。对于二值数据(如MNIST),常用伯努利分布,解码器输出每个像素的激活概率;对于连续数据,可用高斯分布。
-
重参数化技巧
- 为了通过随机梯度下降优化ELBO,需要处理采样操作 \(\mathbf{z} \sim q_{\phi}(\mathbf{z} | \mathbf{x})\) 的梯度问题。
- 重参数化将采样过程分解为确定性部分和随机部分:令 \(\mathbf{z} = \mu_{\phi}(\mathbf{x}) + \sigma_{\phi}(\mathbf{x}) \odot \epsilon\),其中 \(\epsilon \sim \mathcal{N}(0, I)\)。这样梯度可以回传到编码器的参数 \(\phi\)。
-
训练过程
- 对每个数据点 \(\mathbf{x}\):
- 编码器计算 \(\mu_{\phi}(\mathbf{x})\) 和 \(\sigma_{\phi}(\mathbf{x})\)。
- 通过重参数化采样 \(\mathbf{z} = \mu_{\phi}(\mathbf{x}) + \sigma_{\phi}(\mathbf{x}) \odot \epsilon\)。
- 解码器从 \(\mathbf{z}\) 重构 \(\mathbf{x}'\),计算重构损失(如二元交叉熵)。
- 计算KL散度 \(D_{\text{KL}}(q_{\phi} \| p)\),通常有解析解(如高斯之间的KL散度)。
- 最大化ELBO等价于最小化损失函数:\(\mathcal{L} = -\text{重构项} + \text{KL项}\)。
- 对每个数据点 \(\mathbf{x}\):
-
生成新样本
- 训练完成后,从先验 \(p(\mathbf{z}) = \mathcal{N}(0, I)\) 中采样一个随机向量 \(\mathbf{z}\)。
- 输入解码器,直接生成新的数据样本 \(\mathbf{x} \sim p_{\theta}(\mathbf{x} | \mathbf{z})\)。
关键点总结
- VAE通过变分下界避免难处理的积分,将生成问题转化为优化问题。
- 编码器-解码器结构结合重参数化,使模型可端到端训练。
- KL散度项确保潜在空间有良好结构(如连续性),支持语义插值和生成。