跳到主要内容

扩散模型 — 加噪容易去噪难

这一章讲三件事: 加噪的公式(完全已知、无需学习); 去噪的网络(只学「每一步加了什么噪声」这一个简单问题); 以及条件化三连:按标签生成、按文字生成、按低清图生成高清图。 主走查是一张手写数字在 1000 步里的加噪之旅,和从纯噪声走回来的生成之旅。

1. 顶层全景

x₀ 干净数字 ──加噪×1000──▶ x_T 纯噪声 (前向:公式,不用学)
◀──去噪×1000──
x_T 纯噪声 ─────────────▶ x̂₀ 新数字 (反向:神经网络)

图说:前向就是反复执行一行公式;
反向每一步只有一个问题:"这步加的噪声长什么样?"
答对了,减掉它,图就清晰一分。走 1000 步,每次只走一小步。

名字的来历是物理:颗粒在液体里因布朗运动从高浓度向低浓度散开 (Brown 观察、Einstein 解释),有序走向无序1。 图像版的对应:给图逐步加噪,它一步步离开「图像流形」,最终变成一片纯噪声—— 像一滴墨在水里散开2前向散开容易,反向聚拢难——难的部分,交给学习3

2. 核心原理

2.1 前向过程:一行公式,零参数

前向过程是马尔可夫(「无记忆」:下一步只看当前,不看更早的历史)式的—— 「下一张图 = 当前图 + 一点新噪声」,就这么简单4。公式(全章唯一需要记的):

x(t+1) = √(1−βt) · x(t) + √βt · n(t)

βt:第 t 步的噪声强度,叫"方差调度"(variance schedule)
n(t):本步的噪声,每个像素一个标准高斯随机数

机制拆开看:原图先乘一个略小于 1 的系数(缩一点、变淡), 再加上按 βt 配比的新噪声。βt 大,这步破坏狠;βt 小,只轻轻撒一把灰。 DDPM 原作者取线性调度:从 0.0001 爬到 0.02——第一千步比第一步狠两百倍5

两个配套工具,后面反复出现:

  • 重参数化:任何高斯随机数都能写成「均值 + 标准差 × 标准样本」, 即 x = μ + σ·ε,ε 取自标准正态。公式里「均值×系数+噪声×系数」的怪形状就来自它6;
  • 快速跳步:训练时需要「加噪到第 t 步」的样本,可 t 常取 1000,一步步走太慢。 幸好高斯分布(钟形随机分布的数学名)有个性质——两个独立高斯之和仍是高斯,方差相加7—— 于是全部中间步可以合并成一步直达的公式(书里式 10.2): x(t) = √ᾱt · x₀ + √(1−ᾱt) · n,其中 ᾱt 是前 t 步「保留系数」的连乘积。 从任意原图直接跳到任意噪声程度,训练要什么程度就造什么程度8

2.2 反向过程:把「去噪」拆成一千个小问题

反向才是模型。直接「一步从纯噪声还原图片」是地狱难度; DDPM 的诀窍是只要求走好一小步:从 x(t+1) 还原到 x(t)。 数学上把反向也写成高斯采样(均值+方差),方差一项按原书固定取 βt, 真正要学的只剩均值——而均值里唯一的未知数是「这一步加进来的噪声 n(t)」9

于是网络的任务被定义成最朴素的形态:

输入:噪声图 x(t) 和步数编号 t
输出:网络对"这一步里混入的噪声 n(t)"的预测 n̂
损失:‖n − n̂‖²(就是 MSE,拿预测的噪声和真实加的噪声直接比)[^10]

原书特意点破:预测噪声比预测「稍微干净一点的图」更简单—— 噪声是「加法性」的独立成分,结构比图像本身简单得多10。 加上快速跳步公式,损失可以从 x₀ 直接算,连中间图都不用存11

网络选 attention U-Net:U 形骨干(第 07 章)加上注意力层,输入是「噪声图+步数编码」, 输出是同尺寸的噪声估计12。步数编号本身要先过正弦位置编码 (和第 10 章 ViT 给词编位置的同一家族:不同频率的正弦/余弦(两种波浪函数)拼成一个向量, 每一步拿到独一无二的「步数指纹」)13

2.3 主走查:一张数字的加噪之旅与一次生成

