显示页面讨论过去修订反向链接回到顶部 本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。 ====== 第九章 生成模型 ====== ===== 1. 概念定义与原理讲解 ===== ==== 1.1 生成模型概述 ==== **判别模型与生成模型** 机器学习模型可以分为两大类: **判别模型(Discriminative Models)**: - 学习目标:$P(Y|X)$,即在给定输入$X$条件下输出$Y$的概率 - 关注决策边界,直接建模类别之间的区分 - 典型代表:逻辑回归、SVM、神经网络分类器 **生成模型(Generative Models)**: - 学习目标:$P(X)$或$P(X|Y)$,即数据的分布 - 通过学习数据分布,可以生成新的、相似的数据样本 - 典型代表:朴素贝叶斯、高斯混合模型、VAE、GAN、扩散模型 **生成模型的核心任务** 1. **密度估计**:学习数据的概率分布$P(X)$ 2. **样本生成**:从学习的分布中采样新数据 3. **隐表示学习**:发现数据的低维潜在结构 **生成模型的应用** - **图像生成**:人脸生成、艺术创作、图像修复 - **文本生成**:对话系统、文章写作、代码生成 - **音频生成**:音乐创作、语音合成 - **药物设计**:分子生成 - **数据增强**:扩充训练数据集 ==== 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)或光栅扫描顺序分解。 **特点**: - 建模精确,似然可精确计算 - 生成需要按顺序逐个采样,速度较慢 - 典型模型: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 变分自编码器(Variational Autoencoder, VAE) ==== **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包含两项: - **重构项**(期望对数似然): - 衡量解码器从$z$重建$x$的能力 - 类似于自编码器的重构损失 - **KL散度项**: - 使近似后验接近先验$P(z)$(通常为标准正态) - 充当正则化,防止后验塌陷 **为什么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 生成对抗网络(Generative Adversarial Networks, GAN) ==== **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的训练技巧与挑战** **训练挑战**: - **模式塌陷(Mode Collapse)**: - 生成器只生成少数几类样本 - 判别器对某些模式过强,生成器放弃这些模式 - **训练不稳定**: - 生成器和判别器需要平衡 - 一方过强会导致另一方梯度消失 - **评估困难**: - 没有显式的似然函数 - 难以量化生成质量 **训练技巧**: **标签平滑**: - 将真实标签从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 扩散模型(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$接近纯噪声。 **关键性质**: - 可以直接采样任意时刻$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 流模型(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|$$ **关键要求**: - 变换$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.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)$ ===== 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))$$ **两项含义**: - **重构项**:$\mathbb{E}[\log p_\theta(x|z)]$ - 表示从潜在变量$z$重建输入$x$的能力 - 类似于自编码器的重构损失 - 鼓励生成的数据接近真实数据 - **KL散度项**:$D_{KL}(q_\phi(z|x) || p(z))$ - 使编码器输出接近先验分布(通常是标准正态) - 正则化项,防止后验分布过于分散或集中 - 确保潜在空间的连续性和完整性 **结论**: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$)时,达到全局最优。 **分析**: - 这为GAN的训练提供了理论保证 - 但在实践中,JS散度在分布不重叠时梯度消失 - 这是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衰减到约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$,这与理论一致。 ===== 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%的强度,其余变为噪声。 登录 Detach Close 该主题尚不存在 您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。 深度学习/生成模型.txt 最后更改: 2026/03/02 22:41由 张叶安 登录