深度学习:生成模型

这是本文档旧的修订版!


第九章 生成模型

判别模型与生成模型

机器学习模型可以分为两大类:

判别模型(Discriminative Models): - 学习目标:$P(Y|X)$,即在给定输入$X$条件下输出$Y$的概率 - 关注决策边界,直接建模类别之间的区分 - 典型代表:逻辑回归、SVM、神经网络分类器

生成模型(Generative Models): - 学习目标:$P(X)$或$P(X|Y)$,即数据的分布 - 通过学习数据分布,可以生成新的、相似的数据样本 - 典型代表:朴素贝叶斯、高斯混合模型、VAE、GAN、扩散模型

生成模型的核心任务

1. 密度估计:学习数据的概率分布$P(X)$ 2. 样本生成:从学习的分布中采样新数据 3. 隐表示学习:发现数据的低维潜在结构

生成模型的应用

- 图像生成:人脸生成、艺术创作、图像修复 - 文本生成:对话系统、文章写作、代码生成 - 音频生成:音乐创作、语音合成 - 药物设计:分子生成 - 数据增强:扩充训练数据集

基本原理

自回归模型基于链式法则,将联合概率分解为条件概率的乘积:

$$P(x_1, x_2, ..., x_n) = P(x_1) \prod_{i=2}^n P(x_i | x_1, ..., x_{i-1})$$

对于图像,可以按扫描线顺序(如PixelCNN)或光栅扫描顺序分解。

特点: - 建模精确,似然可精确计算 - 生成需要按顺序逐个采样,速度较慢 - 典型模型:NADE、PixelCNN、PixelRNN、GPT

PixelCNN

PixelCNN使用掩码卷积确保每个像素只依赖已生成的像素:

$$p(x_i | x_1, ..., x_{i-1}) = \text{softmax}(f_i(x_1, ..., x_{i-1}))$$

掩码类型: - A型掩码:当前像素不包含在感受野内 - B型掩码:当前像素包含在感受野内

GPT系列

GPT将自回归思想应用于自然语言:

$$P(w_1, w_2, ..., w_n) = \prod_{i=1}^n P(w_i | w_1, ..., w_{i-1})$$

使用Transformer解码器作为基础架构,通过掩码自注意力实现自回归。

1.3.1 背景与动机

标准自编码器(Autoencoder)可以学习数据的压缩表示,但存在局限: - 编码器输出是确定性的点 - 潜在空间不连续,插值效果差 - 无法生成新样本(没有概率解释)

VAE将自编码器概率化,使潜在空间成为连续的概率分布。

1.3.2 VAE的基本结构

VAE包含两个核心组件:

编码器(推断网络):$q_\phi(z|x)$ - 将输入$x$映射到潜在变量$z$的后验分布 - 通常假设为高斯分布:$q_\phi(z|x) = \mathcal{N}(z; \mu_\phi(x), \sigma_\phi^2(x)I)$ - 输出均值$\mu$和方差$\sigma^2$

解码器(生成网络):$p_\theta(x|z)$ - 从潜在变量$z$重建输入$x$ - 根据数据类型选择分布(如图像用伯努利或高斯分布)

1.3.3 变分推断与ELBO

由于真实后验$P(z|x)$难以计算,VAE使用变分推断近似。

证据下界(Evidence Lower Bound, ELBO)

$$\mathcal{L}(\theta, \phi; x) = \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)] - D_{KL}(q_\phi(z|x) || p(z))$$

ELBO包含两项:

1. 重构项(期望对数似然):

  1. 衡量解码器从$z$重建$x$的能力
  2. 类似于自编码器的重构损失

2. KL散度项

  1. 使近似后验接近先验$P(z)$(通常为标准正态)
  2. 充当正则化,防止后验塌陷

为什么ELBO是下界

通过Jensen不等式可证明:

$$\log p(x) = \log \int p(x|z)p(z)dz \geq \mathbb{E}_{q(z|x)}[\log p(x|z)] - D_{KL}(q(z|x)||p(z))$$

最大化ELBO等价于最大化似然的下界。

1.3.4 重参数化技巧

直接从$q_\phi(z|x)$采样会导致梯度无法传播。重参数化技巧将随机性移到输入:

$$z = \mu_\phi(x) + \sigma_\phi(x) \odot \epsilon, \quad \epsilon \sim \mathcal{N}(0, I)$$

这样$z$对$\phi$可微,可以使用梯度下降优化。

1.3.5 VAE的训练与生成

训练过程: 1. 输入$x$经过编码器得到$\mu, \sigma$ 2. 使用重参数化技巧采样$z$ 3. 解码器从$z$重建$\hat{x}$ 4. 计算ELBO损失并反向传播

