雕刻的技法:浅析扩散模型基本原理

请注意:本文仍在施工中,故在这行字被删除之前,不保证其中任何内容的真实性、准确性

这篇文章将基于我的认识,以尽可能少的公式向初学者简单讲解扩散模型的原理。作为2022年以来大量生成式AI工具(例如经典的stable diffusion)的基石,扩散模型的设计极其精巧,逐步理解它的过程令人愉悦。

然而,个人十分不推荐你通过公式来首次认识它,因为我认为数学高手以外的人都难以在短时间内理解它的推导过程。而这会消磨你的耐心和兴致,这对于学习任何东西都是致命的。

当然,这并不是说我的水平有多高,以至于对该知识有一种独到的认识。这篇文章的目的在于分享我的学习过程,对于错漏之处欢迎批评指正。

1.开始

在阅读文章时,请至少对下面三件事留有印象:

  1. 联想雕刻家在一块石料上凿除杂质最终形成成品雕像的过程
  2. 扩散模型的“反向过程”是它的专有概念(你可以大致理解成推理),而非反向传播。相似的,前向过程则是它构建带噪声数据的过程。
  3. 扩散模型这个点子如何被得到,这不在本文讨论范围内。也就是说,这篇文章的写作思路不是“为什么要设计成这样”,而是在知道该方法存在的基础上讲解“这样做为什么是有效的”。

1.1.用于图片生成的扩散模型

在诸如AI绘图等工作中(我们暂且不谈伦理问题),人们想要的是,输入一些文本或者别的什么,然后从模型中得到一张从未有过但又符合要求的图片作为输出。换句话说,人们希望通过一些思绪、灵感或者指令,从一片虚无中得到一个独一无二的作品。

现在让我们看看扩散模型。扩散模型的核心思想是通过一系列前向过程逐步对数据(图片)添加噪声,直至变成纯噪声,再学习一系列反向过程去噪以重建数据。

这样说还是太笼统,而且无法触及问题的本质。不妨让我们进一步抽丝剥茧:扩散模型作为核心的可训练部分在预测什么?或者说,这部分的输入输出是什么?

答案是:输入带噪图,输出噪声。

如果你是一个初学者,也许你觉得输出是噪声这一点还有思考的余地,因为神经网络这个深邃的黑箱可能会做点儿神奇的后处理之类的。但相应地,你很可能会认为“输入是带噪图”这点十分奇怪——我去哪儿弄一个噪声过来?以及这样一来,输出不就成了完全随机?

1.1.1.从构建一条训练数据入手:核心部分的输入输出

首先,必须要提及的是,完整的扩散模型的一个全套推理过程完全串行,是一个循环。所以如果你用过sd等工具,你会发现你的生图过程是从模糊到清晰,最终得到成图。 因此:

  1. 我们可以设想,它从时间步T一直到0,共T次操作。
  2. 整个生图过程是一个去噪过程(也正因为是噪过程,所以写成从T0)。

现在,我们把推理时的循环拆解出来,分析单个循环体。事实上,它就是扩散模型的核心部分。要明白为什么输出是噪声,让我们先来看看它的训练数据是什么样的。

我们这样构建一条数据:

  1. 一个原图x0,给它一个随机的噪声ε和一个时间步t。我们要用ε对图片进行加噪,这个时间步t意味着对图片的加噪已经进行到了t时刻(你可以简单理解为进行了t次加噪)。
  2. 根据公式A(先不要关注它的内容)算出这一步的加噪图x_t
  3. 当然,我们的训练肯定不能只有一条数据。要构建多条数据,我们只需要使用多张图片和多种时间步即可

于是对于训练而言,输入就是加噪图x_t和时间步t(当然一般还会有一个用于引导的语义信息编码c,可以是一些句子嵌入等。);输出是模型预测的噪声ε。也就是说,我们要做的是,根据这一时刻的时间步和加噪图,推断出这个加噪图在被加噪的时候,使用的单位噪声ε是什么。而这,就是扩散模型的循环体运行一次所做的。

