跳到主要内容

扩散模型:学会把噪声一步步变回图

这一章讲三件事: 图像生成为什么不能照搬文本的「逐个吐」;扩散模型的核心机制——缓慢加噪、学着倒放;以及它的代价:生成必须一步步迭代,慢是结构性的。 位置:生成线的第二极。第 10 章管文本,本章管图像;第 15 章的医学影像、第 01 章的斑马,都长在这套机制上。

1. 图像生成难在哪

第 10 章的办法——「给定前面,预测下一个」——搬到图像上不灵:像素不是排成一队的标记,图像的结构是空间的,每个像素和上下左右都有关,没有天然的「下一个」1

但目标不用换。第 10 章给生成任务定的义原样搬来:学出训练数据的分布,从中采样出「可信地属于原数据集」的新样本1。问题只剩:图像的分布怎么学?

2. 前浪:VAE 与 GAN

在扩散之前,两代成功过的方案,一句话各归其位2:

  • VAE(变分自编码器,2013):编码器把图压成一个低维「潜在表示」,解码器再重建;生成时扔掉编码器,拿一团噪声当潜在表示喂给解码器。
  • GAN(生成对抗网络,2014):两个网络对打——生成器造图,判别器当二分类器猜真假;互相逼着进步。图更锐利,但训练出了名的不稳、多样性差。

扩散模型 2015 年就由 Sohl-Dickstein 等人提出(论文标题就叫《Deep Unsupervised Learning Using Nonequilibrium Thermodynamics》),但直到 2020 年前后才真正压倒 GAN2。引爆大众认知的是 DALL-E 和开源(代码和权重公开可下载)的 Stable Diffusion。

3. 核心机制:毁坏是可逆的

物理里的扩散是牛奶在咖啡里散开——单向、增熵。扩散模型借了名字,改了方向:前向过程(加噪)是人为设计的,所以可以被学着倒放3。原论文那句纲领:

「本质想法是:用一个迭代的前向扩散过程,系统地、缓慢地摧毁数据分布里的结构;然后学一个反向扩散过程,把结构恢复回来。」3

书的比喻:沙堡被一波波浪缓慢抹平(前向),而模型学的是「把每一步浪倒放」(反向)——每次都只恢复一点点,几百步之后,沙堡回来了3

4. 主走查:把 PyTorch logo 加噪到消失

为了看得见,书里不用真图片,用 PyTorch logo 轮廓的 3177 个 2D 点当数据集4

前向:一步加噪

每一步往点上叠一点高斯噪声(均值为 0、方差为 1 的随机数),同时把原点轻微向 0 收缩4:

x_t = √(1−β_t) · x_{t−1} + √β_t · 噪声

β_t 是第 t 步的噪声强度,书里用线性日程:从 0.0001 缓慢涨到 0.02
T = 1000 步

图说:√(1−β) 那项让「原图的影响」随步数衰减,√β 那项让新噪声稳步加进来。
两项的平方和为 1——这是刻意的:总能量保持不变,只是信号逐渐被换成噪声。

跟其中一个点看:t=0 它在 logo 边缘;t=100 已经漂离;t=500 之后和纯随机点无法区分——信息被系统性地洗没了4

关键便利:闭式解

一步一步加 1000 次太慢。一个数学便利是:这串迭代可以合并成一步——任意时刻 t 的脏数据,能直接由原图和一个累积系数算出来5:

定义 α_t = 1−β_t,记 ᾱ_t = α_1·α_2·…·α_t(连乘)
则 x_t = √ᾱ_t · x_0 + √(1−ᾱ_t) · 噪声

(原理:高斯加高斯还是高斯,方差相加;逐步的小噪声合成一次大噪声。)训练时要用哪个 t 的脏数据,一次算完,不用循环5

5. 训练:学「当初加了多少噪」

到了全书最妙的一个目标转换。反向过程数学上难解,但书里把它换成一个监督学习问题6:

给网络两样东西:加噪后的数据 x_t、时刻 t;让它预测「这一步加进去的噪声是什么」。

为什么这个目标等价于「学会生成」?因为噪声是我们自己加的——标准答案白送:前向过程的每一步都知道自己加了什么噪声。这又是一次自监督:标签不用人标,从过程里长出来6

模型(书里叫 DenoisingModel):把 t、x 坐标、y 坐标各用正弦位置嵌入(第 10 章位置嵌入的定式)编成 128 维,拼接后过三层「线性+ReLU」,输出 2 维——预测的噪声。损失就是均方误差:预测的噪声 vs 实际加的噪声6

训练:Adam、lr=0.001、20000 轮,损失 0.97→0.706。数字本身不重要,重要的是:网络从没见过「logo」,它只见过「脏点 + t + 当初那点噪声」。

6. 采样:从纯噪声里把 logo 变回来

生成 = 反向过程 = 从 1000 个纯随机点开始,t=999 一路退到 t=07:

对每个 t(从 999 到 0):
① 模型预测当前数据里的噪声
② 从数据里减掉这份噪声(乘上日程系数折算)
③ 再加回一小撮受控的新噪声(t=0 时不加)

第 ③ 步「减完又加」看着反常,但有讲究:减掉的只是「最可能的噪声」,而同一个脏数据可以对应多种干净前身——加回的小噪声让每次采样走上不同的分叉,这正是生成多样性的来源7

反向公式里没有模型学不到的东西,但没有闭式解——必须一步一步来。书里点破了这就是扩散模型的结构性代价:T=1000 就意味着生成一张图要把网络跑 1000 遍。这解释了为什么后来的工程研究(SDXL-Lightning 这类)全都扑在「减少步数」上7

结果:1000 个随机点,逐步收拢,最后排成 PyTorch logo 的形状7从混沌里造出了东西——同样的公式换成 RGB 像素,就是 DALL-E 和 Stable Diffusion 的内核。

7. 和第 10 章并排看一眼

文本(Transformer)图像(扩散)
生成单位一个标记一整个去噪步骤
「下一个」是什么序列里的后一个标记时刻 t−1 的干净一点的数据
迭代次数序列多长多少次日程多长多少次
训练信号数据自带的下一个标记前向过程自己记录的噪声

两者都是「学分布 + 逐步采样」的迭代生成,只是迭代的对象不同: Transformer 每一步往后添一个标记,扩散每一步把整张图擦干净一点。书里说的是二者相似,不是同类——扩散不是自回归模型(第 10 章给自回归定的义是「后一个依赖前一个的标记生成」,扩散每步动的是整张图,没有「前一个、后一个」这回事)8。架构不同,做法上的共同点是:先学出数据长什么样,再一小步一小步把样本采出来。

8. 作者的判断与证据

说法性质
前向闭式解有据,书里把一步到位的结果和逐步循环的结果并排画出来,两张图看不出差别5
训练目标 = 预测噪声(MSE)有据,实现 + 训练损失从 0.97 降到 0.706
反向采样公式书里直接引用 DDPM 论文(Ho et al. 2020),推导被明确划为超出本书范围7
「GAN 多样性差、训练不稳」领域通行评价,书里直陈,无实验2
「扩散已成图像生成主导」成书时属实;「扩散是视频生成的未来」是作者的展望8

9. 边界与局限

  • 本章的模型是玩具规模(3177 个 2D 点);真实图像扩散用 U-Net 在潜在空间工作,第 01 章的 pipeline 里那四个部件(text encoder/UNet/VAE/scheduler)对应的就是那套工业结构——本章只教机制8
  • 「为什么减噪声要加回噪声」书里给了直觉没给推导;DDPM 的数学推导被明确划出范围。
  • 噪声日程只演示了线性一种;书里引了 2023 年一篇专门论文说明日程影响训练结果——日程是超参数,不是细节4
  • 条件生成(用文字指挥)在第 01 章出现过,本章只讲无条件版本;条件是「再喂一路信息进模型」,机制不变。

10. 可带走的

  1. 图像生成的目标与文本相同:学分布、采样本;缺的是「下一个」的概念,扩散用「下一个时刻的干净度」补上了。
  2. 前向加噪是人为设计的,所以可逆;√(1−β) 与 √β 平方和为 1 是能量守恒的刻意设计。
  3. 闭式解让训练时任意 t 一步算到;采样时没有闭式解,必须迭代——慢在结构上。
  4. 训练目标的神来之笔:预测当初加的噪声;标准答案由前向过程白送,自监督又一次现身。
  5. 采样时每步「减噪声、再加回一点」;加回那一点是多样性的来源。
  6. 1000 步日程 = 生成一图跑千遍网络;后续工程的主线是减步数。
  7. VAE 压缩重建、GAN 左右互搏、扩散学倒放——三代生成架构一句话各归其位。

11. 原文地图

