通用架构图
flowchart TB
classDef pixel fill:#f97316,stroke:#ea580c,color:#fff,stroke-width:2px
classDef latent fill:#10b981,stroke:#059669,color:#fff,stroke-width:2px
classDef encdec fill:#8b5cf6,stroke:#7c3aed,color:#fff,stroke-width:2px
classDef denoise fill:#ec4899,stroke:#db2777,color:#fff,stroke-width:2px
classDef cond fill:#f59e0b,stroke:#d97706,color:#1e1b4b,stroke-width:2px
classDef loss fill:#ef4444,stroke:#dc2626,color:#fff,stroke-width:2px
subgraph PX ["Pixel Space 像素空间"]
direction LR
X["输入图像 x"]:::pixel
XHat["生成图像 x̂"]:::pixel
end
E["Encoder E 编码器
感知压缩 · VQGAN/KL-Reg"]:::encdec
D["Decoder D 解码器
感知重建 · VQGAN/KL-Reg"]:::encdec
subgraph LS ["Latent Space 潜在空间"]
Z0["z₀ = E 开始潜在表示"]:::latent
ZT["zₜ 加噪潜在表示"]:::latent
Z0D["ẑ₀ 去噪结果"]:::latent
end
Noise["ε ~ N 0, I
随机高斯噪声"]:::loss
Fwd["前向扩散 Forward
q zₜ | z₀
逐步添加噪声"]:::latent
Rev["反向去噪 Reverse
pθ zₜ₋₁ | zₜ
逐步去除噪声"]:::latent
subgraph DN ["Denoising Network 去噪网络"]
UNet["U-Net εθ
ResBlock + Self-Attention + Cross-Attention
预测噪声 ε̂θ"]:::denoise
TEmb["时间步嵌入 t
Sinusoidal Position Embedding"]:::denoise
end
subgraph CM ["Conditioning 条件机制"]
C["条件输入 c
文本 / 类别 / 图像"]:::cond
Tau["条件编码器 τθ
CLIP Text / BERT"]:::cond
CA["Cross-Attention
条件注入层"]:::cond
end
Loss["LDM 损失函数
L = E ‖ε − εθ zₜ, t, c ‖²"]:::loss
X --> E --> Z0
Z0 --> Fwd --> ZT
Noise --> Fwd
ZT --> Rev --> Z0D
Z0D --> D --> XHat
TEmb --> UNet
UNet --> Rev
C --> Tau --> CA --> UNet
UNet -. "ε̂θ 预测噪声" .-> Loss
Noise -. "ε 目标噪声" .-> Loss
双阶段数据流
训练阶段
x 经 Encoder E 压缩为潜在表示 z₀
z₀ 执行前向扩散,采样随机噪声 ε,得到 zₜ
c 经编码器 τθ 后通过 Cross-Attention 注入 U-Net
zₜ, t, c 为输入,预测噪声 ε̂θ
L = ‖ε − ε̂θ‖²,仅优化 U-Net 和 τθ
z0 = E(x) # 编码到潜在空间
t = uniform_sample(0, T)
eps = randn_like(z0) # 采样噪声
zt = sqrt(αbar_t) * z0 + sqrt(1-αbar_t) * eps
eps_hat = UNet(zt, t, τθ(c))
loss = MSE(eps, eps_hat)
推理阶段
z_T ~ N(0, I)
c 经编码器 τθ 得到条件嵌入向量
z_T 逐步去噪到 ẑ₀
ẑ₀ 经 Decoder D 解码为生成图像 x̂
zT = randn(shape) # 采样纯噪声
for t = T, T-1, ..., 1:
eps_hat = UNet(zt, t, τθ(c))
zt = ddpm_step(zt, eps_hat, t)
x_hat = D(z0) # 解码到像素空间
核心组件详解
Encoder E
感知压缩将高维像素空间图像 x ∈ ℝʰˣʷˣ³ 压缩到低维潜在空间 z ∈ ℝʰ/⁴ˣʷ/⁴ˣᶜ,下采样因子通常为 4~8。使用 VQ-正则化或 KL-正则化约束潜在空间分布,确保 z 空间平滑连续。
Decoder D
感知重建将潜在表示 z 解码回像素空间。与 Encoder 对称设计,确保重建质量。训练时使用感知损失 + patch-level 判别器对抗损失 + 重建损失联合优化。
U-Net εθ
核心去噪网络基于时序条件 U-Net 的噪声预测网络,由下采样、瓶颈、上采样三部分组成。核心模块包括 ResBlock(残差块)、Self-Attention(自注意力)和 Cross-Attention(交叉注意力),通过时间步嵌入调节每一层的特征变换。
前向扩散
加噪过程预定义的马尔可夫链过程,向潜在表示逐步添加高斯噪声。方差调度 β₁,...,β_T 控制噪声强度。可直接从 z₀ 一步采样到任意时间步 zₜ,无需逐步迭代,这使得训练极其高效。
反向去噪
生成过程学习逆转扩散过程,从纯噪声 z_T 逐步去噪恢复数据分布。每步由 U-Net 预测噪声并移除。支持 DDPM(随机采样)和 DDIM(确定性采样)等多种采样策略。
条件机制
可控生成通过 Cross-Attention 将条件信号注入 U-Net。条件编码器 τθ 将文本/类别/图像等条件映射为特征向量,在 U-Net 的 Cross-Attention 层与空间特征交互。这是 LDM 实现可控生成的核心机制,也支持无条件生成(引导分类器自由策略)。