从噪声到图像:Diffusion Model 的发展简史
相关信息
写这篇文章的直接原因是:我的 final year project topic 和视觉生成有关。在继续读更具体的论文之前,我需要先给自己画一张 diffusion model 的发展地图:这个想法最早从哪里来,为什么 DDPM 让它重新变得可用,DDIM、Latent Diffusion、Diffusion Transformer 又分别改变了什么。
为什么 Diffusion Model 值得单独写一篇
我第一次看 diffusion model 的时候,直觉上觉得它有点反过来。它不是直接从一个 latent vector 生成图像,而是先定义一个“慢慢毁掉图像”的过程:不断往图像里加噪声,直到图像变成接近高斯噪声;然后模型再学习如何把这个破坏过程反过来,从噪声一步步恢复出结构。
跟 GAN 那种“一步生成图像”的方式相比,这个设计看起来很慢。但 diffusion model 后来真正重要,也正是因为这种设计:训练目标稳定,生成过程是渐进的,而且可以被 class label、text prompt、mask、layout 或其他条件引导。只要计算问题被解决,diffusion 就会变成一个非常灵活的视觉生成框架。
这篇不是完整的数学教程,更像是我给自己的历史地图:Diffusion Model 是怎样从一个优雅的概率建模想法,变成现代图像生成基础设施的。
2015:把生成看成“反向破坏过程”
现代 diffusion model 的起点通常会追溯到 Sohl-Dickstein 等人在 2015 年的论文 Deep Unsupervised Learning using Nonequilibrium Thermodynamics。[1] 这篇论文的核心想法来自非平衡统计物理:先把复杂的数据分布慢慢加噪声,直到它变成一个简单分布;再学习一个反向过程,把结构恢复回来。
正向过程可以写成:
x0→x1→⋯→xT.
经过很多小的加噪步骤之后,xT 会接近一个简单的高斯分布。生成模型要学习的是反向链:
xT→xT−1→⋯→x0.
这个想法很漂亮,因为它把“生成”拆成了很多个更简单的去噪问题。但在这个阶段,diffusion 还没有成为图像生成领域最显眼的主角。GAN 的样本更有冲击力,VAE 作为 latent-variable model 更容易讲清楚,autoregressive model 也有很强的 likelihood 结果。Diffusion 有一个好故事,但还没有那种让大家不得不关注的图像质量和工程配方。
我会把这个阶段记成一个问题:
生成能不能不是从噪声一步跳到图像,而是通过很多小步骤逐渐恢复结构?
Score-based 视角:学习数据分布往哪里更可能
这里还有一条很重要的暗线:score-based generative modeling。所谓 score,就是 log data density 对输入的梯度:
∇xlogp(x).
直觉上,它指向数据分布概率更高的方向。Song 和 Ermon 在 2019 年的 Generative Modeling by Estimating Gradients of the Data Distribution 中,用不同噪声级别下的 score estimation 和 annealed Langevin dynamics,让这条路线变得更实用。[2]
这很重要,因为 diffusion 可以从两个角度来理解。一种说法是:我们学习一个反向 Markov chain。另一种说法是:我们学习一个 vector field,告诉带噪样本应该怎样往数据分布的方向移动。Song 等人在 2020 年的 SDE formulation 又进一步把 diffusion model 和 score-based model 放进了统一的连续时间框架里。[3]
我之前不太理解为什么 DDPM 总是和 score matching 放在一起讲,直到意识到这一点:
去噪不只是把噪声去掉,也是学习从噪声位置回到数据流形的局部方向。
这个直觉对计算机视觉很有用。自然图像并不是均匀填满整个像素空间的。它们位于一个更低维、更有结构的数据流形附近。加噪声会把样本推离这个结构,而去噪模型学习的是怎样把它拉回来。
2020:DDPM 让 Diffusion 重新变得可用
真正的转折点是 Ho、Jain 和 Abbeel 在 2020 年的 Denoising Diffusion Probabilistic Models。[4] DDPM 没有发明最早的 diffusion 思想,但它给出了一个简单、有效、容易记住的实践配方。
正向过程按照某个 variance schedule 加高斯噪声:
q(xt∣xt−1)=N(1−βtxt−1,βtI).
反向过程由神经网络学习。实践中,U-Net 接收带噪图像 xt 和时间步 t,然后预测被加进去的噪声。训练目标可以简化成一个 noise prediction loss:
Ex0,ϵ,t[∥ϵ−ϵθ(xt,t)∥2].
这个简化是 DDPM 影响力很大的原因之一。生成不再是一个不稳定的 adversarial game,而是训练一个去噪网络做普通的回归。模型学习很多个很小的修正,样本也一步步变得更像图像。
DDPM 让 diffusion 从理论上的优雅想法,变成了实际可用的 image synthesis 方法。它也改变了生成模型的气质:GAN 很快,但难训练;diffusion 很慢,但稳定可靠。当质量上来之后,稳定性本身就成了很大的优势。
DDIM:第一个压力点是采样速度
DDPM 仍然有一个明显问题:采样太贵。如果生成一张图需要几百甚至上千个 denoising steps,那么模型再优雅也很难方便使用。
Song、Meng 和 Ermon 在 2020 年的 Denoising Diffusion Implicit Models 直接回应了这个问题。[5] DDIM 说明,我们可以使用一个 non-Markovian generative process,在保持 DDPM 同样训练目标的同时,大幅加速采样。论文中报告了相对 DDPM 约 10 倍到 50 倍的 wall-clock time 加速。
这里的概念转变很重要。模型并不一定要把每一个正向加噪步骤原封不动地倒放回来。我们可以沿着另一条更确定性的路径穿过同一组 marginal distributions。这样也会让 interpolation 更有意义,因为采样轨迹不再每一步都被新的随机性主导。
这就是 diffusion 发展史里的第一个工程教训:
当 diffusion model 已经能生成好图之后,下一个问题不只是“能不能生成”,而是“能不能足够快地生成”。
后面很多 sampler、ODE/SDE solver、design-space paper 都在延续这个主题:到底需要多少次 network evaluation?什么 noise schedule 更合适?什么 parameterization 会让反向过程更容易求解?
2021:质量、Guidance,以及 Diffusion 追上 GAN 的时刻
下一阶段让 diffusion model 变得更难被忽视。Nichol 和 Dhariwal 的 Improved Denoising Diffusion Probabilistic Models 表明,一些相对简单的改动,比如学习 reverse-process variance,可以在保持高质量的同时减少采样开销。[6]
随后 Dhariwal 和 Nichol 的 Diffusion Models Beat GANs on Image Synthesis 直接把信息写进了标题。[7] 通过架构改进和 classifier guidance,diffusion model 的样本质量可以和很强的 GAN baseline 竞争,甚至超过它们。
Guidance 是这一阶段的关键概念之一。Conditional diffusion model 可以在 diversity 和 fidelity 之间做权衡。Classifier guidance 用外部 classifier 的 gradient,把样本往目标类别推。代价是需要额外训练一个 classifier,而且这个 classifier 还要能处理 noisy images。
这个阶段重要,是因为它改变了 diffusion 的地位:
- 它不再只是稳定。
- 它不再只是数学上优雅。
- 它开始真正能在图像质量上竞争。
大概从这里开始,diffusion 从“有趣的替代方案”变成了“主流生成模型”。
文本条件与 Classifier-Free Guidance
当 diffusion model 已经能生成高质量图像之后,很自然的下一个问题就是控制。真实应用里,我们很少只想无条件生成图像。我们通常想指定类别、文本 prompt、mask、layout,或者其他条件。
OpenAI 的 GLIDE 探索了 text-conditional image generation 和 editing。[8] 其中一个重要发现是,classifier-free guidance 对 text-to-image generation 很有效。Ho 和 Salimans 后来进一步形式化了 classifier-free diffusion guidance:训练时让模型有时看到条件、有时看不到条件;采样时再把 conditional prediction 和 unconditional prediction 组合起来。[9]
这个想法很简单,但非常强。它不需要额外训练一个 classifier,而是让同一个 generative model 同时学习两件事:
- 没有条件时,图像应该是什么样;
- 加入条件后,denoising direction 应该怎样改变。
Guidance scale 于是变成了一个实用的控制旋钮。调高它,图像通常会更强地贴合 prompt,但 diversity 可能下降;调低它,样本可能更多样,但也可能不够听话。
对于 text-to-image 系统来说,这几乎变成了用户体验的一部分。Prompt 不只是一个标签,而是在整个 denoising process 里持续发挥作用的 steering signal。
Latent Diffusion:把昂贵的部分搬出像素空间
即使有了更好的 sampler 和 guidance,pixel-space diffusion 仍然很贵。一张 512 by 512 的 RGB 图像本身就是一个很大的对象,对它反复 denoise 的成本很高。
Latent diffusion 改变了问题的尺度。Rombach 等人的 High-Resolution Image Synthesis with Latent Diffusion Models 提出,不要直接在 pixel space 上做 diffusion,而是在一个 pretrained autoencoder 的 latent space 上做 diffusion。[10]
整个 pipeline 可以简单理解成:
image→latent→diffusion in latent space→decoded image.
这是一个非常重要的工程转向。Autoencoder 负责感知压缩,diffusion model 在更小、更高效的表示空间里工作。再通过 cross-attention layers,模型就可以接收 text、bounding box 或其他 conditioning input。
这也是理解 Stable Diffusion 的关键桥梁。重点不只是模型变小了,而是 diffusion 终于变得便宜到可以被更多人训练、运行和修改。
对视觉生成的学习来说,latent diffusion 是必须理解的一步:
现代图像生成不只是更好的 denoising model,也是在选择一个更合适的 denoising 空间。
Design Space 阶段:把各种旋钮拆开看
到 2022 年左右,diffusion 已经有很多可调部分:noise schedule、parameterization、sampler、loss weighting、preconditioning、guidance、architecture、latent space。Karras 等人的 Elucidating the Design Space of Diffusion-Based Generative Models 很有价值,因为它试图把这些选择拆开,而不是把它们混成一个模糊的 recipe。[11]
这种工作不一定像新 demo 那样吸引眼球,但对理解领域很重要。当一个 diffusion model 变强时,原因不一定是笼统的“diffusion 更好了”,而可能是:
- sampling trajectory 更好求解;
- network prediction target 更容易;
- noise schedule 把能力分配到了更合适的区域;
- solver 需要更少的 function evaluations;
- architecture 更适合 scaling。
这对后面读论文很重要。很多论文并不是要替代 diffusion,而是在改 diffusion 系统里的某一个旋钮。
Diffusion Transformer:从 U-Net 到 Transformer Backbone
很长一段时间里,一提到 diffusion model,默认想象就是“U-Net + noise timestep”。U-Net 对图像很合理,因为它保留空间结构,又能通过 downsampling 和 upsampling 同时处理局部细节与全局语义。
Diffusion Transformer,也就是 DiT,改变了这个默认想象。Peebles 和 Xie 的 Scalable Diffusion Models with Transformers 用一个处理 latent patches 的 Transformer 替换了常见的 U-Net backbone。[12]
这其实是两条趋势的自然交汇:
- latent diffusion 让输入更小,也更像 token;
- Transformer 在 tokenized data 上有很强的 scaling 能力。
DiT 并不意味着 U-Net 立刻消失。它更像是说明 diffusion 正在更直接地进入 scaling-law 时代。如果 image latent 可以被切成 patches,再变成 tokens,那么视觉生成模型就可以继承很多大 Transformer 系统的思路:depth、width、attention、conditioning 和 compute scaling。
所以我觉得 DiT 是一个历史节点,而不只是另一个模型变体。它暗示了视觉生成正在靠近语言模型经历过的那套 scaling 逻辑。
一张简短时间线
| 阶段 | 代表工作 | 主要贡献 |
|---|---|---|
| 2015 | Sohl-Dickstein et al. | 把 diffusion 定义成从噪声回到数据的 learned reverse process |
| 2019 | Song & Ermon | 用 noise-conditioned scores 建立 score-based generative modeling |
| 2020 | DDPM | 简化 denoising objective,让高质量图像生成变得可训练 |
| 2020 | DDIM | 通过 non-Markovian implicit process 加速采样 |
| 2020/2021 | Score-based SDE | 用连续时间框架统一 diffusion 和 score-based models |
| 2021 | Improved DDPM / Guided Diffusion | 改进质量、likelihood、采样步数和 guidance |
| 2021/2022 | GLIDE / classifier-free guidance | 让文本条件和无额外 classifier 的 guidance 变得实用 |
| 2021/2022 | Latent Diffusion | 在压缩 latent space 中做 diffusion,实现高分辨率生成 |
| 2022 | EDM | 拆解 sampler、schedule、parameterization 等 design choices |
| 2022/2023 | DiT | 用处理 latent patches 的 Transformer 替换 U-Net |
我现在怎样记住这条发展线
Diffusion model 的历史可以压缩成四次转变。
第一,diffusion 把生成变成了渐进过程。它不是从 latent vector 一步跳到样本,而是学习如何反转一个受控的破坏过程。
第二,DDPM 让配方变得实用。一个在不同 timestep 预测噪声的 U-Net,把理论变成了可以训练的图像模型。
第三,sampling 和 guidance 让 diffusion 变得好用。DDIM 和后来的 sampler 解决速度问题,classifier guidance 和 classifier-free guidance 解决可控性问题。
第四,latent diffusion 和 DiT 让 diffusion 变得可扩展。Latent diffusion 把工作搬到更便宜的表示空间里,DiT 则把 diffusion 接到了 Transformer scaling 的路线。
对我自己的视觉生成学习来说,这条历史很有帮助,因为它告诉我读新论文时应该看哪里。有的论文改 noising process,有的改 sampler,有的改 conditioning mechanism,有的改 latent representation,有的改 backbone。它们背后都在回答同一个大问题:
我们怎样学习一条从噪声回到视觉结构的路径,并让这条路径足够快、足够可控、足够可扩展?
这就是 diffusion model 为什么不只是一个生成技巧,而是变成现代视觉生成 AI 的通用框架。
参考文献
Jascha Sohl-Dickstein, Eric A. Weiss, Niru Maheswaranathan, and Surya Ganguli. "Deep Unsupervised Learning using Nonequilibrium Thermodynamics." arXiv:1503.03585, 2015. https://arxiv.org/abs/1503.03585 ↩︎
Yang Song and Stefano Ermon. "Generative Modeling by Estimating Gradients of the Data Distribution." arXiv:1907.05600, 2019. https://arxiv.org/abs/1907.05600 ↩︎
Yang Song, Jascha Sohl-Dickstein, Diederik P. Kingma, Abhishek Kumar, Stefano Ermon, and Ben Poole. "Score-Based Generative Modeling through Stochastic Differential Equations." arXiv:2011.13456, 2020. https://arxiv.org/abs/2011.13456 ↩︎
Jonathan Ho, Ajay Jain, and Pieter Abbeel. "Denoising Diffusion Probabilistic Models." arXiv:2006.11239, 2020. https://arxiv.org/abs/2006.11239 ↩︎
Jiaming Song, Chenlin Meng, and Stefano Ermon. "Denoising Diffusion Implicit Models." arXiv:2010.02502, 2020. https://arxiv.org/abs/2010.02502 ↩︎
Alex Nichol and Prafulla Dhariwal. "Improved Denoising Diffusion Probabilistic Models." arXiv:2102.09672, 2021. https://arxiv.org/abs/2102.09672 ↩︎
Prafulla Dhariwal and Alex Nichol. "Diffusion Models Beat GANs on Image Synthesis." arXiv:2105.05233, 2021. https://arxiv.org/abs/2105.05233 ↩︎
Alex Nichol et al. "GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models." arXiv:2112.10741, 2021. https://arxiv.org/abs/2112.10741 ↩︎
Jonathan Ho and Tim Salimans. "Classifier-Free Diffusion Guidance." arXiv:2207.12598, 2022. https://arxiv.org/abs/2207.12598 ↩︎
Robin Rombach, Andreas Blattmann, Dominik Lorenz, Patrick Esser, and Bjorn Ommer. "High-Resolution Image Synthesis with Latent Diffusion Models." arXiv:2112.10752, 2021. https://arxiv.org/abs/2112.10752 ↩︎
Tero Karras, Miika Aittala, Timo Aila, and Samuli Laine. "Elucidating the Design Space of Diffusion-Based Generative Models." arXiv:2206.00364, 2022. https://arxiv.org/abs/2206.00364 ↩︎
William Peebles and Saining Xie. "Scalable Diffusion Models with Transformers." arXiv:2212.09748, 2022. https://arxiv.org/abs/2212.09748 ↩︎