加程(真实公式+演示数值):取 MNIST 的 x₀,β₁=0.0001 起步。 第 1 步:x₁ = √(1−0.0001)·x₀ + √0.0001·n ≈ 0.99995·x₀ + 0.01·n—— 图几乎没变,只蒙了一层细灰(演示系数按公式精确计算)。 到第 500 步,ᾱ 累积下来,原图成分只剩零点几的量级,数字开始「化」; 到第 1000 步,√(1−ᾱ)≈1,原图系数归零——x_T 里已经没有原图的任何痕迹。 一条数字「溶解」进噪声,全程没有学习参与。

归程(生成):抽一个纯噪声当 x_T,循环一千步:

for t = 999, 998, …, 0:
n̂ ← U-Net(x(t), t) # "这步的噪声长这样"
x(t−1) ← (公式从 x(t) 减去 βt/√(1−ᾱ)·n̂,再补一点新鲜噪声 r)[^15]
输出 x(0):一张全新的手写数字

两个特性值得停一拍。第一,过程是随机的:每步补的那点噪声 r 每次采样都不同, 同一个起点能生成不同的图——多样性是设计出来的,不是失控14第二,网络学到的是什么:它见过「同一张图 × 一千种噪声版本」, 等于把这张图在整个噪声空间里的扩散轨迹都见过;千图万图之后, 它掌握的是「图像 vs 噪声」的统计边界——把数据分布从噪声的视角学了一遍15

原书对扩散模型力量的定位放在高维流形上:autoencoder 把数据压进低维潜空间(有损), 扩散不压缩,在远比像素空间更高的维数里展开一条条去噪轨迹, 细微变化全保留——这是它生成质量的后盾16

2.4 条件化三连:标签、文字、分辨率

基础版只会「随机生成手写数字」。三个项目依次把「随机」变成「可控」:

按标签(10A):把类别标签和噪声图、步数一起喂给 U-Net—— 就是条件 GAN(第 11 章)的同一招搬到扩散上,可以点名生成「4」17。 训练用 classifier-free guidance:有时不给标签让模型「盲猜」,给与不给的差距 就是「标签的方向」,推理时放大这个方向,生成更贴合条件(原书项目采用的训练法)。

按文字(10B):文字条件比标签麻烦——要先变成向量。 原书自己拼了一个迷你文生图:prompt(如「Generate an image of the digit one」) 过文本编码器变成嵌入,再进条件扩散。业界正主是 CLIP: OpenAI 用约 4 亿张「图+配文」对训练的孪生编码器——文本编码器和图像编码器 把两边都映射进同一个空间,配对的图和文在那里靠近(对比学习,第 08 章的老朋友); 由此得到「文字向量 ↔ 图像语义」的通用桥18。DALL-E 3、Stable Diffusion 的 文生图都是「CLIP 式文本条件 + 扩散」的组合,原书明说本项目就是其微缩版19

按低清生成高清(10C):条件换成一张低分辨率的显微图,输出同视野的高分辨率图。 背景是光学显微镜的百年物理极限(阿贝衍射极限):波长决定分辨率的下限, 可见光下约 200 纳米——DNA 分子直径约 2 纳米,小了一百倍,直接看是看不清的20。 条件扩散模型学「低清 → 高清」的映射,从计算侧把分辨率「补」回来; 第 06 章「网络可以学得比输入数据更准」的思想,在这里再次变现。

3. 作者的判断与证据

  • 有证据的:去噪中间帧的演化序列、随机性带来不同输出的对照、 条件生成的点名命中率、超分辨前后对比,全是可复跑的实验。
  • 作者的结构性判断:扩散「在表现上常超过 GAN」(原书导论的定位),且训练比 GAN 稳 ——没有对抗拉锯,只有普通的回归损失;原书 seminal 一节列的 2021 年 「Diffusion Models Beat GANs on Image Synthesis」是这条判断的文献锚21
  • 代价判断:生成要迭代一千步,GAN 一次前向就出图——质量换速度, 这笔账在两章之间形成鲜明的架构对照。

4. 边界与局限

边界说明
采样慢1000 步迭代;后续的加速采样(书出版后)是活跃战场
β 调度是经验值线性 0.0001→0.02「也有别的好使的选择」——原书原话,又一处试出来的默认5
训练贵千步×千图的组合让训练成本远超同规模判别式(只做判断不做生成)任务
条件可能被忽略引导强度不足时,模型滑向「无条件生成」
超分辨是「补画」不是「复原」模型按统计规律补细节,补出的细节未必是被衍射抹掉的那一个——科学成像里要当心「看着合理」与「物理为真」的差别