注意到训练数据中的时间步了吗?这可以使我们联想,要训练扩散模型(输入一条数据、计算一次loss):

  1. 只需使用完整推理过程在一个在某时刻的切片,而非经过整轮循环。
  2. 这个切片对应的时刻是该条训练数据中的时间步t指定的。

至于整个过程,还记得文章开始时提及的“雕塑”这一场景么?让我们把它和扩散模型的原理联系起来:既然扩散模型的核心部分,也就是一系列同类操作中的一次,输入的是本步的带噪图(以及时间步),预测的是该时刻的噪声,那么这个过程和雕刻充满了相似性:

雕刻家的行为:

  • 根据这一刻的感知(眼前的、待完成的雕像,以及作为一切的暗线的、默默流动的时间)
  • 做出这一刻的行动(进行雕刻,也就是在待完成的雕像上,凿除其认为应该被凿除的部分,使雕像更接近于完成)
  • 如此往复,得到雕像

扩散模型的行为

  • 根据这一刻的感知(待完成的图片,也就是带有噪声的图片、时间步)
  • 做出这一刻的行动(判断出这一刻的噪声,并从带噪图中凿除改噪声)
  • 如此往复,得到清晰图片

一般来说,这个“凿除”并不是直接减去噪声,而是通过特定采样公式。但这是工程学问题,我们在本部分不深入讨论。

现在,我想你已经能够明白为什么运行一次循环体的输出是噪声了——扩散模型的整个循环中,核心部分每运行一次,都会在当前的加噪图这座未完成雕像上凿除一块不需要的部分。整个过程就是把一块石料(纯噪声)变成雕塑。

但可能产生两个疑问:

  1. 我们通过一次反向过程得到噪声ε后,是否可以直接根据它和时间步算出原图?
    1. 技术上确实可以——从 $x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon$ 可以解出 $x_0 = (x_t - \sqrt{1-\bar{\alpha}_t}\epsilon) / \sqrt{\bar{\alpha}_t}$。但这样算出来的 $x_0$ 质量很差。因为尽管前向加噪过程是用同一个 $\epsilon$ 直接把原图加到纯噪声,但模型预测出的 $\epsilon$ 有误差,只用一步还原出原图会极大地放大这个误差。更重要的是,扩散模型的精髓就在于把困难的任务分解成许多简单的步骤,每一步只去除一点点噪声,让网络每次只需对图片做微小调整。
  2. 输入为什么是带噪图呢?
    1. 还记得前提么——核心部分只是整个循环在一个时刻上的切片。所以设定上,这个带噪图是上一步去噪过程留下的结果
  3. 我怎么知道我输入这堆东西能得到我想要的图片?就目前而言,这个输出看上去是完全随机的。如何用条件来约束生成结果?
    1. 事实上,你可以把其它约束条件输入进模型。由于在这里加入这部分会不方便理解,所以我把它放到了下一小节。
所谓公式A

A:x_t = √ᾱₜ * x₀ + √(1 - ᾱₜ) * ε

1.1.2. 前向和反向过程

前向过程

扩散模型的前向过程是构建一条训练数据的过程。

虽然此前没有提及,但相信读到这里你也意识到了:前向过程是无训练参数、无需任何训练的纯加噪过程——这个过程只在构建数据时有意义,而用来预测噪声和更新图片的神经网络则是完全独立于它的另一套体系结构。

我们来详细说说前向过程:当图像被编码为潜表示 $z_0$ 后,前向过程逐步对其添加噪声,得到一系列加噪版本 $z_1, z_2, …, z_T$,其中 $z_T$ 近似为标准高斯噪声,也就是说,在此刻,也就是时间步$T$,对图片的加噪已经到达了极限。

