目录

第九章 生成模型

1. 概念定义与原理讲解

1.1 生成模型概述

判别模型与生成模型

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

判别模型(Discriminative Models)

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

生成模型(Generative Models)

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

生成模型的核心任务

1. 密度估计:学习数据的概率分布$P(X)$

2. 样本生成:从学习的分布中采样新数据

3. 隐表示学习:发现数据的低维潜在结构

生成模型的应用

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

1.2 自回归模型(Autoregressive Models)

基本原理

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

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

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

特点

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

PixelCNN

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

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

掩码类型:

  1. A型掩码:当前像素不包含在感受野内
  2. 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 变分自编码器(Variational Autoencoder, VAE)

1.3.1 背景与动机

标准自编码器(Autoencoder)可以学习数据的压缩表示,但存在局限:

  1. 编码器输出是确定性的点
  2. 潜在空间不连续,插值效果差
  3. 无法生成新样本(没有概率解释)

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

1.3.2 VAE的基本结构

VAE包含两个核心组件:

编码器(推断网络):$q_\phi(z|x)$

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

解码器(生成网络):$p_\theta(x|z)$

  1. 从潜在变量$z$重建输入$x$
  2. 根据数据类型选择分布(如图像用伯努利或高斯分布)

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. 重构项(期望对数似然):
  2. 衡量解码器从$z$重建$x$的能力
  3. 类似于自编码器的重构损失
  1. KL散度项
  2. 使近似后验接近先验$P(z)$(通常为标准正态)
  3. 充当正则化,防止后验塌陷

为什么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

  1. 在KL项前乘系数$\beta$
  2. $\beta > 1$增强解耦能力
  3. 代价是重构质量下降

条件VAE(CVAE)

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

VQ-VAE(Vector Quantized VAE)

  1. 使用离散潜在空间
  2. 潜在变量从可学习的码本中选择
  3. 避免后验塌陷,生成质量更高

1.4 生成对抗网络(Generative Adversarial Networks, GAN)

1.4.1 GAN的基本思想

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

核心思想

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

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)))]$$

判别器的目标

  1. 对于真实样本$x$,最大化$\log D(x)$(使$D(x) \to 1$)
  2. 对于生成样本$G(z)$,最大化$\log(1 - D(G(z)))$(使$D(G(z)) \to 0$)

生成器的目标

  1. 最小化$\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}$时,达到全局最优:

  1. $D^*(x) = 1/2$(无法区分真假)
  2. 此时目标函数值为$-\log 4$

训练动态

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

1.4.4 GAN的训练技巧与挑战

训练挑战

  1. 模式塌陷(Mode Collapse)
    1. 生成器只生成少数几类样本
    2. 判别器对某些模式过强,生成器放弃这些模式
  1. 训练不稳定
    1. 生成器和判别器需要平衡
    2. 一方过强会导致另一方梯度消失
  1. 评估困难
    1. 没有显式的似然函数
    2. 难以量化生成质量

训练技巧

标签平滑

  1. 将真实标签从1改为0.9,假标签从0改为0.1
  2. 防止判别器过于自信

谱归一化(Spectral Normalization)

  1. 限制判别器Lipschitz常数
  2. 提高训练稳定性

渐进式增长(Progressive Growing)

  1. 从低分辨率开始,逐渐增加分辨率
  2. 稳定高分辨率图像生成

1.4.5 GAN的重要变体

DCGAN(Deep Convolutional GAN)

  1. 首次成功将CNN用于GAN
  2. 提出一系列架构设计准则
  3. 使用转置卷积进行上采样

条件GAN(cGAN)

  1. 将类别信息$c$同时输入G和D
  2. 可以生成指定类别的样本
  3. $G(z, c) \to x$,$D(x, c) \to [0, 1]$

WGAN(Wasserstein GAN)

  1. 使用Wasserstein距离替代JS散度
  2. 解决梯度消失问题
  3. 判别器改为Critic,输出实数值

StyleGAN

  1. 引入风格迁移思想
  2. 解耦潜在空间的不同属性
  3. 高质量人脸生成

CycleGAN

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

1.5 扩散模型(Diffusion Models)

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$接近纯噪声。

关键性质

  1. 可以直接采样任意时刻$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)

  1. 将扩散过程视为隐式概率模型
  2. 可以少步采样(50步甚至更少)

蒸馏方法

  1. 学习学生模型直接预测多步结果
  2. Progressive Distillation、Consistency Models

潜在扩散模型(Latent Diffusion Models)

  1. 在VAE的潜在空间进行扩散
  2. 大幅降低计算成本
  3. Stable Diffusion基于此

1.6 流模型(Flow-based Models)

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|$$

关键要求

  1. 变换$f$必须可逆
  2. 雅可比行列式容易计算

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

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

Glow

  1. 引入可学习的1×1卷积
  2. 高质量的图像生成

1.6.4 流模型的特点

优势:

  1. 精确的对数似然计算
  2. 可逆,支持精确推断潜在变量
  3. 支持并行生成

局限:

  1. 架构设计受限(必须可逆)
  2. 通常参数量较大

1.7 生成模型的评估

1.7.1 定性评估

视觉检查

  1. 生成样本的视觉质量
  2. 多样性(避免模式塌陷)

插值

  1. 潜在空间插值的平滑性
  2. 反映潜在空间的连续性

1.7.2 定量评估

Inception Score (IS)

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

Fréchet Inception Distance (FID)

  1. 比较真实和生成样本在特征空间的分布
  2. 计算两个高斯分布的Fréchet距离
  3. 越低越好,与视觉质量高度相关

精确率-召回率(Precision-Recall)

  1. 精确率:生成样本中有多少是真实的
  2. 召回率:真实样本中有多少被生成覆盖
  3. 区分质量和多样性

对数似然

  1. 适用于VAE、流模型、自回归模型
  2. 在测试集上计算$\log p(x)$

2. 例题分析

例题1:VAE的ELBO推导

题目:证明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. 鼓励生成的数据接近真实数据
  1. KL散度项:$D_{KL}(q_\phi(z|x) || p(z))$
    1. 使编码器输出接近先验分布(通常是标准正态)
    2. 正则化项,防止后验分布过于分散或集中
    3. 确保潜在空间的连续性和完整性

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

例题2:GAN目标函数分析

题目:分析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$)时,达到全局最优。

分析

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

例题3:扩散模型前向过程

题目:在扩散模型中,已知$\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. 均值从1衰减到约0.605
  2. 方差增加到0.634
  3. $x_t$的分布为$\mathcal{N}(0.605, 0.634)$

随着$t$增大:

  1. $\bar{\alpha}_t \to 0$
  2. 均值$\to 0$
  3. 方差$\to 1$
  4. $x_t$趋近于标准正态分布(纯噪声)

验证

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

3. 训练题

一、选择题

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$)。

4. 答案与解析

一、选择题答案:

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%的强度,其余变为噪声。