引言

如果说 VAE 解决的是“如何把图像压缩到一个可生成的潜在空间”,CLIP 解决的是“如何让图像和文本对齐”,那么 Diffusion Model 解决的核心问题就是:

如何从一张随机噪声图,一步步生成一张有意义的图片?

这也是 Stable Diffusion、Imagen、DALL·E 这类 AI 绘图模型背后的关键思想。

扩散模型听起来很抽象,但它的基本逻辑并不复杂:

  1. 训练时,先把真实图片一步步加噪,直到它接近纯噪声。
  2. 模型学习如何从带噪图片中预测噪声,或者预测更干净的图像。
  3. 生成时,从随机噪声开始,反复去噪,最终得到清晰图像。

所以扩散模型不是“凭空画图”,而是在学习一个反向过程:

纯噪声 -> 粗糙结构 -> 局部细节 -> 清晰图像

理解 Diffusion Model,关键不是先记公式,而是先搞清楚三件事:

  • 为什么要给图像加噪?
  • 模型在去噪时到底学了什么?
  • 文本条件是怎么控制生成结果的?

一、生成模型到底在解决什么问题?

生成模型的目标很直接:

学会真实数据的分布,然后从这个分布中采样出新的样本。

对于图像来说,就是希望模型能生成一张“像真实图片”的新图。

传统上,常见生成模型包括:

  • VAE
  • GAN
  • Diffusion Model

它们都在解决“如何生成图像”这个问题,但思路完全不同。

GAN 的想法更像是:

生成器负责造图,判别器负责判断真假

VAE 的想法更像是:

先把图像压缩到潜在空间,再从潜在变量重建图像

Diffusion Model 的想法则是:

先学会破坏图像,再学会把破坏过程反过来

这也是扩散模型最有意思的地方。

它不是直接学习“如何从无到有画一张图”,而是把生成问题拆成很多个小步骤:

每一步只负责去掉一点噪声

当很多个小的去噪步骤串起来,就能从随机噪声慢慢恢复出图像。


二、正向扩散过程:一步步给图像加噪

Diffusion Model 的训练从一个很反直觉的动作开始:

不断给真实图像加噪。

假设原始图像是 x_0

我们会按照一个预先设计好的噪声强度序列,逐步往图像里加入高斯噪声:

x_0 -> x_1 -> x_2 -> ... -> x_T

其中:

  • x_0 是真实图像
  • x_1 是轻微加噪后的图像
  • x_t 是第 t 步的带噪图像
  • x_T 接近纯随机噪声

可以直观理解成:

清晰图片 -> 有一点噪声 -> 更模糊 -> 几乎看不出内容 -> 纯噪声

2.1 为什么要做正向加噪?

正向加噪过程有两个作用。

第一,它把复杂的图像生成问题变成了一个可以监督学习的问题。

因为噪声是我们自己加进去的,所以训练时模型知道:

  • 原始图像是什么
  • 加了多少噪声
  • 加进去的噪声长什么样

这就给模型提供了明确的学习目标。

第二,正向过程定义了反向生成过程要学习的路径。

如果模型能学会:

x_t -> x_{t-1}

那么它就可以从纯噪声 x_T 开始,一步步反推回清晰图像 x_0

2.2 噪声不是一次加完的

扩散模型不是一次性把图片变成噪声,而是分很多步逐渐加噪。

这样做的好处是:

  • 每一步变化都比较小
  • 反向去噪任务更容易学习
  • 生成过程可以逐步修正图像结构和细节

如果一次性从纯噪声生成清晰图像,任务会非常难。

但如果每一步只去掉一点噪声,模型就可以把复杂生成任务拆成很多个简单任务。


三、反向去噪过程:模型到底在学习什么?

正向过程是人为设计的加噪过程。

真正需要模型学习的是反向过程:

x_T -> x_{T-1} -> ... -> x_1 -> x_0

也就是从噪声中一步步恢复图像。

3.1 模型不是直接预测整张图

很多人第一次理解扩散模型时,会以为模型是在每一步直接预测一张干净图。

更常见的训练方式其实是:

给模型一张带噪图 x_t 和时间步 t,让模型预测这一步加入的噪声。

也就是说,模型学习的是:

输入:带噪图像 x_t + 时间步 t
输出:噪声 epsilon

然后用预测出来的噪声,把当前图像往更干净的方向推一步。

这件事可以理解成:

模型先判断这张图里哪些部分是噪声,再把这些噪声去掉一点

