第一篇:生成模型总览与GAN基础
1.1 生成模型的核心思想
最大似然估计(Maximum Likelihood)是所有生成模型的核心思想。
-
核心目标:最大化观测数据的似然。
-
两种路径:
-
显式密度(如VAE):能计算 p(x),优化下界(ELBO)。
-
隐式密度(如GAN、扩散模型) :不计算 p(x)p(x) 的实际值,但可以从模型学习到的底层分布中采样(Sample)。
-
-
生成模型的核心难题:我们无法提前将先验分布 z 与数据 x 配对。所有生成模型都在寻找一种学习 z→x 关联的方法,即使我们在训练时不知道这种配对。
1.2 GAN的核心直觉
-
设定 :真实数据
。我们无法知道宇宙真实的
,只能构建一个近似的分布
。
-
引入潜变量 :从已知先验 p(z)(通常是标准正态分布 N(0,I)中采样 z。通过生成器 G(z) 将 z 映射到数据空间,生成假数据。生成器诱导的分布记为
。
-
对抗博弈 :引入判别器 D(x),判断输入是真实数据还是生成数据。
-
G的目标 :生成逼真样本,欺骗 D。
-
D的目标 :区分真实与伪造。
-
-
理想结果 :
完全逼近
,D无法判别(输出概率0.5)。
第二篇:GAN训练细节与数学原理
2.1 极小极大博弈 (Minimax Game)
目标函数(Value Function):
-
D的视角(最大化V):对真实数据 D(x)→1,对假数据 D(G(z))→0。
-
G的视角(最小化V):希望 D(G(z))→1,即让判别器认为假数据是真的。
2.2 理论最优解与梯度消失问题
-
最优判别器 (证明略):对于任何
,最优
。
-
全局最优 :当
时,
。
-
💡 为什么不能直接使用该损失函数?
-
在训练初期,G生成的图像极差,D能轻松区分真假。此时 D(G(z)) 接近 0。
-
观察曲线:当 D(G(z))→0 时,
的梯度趋近于 0,G无法获得有效梯度进行更新。
-
-
✅ 解决方案:修改G的损失函数
-
不再最小化 log(1−D(G(z))),而是最小化 −log(D(G(z)))。
-
两者在数学上等价(符号相反),但修改后的函数在 D(G(z))→0 时梯度极大,保证了训练初期的梯度流。
-
2.3 交替训练 (Alternating Gradient Updates)
代码逻辑(PyTorch 风格):
python
while True:
# 1. 更新判别器D
# 真实数据 D(x) 最大化 log D(x)
# 假数据 D(G(z)) 最大化 log(1 - D(G(z)))
# 在代码中通常是: loss_D = -torch.mean(torch.log(D(x)) + torch.log(1 - D(G(z))))
D = D + alpha_D * dV / dD
# 2. 更新生成器G
# 最小化 -log(D(G(z)))
G = G - alpha_G * dV / dG
- 注意 :GAN没有总的整体损失曲线可供观察,训练过程不稳定,有时完全无法收敛。
第三篇:GAN架构与特性
3.1 经典架构
-
DC-GAN (Deep Convolutional GAN):第一个在非玩具数据集上成功应用的GAN。G和D均为CNN,使用转置卷积进行上采样,去除池化层,使用BatchNorm。
-
StyleGAN (2019) :更加复杂的架构,核心是AdaIN (Adaptive Instance Normalization)。
-
公式:
。
-
Mapping Network:将潜变量 z 转换为风格向量 w,注入到网络的各个层(调整粗细粒度的风格),提升生成质量。
-
3.2 隐空间插值 (Latent Space Interpolation)
-
GAN的潜空间是平滑的(Smooth)。
-
给定两个潜向量 z0,z1,通过线性插值
得到过渡向量,并输入生成器
。
-
生成的图像(如狮子脸)会平滑过渡,这证明了GAN并非简单记忆数据,而是学到了连续的数据流形。
3.3 GAN总结与缺陷
-
优点:公式简单,图像质量极高。
-
缺点:
-
没有损失曲线,无法判断何时停止训练。
-
训练极不稳定,容易遭遇模式崩溃或梯度爆炸。
-
难以扩展到大规模模型和数据集。
-
模式崩溃(Mode Collapse):G可能只生成少数逼真样本(比如只有10张图),只要这些样本能骗过D即可。
-
无法反向映射:无法从图像 x 反推潜变量 z(而VAE可以)。
-
第四篇:扩散模型基础与 Rectified Flow
4.1 扩散模型直觉 (Diffusion Intuition)
-
不像GAN那样直接映射,而是通过逐步加噪-去噪的过程。
-
前向过程 :从真实数据 x0 开始,逐步添加高斯噪声,直到 t=1 时变为纯噪声
。
-
反向过程 :训练一个神经网络
来去除一点噪声。
-
推理(生成) :从纯噪声
开始,反复应用去噪网络,一步步生成干净图像 x0。
4.2 Rectified Flow(整流流,目前最主流的高效扩散形式)
-
定义 :在数据分布
和噪声分布
之间建立直接的线性路径。
-
训练过程:
-
采样
,
(高斯噪声),
。
-
构造含噪样本:
。(当 t=0 是干净数据,t=1 是纯噪声)
-
目标速度:v=z−x(指向从数据到噪声的方向)。
-
网络预测速度:
。
-
损失函数:
。
-
-
采样过程:
-
从噪声分布采样
。
-
从 t=1 迭代到 t=0(通常50步):
(沿着预测的 v 反方向移动)。
-
最终得到干净的 x0。
-
4.3 条件 Rectified Flow (Conditional Rectified Flow)
-
在训练时加入条件信息 y(如文本)。
-
网络变为
,目标是学习给定 y 的条件下,从噪声到图像的转换。
第五篇:条件生成与 Classifier-Free Guidance (CFG)
5.1 无分类器引导 (CFG)
核心问题 :如何控制模型生成内容与条件 yy 的贴合程度?
💡 训练阶段 :随机将条件 y 替换为 ∅(空条件 ,通常为一个可学习的嵌入),概率为 10% ~ 20%。这就让同一个模型既能生成有条件的,也能生成无条件的。
🚀 采样阶段 :
计算两个预测方向:
-
无条件速度:
-
有条件速度:
-
CFG 组合公式 :
-
理解:w 是引导强度(通常取 7.5 左右)。增大 w 使得生成方向远离无条件分布,更加强烈地指向条件分布。虽然能提升图像质量,但代价是降低多样性。
-
缺点:计算量增加一倍(每次采样需要推理两次)。
5.2 噪声调度 (Noise Schedules)
-
在训练时,t∼Uniform0,1 意味着所有噪声等级权重相等。
-
但在扩散中,中等的噪声(t=0.5t 附近)最难预测(高模糊度),而纯净的极值(t=0,1)很容易预测(就是各自的均值)。
-
改进 :使用 Logit-Normal Sampling 采样 t,给中间难度(t 在 0.4~0.6 之间)更高的训练权重。
-
高分辨率数据由于像素相关性更强,通常需要 偏向更高噪声 的调度。
第六篇:潜在扩散模型 (LDM) 与 DiT
6.1 LDM (Latent Diffusion Models)
由于直接在像素空间(如1024x1024x3)进行扩散成本极高,LDM 提出在潜空间进行扩散。
-
第一阶段(训练Encoder/Decoder):使用 VAE 或 VQ-GAN 将图像压缩到潜空间(例如下采样 8 倍,通道从3增加到16),潜空间大小为 128x128x16。
-
第二阶段(训练扩散模型) :冻结 Encoder/Decoder,只训练扩散模型去噪潜变量(DiT、UNet等)。
-
推理阶段:从标准高斯分布采样潜变量 -> 扩散模型去噪 -> 解码器重建高清图像。
- 现代 LDM 管线 :往往是
VAE + GAN + Diffusion的结合体,兼顾了图像细节与生成质量。
6.2 Diffusion Transformer (DiT)
传统扩散模型用 U-Net。DiT 直接将 Transformer 作为扩散模型的骨架。
-
条件注入机制:
-
In-context Conditioning(拼接):将时间戳 t 和标签 y 的嵌入直接拼接到输入序列中。
-
Cross-Attention(交叉注意力):将文本嵌入作为K, V,图像特征作为Q,进行交叉注意力。
-
AdaLN(自适应层归一化,最常用):预测缩放因子 γ 和偏移量 β,对 Transformer 的中间层进行调制:AdaLN(x)=γ(t,y)⊙LN(x)+β(t,y)。
-
6.3 文生图与文生视频 (Text-to-Image / Text-to-Video)
-
文生图 (FLUX):文本提示(如"埃菲尔铁塔前穿西装的猴子") -> 文本编码器(CLIP/T5) -> 生成潜变量 -> DiT 迭代去噪 -> 解码器生成 1024x1024 图像。
-
文生视频 (Meta MovieGen) :原理相同,但时空潜变量(如
32 x 128 x 72 x 16)复杂度暴增,需要处理时间和空间的双重维度(例如使用1x2x2patchify,将时空块视为token)。 -
视频扩散时间线(2024-2025):从 OpenAI Sora、Runway Gen3、快手可灵、Google Veo 2/3 到阿里 Wan,模型参数量从 4.6亿激增至 300亿,且趋向开源。
第七篇:扩散理论进阶与广义框架
7.1 广义扩散 (Generalized Diffusion)
统一的数学框架:
-
采样
。
-
构建含噪样本:
(a决定保留多少信号,b决定注入多少噪声)。
-
设置预测目标:
。
-
预测网络:
。
-
损失函数:
。
三种主流预测目标及其参数设定:
-
x-prediction :预测干净图像。设定
,即 c(t)=1,d(t)=0。
-
ε-prediction :预测加入的噪声(传统DDPM)。设定
,即 c(t)=0,d(t)=1。
-
v-prediction :预测速度向量(Rectified Flow的基础)。设定
,即 c(t)=b(t),d(t)=−a(t)。(v-pred 在训练中更稳定,尤其在高噪声条件下)。
VP (Variance Preserving) vs VE (Variance Exploding):
-
VP 扩散 :
。信号和噪声的方差之和保持为1,不随t变化,保证了潜变量
的方差为1。
-
VE 扩散:a(t)=1,b(t)=σ(t)。信号保持不变,加入的噪声方差持续膨胀。最终t=1时必须让σ(1)足够大,以淹没信号。
7.2 扩散模型是隐变量模型
扩散模型的前向过程 (加噪)和反向过程
(去噪)可以看作是 VAE 在时序上的层级扩展。
-
前向过程是固定的(不学习参数)。
-
反向过程是学习的。
-
目标同样是优化变分下界(ELBO)。
-
区别:扩散模型有 T 个隐变量(通常 T=1000),而 VAE 只有 1 个隐变量。
7.3 扩散模型学习分数函数 (Score Function)
-
对于任意分布 p(x),其分数函数 定义为:
。
-
物理直觉:想象 p(x) 是一座山峰,分数函数 s(x) 是一个向量场,永远指向概率密度增加最快的方向(即"爬山"方向)。
-
扩散网络学习的就是预测这个分数函数。在采样时,我们沿着分数方向迭代"爬山",就能一步步从低概率区(噪声)走向高概率区(真实图像)。
-
随机微分方程 (SDE) :扩散的加噪和去噪过程可以用 SDE 连续描述:
。
7.4 扩散蒸馏 (Diffusion Distillation)
-
痛点:采样需要跑 30-50 步(每一步跑一次庞大的 DiT),推理非常慢。
-
解决方案:知识蒸馏。
-
原理:训练一个"学生模型",用 1 步或 2 步去拟合"教师模型"多步去噪的结果(比如"渐进蒸馏 Progressive Distillation")。蒸馏后的模型采样极快,代价是稍微牺牲一点生成质量。可以在蒸馏过程中"烘焙"进 CFG,节省计算量。
🎁 终极复习建议
-
GAN :理解极小极大博弈 、梯度消失 及改进损失(−logD(G(z))、模式崩溃。
-
扩散 :理解Rectified Flow 训练
,预测 v=z−x)和采样过程、CFG (
)、LDM (在潜空间操作,效率高)、DiT(Transformer替代U-Net)。
-
理论 :掌握 x-pred / ε-pred / v-pred 三者的参数切换关系;理解分数函数(指向数据高密度区的向量场)。