生成过程: 1. 从先验$P(z) = \mathcal{N}(0, I)$采样$z$ 2. 通过解码器生成$\hat{x} \sim p_\theta(x|z)$ 3. 可以在潜在空间插值,生成平滑过渡的样本

1.3.6 VAE的改进变体

β-VAE: - 在KL项前乘系数$\beta$ - $\beta > 1$增强解耦能力 - 代价是重构质量下降

条件VAE(CVAE): - 引入条件变量$c$(如类别标签) - $q_\phi(z|x, c)$和$p_\theta(x|z, c)$ - 可以生成指定类别的样本

VQ-VAE(Vector Quantized VAE): - 使用离散潜在空间 - 潜在变量从可学习的码本中选择 - 避免后验塌陷,生成质量更高

1.4.1 GAN的基本思想

GAN由Goodfellow于2014年提出,采用博弈论框架,通过两个网络的对抗学习生成数据。

核心思想: - 生成器(Generator, G):学习从噪声$z$生成假样本$G(z)$ - 判别器(Discriminator, D):学习区分真实样本和生成样本 - 两者相互对抗,共同提升

1.4.2 GAN的数学框架

目标函数(极小极大博弈)

$$\min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}}[\log D(x)] + \mathbb{E}_{z \sim p_z}[\log(1 - D(G(z)))]$$

判别器的目标: - 对于真实样本$x$,最大化$\log D(x)$(使$D(x) \to 1$) - 对于生成样本$G(z)$,最大化$\log(1 - D(G(z)))$(使$D(G(z)) \to 0$)

生成器的目标: - 最小化$\log(1 - D(G(z)))$(使$D(G(z)) \to 1$,欺骗判别器)

1.4.3 理论分析

最优判别器

给定生成器$G$,最优判别器为:

$$D^*(x) = \frac{p_{data}(x)}{p_{data}(x) + p_g(x)}$$

其中$p_g$是生成样本的分布。

全局最优

当$p_g = p_{data}$时,达到全局最优: - $D^*(x) = 1/2$(无法区分真假) - 此时目标函数值为$-\log 4$

训练动态

理论证明,在适当条件下,GAN可以收敛到纳什均衡,生成器学到真实数据分布。

1.4.4 GAN的训练技巧与挑战

训练挑战

1. 模式塌陷(Mode Collapse)

  1. 生成器只生成少数几类样本
  2. 判别器对某些模式过强,生成器放弃这些模式

2. 训练不稳定

  1. 生成器和判别器需要平衡
  2. 一方过强会导致另一方梯度消失

3. 评估困难

  1. 没有显式的似然函数
  2. 难以量化生成质量

训练技巧

标签平滑: - 将真实标签从1改为0.9,假标签从0改为0.1 - 防止判别器过于自信

谱归一化(Spectral Normalization): - 限制判别器Lipschitz常数 - 提高训练稳定性

渐进式增长(Progressive Growing): - 从低分辨率开始,逐渐增加分辨率 - 稳定高分辨率图像生成

1.4.5 GAN的重要变体

DCGAN(Deep Convolutional GAN): - 首次成功将CNN用于GAN - 提出一系列架构设计准则 - 使用转置卷积进行上采样

条件GAN(cGAN): - 将类别信息$c$同时输入G和D - 可以生成指定类别的样本 - $G(z, c) \to x$,$D(x, c) \to [0, 1]$

WGAN(Wasserstein GAN): - 使用Wasserstein距离替代JS散度 - 解决梯度消失问题 - 判别器改为Critic,输出实数值

StyleGAN: - 引入风格迁移思想 - 解耦潜在空间的不同属性 - 高质量人脸生成

CycleGAN: - 无配对数据的图像到图像翻译 - 循环一致性损失 - 适用于风格转换、季节转换等

1.5.1 扩散过程的基本概念

扩散模型受到非平衡热力学启发,通过逐步添加和去除噪声学习数据分布。

前向扩散过程(加噪)

从数据$x_0$开始,逐步添加高斯噪声:

$$q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t I)$$

经过$T$步后,$x_T$接近纯噪声。

关键性质: - 可以直接采样任意时刻$t$的状态:

$$q(x_t | x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t}x_0, (1-\bar{\alpha}_t)I)$$
其中$\bar{\alpha}_t = \prod_{s=1}^t (1-\beta_s)$

1.5.2 反向去噪过程

学习目标是从噪声恢复数据:

$$p_\theta(x_{t-1} | x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta(x_t, t))$$

简化训练目标

