本站内容由 AI 生成,可能存在错误。如发现问题,欢迎到 GitHub Issues 反馈。

扩散模型基础:从噪声中生成

扩散模型基础:从噪声中生成

更新于 2026-04-12

简介:生成模型的新范式

2020 年,Ho 等人在 Denoising Diffusion Probabilistic Models (DDPM) 中提出了一个看似违反直觉的生成方法:先把数据逐步破坏成纯噪声,然后训练神经网络学会逆转这个过程。这个简单的想法催生了 Stable Diffusion、DALL-E、Midjourney 等一系列改变创作方式的产品。

扩散模型的核心思想可以用一句话概括:如果你知道如何把一张图片变成噪声,你就能学会如何从噪声中恢复图片。这种”破坏-修复”框架赋予了扩散模型稳定的训练过程和出色的生成质量,使其迅速超越了 GAN 成为图像生成的主流方法。

生成模型家族

在深入扩散模型之前,先回顾主要的生成模型范式:

模型核心思想优势劣势
GAN生成器与判别器对抗训练生成速度快、质量高训练不稳定、模式坍塌
VAE编码到潜空间,再解码训练稳定、有概率解释生成模糊
Flow可逆变换,精确似然精确概率密度架构受限、计算昂贵
Diffusion逐步去噪训练稳定、质量最高采样速度慢

扩散模型的训练目标简洁(预测噪声),不需要对抗训练,也不需要可逆架构约束。这种简洁性是其成功的关键之一。

生成模型家族概览
生成模型家族概览主流生成模型范式GAN生成器 vs 判别器对抗VAE编码→潜空间→解码Flow可逆变换,精确似然Autoregressive逐 token 序列生成Diffusion逐步去噪,从噪声到图像← 本文焦点扩散模型:训练稳定 + 生成质量高 → 2022 年后主流方法

前向扩散:逐步加噪

前向过程(forward process)是一个固定的马尔可夫链,在每一步向数据添加少量高斯噪声。经过 TT 步后,任何数据分布都会变成标准高斯分布。

前向加噪 与 反向去噪
前向加噪与反向去噪前向 q反向 p_θ清晰图像纯噪声x₀x₂₅₀x₅₀₀x₇₅₀x_Tx_Tx₇₅₀x₅₀₀x₂₅₀x₀训练:学习逆转每一步的噪声 ε_θ(x_t, t)前向过程固定(无参数),反向过程由神经网络参数化

数学上,每一步的加噪定义为:

q(xtxt1)=N(xt;1βtxt1,βtI)q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} \, x_{t-1}, \beta_t I)

其中 βt\beta_t 是噪声调度参数。关键的性质是,我们可以一步到位x0x_0 直接采样任意时间步的 xtx_t

q(xtx0)=N(xt;αˉtx0,(1αˉt)I)q(x_t | x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} \, x_0, (1 - \bar{\alpha}_t) I)

其中 αˉt=s=1t(1βs)\bar{\alpha}_t = \prod_{s=1}^{t} (1 - \beta_s)。这意味着训练时不需要逐步加噪,只需随机选一个时间步 tt,直接计算 xt=αˉtx0+1αˉtϵx_t = \sqrt{\bar{\alpha}_t} \, x_0 + \sqrt{1 - \bar{\alpha}_t} \, \epsilon,其中 ϵN(0,I)\epsilon \sim \mathcal{N}(0, I)

前向扩散过程t=0: 原始图像t=50: 纯噪声ᾱₜ (信号保留率)1.0000信号: 100%噪声: 0%q(xₜ | x₀) = N(xₜ; √ᾱₜ · x₀, (1 − ᾱₜ) · I)013253850

拖动滑块观察:当 t=0t=0 时图像完好无损(αˉ01\bar{\alpha}_0 \approx 1);当 tt 增大,信号逐渐被噪声淹没;当 t=Tt=T 时图像变成纯噪声(αˉT0\bar{\alpha}_T \approx 0)。

反向去噪:从噪声恢复

扩散模型的生成过程就是前向过程的逆过程:从纯噪声 xTN(0,I)x_T \sim \mathcal{N}(0, I) 出发,逐步去噪直到得到干净的图像 x0x_0

反向过程的每一步可以参数化为:

pθ(xt1xt)=N(xt1;μθ(xt,t),σt2I)p_\theta(x_{t-1} | x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \sigma_t^2 I)

