扩散模型定义一个可计算的过程,把数据逐步变成噪声,再训练模型估计有用的逆向转移。采样从噪声开始,反复应用学习到的转移得到结果。它是一类生成模型,并不自动保证写实性、事实性或普遍的质量。

核心要点

  • 前向过程由噪声调度固定,反向模型与采样器分别学习或选择。
  • 噪声预测 MSE 很常见,但参数化、损失权重、条件输入和调度器会改变目标与行为。
  • DDPM 与 DDIM 是采样形式,不是质量保证。
  • 潜在扩散降低工作表示的计算量,但 VAE 会引入重建限制,文本编码器也会限制条件控制。
  • Guidance、步数、分辨率、随机种子、调度器、检查点、Prompt 和安全过滤都会影响输出。
  • 比较模型时应固定带日期的版本、Prompt、种子、预处理、硬件、指标、人工审阅和许可证检查。

前向扩散过程

令 (x_0) 为数据样本,常见高斯转移为:

[ q(x_t\mid x_{t-1}) = \mathcal{N}(\sqrt{1-\beta_t}x_{t-1}, \beta_t I) ]

噪声调度 (\beta_t) 控制信噪比路径。令 (\alpha_t=1-\beta_t)、(\bar{\alpha}t=\prod{s=1}^{t}\alpha_s),可以直接得到:

[ x_t=\sqrt{\bar{\alpha}_t}x_0+ \sqrt{1-\bar{\alpha}_t}\epsilon,\quad \epsilon\sim\mathcal{N}(0,I) ]

因此训练时可以抽取一个时间步,直接构造 (x_t),不必逐步执行之前的所有转移。

python
def add_noise(x0, alpha_bar_t, noise):
    return alpha_bar_t.sqrt() * x0 + (1 - alpha_bar_t).sqrt() * noise

该片段假定张量形状兼容且调度表已校验,不是完整调度器实现。

学习反向过程

模型接收带噪样本、时间步嵌入和可选条件 (c)。常见目标为:

[ \mathbb{E}{x_0,t,\epsilon} \left[w(t)|\epsilon-\epsilon\theta(x_t,t,c)|^2\right] ]

权重 (w(t))、目标参数化(epsilonv 或其他形式)、噪声计划和数据归一化都属于模型契约。简化训练步骤如下:

python
def training_loss(model, x0, schedule, condition=None):
    t = torch.randint(0, schedule.num_steps, (x0.shape[0],), device=x0.device)
    noise = torch.randn_like(x0)
    alpha_bar = schedule.alpha_bar[t].view(-1, 1, 1, 1)
    xt = add_noise(x0, alpha_bar, noise)
    predicted = model(xt, t, condition)
    return torch.nn.functional.mse_loss(predicted, noise)

真实实现还要处理条件批次、混合精度、参数化、损失权重、EMA、检查点和分布式加载。将示例视为可复现基线前,应锁定框架、调度器、模型修订版和预处理。

采样:DDPM、DDIM 与调度器

推理时,调度器根据时间步 (t) 的模型预测计算前一个状态。DDPM 采样具有随机性,通常需要较多模型评估;DDIM 定义了一族非马尔可夫采样,在减少评估次数时仍可使用确定性设置。

两者都不保证固定加速比或“几乎没有质量损失”。结果取决于检查点、噪声计划、时间步间隔、分辨率、Guidance、硬件和指标。现代管线还提供其他求解器与调度方式,应在固定协议下比较。

至少记录:

  • 检查点与调度器修订版;
  • Seed、Prompt、负面 Prompt 和条件图片;
  • 分辨率、批量、精度和模型评估次数;
  • Guidance 与安全设置;
  • 设备、驱动、框架和墙钟时间测量方法。

潜在扩散与条件控制

潜在扩散在编码表示而非像素上执行去噪:

  1. 编码器把图像映射为潜在表示;
  2. 去噪器在该表示上运行;
  3. 解码器还原像素。

这对许多管线可以降低计算量,但不代表计算免费。编码器/解码器可能损失细节,潜在缩放是模型特定的,尺寸也必须符合检查点契约。

文本条件系统通常通过交叉注意力注入文本特征。Classifier-Free Guidance 可表示为:

[ \epsilon_{\text{guided}} = \epsilon_{\text{uncond}}+ s(\epsilon_{\text{cond}}-\epsilon_{\text{uncond}}) ]