DDPM(Denoising Diffusion Probabilistic Models)证明,可以训练神经网络$\epsilon_\theta$预测噪声:

$$\mathcal{L} = \mathbb{E}_{x_0, t, \epsilon}[||\epsilon - \epsilon_\theta(\sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon, t)||^2]$$

1.5.3 扩散模型的优势

1. 训练稳定:没有对抗训练,优化目标明确 2. 模式覆盖好:不容易出现模式塌陷 3. 生成质量高:在图像生成上超过GAN 4. 可扩展性强:容易扩展到条件生成、图像编辑

1.5.4 加速采样

原始扩散模型需要数千步去噪,采样速度慢。改进方法:

DDIM(Denoising Diffusion Implicit Models): - 将扩散过程视为隐式概率模型 - 可以少步采样(50步甚至更少)

蒸馏方法: - 学习学生模型直接预测多步结果 - Progressive Distillation、Consistency Models

潜在扩散模型(Latent Diffusion Models): - 在VAE的潜在空间进行扩散 - 大幅降低计算成本 - Stable Diffusion基于此

1.6.1 可逆变换与变量替换

流模型通过可逆神经网络学习从简单分布(如高斯)到数据分布的变换。

变量替换公式

设$z \sim p_Z(z)$,$x = f(z)$且$f$可逆,则:

$$p_X(x) = p_Z(f^{-1}(x)) \left| \det \frac{\partial f^{-1}(x)}{\partial x} \right|$$

关键要求: - 变换$f$必须可逆 - 雅可比行列式容易计算

1.6.2 标准化流(Normalizing Flows)

通过组合多个简单的可逆变换构建复杂变换:

$$z = f_K \circ f_{K-1} \circ ... \circ f_1(x)$$

对数似然:

$$\log p_X(x) = \log p_Z(z) + \sum_{i=1}^K \log \left| \det \frac{\partial f_i}{\partial z_{i-1}} \right|^{-1}$$

1.6.3 常用流架构

NICE/RealNVP: - 使用耦合层(Coupling Layer) - 一部分维度保持不变,用于变换另一部分 - 雅可比行列式为对角阵,容易计算

Glow: - 引入可学习的1×1卷积 - 高质量的图像生成

1.6.4 流模型的特点

优势: - 精确的对数似然计算 - 可逆,支持精确推断潜在变量 - 支持并行生成

局限: - 架构设计受限(必须可逆) - 通常参数量较大

1.7.1 定性评估

视觉检查: - 生成样本的视觉质量 - 多样性(避免模式塌陷)

插值: - 潜在空间插值的平滑性 - 反映潜在空间的连续性

1.7.2 定量评估

Inception Score (IS): - 基于预训练Inception网络 - 评估生成样本的质量和多样性 - $IS = \exp(\mathbb{E}_x D_{KL}(p(y|x) || p(y)))$

Fréchet Inception Distance (FID): - 比较真实和生成样本在特征空间的分布 - 计算两个高斯分布的Fréchet距离 - 越低越好,与视觉质量高度相关

精确率-召回率(Precision-Recall): - 精确率:生成样本中有多少是真实的 - 召回率:真实样本中有多少被生成覆盖 - 区分质量和多样性

对数似然: - 适用于VAE、流模型、自回归模型 - 在测试集上计算$\log p(x)$

题目:证明VAE的证据下界(ELBO)公式,并解释两项的含义。

分析过程

步骤1:从边际似然出发

$$\log p_\theta(x) = \log \int p_\theta(x|z)p(z)dz$$

步骤2:引入变分分布

乘以$\frac{q_\phi(z|x)}{q_\phi(z|x)} = 1$:

$$= \log \int p_\theta(x|z)p(z) \frac{q_\phi(z|x)}{q_\phi(z|x)} dz$$

$$= \log \mathbb{E}_{q_\phi(z|x)}\left[\frac{p_\theta(x|z)p(z)}{q_\phi(z|x)}\right]$$

步骤3:应用Jensen不等式

由于对数函数是凹函数,由Jensen不等式:

$$\log \mathbb{E}[X] \geq \mathbb{E}[\log X]$$

因此:

$$\log p_\theta(x) \geq \mathbb{E}_{q_\phi(z|x)}\left[\log \frac{p_\theta(x|z)p(z)}{q_\phi(z|x)}\right]$$

步骤4:分解

$$= \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)] + \mathbb{E}_{q_\phi(z|x)}\left[\log \frac{p(z)}{q_\phi(z|x)}\right]$$

$$= \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)] - D_{KL}(q_\phi(z|x) || p(z))$$

两项含义

