第22章 扩散模型:从噪声中生成图像
把一张照片反复加入少量随机噪声,轮廓会逐渐模糊,最后只剩像电视雪花一样的随机点。这个破坏过程很容易设计:每一步加多少噪声由我们规定,不需要神经网络学习。
真正困难的问题是反过来:看到一张被污染到某种程度的图像,模型能否估计其中哪些变化是噪声?如果每一步都去掉一点,并重复许多次,随机噪声能否逐渐变成一张符合训练数据规律的新图像?
扩散模型(diffusion model)正是沿这条路线生成。训练时,人为把真实样本污染到随机噪声等级,让网络学习预测噪声或等价的去噪方向;生成时,从纯噪声开始反复调用网络,逐步走回数据分布附近。
这里的“扩散”借用了热力学和随机过程的语言,但模型里没有一张完整图片藏在噪声背后等待擦亮。每次采样的随机起点与去噪轨迹共同决定最后结果。
为什么不直接一次生成整张图
一张 \(512\times512\) 的彩色图像包含近 80 万个通道数值。要求网络一次从随机向量准确输出所有像素,要同时决定物体、构图、纹理、光照和细节,误差结构很复杂。
扩散模型把难题拆成许多较容易的局部修正:
训练:真实图像 -> 随机选择噪声等级 -> 加噪图像 -> 预测加入的噪声
生成:纯噪声 -> 去一点噪声 -> 再去一点 -> ... -> 生成图像
在高噪声阶段,模型主要决定大尺度构图;噪声减少后,轮廓、材质和微小纹理逐渐稳定。这个描述是有用直觉,不是每一步都有人工规定的职责。所有时间步通常共享同一网络,时间步编码告诉网络当前噪声有多强。
前向过程只负责破坏数据
设真实样本为 \(x_0\)。前向过程在第 \(t\) 步加入少量高斯噪声:
\[ q(x_t\mid x_{t-1})= \mathcal{N}\left( \sqrt{1-\beta_t}\,x_{t-1},\beta_t I \right) \]
\(\beta_t\) 控制这一小步加入多少噪声,一系列 \(\beta_1,\ldots,\beta_T\) 构成噪声日程(noise schedule)。随着 \(t\) 增大,原始信号逐渐减弱,随机成分逐渐增加。
Sohl-Dickstein 等人把这种逐步破坏与学习反向过程结合,建立了扩散概率模型的重要早期形式。(Sohl-Dickstein 等 2015年) 前向过程的参数通常由设计者规定,训练的不是“怎样加噪”,而是“怎样逆转不同程度的加噪”。
训练不必每次走完整条链
若每个训练样本都先执行几百或上千次加噪,成本会很高。高斯过程有一个关键便利:可以直接从 \(x_0\) 采样任意时间步 \(x_t\)。
定义 \(\alpha_t=1-\beta_t\),以及累积乘积:
\[ \bar\alpha_t=\prod_{s=1}^{t}\alpha_s \]
从标准正态分布采样 \(\epsilon\sim\mathcal{N}(0,I)\),便可直接构造:
\[ x_t= \sqrt{\bar\alpha_t}\,x_0+ \sqrt{1-\bar\alpha_t}\,\epsilon \]
训练时随机选一个 \(t\),一次就得到对应噪声等级的样本。模型接收 \(x_t\) 和时间步 \(t\),目标是预测刚才采样的 \(\epsilon\)。当噪声日程使 \(\bar\alpha_T\) 足够接近 0 时,\(x_T\) 才近似服从标准高斯分布,因此生成阶段可以用标准高斯噪声作为起点。
核心机制:随机抽一个噪声等级学习去噪
训练时,从真实样本随机选择时间步并直接加入相应强度的噪声,网络学习预测噪声或等价的反向方向。生成时,从纯噪声开始,按从大到小的时间步反复应用同一个去噪网络。训练只需一次随机时间步,采样却需要一条逐步反向链。
网络究竟预测什么
DDPM 的常用参数化让网络 \(\epsilon_\theta(x_t,t)\) 预测加入的噪声,使用均方误差:(Ho 等 2020年)
\[ \mathcal{L}_{\mathrm{simple}}= \mathbb{E}_{x_0,t,\epsilon} \left[ \left\| \epsilon-\epsilon_\theta(x_t,t) \right\|_2^2 \right] \]
网络若能准确估计噪声,就能从 \(x_t\) 中推断更干净的信号方向。它也可以改为预测原始样本 \(x_0\)、速度变量 \(v\) 或分布的 score;这些参数化会改变数值尺度和训练权衡,但都服务于反向生成。
图像扩散常使用带有下采样、上采样和跳跃连接的 U-Net。高分辨率特征帮助保留空间细节,低分辨率特征汇集更大范围信息,时间步表示注入各层,使同一网络知道当前是在处理浓重噪声还是微小残差。
损失小不代表模型逐像素记住训练图片。每次训练都会随机选择样本、时间步和噪声,网络要学习跨许多样本重复出现的去噪规律。但大模型仍可能记忆或近似复现部分训练内容,尤其是重复、高频或独特样本;是否记忆需要专门测量。
技术深潜:反向一步的数据流
由闭式加噪式可得,对给定 \(x_t\) 和预测噪声 \(\hat\epsilon\),可以估计原始样本:
\[ \hat x_0= \frac{x_t- \sqrt{1-\bar\alpha_t}\,\hat\epsilon} {\sqrt{\bar\alpha_t}} \]
采样器再根据 \(x_t\)、\(\hat x_0\)、噪声日程和可选随机项,构造噪声稍少的 \(x_{t-1}\)。可以把一步概括为:
x_t + 时间步 t
|
v
去噪网络预测噪声 -> 估计 x_0 -> 采样或计算 x_{t-1}
反向过程通常不是简单地做 \(x_t-\hat\epsilon\)。不同时间步的信号与噪声比例不同,更新系数必须与噪声日程一致。采样器还可以选择保留多少随机性。
从概率角度看,模型学习的是反向转移 \(p_\theta(x_{t-1}\mid x_t)\) 的参数。Ho、Jain 与 Abbeel 展示了扩散概率模型与去噪 score matching 的联系;Song 等人进一步用随机微分方程统一描述连续时间的前向扰动和反向生成。(Ho 等 2020年; Song 等 2021年)
生成时为什么慢
自回归语言模型每生成一个 Token 调用一次网络。扩散模型即使只生成一张图,也可能在多个时间步反复调用去噪网络。像素或潜变量可以并行更新,但时间步之间有先后依赖。
早期 DDPM 常使用数百到上千步。后来采样器通过不同数值方法、确定性轨迹、蒸馏或一致性训练减少网络调用。步数减少会提高速度,却可能损失细节、多样性或稳定性;最佳选择取决于模型和任务。
不能只用“采样步数”比较两个系统。每一步网络大小、图像分辨率、是否在潜空间、批量和硬件都影响延迟。
条件怎样进入去噪过程
无条件模型只需生成“像训练数据”的样本。文本生成图像还必须满足提示,例如“一辆红色自行车停在雪地里”。
文本首先由编码器变成一组表示。去噪 U-Net 可以通过交叉注意力读取这些表示:当前图像特征提出 Query,文本 Token 提供 Key 和 Value。每个时间步都能利用相同提示,但不同空间位置和网络层会读取不同文本信息。
条件并不是逐字变成像素。它改变每一步去噪方向的概率分布。训练数据中的图文对应关系决定模型怎样把“红色”“自行车”和“雪地”映射到视觉模式;提示中陌生组合、否定关系和精确计数可能仍然失败。
引导把“像数据”推向“更符合条件”
只加入条件,模型可能生成自然但不够符合提示的图。引导(guidance)增强条件对去噪方向的影响。
无分类器引导在训练时随机丢弃一部分条件,使同一网络既能预测有条件噪声,也能预测无条件噪声。采样时组合两者:(Ho 和 Salimans 2022年)
\[ \epsilon_{\mathrm{guided}}= \epsilon_{\mathrm{uncond}}+ w\left( \epsilon_{\mathrm{cond}}- \epsilon_{\mathrm{uncond}} \right) \]
\(w\) 越大,更新越强调“有条件方向相对于无条件方向的差异”。适度增加通常提高提示符合度,但过强可能降低多样性、使颜色过饱和或产生结构伪影。
Dhariwal 与 Nichol 展示了扩散模型结合引导后在 ImageNet 合成质量上的进展。(Dhariwal 和 Nichol 2021年) 这类结果说明扩散路线可以达到很高视觉质量,不表示单一指标能覆盖事实一致性、文本拼写、空间关系或训练数据风险。
技术深潜:为什么引导尺度不是质量旋钮
设条件预测为 \(\epsilon_c\),无条件预测为 \(\epsilon_u\)。差向量 \(\epsilon_c-\epsilon_u\) 近似表示条件使去噪方向发生的改变。引导把这部分放大。
当 \(w=0\) 时,模型沿无条件方向采样;当 \(w=1\) 时,得到普通条件预测;当 \(w>1\) 时,条件被外推增强。这个外推可能进入训练中较少见的区域,因此更“听话”与更“自然”并不总能同时提高。
引导还与负面提示、多个条件、采样器和噪声时间步相互作用。不能把负面提示理解成严格逻辑排除;它只是向模型提供另一个条件方向。
评估条件生成至少应拆开:
- 图像是否符合提示中的对象与属性;
- 构图和纹理是否自然;
- 多次采样是否保持合理多样性;
- 是否复制训练样本或放大偏见;
- 是否在文字、手指、数量和空间关系上系统失败。
单一美学分数可能奖励表面精致,却掩盖语义错误。
为什么要在潜空间扩散
直接在高分辨率像素上运行 U-Net,计算和显存成本很高。潜空间扩散(latent diffusion)先用自编码器把图像压缩成较小的潜表示,在潜空间中加噪和去噪,最后由解码器还原像素。(Rombach 等 2022年)
训练图像 -> 编码器 -> 潜表示 z_0 -> 加噪与去噪训练
随机潜噪声 -> 多步去噪 -> z_0 -> 解码器 -> 生成图像
这与第 17 章自编码器路线相连。区别是,扩散模型学习潜表示的分布,解码器负责把最终潜变量变成图像。压缩越强,计算越省,但小文字和精细纹理可能在编码器中丢失。
潜空间扩散并没有消除像素生成问题,而是把“学习全局生成分布”和“还原局部像素细节”分给两个组件。
它与 GAN、VAE 和自回归生成有何不同
| 路线 | 训练信号 | 生成方式 | 常见困难 |
|---|---|---|---|
| VAE | 重建与分布正则 | 一次解码潜变量 | 细节与潜空间约束权衡 |
| GAN | 判别器对抗反馈 | 一次前向生成 | 训练不稳定、模式坍塌 |
| 自回归 | 下一个元素似然 | 逐元素生成 | 生成顺序慢、误差累积 |
| 扩散 | 不同噪声级的去噪 | 多步迭代生成 | 多次网络调用、采样成本 |
这些路线可以组合。图像可以先离散 Token 化再自回归生成,也可以用 GAN 或感知损失训练自编码器,再在其潜空间运行扩散。模型名称不能替代对数据流和损失的检查。
扩散模型会在哪里失败
扩散生成常见失败包括:
- 提示中的数量、左右、包含与否等组合关系不稳定;
- 训练数据稀少的概念被刻板模式替代;
- 文字、符号和精确几何结构出现局部错误;
- 强引导造成过饱和、重复纹理或多样性下降;
- 潜空间压缩损失小细节;
- 长采样链带来延迟与能源成本;
- 数据版权、隐私、偏见和近似复现问题仍然存在。
模型能生成逼真图像,不等于图像描述了真实事件。视觉真实性与事实真实性是两个维度。
学习路径:P09 小图像扩散模型
P09 保留为进阶路线,不列为首版完整实践。建议复现顺序是:
- 在二维点云上实现不同时间步的前向加噪;
- 训练小型 MLP 预测噪声,绘出去噪向量场;
- 再迁移到 \(28\times28\) 灰度图像与小型 U-Net;
- 检查随机时间步、噪声形状和损失是否有限;
- 比较 20、50、100 个采样步的速度与质量;
- 最后加入类别条件和无分类器引导。
这个路径先验证扩散机制,再增加图像规模和条件控制,避免把大量算力花在掩盖实现错误上。
本章小结
- 前向扩散由设计者规定,逐步破坏真实数据;网络学习的是反向去噪方向。
- 高斯过程允许训练时直接采样任意噪声等级,不必为每个样本走完整加噪链。
- 常见 DDPM 目标让网络根据 \(x_t\) 和时间步预测加入的噪声。
- 生成从随机噪声开始,反复调用同一去噪网络;时间步依赖使采样通常比一次前向生成慢。
- 文本条件通过表示与交叉注意力改变去噪方向;引导提高条件影响,但会牺牲多样性或稳定性。
- 潜空间扩散先压缩图像,再在较小表示上去噪,以细节损失换取计算效率。
- 扩散、VAE、GAN 和自回归模型拥有不同训练与采样数据流,不能只按视觉结果混为一谈。
思考问题
- 为什么训练扩散模型时可以随机抽一个时间步,而生成时却要执行一系列反向步骤?
- 网络预测噪声与直接预测干净图像有什么联系?
- 无分类器引导尺度过大时,为什么提示符合度可能提高而多样性下降?
- 潜空间扩散节省了哪些计算,又可能丢失哪些信息?
延伸阅读
- Sohl-Dickstein 等人的工作适合理解扩散概率模型的早期构造。(Sohl-Dickstein 等 2015年)
- DDPM 论文给出噪声预测目标及其与去噪 score matching 的联系。(Ho 等 2020年)
- 基于随机微分方程的工作提供了连续时间统一视角。(Song 等 2021年)
- 无分类器引导论文适合进一步理解条件方向怎样在采样时被放大。(Ho 和 Salimans 2022年)
- 潜空间扩散论文展示了自编码器压缩、交叉注意力与扩散生成的工程组合。(Rombach 等 2022年)