如果你对所谓潜表示有疑惑,事实上整个去噪过程都是在被投影到一个潜空间中的图片上进行的,这是为了特征更稠密以及更便于计算。但这完全不影响理解,你在本部分可以忽略它,暂时把$z$理解为正常图像、把扩散模型的工作过程当成是在原图上进行的。

虽然理论上,前向过程是“逐步添加噪声”,看上去我们得到了 $T$ 张带噪图。但在实际构建训练数据的时候,我们并不会真的执行完整的 $T$ 步加噪——那样太浪费计算资源了。在实际构建训练数据时,我们只是把一张图在某一个时间步下的被加噪情况作为一条数据,尽管设定上它属于某个完整的完全加噪过程,但这个完整加噪过程并没有被执行。

详细的说,便是,对于一张图 $z_0$,我们**随机采样一个时间步 $t$**,直接通过公式A(上一小节提到了)一步算出该时刻的带噪图 $z_t$,然后用 $(z_t, t)$ 作为一条训练数据。上面的“逐步”描述只是为了解释这个完整过程的概念,不代表我们在实践中会真的跑完整个流程。

反向过程

不过,这个完整过程会在反向过程(也就是推理/生成过程)中被反过来完整执行。根据之前的讲解,现在我们可以总结反向过程:

从时间步 $T$ 一直到 $0$,对于推理时的每一次循环:

  • 输入是当前时间步下的带噪图 $z_t$,输出是模型预测的、当前时间步下应该被去除的噪声成分 $\epsilon_\theta$

  • 如此往复,每轮循环都预测“现在应该删掉哪些噪声”并删除它,直到最后删得只剩下有用信息

而整个反向过程的起点是一个纯噪声 $z_T$。

需要注意的是,为了约束生成结果,我们一般会加入额外的条件信息,比如对画面内容的文本描述(通过词嵌入注入模型)。所以现在我们知道,扩散模型的反向过程中有两个最关键的约束:

  1. 时间步嵌入(Timestep Embedding)。正如此前反复提及的,这个因素告诉网络当前处于去噪过程的哪个阶段。研究者一般认为,早期的去噪步骤需要处理大量噪声,后期的步骤则更关注细节修复。扩散模型的核心结构通过将时间步 $t$ 编码为向量,并注入到每一层,让网络感知此刻的生成进度。
  2. 条件控制(Conditioning)。以T2I任务为例。在这类任务中,这个条件是文本描述。文本首先通过CLIP等模型编码为嵌入向量,然后通过交叉注意力机制注入扩散模型的核心结构。再举一个例子——在用于视频生成任务的扩散模型中(如Tooncrafter),这个条件也包括参考帧、姿态序列等。

2. 结构

2.1.U-Net

你应该已经注意到,上一小节的末尾,扩散模型的核心结构被用斜体强调。是时候讲解一下这个核心结构究竟是什么了。

扩散模型的结构基于U-Net,让我们从它说起。基础的U-Net最早被应用于医学图像分割。其网络结构由:

  • 一系列降采样操作构成的压缩路径(contracting path)
  • 反卷积上采样操作构成的扩展路径(expansive path)

构成,是一个对称编-解码器架构全卷积网络

但是,只是一系列降采样和上采样只是在压缩和重建特征。U-Net的设计者认为,保留边缘、纹理等空间细节,需要使解码器(也就是扩展路径)在恢复分辨率时能够直接访问编码器(压缩路径)对应层的细粒度特征。

因此,他们为U-Net加入了跳跃连接(Skip Connection). 在压缩路径中,每一步的特征图会被裁剪(或在现代实现中通过填充保持尺寸一致)后,与扩展路径对应步(如压缩路径的第一步对应扩展路径的最后一步)的特征图进行拼接,然后进行下一步的上采样操作(通道数减半,尺寸加倍)。

下图展示了初代U-Net的结构,这也是它名称的由来。注意其中灰色箭头指示的跳跃连接。

U-Net
来源:https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/