DDPM 的关键洞察是:与其让模型直接预测去噪后的图像,不如让它预测当前时间步的噪声。训练损失极其简洁:

L=Et,x0,ϵ[ϵϵθ(xt,t)2]\mathcal{L} = \mathbb{E}_{t, x_0, \epsilon}\left[\| \epsilon - \epsilon_\theta(x_t, t) \|^2\right]

就是一个简单的 MSE:模型预测的噪声 ϵθ\epsilon_\theta 与实际添加的噪声 ϵ\epsilon 之间的差异。

去噪步骤: 0/10
反向去噪过程纯噪声恢复图像当前图像 xₜεθ(xₜ, t)预测噪声 εθ减去噪声去噪结果 xₜ₋₁xₜ₋₁ = f(xₜ, εθ(xₜ, t))模型预测的是噪声,不是图像本身

点击”下一步”按钮观察:每一步中模型预测出噪声分量(中间网格),然后从当前图像中减去这些噪声,得到更清晰的结果。经过所有步骤后,纯噪声被还原为连贯的图像。

噪声调度策略

βt\beta_t 的调度方式对生成质量影响显著。DDPM 原文使用线性调度(βt\beta_t 从 0.0001 线性增长到 0.02),但后续研究(Nichol & Dhariwal, 2021)发现这种调度存在问题。

线性调度的缺陷αˉt\bar{\alpha}_t 在早期时间步下降得太快,意味着大量采样步骤被”浪费”在噪声已经很多、信号变化不大的区域。

余弦调度(cosine schedule)通过调整 αˉt\bar{\alpha}_t 的下降曲线,使信噪比在整个时间轴上更均匀地变化,让每一步都有意义:

αˉt=f(t)f(0),f(t)=cos(t/T+s1+sπ2)2\bar{\alpha}_t = \frac{f(t)}{f(0)}, \quad f(t) = \cos\left(\frac{t/T + s}{1 + s} \cdot \frac{\pi}{2}\right)^2

噪声调度策略对比0.000.250.500.751.0002004006008001000时间步 tᾱₜ线性调度 (Linear)余弦调度 (Cosine)线性调度在低噪声区域浪费了大量步数

悬停曲线查看具体数值。线性调度(蓝色)在前几百步就让 αˉt\bar{\alpha}_t 快速衰减到接近零,而余弦调度(绿色)则更平缓,充分利用了每一个采样步骤。

U-Net 骨干网络

扩散模型中的去噪网络 ϵθ\epsilon_\theta 通常采用 U-Net 架构。这种编码器-解码器结构通过 skip connection 在不同分辨率之间传递信息,非常适合”从噪声图像中提取信号”的任务。

U-Net 的核心设计要素:

  • 编码器:逐步下采样(64→32→16→8),增加通道数,提取高层语义特征
  • 解码器:逐步上采样,通过 skip connection 融合编码器的细节信息
  • 时间步嵌入tt 通过正弦位置编码转化为向量,注入每个 ResBlock(类似 Transformer 的位置编码)
  • Attention 层:在低分辨率层(16×16、8×8)使用 Self-Attention 捕获全局依赖
U-Net 去噪网络架构
U-Net 去噪网络架构编码器(下采样)解码器(上采样)输入64×64ResBlock↓32×32ResBlock↓16×16瓶颈层 + Attn8×8ResBlock↑16×16ResBlock↑32×32输出64×64skip connectionsTimestep t + Text 条件注入编码器提取语义,解码器重建细节,skip connection 保留高分辨率信息
U-Net 去噪网络架构编码器 (下采样)解码器 (上采样)Skip Connection时间步嵌入 t噪声图像 xₜ预测噪声 εθE164×64, 64chE232×32, 128chE316×16, 256chE48×8, 512chM8×8, 512chD48→16, 512chD316→32, 256chD232→64, 128chD164×64, 64ch悬停查看详情

悬停各个模块查看详细说明。注意 skip connection(橙色虚线)如何将编码器和解码器的同层连接 — 这些连接让解码器在重建细节时可以直接访问编码器保留的高分辨率特征。

条件生成与 Classifier-Free Guidance

无条件扩散模型只能随机生成图像。要实现文本引导的生成(如”一只在月球上的猫”),需要条件生成

Classifier-Free Guidance (CFG) 是目前最主流的条件引导方法(Ho & Salimans, 2022)。其核心思想是同时训练条件和无条件去噪:训练时随机将条件 cc 替换为空条件 \varnothing(如 10% 的概率)。推理时,通过放大条件和无条件预测之间的差异来强化引导:

ϵ~θ=ϵθ(xt,)+s(ϵθ(xt,c)ϵθ(xt,))\tilde{\epsilon}_\theta = \epsilon_\theta(x_t, \varnothing) + s \cdot (\epsilon_\theta(x_t, c) - \epsilon_\theta(x_t, \varnothing))

其中 ss 是引导强度(guidance scale):

  • s=1s = 1:等同于标准条件生成,多样性高但可能偏离提示
  • s=78s = 7 \sim 8:Stable Diffusion 的常用设置,质量与多样性平衡
  • s>10s > 10:高度贴合提示,但生成结果趋于重复、过饱和
Classifier-Free Guidance 效果提示词: "彩色几何图形"样本 1样本 2样本 3样本 4s ≈ 7: 质量与多样性平衡多样性保真度s=7.5ε̃ = ε(xₜ, ∅) + s · (ε(xₜ, c) − ε(xₜ, ∅))

拖动滑块感受不同引导强度的效果。低引导下形状多样但不清晰;适中引导下质量最佳;高引导下结果趋于一致且过度锐化。

加速采样:DDIM

DDPM 的主要缺点是采样速度慢 — 需要 1000 步逐步去噪。DDIM(Song et al., 2020)通过将去噪过程重新定义为非马尔可夫确定性映射,实现了采样步数的大幅压缩。

DDIM 的核心修改是使用确定性更新规则:

xt1=αˉt1(xt1αˉtϵθ(xt,t)αˉt)+1αˉt1ϵθ(xt,t)x_{t-1} = \sqrt{\bar{\alpha}_{t-1}} \left(\frac{x_t - \sqrt{1 - \bar{\alpha}_t} \, \epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}}\right) + \sqrt{1 - \bar{\alpha}_{t-1}} \, \epsilon_\theta(x_t, t)

由于去噪过程变成确定性的,DDIM 可以使用任意子序列的时间步(如只取 50 步或 20 步),而不需要遍历所有 1000 步。实践中,DDIM 50 步的质量接近 DDPM 1000 步的结果,速度提升 20 倍。

后续的 DPM-Solver、DPM-Solver++ 等 ODE 求解器进一步将步数压缩到 10-25 步,使扩散模型的实用性大幅提升。

Latent Diffusion:Stable Diffusion 的核心

直接在像素空间(如 512×512×3)运行扩散模型计算代价极高。Latent Diffusion Model (LDM)(Rombach et al., 2022)的创新在于:在低维潜空间中运行扩散过程

LDM 的两阶段设计:

  1. 第一阶段:训练一个 VAE(变分自编码器),将图像压缩为低维潜表示。例如 512×512×3 的图像编码为 64×64×4 的 latent code,空间维度缩小 64 倍
  2. 第二阶段:在这个 64×64×4 的潜空间中训练扩散模型。所有的加噪、去噪都在 latent 空间进行

这种设计的优势显著:

  • 计算效率:64×64 比 512×512 小 64 倍,attention 计算从 O(5124)O(512^4) 降至 O(644)O(64^4)
  • 语义质量:VAE 的潜空间已经编码了语义信息,扩散模型专注于语义级别的生成
  • 模块化:VAE 和扩散模型可以独立训练、升级

Stable Diffusion 就是 LDM 架构的代表实现:用 CLIP text encoder 编码文本提示,通过 cross-attention 注入 U-Net 的去噪过程,最后由 VAE decoder 将 latent 解码为最终图像。

总结

扩散模型通过”逐步加噪 → 学习去噪”的框架,将复杂的生成问题分解为一系列简单的去噪步骤。关键要点:

  • 前向过程:固定的加噪马尔可夫链,可一步到位采样任意时间步
  • 训练目标:预测噪声(简单的 MSE 损失),不需要对抗训练
  • 噪声调度:余弦调度比线性调度更高效,均匀分配信噪比变化
  • U-Net 架构:编码器-解码器 + skip connection + 时间步注入
  • CFG:通过放大条件/无条件差异实现可控生成
  • DDIM:确定性采样,将步数从 1000 压缩到 20-50
  • Latent Diffusion:在潜空间运行扩散,大幅提升计算效率

这些基础知识是理解后续进阶主题的前提 — 包括用 Transformer 替代 U-Net 的 Diffusion Transformer (DiT),以及扩展到视频生成的相关技术。