5. 可带走的

  1. 前向是公式、反向是网络;网络只答「这步的噪声长什么样」,MSE 一把梭;
  2. 快速跳步:高斯之和仍是高斯,任意噪声程度一步直达——训练可行性的全部秘密;
  3. 预测噪声比预测图简单:加法性成分结构更简单,这个降维打击是 DDPM 的核心洞察;
  4. 位置编码给步数发指纹,和 ViT 给词发的是同一种;
  5. 生成天然带随机性:同一起点不同终点,多样性来自每步补的新鲜噪声;
  6. 不压缩、在高维流形上展开:对比 autoencoder 理解扩散的生成质量;
  7. 条件化是同一招的三次应用:标签、文字(CLIP 桥)、低清图;
  8. GAN 一次出图、扩散一千步出图:质量与速度的架构级交换,选型前先掂量预算。

6. 原文地图

主题原书章原文位置
布朗运动来历Understanding Diffusiontext/73-fm-understanding-diffusion.txt:9(搜「Brownian motion」)
图像扩散类比与正向/反向Understanding Diffusiontext/73-fm-understanding-diffusion.txt:11(搜「gradually add noise」) · text/73-fm-understanding-diffusion.txt:15(搜「forward diffusion process」)
马尔可夫性Breaking Down Denoising Diffusion Probabilistic Modelstext/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:9(搜「Markov process」)
前向公式与方差调度Breaking Down Denoising Diffusion Probabilistic Modelstext/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:25(搜「variance schedule」)
线性调度 0.0001→0.02Breaking Down Denoising Diffusion Probabilistic Modelstext/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:27(搜「linear schedule」)
重参数化Breaking Down Denoising Diffusion Probabilistic Modelstext/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:29(搜「reparameterization」)
快速跳步与 T≈1000Breaking Down Denoising Diffusion Probabilistic Modelstext/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:37(搜「fast forward process」)
高斯之和仍是高斯Breaking Down Denoising Diffusion Probabilistic Modelstext/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:59(搜「sum of two independent Gaussian」)
反向交给网络Breaking Down Denoising Diffusion Probabilistic Modelstext/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:73(搜「train a neural network」)
预测噪声更简单Breaking Down Denoising Diffusion Probabilistic Modelstext/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:97(搜「simpler task」)
MSE 损失与快速跳步算损失Breaking Down Denoising Diffusion Probabilistic Modelstext/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:101(搜「computationally efficient loss function」)
随机性与不同输出Breaking Down Denoising Diffusion Probabilistic Modelstext/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:103(搜「different for each sampling」)
扩散轨迹(核心概念)Breaking Down Denoising Diffusion Probabilistic Modelstext/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:107(搜「diffusion trajectory」)
高维流形的力量Breaking Down Denoising Diffusion Probabilistic Modelstext/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:109(搜「higher-dimensional manifold」)
T=1000、beta 1e-4→0.02 实现Generating Digits with a Diffusion Modeltext/75-fm-generating-digits-with-a-diffusion-model.txt:39(搜「beta_end」)
U-Net 预测噪声Generating Digits with a Diffusion Modeltext/75-fm-generating-digits-with-a-diffusion-model.txt:145(搜「predicts the noise applied」)
正弦位置编码Generating Digits with a Diffusion Modeltext/75-fm-generating-digits-with-a-diffusion-model.txt:164(搜「sinusoidal positional encoding」)
attention U-NetGenerating Digits with a Diffusion Modeltext/75-fm-generating-digits-with-a-diffusion-model.txt:208(搜「attention U-Net」)
条件扩散Project 10A: Generating Bespoke Digitstext/76-fm-project-10a-generating-bespoke-digits.txt:3(搜「conditional diffusion model」)
文生图微缩版Project 10B: Generating Images from Text Promptstext/77-fm-project-10b-generating-images-from-text-prompts.txt:5(搜「text prompts」)
CLIPProject 10B: Generating Images from Text Promptstext/77-fm-project-10b-generating-images-from-text-prompts.txt:13(搜「CLIP」)
classifier-free guidanceProject 10B: Generating Images from Text Promptstext/77-fm-project-10b-generating-images-from-text-prompts.txt:15(搜「classifier-free guidance」)
阿贝衍射极限Project 10C: Generating Super-Resolution Imagestext/78-fm-project-10c-generating-super-resolution-images.txt:3(搜「Abbe」)
扩散谱系Seminal Works and Further Readingtext/80-fm-seminal-works-and-further-reading.txt:3(搜「Nonequilibrium Thermodynamics」) · text/80-fm-seminal-works-and-further-reading.txt:5(搜「Denoising Diffusion Probabilistic Models」) · text/80-fm-seminal-works-and-further-reading.txt:7(搜「Beat GANs」) · text/80-fm-seminal-works-and-further-reading.txt:11(搜「Latent Diffusion」)