增大 (s) 可能改善部分场景的 Prompt 遵循,也可能降低多样性或产生伪影,不存在通用最佳值。

版本敏感的 Diffusers 示例

下面只是示意。模型 ID、Pipeline 类、调度器默认值、许可证和显存要求都会变化;运行前必须核对准确的模型卡片和已安装 diffusers 版本。

python
import torch
from diffusers import DiffusionPipeline

model_id = "ORG/MODEL_REVISION"  # 生产代码应锁定经过审阅的修订版。
device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.float16 if device == "cuda" else torch.float32

pipe = DiffusionPipeline.from_pretrained(model_id, torch_dtype=dtype)
pipe = pipe.to(device)

result = pipe(
    prompt="a synthetic landscape for a test fixture",
    num_inference_steps=30,
    generator=torch.Generator(device=device).manual_seed(1234),
)
image = result.images[0]
image.save("fixture.png")

不要把未经审阅的模型 ID、受版权保护的 Prompt 集、私人输入或生成结果当作已验证的产品产物。服务层还应增加输入大小限制、内容策略、输出存储、超时和错误处理。

图生图、局部重绘与 Control

  • 图生图从条件图开始,强度/噪声参数决定保留多少输入信息;
  • 局部重绘还需要 Mask,但 Mask 极性、边缘处理、分辨率和管线契约可能不同;
  • Control 适配器可以使用边缘、姿态、深度等条件,预处理必须符合其训练假设。

这些应作为不同任务分别评测。Prompt-only 分数不能说明身份保持、几何结构、Mask 区域泄漏或控制遵循。

与 GAN、VAE 的比较

家族 优势 重要成本或限制
GAN 许多设计可单次前向快速采样 对抗优化、模式覆盖和稳定性问题
VAE 具有明确编码器/解码器和潜在结构 重建/生成权衡与似然假设
扩散模型 条件控制灵活、逐步细化 多次模型评估、内存和调度器依赖

不要脱离任务、数据集、检查点、指标和日期宣称“扩散质量最高”。选择还应考虑延迟、能耗、隐私、许可证、可控性、失败严重性和运维成本。

评测与可复现

评测集应拆分为:

  • Prompt 遵循和构图;
  • 身份、几何、文字渲染和细节;
  • 多样性与 Seed 敏感性;
  • 安全、隐私和记忆化探测;
  • 延迟、峰值内存、吞吐和成本;
  • 人工偏好与任务效用。

比较时固定 Prompt 和 Seed,但不能把一个 Seed 当作代表。记录样本数、指标定义、可行时的置信区间或方差以及典型失败。FID、基于 CLIP 的分数和人工评分测量的是不同属性,不能互相替代。

安全、许可证与运维

模型权重、训练数据、Prompt、参考图片和输出可能适用不同许可证与隐私义务。商业使用前应审阅模型卡片、数据政策、下游限制、来源要求和适用法律。私人图片不应进入共享遥测;尽量记录元数据而非原始 Prompt,并定义保留和删除策略。

生产控制应包括请求认证、租户隔离、输入/输出上限、队列背压、超时、取消、内容筛查、滥用监控和可回滚模型注册表。生成内容不会自动变得真实、安全或不涉及第三方权利。

常见问题

为什么去噪可以生成新样本?

模型学习的是带噪训练样本上的条件反向过程。从随机噪声状态开始应用该过程,可以从学习到的分布中采样,但结果仍受模型和采样器限制。

DDIM 一定比 DDPM 快或好吗?

不一定。DDIM 可能用更少评估次数,也可以确定性采样,但质量与速度取决于时间步、调度器、检查点、分辨率和硬件。应基准测试准确管线。

需要什么硬件?

没有统一显存数字。分辨率、批量、注意力实现、精度、模型架构、卸载和并发共同决定内存。应在目标部署上测量峰值显存和延迟。

步数越多质量越好吗?

不一定。额外评估可能在某个管线中改善结果,也可能很快饱和或产生伪影。应在固定质量与延迟协议下调参。

生成内容自动没有版权风险吗?

不是。权利和义务取决于模型许可证、训练与参考数据、司法辖区、输出相似度和使用场景。高风险商业决策应保留来源记录并咨询合格法律专业人士。

延伸阅读

总结

扩散模型是一类学习去噪系统,其行为由数据、目标、检查点、条件输入、调度器和运行时共同决定。理解公式只是起点;在把图像生成器用于生产前,还要锁定实现、测量完整管线,并治理隐私、许可证、安全和回滚。