1. 重构项:$\mathbb{E}[\log p_\theta(x|z)]$

  1. 表示从潜在变量$z$重建输入$x$的能力
  2. 类似于自编码器的重构损失
  3. 鼓励生成的数据接近真实数据

2. KL散度项:$D_{KL}(q_\phi(z|x) || p(z))$

  1. 使编码器输出接近先验分布(通常是标准正态)
  2. 正则化项,防止后验分布过于分散或集中
  3. 确保潜在空间的连续性和完整性

结论:ELBO是边际似然的下界,通过最大化ELBO,我们同时优化重构质量和潜在空间的正则化。

题目:分析GAN的目标函数,说明在最优判别器下生成器的优化目标等价于最小化什么散度。

分析过程

给定目标函数

$$V(D, G) = \mathbb{E}_{x \sim p_{data}}[\log D(x)] + \mathbb{E}_{z \sim p_z}[\log(1 - D(G(z)))]$$

步骤1:求最优判别器

对于固定的$G$,考虑单个样本$x$:

$$V(D, G) = \int p_{data}(x) \log D(x) dx + \int p_g(x) \log(1 - D(x)) dx$$

对$D(x)$求导并令为0:

$$\frac{\partial V}{\partial D(x)} = \frac{p_{data}(x)}{D(x)} - \frac{p_g(x)}{1-D(x)} = 0$$

解得:

$$D^*(x) = \frac{p_{data}(x)}{p_{data}(x) + p_g(x)}$$

步骤2:代入最优判别器

将$D^*$代入目标函数:

$$V(D^*, G) = \mathbb{E}_{x \sim p_{data}}\left[\log \frac{p_{data}(x)}{p_{data}(x) + p_g(x)}\right] + \mathbb{E}_{x \sim p_g}\left[\log \frac{p_g(x)}{p_{data}(x) + p_g(x)}\right]$$

步骤3:变形

注意到:

$$\frac{p_{data}}{p_{data} + p_g} = \frac{p_{data}/p_g}{p_{data}/p_g + 1} \cdot \frac{p_g}{p_g}$$

更直接的变形:

$$= \mathbb{E}_{p_{data}}\left[\log \frac{p_{data}}{(p_{data} + p_g)/2} - \log 2\right] + \mathbb{E}_{p_g}\left[\log \frac{p_g}{(p_{data} + p_g)/2} - \log 2\right]$$

$$= -\log 4 + KL(p_{data} || \frac{p_{data} + p_g}{2}) + KL(p_g || \frac{p_{data} + p_g}{2})$$

$$= -\log 4 + 2 \cdot JSD(p_{data} || p_g)$$

其中$JSD$是Jensen-Shannon散度:

$$JSD(P||Q) = \frac{1}{2}KL(P||M) + \frac{1}{2}KL(Q||M), \quad M = \frac{P+Q}{2}$$

结论

在最优判别器下,生成器的目标等价于最小化$p_{data}$和$p_g$之间的Jensen-Shannon散度。当$JSD = 0$(即$p_{data} = p_g$)时,达到全局最优。

分析: - 这为GAN的训练提供了理论保证 - 但在实践中,JS散度在分布不重叠时梯度消失 - 这是WGAN使用Wasserstein距离的动机

题目:在扩散模型中,已知$\beta_t = 0.01$对所有$t$,$\alpha_t = 1 - \beta_t = 0.99$。计算$\bar{\alpha}_t$以及$x_t$关于$x_0$的分布参数(设$x_0 = 1$,$t = 100$)。

分析过程

步骤1:计算$\bar{\alpha}_t$

$$\bar{\alpha}_t = \prod_{s=1}^t \alpha_s = \alpha^t = 0.99^t$$

对于$t = 100$:

$$\bar{\alpha}_{100} = 0.99^{100}$$

计算: $$\ln(\bar{\alpha}_{100}) = 100 \times \ln(0.99) = 100 \times (-0.01005) = -1.005$$ $$\bar{\alpha}_{100} = e^{-1.005} \approx 0.366$$

步骤2:计算分布参数

根据扩散模型的重参数化:

$$q(x_t | x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t}x_0, (1-\bar{\alpha}_t)I)$$

均值: $$\mu = \sqrt{\bar{\alpha}_t} \cdot x_0 = \sqrt{0.366} \times 1 \approx 0.605$$

方差: $$\sigma^2 = 1 - \bar{\alpha}_t = 1 - 0.366 = 0.634$$

标准差: $$\sigma = \sqrt{0.634} \approx 0.796$$

步骤3:解释

当$t = 100$时: - 均值从1衰减到约0.605 - 方差增加到0.634 - $x_t$的分布为$\mathcal{N}(0.605, 0.634)$

