1. 简介 变分自编码器 (Variational Autoencoder, VAE) 是一种生成模型 (Generative Model),由 Kingma 和 Welling 于 2013 年提出。它巧妙地结合了深度学习(神经网络的拟合能力)和贝叶斯推断(概率统计理论)。
为什么我们需要 VAE?
普通的自编码器 (AE) 虽然能很好地进行数据压缩和特征提取,但在生成新数据方面存在缺陷:
AE 的局限性:AE 将输入映射为隐空间中一个固定的点(确定性映射)。其隐空间往往是不连续的(过拟合),这意味着如果你在隐空间中随机取一个点进行解码,生成的图像很可能是毫无意义的噪声。
VAE 的改进:VAE 将输入映射为隐空间中的一个概率分布(通常是高斯分布,概率性映射)。
核心思想
VAE 不再让编码器输出一个具体的向量 z z z ,而是输出该向量服从的分布参数(均值 μ \mu μ 和方差 σ 2 \sigma^2 σ 2 )。
Input x → Encoder Distributions ( μ , σ ) → Sample z → Decoder Reconstruction x ^ \text{Input } x \xrightarrow{\text{Encoder}} \text{Distributions } (\mu, \sigma) \xrightarrow{\text{Sample}} z \xrightarrow{\text{Decoder}} \text{Reconstruction } \hat{x} Input x Encoder Distributions ( μ , σ ) Sample z Decoder Reconstruction x ^ 这种做法带来了两个核心优势:
连续性 (Continuity):隐空间中相近的点解码出的结果也是相近的。
完备性 (Completeness):隐空间中的点都能解码出有意义的结果(通过 KL 散度约束实现)。
这使得 VAE 具备了生成能力:我们可以直接从标准正态分布 N ( 0 , 1 ) \mathcal{N}(0,1) N ( 0 , 1 ) 中采样 z z z ,然后通过解码器生成全新的样本。
2. AE AE就是一个编码器和一个解码器,编码器将输入映射到隐空间,解码器将隐空间映射回输入空间。
graph RL
B -->|"decoder(Generative Model)"| A
A((x)) -->|"encoder(Inference Model)"| B((z))
3. ELBO (Evidence Lower Bound) graph RL
B((z)) -->|"$$p(x|z)$$"| A((x))
A((x)) -->|"$$q_\phi(z|x)$$"| B((z))
如图的AE模型, ϕ \phi ϕ 是推断网络(Encoder)参数。
我们的优化目标是让样本在模型中的 似然(Likelihood) p ( x ) p(x) p ( x ) 极大化,而由于单调性,等价于让 证据(Evidence) log p ( x ) \log{p(x)} log p ( x ) 极大化。
一般来说 p(x) 有两种求法。一是通过联合概率的边缘化,
p ( x ) = ∫ p ( x , z ) d z p(x) = \int p(x,z) \,\mathop{}\!\mathrm{d}z p ( x ) = ∫ p ( x , z ) d z 二是利用贝叶斯公式,
p ( x ) = p ( x , z ) p ( z ∣ x ) p(x) = \frac{p(x,z)}{p(z|x)} p ( x ) = p ( z ∣ x ) p ( x , z ) 困难在于:
边缘化困难:对z积分在高维空间难以计算
后验未知:真实后验 p ( z ∣ x ) = p ( x , z ) / p ( x ) p(z|x) = p(x,z)/p(x) p ( z ∣ x ) = p ( x , z ) / p ( x ) 难以求得
所以我们需要一个代理目标,通过最大化代理目标来最大化优化目标。
这个代理目标就是 ELBO。ELBO的定义为
E q ϕ ( z ∣ x ) [ log p ( x , z ) q ϕ ( z ∣ x ) ] \mathbb{E}_{q_\phi(z|x)}[\log{\frac{p(x,z)}{q_\phi(z|x)}}] E q ϕ ( z ∣ x ) [ log q ϕ ( z ∣ x ) p ( x , z ) ] 要证明所谓ELBO确实是下界,这里给出两种方式。一是根据Jensen不等式,
log p ( x ) = log ∫ p ( x , z ) q ϕ ( z ∣ x ) q ϕ ( z ∣ x ) d z = log E q ϕ ( z ∣ x ) [ p ( x , z ) q ϕ ( z ∣ x ) ] (定义) ≥ E q ϕ ( z ∣ x ) [ log p ( x , z ) q ϕ ( z ∣ x ) ] (不等式) = ELBO (定义) \begin{aligned}
\log{p(x)} &= \log{\int{\frac{p(x,z)q_\phi(z|x)}{q_\phi(z|x)} \,\mathop{}\!\mathrm{d}z}} \\
&= \log{\mathbb{E}_{q_\phi(z|x)}[\frac{p(x,z)}{q_\phi(z|x)}]} && \text{(定义)} \\
&\ge \mathbb{E}_{q_\phi(z|x)}[\log{\frac{p(x,z)}{q_\phi(z|x)}}] && \text{(不等式)} \\
&= \text{ELBO} && \text{(定义)}
\end{aligned} log p ( x ) = log ∫ q ϕ ( z ∣ x ) p ( x , z ) q ϕ ( z ∣ x ) d z = log E q ϕ ( z ∣ x ) [ q ϕ ( z ∣ x ) p ( x , z ) ] ≥ E q ϕ ( z ∣ x ) [ log q ϕ ( z ∣ x ) p ( x , z ) ] = ELBO ( 定义 ) ( 不等式 ) ( 定义 ) 二是通过度量分布接近程度的 KL散度 D KL ( p ∣ ∣ q ) = E p ( x ) [ log p ( x ) q ( x ) ] ≥ 0 D_{\text{KL}}(p||q) = \mathbb{E}_{p(x)}[\log{\frac{p(x)}{q(x)}}] \ge 0 D KL ( p ∣∣ q ) = E p ( x ) [ log q ( x ) p ( x ) ] ≥ 0 ,如下
log p ( x ) = log p ( x ) ∫ q ϕ ( z ∣ x ) d z (乘以1) = ∫ log p ( x ) q ϕ ( z ∣ x ) d z (交换) = E q ϕ ( z ∣ x ) [ log p ( x ) ] (定义) = E q ϕ ( z ∣ x ) [ log p ( x , z ) p ( z ∣ x ) ] (贝叶斯) = E q ϕ ( z ∣ x ) [ log p ( x , z ) q ϕ ( z ∣ x ) + log q ϕ ( z ∣ x ) p ( z ∣ x ) ] (乘以1) = ELBO + D KL ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) (定义) ≥ ELBO \begin{aligned}
\log{p(x)} &= \log{p(x)}\int{q_\phi(z|x) \,\mathop{}\!\mathrm{d}z} && \text{(乘以1)} \\
&= \int{\log{p(x)}q_\phi(z|x) \,\mathop{}\!\mathrm{d}z} && \text{(交换)} \\
&= \mathbb{E}_{q_\phi(z|x)}[\log{p(x)}] && \text{(定义)} \\
&= \mathbb{E}_{q_\phi(z|x)}[\log{\frac{p(x,z)}{p(z|x)}}] && \text{(贝叶斯)} \\
&= \mathbb{E}_{q_\phi(z|x)}[\log{\frac{p(x,z)}{q_\phi(z|x)}} + \log{\frac{q_\phi(z|x)}{p(z|x)}}] && \text{(乘以1)} \\
&= \text{ELBO} + D_{\text{KL}}(q_\phi(z|x)||p(z|x)) && \text{(定义)} \\
&\ge \text{ELBO}
\end{aligned} log p ( x ) = log p ( x ) ∫ q ϕ ( z ∣ x ) d z = ∫ log p ( x ) q ϕ ( z ∣ x ) d z = E q ϕ ( z ∣ x ) [ log p ( x ) ] = E q ϕ ( z ∣ x ) [ log p ( z ∣ x ) p ( x , z ) ] = E q ϕ ( z ∣ x ) [ log q ϕ ( z ∣ x ) p ( x , z ) + log p ( z ∣ x ) q ϕ ( z ∣ x ) ] = ELBO + D KL ( q ϕ ( z ∣ x ) ∣∣ p ( z ∣ x )) ≥ ELBO ( 乘以 1) ( 交换 ) ( 定义 ) ( 贝叶斯 ) ( 乘以 1) ( 定义 ) 4. VAE graph RL
B((z)) -->|"$$p_\theta(x|z)$$"| A((x))
A((x)) -->|"$$q_\phi(z|x)$$"| B((z))
ϕ \phi ϕ 是推断网络(Encoder)参数, θ \theta θ 是生成网络(Decoder)参数, 变分
arg min θ , ϕ L ( θ , ϕ ; x ) < = > arg max θ , ϕ ELBO \argmin_{\theta,\phi}{\mathcal{L}(\theta,\phi;x)} <=> \argmax_{\theta,\phi}{\text{ELBO}} θ , ϕ arg min L ( θ , ϕ ; x ) <=> θ , ϕ arg max ELBO 而
ELBO = E q ϕ ( z ∣ x ) [ log p θ ( x , z ) q ϕ ( z ∣ x ) ] = E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z ) p ( z ) q ϕ ( z ∣ x ) ] = E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z ) ] − D KL ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) \begin{aligned}
\text{ELBO} &= \mathbb{E}_{q_\phi(z|x)}[\log{\frac{p_{\theta}(x,z)}{q_\phi(z|x)}}] \\
&= \mathbb{E}_{q_\phi(z|x)}[\log{\frac{p_{\theta}(x|z)p(z)}{q_\phi(z|x)}}] \\
&= \mathbb{E}_{q_\phi(z|x)}[\log{p_{\theta}(x|z)}] - D_{\text{KL}}(q_\phi(z|x)||p(z))
\end{aligned} ELBO = E q ϕ ( z ∣ x ) [ log q ϕ ( z ∣ x ) p θ ( x , z ) ] = E q ϕ ( z ∣ x ) [ log q ϕ ( z ∣ x ) p θ ( x ∣ z ) p ( z ) ] = E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z ) ] − D KL ( q ϕ ( z ∣ x ) ∣∣ p ( z )) 第一项是 Reconstruction Loss (重构误差) 的相反数,第二项是 Regularization Term (正则项)。最大化 ELBO 等价于 最小化 (重构误差 + KL散度)。
假定 KL散度项的两个分布服从正态分布,
q ϕ ( z ∣ x ) ∼ N ( μ ϕ ( x ) , σ ϕ 2 ( x ) I ) p ( z ) ∼ N ( 0 , 1 ) q_\phi(z|x) \sim \mathcal{N}(\mu_\phi(x), \sigma^2_\phi(x)I) \\
p(z) \sim \mathcal{N}(0,1) q ϕ ( z ∣ x ) ∼ N ( μ ϕ ( x ) , σ ϕ 2 ( x ) I ) p ( z ) ∼ N ( 0 , 1 ) 通过 蒙特卡洛法 求期望项;通过 重参数化 对 q ϕ ( z ∣ x ) q_\phi(z|x) q ϕ ( z ∣ x ) 采样,使得梯度可以传导回 μ ϕ \mu_\phi μ ϕ 和 σ ϕ \sigma_\phi σ ϕ (因为直接从 N ( μ ϕ ( x ) , σ ϕ 2 ( x ) I ) \mathcal{N}(\mu_\phi(x), \sigma^2_\phi(x)I) N ( μ ϕ ( x ) , σ ϕ 2 ( x ) I ) 采样 z z z 是一个随机过程,这个操作是不可导的)
z = μ ϕ ( x ) + σ ϕ ( x ) ε w h e r e ε ∼ N ( 0 , 1 ) z=\mu_\phi(x)+\sigma_\phi(x) \varepsilon ~~~~~where ~ \varepsilon \sim \mathcal{N}(0,1) z = μ ϕ ( x ) + σ ϕ ( x ) ε w h ere ε ∼ N ( 0 , 1 ) 因为 q q q 和 p p p 都是正态分布,可以推导出 KL 散度解析解:
D KL = − 1 2 ∑ ( 1 + log ( σ ϕ 2 ) − μ ϕ 2 − σ ϕ 2 ) D_{\text{KL}} = -\frac{1}{2} \sum (1 + \log(\sigma_\phi^2) - \mu_\phi^2 - \sigma_\phi^2) D KL = − 2 1 ∑ ( 1 + log ( σ ϕ 2 ) − μ ϕ 2 − σ ϕ 2 ) 损失函数的直观解释:
第一项 (Reconstruction): 希望解码出来的 x ^ \hat{x} x ^ 和输入 x x x 越像越好(对于高斯分布假设,这等价于 MSE Loss。另外,伯努利分布对应 Cross Entropy)。
第二项 (KL Divergence): 希望隐变量 z z z 的分布尽量接近标准正态分布 N ( 0 , 1 ) \mathcal{N}(0,1) N ( 0 , 1 ) ,防止模型“死记硬背”将每个数据点映射到离散的空间点,从而保证生成空间的连续性。
损失函数两项的对抗:
只重构不 KL: 模型退化为普通 AE,隐空间过拟合,不连续,无法生成新样本。
只 KL 不重构: q ( z ∣ x ) q(z|x) q ( z ∣ x ) 完美坍缩成 N ( 0 , 1 ) \mathcal{N}(0,1) N ( 0 , 1 ) ,编码器完全忽略输入 x x x ,解码器只能生成乱码。
VAE 的精髓: 在“还原输入”和“隐空间正则化”之间寻找平衡。
5.VAE的不足 VAE 生成的图像通常比较模糊,这是因为 MSE Loss 对高频细节不敏感,倾向于取平均值。VAE 建模的是单峰高斯分布。如果真实数据的分布是多峰的(Multimodal),比如一张图可能是“猫”也可能是“狗”,VAE 为了最大化似然,会在猫和狗的中间位置放置均值,导致生成出“像猫又像狗”的模糊图像。而 GAN (生成对抗网络) 没有显式的似然函数约束,可以自由地收敛到其中一个峰,因此更清晰
后验坍缩:有时候 Decoder 太强(尤其是自回归 Decoder,如 RNN/PixelCNN),它可能在训练时利用“教师强制(Teacher Forcing)”直接根据历史信息预测下一步,从而忽略隐变量 z z z 。这会导致:KL 散度接近 0: q ϕ ( z ∣ x ) q_\phi(z|x) q ϕ ( z ∣ x ) 退化为先验 p ( z ) p(z) p ( z ) 。失去表征能力: z z z 不再包含 x x x 的特定信息。结果:虽然训练 Loss 可能很低,但模型实际上变成了一个无条件的生成模型(Unconditional Generator),无法根据特定输入进行重构或属性编辑。
参考