Q: 跳跃连接和残差连接的区别是?
A:
跳跃连接是一种广义概念,或者说,设计模式。网络中的某一层输出 跳过若干层,直接连接到后面的某层(当然,该输出也会正常转播到其下一层)。输出传递到该层后,它可以与这一层的结果采取相加或者拼接(concatenate)操作,再继续向后传递。

残差连接是跳跃连接的一种特殊情况。它只能是相加操作。一般用于缓解梯度消失,便于训练深层网络。在常规设计中,残差连接跨越几个层,比如Resnet中,在卷积层前后采用残差连接。

2.1.1. 一些工程细节

对于原始的U-Net而言,由于强制使用有效卷积,不引入额外填充而是进行裁剪,导致每次卷积操作后特征图的尺寸都会在边长上减少2px。所以,原始U-Net输入输出图像尺寸并不相同。

比如,在一个经典实现中,输入尺寸为572* 572, 输出则是388 * 388

因此,在损失计算方面需要进行额外的操作,即将用于损失的Ground Truth图像裁剪为与输出图像相同的大小。现代U-Net基本摒弃这一操作,引入有填充卷积使得输入输出图像尺寸相同

实际应用中,U-Net一般输出一个和原始图像尺寸相等的图片。比如,对于用于一些语义分割的U-Net,输出的图像中,每一个像素都对应一个类别标签。

2.2.扩散模型中的U-Net

扩散U-Net作为Stable diffusion等T2I模型的核心模块存在。也就是说,在反向过程中,它接收上一轮去噪操作得到的加噪图和时间步嵌入,通过U-Net的典型编-解码器结构,输出模型所认为的、用于构建本轮加噪图的噪声。

在这其中,经典的U-Net编-解码器结构被改进。

  • 最为显著的改进,是把以传统卷积-池化层为主体模块的Conv–BN–ReLU堆叠改为残差卷积块交叉注意力模块的交替堆叠。
  • 交叉注意力被用作将外部条件嵌入(如文本描述)和输入的空间特征进行融合,其中 Query 来自潜空间中的图像特征,Key 和 Value 来自条件嵌入。
  • 残差卷积块在保留传统卷积空间建模能力的基础上,通过残差连接缓解了深层网络的梯度消失问题,使得网络可以更深、表达能力更强。

接下来,让我们详细了解一下这两个模块的作用机制。

2.2.1.扩散U-Net中的残差卷积

pass

2.3. 一个完整的扩散模型

pass

3.相关概念

这部分仅做简要介绍。
pass

3.1.潜空间

也就是常说的latent space。和医学图像分割等传统任务不同,在T2I(text2image)等任务中,U-Net工作在一个潜空间中。输入图像会被预训练的图像编码器(例如:变分自编码器VAE及其变体) 压缩进信息更加稠密的低维潜空间,成为一个“潜表示”。

无论是前向加噪过程还是预测-去噪过程都在该潜空间中进行。扩散过程完成后,潜空间中的潜表示特征图会被图像解码器解码回原分辨率的高清图像。

也就是说,图像被输入进模型后被投影到潜空间,进行了一系列处理后又被放了出来。

3.4.变分自编码器VAE

变分自编码器的核心思想是学习输入数据在低维潜空间中的概率分布。

与传统自编码器不同,VAE的编码器不再输出一个固定值,而是输出概率分布。通过从该分布中采样,并获得一个潜在向量,解码器据此重建数据。这一过程受两个目标共同优化:通过定义重建损失来保证输出与输入相似,而KL散度损失用于约束潜在空间分布规整、连续且接近标准正态分布。

所以,VAE不仅能够有效压缩和重建数据,更能从一个结构良好的潜在空间中随机采样,生成全新的、与训练数据类似而又不重复的样本。


雕刻的技法:浅析扩散模型基本原理
http://example.com/2026/03/16/雕刻的技法:浅析扩散模型基本原理/
作者
TVEM
发布于
2026年3月16日
许可协议