主题原书章原文位置
图像 vs 文本、共同目标ch10text/18-ch10-10-diffusion-models-for-images.txt:21(搜「dependencies, where context is influenced」) · :26(搜「underlying distribution」)
VAE/GAN 简史ch10text/18-ch10-10-diffusion-models-for-images.txt:43(搜「late 2013」) · :54(搜「generator and a discriminator」) · :85(搜「around 2020」)
2015 原论文引文ch10text/18-ch10-10-diffusion-models-for-images.txt:119(搜「Nonequilibrium Thermodynamics」) · :121(搜「inspired by non-equilibrium statistical physics」)
沙堡比喻ch10text/18-ch10-10-diffusion-models-for-images.txt:128(搜「sandcastle」)
3177 点与线性日程ch10text/18-ch10-10-diffusion-models-for-images.txt:188(搜「3177」) · :236(搜「linear_beta_schedule」)
前向公式与单点漂移ch10text/18-ch10-10-diffusion-models-for-images.txt:247(搜「diffuse_points」) · :288(搜「as the diffusion process progresses」)
闭式解ch10text/18-ch10-10-diffusion-models-for-images.txt:307(搜「closed-form equation」) · :332(搜「alphas_cumprod」)
训练目标与模型ch10text/18-ch10-10-diffusion-models-for-images.txt:382(搜「predicting the noise」) · :412(搜「DenoisingModel」) · :463(搜「mean squared error」)
训练损失ch10text/18-ch10-10-diffusion-models-for-images.txt:511(搜「0.9687」) · :529(搜「0.6959」)
反向采样与慢的根因ch10text/18-ch10-10-diffusion-models-for-images.txt:534(搜「Reversing diffusion」) · :540(搜「no closed-form solution」) · :543(搜「SDXL-Lightning」)
加回噪声的理由ch10text/18-ch10-10-diffusion-models-for-images.txt:562(搜「controlled manner」)
DDPM 出处ch10text/18-ch10-10-diffusion-models-for-images.txt:567(搜「paper by Ho et al」)
重建 logo 与推广ch10text/18-ch10-10-diffusion-models-for-images.txt:626(搜「something from chaos」) · :630(搜「RGB values of an image」)

Footnotes

  1. 出处:「10 Diffusion models for images」第 21 段(text/18-ch10-10-diffusion-models-for-images.txt:21,搜「dependencies, where context is influenced」)与第 26 段(:26,搜「underlying distribution」)。图像的上下文「由全图的排布决定」,序列方法直觉上不可用;但「生成式 AI 的底层原则不变:建数据分布的模型,采新样本」。 2

  2. 出处:「10 Diffusion models for images」第 43 段(text/18-ch10-10-diffusion-models-for-images.txt:43,搜「late 2013」)、第 54 段(:54,搜「generator and a discriminator」)与第 85 段(:85,搜「around 2020」)。VAE 2013 年末(arXiv:1312.6114);GAN 2014,图更锐利;扩散 2015 提出、约 2020 才流行。 2 3

  3. 出处:「10 Diffusion models for images」第 119 段(text/18-ch10-10-diffusion-models-for-images.txt:119,搜「Nonequilibrium Thermodynamics」)与第 121 段(:121,搜「inspired by non-equilibrium statistical physics」)。Sohl-Dickstein 等 2015;物理扩散不可逆,「扩散模型里噪声被设计成可逆」。 2 3

  4. 出处:「10 Diffusion models for images」第 188 段(text/18-ch10-10-diffusion-models-for-images.txt:188,搜「3177」)、第 236 段(:236,搜「linear_beta_schedule」)与第 288 段(:288,搜「as the diffusion process progresses」)。PyTorch logo 轮廓 3177 个点;线性日程 β:0.0001→0.02,T=1000;日程影响训练一事引 Ting Chen 的论文(arXiv:2301.10972)。 2 3 4

  5. 出处:「10 Diffusion models for images」第 307 段(text/18-ch10-10-diffusion-models-for-images.txt:307,搜「closed-form equation」)与第 332 段(:332,搜「alphas_cumprod」)。闭式解:x_t 由 x0 和 α 的累积积一步算出,「不用再循环」。两种算法的对照图是原书的图 10.8 与 10.9。 2 3

  6. 出处:「10 Diffusion models for images」第 382 段(text/18-ch10-10-diffusion-models-for-images.txt:382,搜「predicting the noise」)、第 412 段(:412,搜「DenoisingModel」)、第 463 段(:463,搜「mean squared error」)与第 529 段(:529,搜「0.6959」)。「给脏数据和时刻,估计那一步引入的噪声」;模型用正弦嵌入编码 t/x/y;MSE 损失;20000 轮 0.97→0.70。 2 3 4 5

  7. 出处:「10 Diffusion models for images」第 534 段(text/18-ch10-10-diffusion-models-for-images.txt:534,搜「Reversing diffusion」)、第 540 段(:540,搜「no closed-form solution」)、第 562 段(:562,搜「controlled manner」)与第 567 段(:567,搜「paper by Ho et al」)。「这种迭代让扩散模型慢,所以 SDXL-Lightning 这类新模型专注减少去噪步数」;加回少量噪声是为了「探索多种可能的重建」;采样公式推导指向 Ho et al. DDPM(arXiv:2006.11239),书里明确说超出范围。 2 3 4 5

  8. 出处:「10 Diffusion models for images」第 546 段(text/18-ch10-10-diffusion-models-for-images.txt:546,搜「autoregressively generate text」)与第 630 段(:630,搜「RGB values of an image」)。原文的措辞是反向采样「类似于(is similar to)Transformer 自回归地生成文本」——用的是类比,不是归类:书里没有说扩散是自回归模型,我们也不这么写。第 630 段:「我们改点用的同一套方程,可以改图像的 RGB 值」。 2 3