简介:本文从定义、物理类比与数学直觉出发,系统讲解扩散模型的核心思想:先加噪再学会去噪,从而从随机噪声中生成数据。你将理解前向与反向过程、训练目标、与相关生成模型的区别,以及适用场景和工程注意事项。
扩散模型是一类生成模型。它的核心目标,是学习如何从一团完全随机的噪声中,逐步恢复出符合真实数据分布的样本。
如果用一句话概括它的工作方式:先定义一条从数据到噪声的“加噪路径”,再训练一个模型学会沿这条路径反向走回去。
这与常见的生成模型思路有本质不同。它不是一次性把噪声映射成数据,而是把一个困难的生成问题,拆解成许多个“微小去噪”步骤,每一步只要求模型去掉一点点噪声。最终,从纯噪声出发,经过数十到数百步迭代去噪,就能得到一个全新的、逼真的样本。
在扩散模型流行之前,生成模型主要有两条技术路线:
扩散模型提供了一种新的权衡:
因此,扩散模型成为当前高质量生成系统的重要基础之一,也常被用于图像合成、语音生成、分子结构生成等任务。
扩散模型由两个方向的过程构成。
给定一个真实样本 (x_0),前向过程定义一个马尔可夫链,逐步向它加入少量高斯噪声:
[
q(xt \mid x{t-1}) = \mathcal{N}(xt; \sqrt{1-\beta_t}x{t-1}, \beta_t I)
]
其中 (\beta_t) 是每一步的噪声强度。经过足够多步 (T) 后,(x_T) 近似成为标准高斯噪声。
这个过程的直观含义是:数据中的结构被逐步破坏,最终“扩散”为无结构的随机状态。它不需要学习,是人为定义的。
反向过程是模型真正要学习的内容。我们希望学到一个分布 (p\theta(x{t-1}\mid xt)),使得从 (x_T \sim \mathcal{N}(0,I)) 出发,逐步采样 (x{T-1}, x_{T-2}, \dots, x_0),最终得到符合真实分布的样本。
在数学上,反向过程也被建模为高斯分布,模型需要预测其均值与方差。实践中,通常让模型预测每一步加入的噪声,或等价地预测“干净数据”和“速度场”。
一个常见的简化训练目标是:
[
\mathcal{L} = \mathbb{E}{t, x_0, \epsilon}\left[|\epsilon - \epsilon\theta(x_t, t)|^2\right]
]
其中 (\epsilon) 是真实加入的噪声,(\epsilon_\theta) 是模型预测的噪声。也就是说,训练时随机选一个时间步 (t),把真实样本加噪到 (x_t),然后让模型根据 (x_t) 和 (t) 猜出当时加入的噪声是什么。
这个目标之所以有效,是因为只要能准确预测噪声,就能反推出干净数据的方向,从而完成一步去噪。
“扩散”本身是物理学的基本概念:粒子从高浓度区域向低浓度区域运动,最终达到均匀平衡态。热扩散、布朗运动等现象都描述系统如何演化为平衡态。
扩散模型借用了这一形式体系:
这种与非平衡热力学的联系,为扩散模型提供了直观理解与理论支撑。
另一个有益视角来自微积分。扩散模型学习的,是数据分布随时间的“变化率”函数;而生成过程,就是对这个函数在时间上的积分。
形式化地写为:
[
f(x) = \int_t f(t, x) \, dt
]
其中 (f(t,x)) 表示每步的时间依赖动力学,可以是漂移项、速度场或得分函数。模型学到的正是这个 (f(t,x)),而采样就是沿时间积分它。
通俗地说:
你也可以把生成过程想象成雕刻:一开始是一块无形状的石料(纯噪声),模型每一步只去掉一点点多余部分(噪声),逐渐显露出雕像(数据)。每一步都很简单,但累积起来就能完成复杂生成。
扩散模型特别适合以下类型的问题:
在工程落地中,扩散模型常与对象存储、容器平台、加速计算资源等通用基础设施配合使用,以支持训练和推理。
| 概念 | 核心思路 | 与扩散模型的区别 |
|---|---|---|
| 生成对抗网络 | 生成器与判别器博弈 | 扩散模型训练更稳定,生成过程是迭代去噪而非一次前向 |
| 变分自编码器 | 编码到隐空间再解码 | 扩散模型不依赖显式编码器,生成质量通常更高 |
| 得分匹配模型 | 学习数据分布的得分函数 | 扩散模型可看作得分匹配的一种具体实现,强调加噪—去噪路径 |
| 流模型 | 学习可逆变换 | 扩散模型不要求变换可逆,但采样步数通常更多 |
需要强调的是,这些概念之间并非完全对立,很多现代方法会相互借鉴。
扩散模型的本质,是学习如何逆转一个渐进的加噪过程。它把生成任务拆解为逐步去噪,训练稳定、理论清晰、生成质量高。理解它的关键,在于抓住三个要点:
掌握这一框架后,你就能更从容地阅读相关论文、选择技术方案,并在实际系统中合理使用扩散模型。