3.2 为什么要输入时间步 t?

不同时间步的图像噪声强度不同。

早期时间步可能只有轻微噪声,图像结构还很清楚。

后期时间步接近纯噪声,图像内容几乎不可见。

所以模型必须知道当前处在哪一个时间步。

否则它无法判断:

  • 现在噪声有多强
  • 应该去掉多少噪声
  • 当前图像还保留了多少结构信息

这就是为什么扩散模型通常会把 timestep embedding 输入到 U-Net 里。

3.3 训练目标可以怎么理解?

训练时,我们从真实图像 x_0 出发,随机选择一个时间步 t,加入噪声得到 x_t

然后让模型预测噪声:

epsilon_theta(x_t, t) ≈ epsilon

其中:

  • epsilon 是真实加入的噪声
  • epsilon_theta 是模型预测的噪声

训练目标就是让预测噪声尽量接近真实噪声。

可以用一句话记:

扩散模型训练时学的是“如何识别并去掉噪声”。


四、U-Net 在扩散模型中的作用

在很多扩散模型中,负责预测噪声的主干网络是 U-Net。

U-Net 最早常用于医学图像分割,它的结构特点非常适合图像到图像任务。

扩散模型里的 U-Net 可以理解成:

输入一张带噪图,输出对应的噪声预测。

4.1 为什么常用 U-Net?

因为去噪任务既需要全局语义,也需要局部细节。

如果只看局部,模型可能不知道整体结构应该是什么。

如果只看全局,模型又可能丢失边缘、纹理、细节。

U-Net 刚好兼顾这两点。

它通常包含:

  • 下采样路径:压缩空间分辨率,提取高层语义
  • 中间层:整合全局信息
  • 上采样路径:恢复空间分辨率,生成细节
  • Skip Connection:把浅层细节直接传到后面的上采样阶段

4.2 Skip Connection 为什么重要?

去噪不是只生成一个类别,而是要恢复图像的空间结构。

浅层特征里保留了很多细节信息,例如边缘、纹理和局部位置。

如果这些信息在下采样过程中完全丢失,生成结果会更模糊。

Skip Connection 的作用就是:

把浅层细节特征直接传给上采样路径

这样模型既能利用深层语义,也能保留浅层细节。

4.3 U-Net 输入的通常不只有图像

扩散模型里的 U-Net 通常会接收多个输入:

  • 当前带噪图像 x_t
  • 时间步 t
  • 条件信息,例如文本 embedding

所以它不是一个普通的图像恢复网络,而是一个带条件的噪声预测网络。


五、文本条件如何控制生成结果?

普通扩散模型只能从噪声生成图像。

但 AI 绘图真正有用的地方在于:

输入一句 prompt -> 生成符合描述的图像

这就需要把文本条件加入去噪过程。

5.1 文本先被编码成 embedding

文本不能直接控制图像生成,通常需要先经过文本编码器。

例如在 Stable Diffusion 中,文本 prompt 会先经过 CLIP Text Encoder,得到文本 embedding。

流程可以简化为:

prompt -> text encoder -> text embedding

这些 embedding 表示了文本中的语义信息,例如:

  • 对象
  • 风格
  • 场景
  • 属性
  • 构图

5.2 文本条件进入 U-Net

文本 embedding 会被送入 U-Net,影响每一步去噪。

常见做法是通过 cross-attention:

图像 latent 特征作为 Query
文本 embedding 作为 Key / Value

这样图像生成过程中的每个区域,都可以根据文本信息决定应该生成什么。

例如 prompt 是:

a cat sitting on a sofa

那么去噪过程中,模型会逐渐把随机噪声引导成包含:

  • cat
  • sitting
  • sofa
  • 对应的空间关系

的图像。

5.3 文本不是最后才参与,而是每一步都参与

这点很重要。

文本条件不是生成结束后再筛选图片,也不是只在开头给一个标签。

在文本到图像扩散模型中,文本条件会参与多次去噪步骤。

也就是说,模型是在不断问:

当前这一步去噪,应该往哪个方向更符合文本描述?

这也是为什么 prompt 会强烈影响生成结果。


六、Diffusion、VAE、GAN 的区别

理解扩散模型时,经常会把它和 VAE、GAN 放在一起比较。

它们都是生成模型,但生成思路不同。

6.1 VAE:学习潜在空间

VAE 的核心是 encoder-decoder 结构。

它会把图像压缩到一个潜在变量 z,再从 z 重建图像。

可以理解成:

image -> latent z -> reconstructed image

VAE 的优点是结构清晰、训练稳定。

缺点是生成结果容易偏平滑,细节不够锐利。

6.2 GAN:对抗训练

GAN 包含两个模型:

  • Generator:负责生成图像
  • Discriminator:负责判断真假

训练过程像一个博弈:

生成器努力骗过判别器
判别器努力识别真假图像

GAN 的优点是生成图像通常更锐利。

缺点是训练不稳定,容易出现模式崩塌。

6.3 Diffusion:逐步去噪

Diffusion Model 的核心是加噪和去噪。

它把图像生成拆成很多个小步骤:

noise -> denoise -> denoise -> ... -> image

优点是训练稳定、生成质量高、可控性强。

缺点是采样过程通常比较慢,因为需要多次去噪。

6.4 三者对比表

维度 VAE GAN Diffusion Model
核心思想 学习潜在空间并重建图像 生成器和判别器对抗训练 从噪声逐步去噪生成图像
训练方式 重建损失 + KL 约束 对抗损失 噪声预测损失
生成质量 稳定但可能偏模糊 锐利但训练不稳 高质量且稳定
训练稳定性 较稳定 较不稳定 较稳定
采样速度 通常较慢
常见问题 细节模糊 模式崩塌 多步采样成本高
代表应用 表征学习、生成建模 图像生成、风格迁移 AI 绘图、图像编辑、视频生成

七、面试常考知识点

7.1 Diffusion Model 的核心思想是什么?

核心回答:

扩散模型先定义一个逐步加噪的正向过程,再训练模型学习反向去噪过程,最终从随机噪声逐步生成图像。

可以补充:

  • 正向过程通常不需要学习,是人为设计的加噪过程
  • 反向过程需要神经网络学习
  • 训练目标常见形式是预测噪声

7.2 正向扩散过程在做什么?

正向过程就是不断往真实图像中加入高斯噪声。

最终图像会从真实样本逐渐变成接近标准高斯噪声的样本。

可以记成:

real image -> noisy image -> pure noise

7.3 反向去噪过程在做什么?

反向过程是从纯噪声开始,逐步去噪生成图像。

每一步模型根据当前带噪图像和时间步,预测应该去掉的噪声。

可以记成:

pure noise -> denoise -> clean image

7.4 模型为什么要预测噪声?

因为训练时噪声是人为加入的,所以真实噪声是已知的。

让模型预测噪声,就可以构造明确的监督学习目标。

预测噪声之后,就可以用它把当前样本往更干净的方向更新。

7.5 U-Net 在扩散模型里做什么?

U-Net 是噪声预测网络。

它接收:

  • 带噪图像或 latent
  • 时间步 embedding
  • 条件信息,例如文本 embedding

输出:

  • 预测噪声

面试中可以说:

U-Net 负责在每个时间步预测噪声,帮助模型一步步完成反向去噪。

7.6 文本条件怎么控制生成图像?

文本 prompt 会先经过文本编码器,得到 text embedding。

这些 embedding 会通过 cross-attention 等方式注入 U-Net。

去噪过程中,U-Net 会根据文本条件调整生成方向。

可以简化成:

prompt -> text embedding -> cross-attention -> conditional denoising

7.7 Diffusion 和 GAN 最大区别是什么?

GAN 是一次性生成图像,并通过判别器进行对抗训练。

Diffusion 是从噪声开始,经过多步去噪生成图像。

可以回答:

GAN 学的是直接生成并骗过判别器;Diffusion 学的是逐步反转加噪过程。

7.8 Diffusion 的缺点是什么?

主要缺点是采样慢。

因为生成一张图通常需要多步去噪,每一步都要跑一次模型。

不过后续很多方法会通过更少步数采样、蒸馏、更好的 scheduler 来加速生成。


八、文章总结

Diffusion Model 可以用三句话理解:

  1. 正向过程:把真实图片一步步加噪,直到接近纯噪声。
  2. 反向过程:训练模型从带噪图片中预测噪声,并逐步恢复图像。
  3. 条件生成:把文本 embedding 注入 U-Net,让去噪过程朝 prompt 描述的方向前进。

和 VAE、GAN 相比,扩散模型最大的特点是:

模型 生成思路
VAE 从潜在空间采样并解码
GAN 生成器和判别器对抗训练
Diffusion 从随机噪声逐步去噪

Diffusion Model 不是直接画出图像,而是学会把噪声一步步还原成图像。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