Footnotes

  1. 出处:「Understanding Diffusion」第 9 段(text/73-fm-understanding-diffusion.txt:9,搜「Brownian motion」)。

  2. 出处:「Understanding Diffusion」第 11 段(text/73-fm-understanding-diffusion.txt:11,搜「gradually add noise」)。

  3. 出处:「Understanding Diffusion」第 15 段(text/73-fm-understanding-diffusion.txt:15,搜「forward diffusion process」)。

  4. 出处:「Breaking Down Denoising Diffusion Probabilistic Models」第 9 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:9,搜「Markov process」)。

  5. 出处:「Breaking Down Denoising Diffusion Probabilistic Models」第 27 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:27,搜「linear schedule」)。「也有别的好使的选择」对应原文「other choices are also possible and work equally well」。 2

  6. 出处:「Breaking Down Denoising Diffusion Probabilistic Models」第 29 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:29,搜「reparameterization」)。

  7. 出处:「Breaking Down Denoising Diffusion Probabilistic Models」第 59 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:59,搜「sum of two independent Gaussian」)。

  8. 出处:「Breaking Down Denoising Diffusion Probabilistic Models」第 37 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:37,搜「fast forward process」)、第 41 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:41,搜「standard normal distribution」)。

  9. 出处:「Breaking Down Denoising Diffusion Probabilistic Models」第 73-79 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:73,搜「train a neural network」)、第 79 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:79,搜「obtaining similar results」)。

  10. 出处:「Breaking Down Denoising Diffusion Probabilistic Models」第 97 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:97,搜「simpler task」)。

  11. 出处:「Breaking Down Denoising Diffusion Probabilistic Models」第 101 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:101,搜「computationally efficient loss function」)。

  12. 出处:「Generating Digits with a Diffusion Model」第 145 段(text/75-fm-generating-digits-with-a-diffusion-model.txt:145,搜「predicts the noise applied」)、第 208-212 段(text/75-fm-generating-digits-with-a-diffusion-model.txt:208,搜「attention U-Net」)。

  13. 出处:「Generating Digits with a Diffusion Model」第 151-176 段(text/75-fm-generating-digits-with-a-diffusion-model.txt:164,搜「sinusoidal positional encoding」)。

  14. 出处:「Breaking Down Denoising Diffusion Probabilistic Models」第 103 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:103,搜「different for each sampling」)。

  15. 出处:「Breaking Down Denoising Diffusion Probabilistic Models」第 105-107 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:105,搜「different noisy version」)、第 107 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:107,搜「diffusion trajectory」)。

  16. 出处:「Breaking Down Denoising Diffusion Probabilistic Models」第 109 段(text/74-fm-breaking-down-denoising-diffusion-probabilistic-.txt:109,搜「higher-dimensional manifold」)。

  17. 出处:「Project 10A: Generating Bespoke Digits」第 3 段(text/76-fm-project-10a-generating-bespoke-digits.txt:3,搜「conditional diffusion model」)。

  18. 出处:「Project 10B: Generating Images from Text Prompts」第 13 段(text/77-fm-project-10b-generating-images-from-text-prompts.txt:13,搜「CLIP」)。

  19. 出处:「Project 10B: Generating Images from Text Prompts」第 3 段(text/77-fm-project-10b-generating-images-from-text-prompts.txt:3,搜「DALL-E 3」)、第 15 段(text/77-fm-project-10b-generating-images-from-text-prompts.txt:15,搜「classifier-free guidance」)。

  20. 出处:「Project 10C: Generating Super-Resolution Images」第 3 段(text/78-fm-project-10c-generating-super-resolution-images.txt:3,搜「Abbe」)。

  21. 出处:「Seminal Works and Further Reading」第 7 段(text/80-fm-seminal-works-and-further-reading.txt:7,搜「Beat GANs」);「常超过 GAN」的定位见「INTRODUCTION」第 112 段(text/08-fm-introduction.txt:112,搜「often exceeding the performance of GANs」)。