Lecture 04:Latent Spaces, Neural Network Architectures
本讲主线
前几讲已经讲清楚了如何训练 flow / diffusion model:学习一个时间相关的 vector field 或 score,然后从噪声逐步生成数据。本讲回答两个更工程化但非常关键的问题:
- **高分辨率图片 / 视频太高维,怎么让模型可训练、可采样?**答案是把数据压缩到 latent space,在 latent 上做 flow matching / diffusion。
- **神经网络 到底怎么设计?**答案包括时间嵌入、文本嵌入、patchify、self-attention、cross-attention、AdaLN,以及现代 DiT / MM-DiT 架构。
0. 和前几讲的连接
前几讲的生成建模框架是:给定数据分布 ,我们希望训练一个模型,使得从简单初始分布出发,通过 ODE / SDE 采样得到数据样本。
Flow model 的典型采样形式是:
Guided / conditional generation 时,模型变成:
其中 是当前 noisy sample 或 latent sample, 是时间, 是条件,例如 class label 或 text prompt。
本讲重点不是重新推导 flow matching / score matching,而是解释:
- 如果是高分辨率图片或视频,维度太大,直接建模会非常贵。
- 是一个标量,如何让网络真正使用它。
- 是文本时,如何转成神经网络能处理的向量序列。
- 用什么架构参数化。
1. 为什么需要 latent space?
1.1 高分辨率图片的维度灾难
一张 RGB 图片可以写成:
如果图片大小是 ,那么维度是:
如果是 ,则:
视频更夸张,因为多了时间维度 :
所以维度会随帧数 线性增长。
1.2 为什么这对 diffusion / flow 特别麻烦?
这不是普通 supervised learning 中的“输入很大”问题,而是 diffusion / flow 中的“输入和输出都很大”问题。
在图片分类里,网络可能输入一张大图,但输出只是类别 logits,例如 维。而在 flow / diffusion 中,模型学习的是 vector field:
也就是说:
- 输入是高维图片 。
- 输出也是同样形状的高维向量 。
- 采样时还要反复调用网络,例如 50 steps、100 steps,甚至更多。
因此问题包括:
- GPU memory 很容易爆。
- 学习一个高维输出函数很难。
- 相邻像素高度相关,直接在 pixel space 里建模有大量冗余。
- 视频还会乘上时间维度,成本进一步上升。
核心动机
Latent space 的作用不是“让模型更神秘”,而是把图片 / 视频压缩成更小、更语义化、更容易建模的表示,让 flow matching / diffusion model 在这个低维表示上工作。
2. Autoencoder:构造 latent space 的基本工具
2.1 Encoder + Decoder
Autoencoder 由两部分组成:
- Encoder:把数据 压缩成 latent 。
- Decoder:把 latent 还原成数据 。
形式上:
编码和解码为:
标准 autoencoder 的训练目标通常是 reconstruction loss:
直观上,它要求解码后的 尽量接近原图 。
2.2 标准 autoencoder 的问题
如果我们的目标只是压缩和重建,标准 autoencoder 已经够用了。但在 latent diffusion 中,我们还要在 latent space 里训练一个生成模型。
也就是说,我们真正需要的是:
- 把数据映射到 latent space:
- 得到 latent distribution:
- 在 上训练 flow / diffusion model。
问题是,标准 reconstruction loss 只关心能不能重建,不关心 latent distribution 长什么样。它可能把数据压缩到一个很扭曲、很复杂、很难采样的分布上。
标准 AE 的关键缺陷
Reconstruction loss 不能保证 latent distribution 是“nice”的。它可能完成压缩,却让 latent 分布变得更难学习。
因此我们需要一种 autoencoder,它不仅能重建,还能让 latent distribution 更接近一个简单分布,比如标准高斯分布。
这就引出 VAE。
3. KL divergence:衡量 latent distribution 是否接近 prior
3.1 KL divergence 定义
对于两个概率密度 和 ,Kullback-Leibler divergence 定义为:
它满足:
并且:
直觉
KL divergence 可以看成“用 近似 的代价”。在 VAE 中,我们用它惩罚 encoder 输出的 latent distribution 偏离标准高斯 prior。
3.2 两个 diagonal Gaussian 的 KL divergence
令:
则:
其中 在 处达到最小值。也就是说:
- 均值相同会降低 KL。
- 方差相同会降低 KL。
- 当 时,KL 为 。
如果 prior 是标准高斯:
那么对 encoder 的 Gaussian 输出:
KL 项会鼓励:
这就是 VAE 让 latent distribution 变得“Gaussian-like”的机制。
4. Variational Autoencoder, VAE
4.1 从 deterministic AE 到 probabilistic AE
标准 autoencoder 是 deterministic 的:
VAE 把 encoder 和 decoder 都看成概率分布:
编码和解码变成采样:
当 encoder / decoder 方差都退化为 时,VAE 就退化为普通 autoencoder。
4.2 VAE reconstruction loss
VAE 的 reconstruction loss 使用 negative log-likelihood:
如果 decoder 是 Gaussian,则可以写成:
如果为了稳定,把 decoder 方差固定为常数 ,则基本变成带随机编码的 MSE:
4.3 VAE prior loss
VAE 额外引入 latent prior:
prior loss 是:
对于 Gaussian encoder,可以写成:
直觉:
- 惩罚 latent mean 偏离 。
- 惩罚 latent variance 偏离 。
4.4 β-VAE 总 loss
VAE 的总目标是 reconstruction 和 prior regularization 的加权和:
展开为:
如果写成更直观的 Gaussian 形式:
四个项分别对应:
- Reconstruction error:重建要好。
- Decoder confidence:decoder 的不确定性控制。
- Latent variance regularization:让 latent variance 接近 。
- Latent mean regularization:让 latent mean 接近 。
β 的作用
越大,latent 越接近标准高斯,但 reconstruction 可能变差; 太小,重建可能好,但 latent distribution 可能不够规整。现代图像 autoencoder 中 往往很小,且常配合 KL warm-up。
4.5 Reparameterization trick
VAE 训练的难点是:
这个采样分布依赖参数 ,不方便直接反向传播。
Reparameterization trick 把采样改写为:
这样随机性只来自 ,而 的分布不依赖 。于是梯度可以通过 和 反传。
固定 decoder 方差后的训练目标可以写成:
4.6 β-VAE 训练算法
β-VAE Training Procedure
输入:数据集 ,encoder networks ,decoder network ,latent dimension ,常数 和 。
- 对每个 mini-batch :
- 编码:
- 采样 noise:
- Reparameterize:
- Decode mean:
- Reconstruction loss:
- KL loss to prior :
- Total loss:
- 用 gradient update 更新 。
4.7 实践备注
- KL warm-up:训练早期先让 或很小,让模型学会重建;之后逐渐增大 。
- Posterior collapse:如果 太大,encoder 可能学成 ,即忽略输入 。
- 固定 decoder variance:学习 可能数值不稳定,很多实现固定它。
- Pixel MSE 会偏糊:图像上仅用 pixel-level MSE 容易得到过平滑结果,实际模型常加入 perceptual loss 或 adversarial loss。
- 生成时通常用 decoder mean:从 latent model 采样得到 后,用 解码,而不是再从 随机采样,以避免额外噪声 artifacts。
5. Latent Diffusion Models, LDMs
5.1 LDM 的基本 recipe
Latent diffusion / latent flow matching 的流程非常直接:
- 准备原始训练数据:
- 用预训练 autoencoder 编码成 latent。对 VAE,通常取 encoder mean:
- 得到 latent dataset:
- 在 latent space 中训练 flow / diffusion model:
- 采样时先生成 latent:
- 用 decoder 映射回数据空间:
关键理解
LDM 没有改变前几讲的 flow matching / diffusion recipe。它只是把训练数据从 pixel space 换成了 latent space。
5.2 为什么几乎所有现代图像 / 视频生成都在 latent space 中做?
现代高分辨率图像和视频生成模型几乎都依赖 latent space,原因是:
- 直接建模 pixel space 太贵。
- Autoencoder 可以过滤掉部分高频、语义上不重要的细节。
- 生成模型可以集中容量学习更重要的 perceptual / semantic structure。
- 视频多了时间维度,latent compression 更关键。
两个典型压缩例子:
LDM 的代价
性能不仅取决于 diffusion / flow model,也强依赖 autoencoder 的质量。如果 autoencoder 压缩不好或解码效果差,后面的 latent generative model 再强也会受限。
6. Neural network architecture:如何参数化
6.1 模型输入输出
Guided flow / diffusion model 的核心网络是:
它通常有三个输入:
- 当前 sample 或 latent image:。
- 时间:。
- 条件:,例如 class label 或 text prompt。
输出是与 同形状的 vector field / noise / velocity prediction:
对于低维 toy distribution,可以把 拼起来送入 MLP。但对图像 / 视频,需要专门的架构:U-Net、DiT、MM-DiT 等。
7. Encoding time
7.1 为什么不能直接用标量 ?
只有一维,而图片 token、latent token、prompt token 都是高维向量。如果直接把 作为一个 scalar 输入,网络可能很难充分利用时间信息。
所以通常用 sinusoidal / Fourier feature 把 映射到高维向量。
7.2 Sinusoidal time embedding
时间嵌入可以写成:
频率为:
这个 embedding 的一个性质是:
重点
具体 sinusoidal 公式不是最重要的。重要的是把一维时间 嵌入成一个高维、normed、对不同频率敏感的向量,使网络更容易学习时间相关行为。
8. Encoding language prompt
8.1 文本条件的难点
Prompt 是离散 token 序列,例如:
A dog running on grass in a park at sunshine in an Italian city.
神经网络不能直接处理原始字符串,所以要先用文本编码器把它变成向量。
常见选择:
- CLIP text embedding。
- T5 / T5-XXL embedding。
- LLM embedding。
- 多种 embedding 组合使用。
8.2 Prompt embedding 形状
如果 prompt 被编码成一个长度为 的向量序列,每个向量维度为 ,则:
CLIP 更偏 coarse-grained global text-image alignment;T5 这类模型可以提供更细粒度的 token-level / sequence-level 信息。
对图像生成的意义
Cross-attention 需要一个“文本 token 序列”作为 key / value,让图像 token 能够 attend 到 prompt 中的不同词或短语。
9. Patchify:把图片变成 token 序列
Transformer 处理的是序列,而图片是张量。因此 DiT 类模型需要先把图片切成 patch,再把每个 patch 变成 token。
设图片为:
patch size 为 。Patchify 后:
再通过线性层映射到 transformer hidden dimension :
其中:
- 是 sequence length,也就是 patch token 数。
- 是每个 token 的 hidden dimension。
10. Diffusion Transformer, DiT
10.1 DiT 的整体结构
DiT 是为 diffusion / flow model 设计的 transformer。它的基本输入包括:
之后通过 层 DiTBlock:
最后 unpatchify 回原始形状,得到 vector field 输出:
这个 就是网络输出的 velocity / vector field:
10.2 Scaled dot-product attention
Attention 的输入是 queries、keys、values:
Scaled dot-product attention 定义为:
其中 softmax 按 row 作用。
直觉:
- 计算每个 query 对每个 key 的相关性。
- 除以 防止 dot product 过大。
- softmax 得到 attention weights。
- 最后对 values 加权求和。
10.3 Self-attention 和 cross-attention
DiTBlock 中至少有两个核心 attention:
Self-attention on image patches
图像 patch token 自己和自己交互:
这里 queries、keys、values 都来自 image tokens。
作用:让不同图像 patch 之间交换信息,建模空间关系。
Cross-attention to text prompt
图像 token attend 到文本 token:
queries 来自 image tokens,keys 和 values 来自 text embeddings。
作用:让图像 patch 根据 prompt 中的信息调整生成内容。
Cross-attention 的一句话理解
图像 token 问:“我应该生成什么?”文本 token 回答:“prompt 里有哪些语义可以参考?”
10.4 Multi-head attention
设 head 数为 ,每个 head 的维度为:
每个 head 做一次 attention:
其中 表示 self-attention, 表示 cross-attention。
把所有 head 拼接后再做输出投影:
10.5 Time conditioning via AdaLN / adaptive normalization
DiT 中时间信息通常不是简单拼接,而是用时间 embedding 调制 normalization。
先由时间 embedding 产生 scale 和 shift:
然后对 token matrix 做 adaptive normalization:
直觉:不同时间 下,模型应该执行不同去噪 / 生成行为。AdaLN 让时间直接调制每一层的激活分布。
10.6 一个典型 DiTBlock 的组合
简化地说,DiTBlock 包括:
- Image self-attention。
- Text cross-attention。
- MLP。
- Time-conditioned AdaNorm 和 gating。
可以写成:
轻重缓急
不需要死记每个 gating 或 projection 的实现细节。更重要的是理解三件事:self-attention 处理图像内部关系,cross-attention 注入文本条件,AdaLN 注入时间条件。
11. U-Net:早期 diffusion model 的主力架构
虽然本讲 slides 更强调 DiT,但 lecture notes 也介绍了 U-Net。U-Net 是一种卷积神经网络架构,早期 diffusion model 大量使用它。
U-Net 的特点:
- 输入和输出都是 image-shaped tensor。
- Encoder 逐步降低空间分辨率、增加 channel 数。
- Decoder 逐步恢复空间分辨率。
- Encoder 和 decoder 之间有 skip connections。
- 整体形状像字母 U。
例如输入:
经过 encoder:
经过 midcoder:
经过 decoder:
U-Net 的优势是对图像局部结构有很强 inductive bias,适合 image-to-image 形状的输入输出。DiT 的优势是更适合规模化,并且可以通过 attention 灵活融合多模态条件。
12. Case Study:Stable Diffusion 3
Stable Diffusion 3 可以看成前面所有组件的组合:
- 使用 conditional flow matching。
- 使用 straight-line schedulers,也就是 CondOT path。
- 在 latent space 中训练 flow matching model。
- 使用预训练 VAE / autoencoder。
- 使用 classifier-free guidance。
- 使用 MM-DiT 架构。
- 使用多种 text embedding,例如 CLIP 和 T5-XXL。
12.1 SD3 的几个关键数字
- 最大模型约 8B 参数。
- Sampling 约 50 steps。
- Classifier-free guidance weight 大约 到 。
- Dataset:LAION。
12.2 为什么同时用 CLIP 和 T5?
CLIP embedding 提供较 coarse 的全局图文对齐信号;T5-XXL 这类 sequence-level embedding 提供更细粒度的文本 token 信息。
这使模型既能把握整体 prompt 语义,又能 attend 到 prompt 中具体词语。
12.3 MM-DiT
MM-DiT 是 Multi-Modal Diffusion Transformer。它相比普通 class-conditioned DiT 的主要变化是:
- 不只是处理 image patches。
- 还把 text embeddings 放入整个网络中。
- 通过 cross-attention 或更深的多模态交互,让图像和文本在多层中融合。
SD3 的抽象 recipe
SD3 = latent flow matching + classifier-free guidance + strong text encoders + MM-DiT + large-scale training。
13. Case Study:Meta MovieGen
MovieGen 是视频生成模型,因此数据形状变成:
多出来的 是帧数,也就是时间维度。相比图片,视频生成更难,因为:
- 数据维度更高。
- 不仅要每帧好看,还要帧间一致。
- 采样和训练成本更高。
13.1 MovieGen 的组件
MovieGen 的整体思路和 SD3 很像:
- Flow matching model。
- Straight-line schedulers / CondOT path。
- Classifier-free guidance。
- Latent space 中训练。
- 使用预训练 video autoencoder / temporal autoencoder。
- DiT-like backbone,但 patchify 要扩展到空间和时间维度。
- 文本条件使用多种 embeddings,例如 UL2、ByT5、MetaCLIP。
13.2 为什么 latent space 对视频更关键?
视频比图片多了时间维度。若直接在 pixel video space 中建模,成本会非常高。因此 MovieGen 使用 temporal autoencoder,把原始视频压缩到 latent video:
lecture notes 中给出的压缩比例是:
也就是说,时间和空间都被压缩。
13.3 MovieGen 的规模
- 最大模型约 30B 参数。
- 使用约 6,144 张 H100 GPU。
视频 DiT 的变化
图片 DiT patchify 空间维度;视频 DiT 需要同时沿时间和空间 patchify,并用 attention 建模跨帧关系。
14. Bonus:diffusion literature 的几种视角
14.1 时间 convention 不同
不同文献中时间方向不一样,容易混淆。
Flow time convention
这是本课程前几讲主要使用的 convention。
Diffusion time convention
许多 score-based diffusion / SDE 文献使用这个方向。
Discrete time convention
DDPM / DDIM 等模型使用离散 timesteps,而不是连续时间 ODE / SDE。
一个常见对应关系是:
14.2 三种 noising procedure 语言
对于 Gaussian probability path,本课程提到几种表述方式本质上等价。
Probability path / flow matching 语言
Stochastic interpolant 语言
注意这里 是 data, 是 noise。实际文献可能交换符号,所以看文章时要先确认 notation。
Forward diffusion process 语言
容易混淆点
Flow matching、rectified flows、stochastic interpolants、DDPM、score-based SDE 可能使用不同时间方向、不同符号和不同 noising 描述。看公式前先确认:哪个时刻是 data,哪个时刻是 noise。
14.3 Reverse SDE 与 SDE extension trick
从 forward SDE 构造 reverse SDE 是 diffusion literature 中的经典思路。课程中强调:time-reversed SDE 可以看成前一讲 SDE extension trick 的一个特定解,对应某个特定 noise level。
但经验上,它不一定总是实践中最好的采样 SDE。
14.4 Flow matching 的一般性
Flow matching 的一个优势是可以 bridge arbitrary distributions,不一定只能 noise 到 data。
例如:
- 无音频视频 有音频视频。
- 低分辨率图像 高分辨率图像。
- 未扰动细胞 扰动后细胞。
这说明 flow matching 不只是“从高斯噪声生成图片”的算法,也是一类学习分布到分布变换的工具。
15. 本讲重点总结
15.1 必须掌握
- Latent space 的必要性:pixel space 太高维,flow / diffusion 的输出同维,采样还要多次调用模型。
- 标准 AE 的问题:只保证重建,不保证 latent distribution 好学。
- VAE 的核心机制:reconstruction loss + KL prior loss。
- Reparameterization trick:把 改写成 。
- LDM recipe:先训练 autoencoder,再在 latent dataset 上训练 flow / diffusion model,采样后 decode。
- DiT 的三类条件处理:time embedding、prompt embedding、image patch tokens。
- Self-attention / cross-attention / AdaLN 分别对应 image interaction、text conditioning、time conditioning。
15.2 可以一笔带过但要知道
- U-Net 是早期 diffusion 常用架构,输入输出都是 image-shaped tensor。
- DiT / MM-DiT 是现代大模型常见架构,更适合 scale。
- Stable Diffusion 3 使用 latent flow matching、CFG、MM-DiT、多文本编码器。
- MovieGen 把这些技术扩展到视频,并且需要 temporal autoencoder。
15.3 最容易错的地方
- 不要把 autoencoder 的 latent space 默认当成好学分布;普通 AE 没有这个保证。
- 不要忘记 flow / diffusion 的输出维度和输入一样,所以高维输出才是核心负担。
- 不要把 CLIP embedding 和 T5 embedding 当成同一种东西;CLIP 更 global,T5 更 sequence-level。
- 不同文献的时间方向可能相反。
- 这种条件写法在笔记中最好写成 ,不要写成
p_t(x|z),避免 Obsidian 表格或 Markdown 解析出问题。
16. 一页速记
Lecture 04 = Latent Space + Architecture
Why latent?
- Images/videos are huge.
- Diffusion/flow outputs have same shape as input.
- Sampling calls model many times.
AE:
- Encoder compresses x -> z.
- Decoder reconstructs z -> x_hat.
- Reconstruction alone does not control latent distribution.
VAE:
- q_phi(z | x) is Gaussian encoder.
- p_theta(x | z) is Gaussian decoder.
- Loss = reconstruction + beta * KL-to-prior.
- Reparameterization: z = mu + sigma * epsilon.
LDM:
- Train autoencoder.
- Encode data into latents.
- Train flow/diffusion in latent space.
- Sample latent and decode.
DiT:
- Time -> sinusoidal embedding.
- Prompt -> CLIP/T5/LLM embeddings.
- Image -> patches -> tokens.
- Self-attention handles image tokens.
- Cross-attention injects text.
- AdaLN injects time.
Case studies:
- Stable Diffusion 3: latent flow matching + CFG + MM-DiT + CLIP/T5.
- MovieGen: video latent flow matching + temporal autoencoder + video DiT.