随着$t$增大: - $\bar{\alpha}_t \to 0$ - 均值$\to 0$ - 方差$\to 1$ - $x_t$趋近于标准正态分布(纯噪声)

验证: 当$t \to \infty$时,$0.99^t \to 0$,这与理论一致。

1. VAE中KL散度项的主要作用是:

 A. 提高重构质量
 B. 正则化潜在空间
 C. 加速训练
 D. 减少参数量

2. GAN训练中的“模式塌陷”是指:

 A. 判别器太强
 B. 生成器只生成少数几类样本
 C. 训练时间过长
 D. 内存不足

3. 扩散模型相比GAN的主要优势是:

 A. 训练速度更快
 B. 没有对抗训练,更稳定
 C. 参数量更少
 D. 不需要GPU

4. 自回归模型的主要局限是:

 A. 无法计算似然
 B. 生成需要按顺序进行,速度慢
 C. 只能生成图像
 D. 需要大量标注数据

5. 流模型的关键要求是:

 A. 神经网络必须可逆
 B. 必须使用卷积层
 C. 必须使用注意力机制
 D. 必须使用批归一化

6. VAE的ELBO包含项和项。

7. GAN由两个网络组成。

8. 扩散模型的前向过程逐步添加,反向过程学习

9. 评估生成模型质量的常用指标包括IS和

10. 重参数化技巧解决了VAE中的问题。

11. VAE:给定$q(z|x) = \mathcal{N}(0, 1)$,$p(z) = \mathcal{N}(0, 4)$,计算$KL(q||p)$。

12. GAN:若判别器对真实样本输出0.8,对生成样本输出0.3,计算判别器损失(假设各一个样本)。

13. 扩散模型:$\beta_t = 0.02$,$t = 50$,计算$\bar{\alpha}_t$(提示:$0.98^{50} \approx 0.364$)。

一、选择题答案:

1. 答案:B

 解析:KL散度使编码器输出接近先验分布,起到正则化作用,确保潜在空间连续完整。

2. 答案:B

 解析:模式塌陷是GAN的常见问题,生成器发现某些模式容易欺骗判别器后,就只生成这些模式。

3. 答案:B

 解析:扩散模型使用明确的去噪目标,没有对抗训练的不稳定性,训练更稳定。

4. 答案:B

 解析:自回归模型需要按顺序生成每个元素,无法并行,生成速度较慢。

5. 答案:A

 解析:流模型通过可逆变换学习数据分布,可逆性是计算精确似然的关键。

二、填空题答案:

6. 答案:重构;KL散度

 解析:ELBO = $\mathbb{E}[\log p(x|z)] - D_{KL}(q(z|x)||p(z))$

7. 答案:生成器(Generator);判别器(Discriminator)

 解析:GAN通过生成器和判别器的对抗学习生成数据。

8. 答案:噪声;去噪

 解析:前向过程加噪,反向过程学习从噪声恢复数据。

9. 答案:FID(或Fréchet Inception Distance)

 解析:FID是评估生成模型最常用的指标,计算特征空间的分布距离。

10. 答案:采样无法求梯度

  解析:重参数化将随机性移到输入,使得梯度可以反向传播。

三、计算题答案:

11. 解答:

  
  KL散度公式:$KL(\mathcal{N}(\mu_1, \sigma_1^2) || \mathcal{N}(\mu_2, \sigma_2^2)) = \log\frac{\sigma_2}{\sigma_1} + \frac{\sigma_1^2 + (\mu_1-\mu_2)^2}{2\sigma_2^2} - \frac{1}{2}$
  
  代入$\mu_1=0, \sigma_1=1, \mu_2=0, \sigma_2=2$:
  
  $= \log\frac{2}{1} + \frac{1 + 0}{2 \times 4} - \frac{1}{2}$
  
  $= 0.693 + 0.125 - 0.5$
  
  $= 0.318$

12. 解答:

  
  判别器损失:$L_D = -\log D(x_{real}) - \log(1 - D(x_{fake}))$
  
  $= -\log(0.8) - \log(1 - 0.3)$
  
  $= -(-0.223) - (-0.357)$
  
  $= 0.223 + 0.357$
  
  $= 0.580$

13. 解答:

  
  $\alpha_t = 1 - \beta_t = 0.98$
  
  $\bar{\alpha}_t = \alpha_t^t = 0.98^{50} \approx 0.364$
  
  这意味着经过50步扩散后,原始信号保留了约36.4%的强度,其余变为噪声。

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • 深度学习/生成模型.1772454553.txt.gz
  • 最后更改: 2026/03/02 20:29
  • 张叶安