扩散模型原理
扩散模型(Diffusion Model)是当前AI图像生成的核心技术,通过逐步添加和去除噪声来生成高质量图像。本文将深入讲解其工作原理。
基本原理
扩散模型的核心思想源于非平衡热力学。其灵感来自于气体分子的扩散过程——分子从高浓度区域向低浓度区域扩散,直到达到平衡状态。
在图像生成领域,扩散模型将图像生成过程分为两个阶段:
核心概念
- 前向扩散过程(Forward Process):逐步向图像添加高斯噪声,直到图像变成纯噪声。这个过程是确定性的,不需要学习。
- 反向去噪过程(Reverse Process):学习如何从噪声逐步恢复到清晰图像。这个过程需要训练神经网络来预测噪声。
这种设计的优势在于:前向过程提供了清晰的训练目标,而反向过程则允许我们从任意噪声生成图像。
💡 关键洞察
扩散模型本质上是在学习"如何从混乱中恢复秩序"。这种渐进式的生成方式比一次性生成更加稳定和可控。
前向扩散
前向扩散过程是扩散模型的"破坏"阶段。我们从一张清晰的图像开始,逐步添加噪声,直到图像变成完全的随机噪声。
过程详解
假设我们有一张原始图像 x_0,前向过程会在 T 个时间步内逐步添加噪声:
数学表示:
q(x_t | x_{t-1}) = N(x_t; √(1-β_t)·x_{t-1}, β_t·I)其中 β_t 是噪声调度参数,控制每一步添加的噪声量
噪声调度
噪声调度决定了每一步添加多少噪声。常见的调度策略包括:
- 线性调度(Linear):β 值从 β_1 线性增长到 β_T。简单但可能导致早期信息损失过快。
- 余弦调度(Cosine):使用余弦函数控制 β 值。更加平滑,信息保留更好,是当前主流选择。
- 平方根调度(Sqrt):介于线性和余弦之间的折中方案。
⚠️ 注意事项
在实际应用中,我们不需要逐步计算前向过程。利用重参数化技巧,可以直接从 x_0 计算任意时刻 x_t,这大大提高了训练效率。
反向去噪
反向去噪是扩散模型的"创造"阶段。我们需要训练一个神经网络来预测每一步添加的噪声,然后减去它来恢复图像。
网络架构
扩散模型通常使用 UNet 架构作为噪声预测网络:
逐步下采样,提取图像特征,捕获全局信息
最深层特征表示,包含图像的语义信息
逐步上采样,恢复空间细节,生成清晰图像
连接编码器和解码器的对应层,保留细节信息
时间嵌入
为了让网络知道当前处于哪个去噪步骤,需要注入时间步信息:
- 正弦位置编码:将时间步编码为高维向量
- 自适应归一化:AdaGN 将时间信息注入到网络中
- 注意力机制:Cross-Attention 将条件信息融入生成过程
采样策略
采样策略决定了从噪声到图像的路径,直接影响生成质量和速度。
常用采样器对比
| 采样器 | 步数 | 速度 | 质量 | 特点 |
|---|---|---|---|---|
| DDPM | 1000 | 慢 | 优秀 | 原始方法,稳定可靠 |
| DDIM | 10-100 | 快 | 良好 | 确定性采样,可复现 |
| Euler a | 20-30 | 很快 | 良好 | 简单高效,常用默认 |
| DPM++ 2M | 20-30 | 很快 | 优秀 | 当前最佳选择 |
| UniPC | 10-20 | 极快 | 优秀 | 最新方法,极少步数 |
💡 实用建议
- • 日常使用推荐 DPM++ 2M Karras,20-30步即可获得良好效果
- • 需要确定性结果时使用 DDIM
- • 快速预览可用 Euler a 或 UniPC
- • 追求最高质量可增加步数到 50+
训练过程
扩散模型的训练目标是让网络学会预测噪声。
训练步骤
- 采样图像:从训练集中随机采样一张图像 x_0
- 采样时间步:随机选择一个时间步 t ∈ [1, T]
- 添加噪声:根据噪声调度向图像添加噪声得到 x_t
- 预测噪声:将 x_t 和 t 输入网络,预测添加的噪声
- 计算损失:计算预测噪声与真实噪声的 MSE 损失
- 反向传播:更新网络参数
条件生成
对于文本到图像生成,还需要将条件信息(如文本提示词)融入模型:
- Classifier-Free Guidance:同时训练有条件和无条件模型,推理时混合输出
- Cross-Attention:通过注意力机制注入文本嵌入
- CFG Scale:控制条件引导强度,通常设置为 7-12
优势与局限
✅ 优势
- • 生成质量高:图像细节丰富,纹理自然
- • 训练稳定:不易出现模式崩溃
- • 可控性强:支持多种条件控制方式
- • 多样性好:同提示词可生成不同变体
- • 可解释性:去噪过程可视化,易于理解
❌ 局限
- • 生成速度慢:需要多步迭代,比 GAN 慢
- • 计算成本高:训练需要大量算力
- • 文本渲染弱:难以准确生成图像中的文字
- • 细节控制难:精确控制特定区域仍有挑战
- • 长宽比受限:偏离训练比例时质量下降
🔮 发展趋势
最新的研究方向包括:一致性模型(Consistency Models)实现少步生成、潜在扩散(Latent Diffusion)降低计算成本、以及改进的文本渲染和细节控制能力。
数学原理深入
深入理解扩散模型背后的数学原理,帮助你更好地调整参数和优化效果。
前向过程数学推导
核心公式:
x_t = √(ᾱ_t)·x_0 + √(1-ᾱ_t)·ε其中:
- • x_0:原始清晰图像
- • x_t:第t步的噪声图像
- • ε:标准高斯噪声
- • ᾱ_t = ∏(1-β_i):累积乘积,控制信号保留比例
反向过程推导
去噪公式:
x_{t-1} = (1/√α_t)(x_t - (1-α_t)/√(1-ᾱ_t)·ε_θ(x_t,t)) + σ_t·z关键变量:
- • ε_θ(x_t,t):神经网络预测的噪声
- • σ_t:噪声的标准差,控制随机性
- • z:随机噪声(可选,影响确定性)
训练目标
简化损失函数:
L = E_t,x_0,ε[||ε - ε_θ(x_t,t)||²]训练目标是让网络预测的噪声尽可能接近真实添加的噪声。这是一个简单的均方误差损失。
💡 数学原理的实际意义
- • 噪声调度:β_t的选择影响信息保留和生成质量
- • 采样步数:更多步数意味着更精细的去噪过程
- • CFG Scale:控制条件引导的强度,影响提示词遵循程度
扩散模型架构对比
了解不同扩散模型架构的特点和适用场景。
像素空间 vs 潜在空间
像素空间扩散
- • 直接在像素空间操作
- • 计算量大,显存占用高
- • 细节保留更好
- • 代表:DALL-E 2, Imagen
潜在空间扩散(LDM)
- • 在压缩的潜在空间操作
- • 计算效率高,显存友好
- • 略有信息损失
- • 代表:Stable Diffusion
UNet vs DiT架构
| 特性 | UNet | DiT (Diffusion Transformer) |
|---|---|---|
| 架构类型 | 卷积网络 | Transformer |
| 感受野 | 局部感受野 | 全局感受野 |
| 扩展性 | 有限 | 优秀 |
| 训练效率 | 较高 | 需要更多数据 |
| 代表模型 | SD 1.5, SDXL | SD3, Sora |
主流模型架构对比
| 模型 | 架构 | 参数量 | 特点 |
|---|---|---|---|
| SD 1.5 | UNet + LDM | ~1B | 生态最丰富 |
| SDXL | UNet + 双编码器 | ~3.5B | 高质量,1024分辨率 |
| SD3 | DiT + MMDiT | 2B-8B | 最新架构,文本理解强 |
| DALL-E 3 | 未公开 | 未公开 | 文本理解优秀 |
| Flux | DiT | 12B | 开源最强之一 |
🔮 架构演进趋势
从UNet到DiT的转变代表了扩散模型的发展方向。DiT架构具有更好的扩展性,随着模型规模增大,性能提升更明显。未来更多的模型将采用Transformer架构。
生成优化技巧
掌握这些技巧,提升生成质量和效率。
采样优化
高级采样器详解:
- DPM++ 系列:
- - DPM++ 2M:二阶多步方法,速度快质量好
- - DPM++ SDE:随机微分方程方法,细节更丰富
- - DPM++ 2M SDE:结合两者优点
- Karras 调度:特殊的噪声调度,配合DPM++效果更佳
- UniPC:统一预测校正框架,极少步数也能获得好效果
CFG优化策略
Classifier-Free Guidance调优:
- 低CFG(5-7):创意性强,但可能偏离提示词
- 中等CFG(7-12):平衡选择,适合大多数场景
- 高CFG(12-20):严格遵循提示词,但可能过饱和
- Dynamic CFG:在采样过程中动态调整CFG值
高分辨率生成策略
Hires.fix 高清修复
- • 先用低分辨率生成主体结构
- • 再用图生图放大并添加细节
- • 推荐设置:放大倍数1.5-2x,重绘幅度0.3-0.5
Tile ControlNet 放大
- • 使用Tile ControlNet保持结构
- • 可以添加更多细节而不破坏整体
- • 适合大幅面打印或高清展示
💡 优化建议总结
- • 日常生成:DPM++ 2M Karras + 20-30步 + CFG 7-8
- • 高质量生成:DPM++ SDE Karras + 40-50步 + CFG 9-12
- • 快速预览:UniPC + 10-15步 + CFG 5-7
- • 高分辨率:基础生成 + Hires.fix + Tile ControlNet