扩散模型(Diffusion Models)详解
扩散模型(Diffusion Models)在近几年成为了生成对抗网络(GAN)之外的又一高质量生成模型的主要方向。它的中心理念可以概括为:「先把一张清晰的图逐渐加噪,最后变成纯随机噪声;然后训练一个神经网络去逆向地一步步清除噪声,最终还原到清晰的原图」。本篇将用直观的方式,并结合详细数学公式,来解释扩散模型的运作原理与实现流程。
一、为什么叫“扩散”?
在物理上,“扩散”常指例如一滴墨汁在水中慢慢扩散成均匀分布的过程。对于数据而言,则可以想象:把一张图像视为起始状态,每一步添上一点高斯噪声——图像就越来越模糊,最终完全变成像水中“均匀分布的墨汁”一样的纯噪声。 接下来要做的,就是 “逆向扩散”:假设我们手中只有一张纯随机噪声的图像,通过网络一步步“去噪”,让它回到那幅清晰图像。
在训练阶段,我们知道真实图像和各步噪声图像的对应关系;网络学到如何在每个阶段把噪声减去一点点,从而逐步逼近真实图像分布。
二、数学原理
1. 正向扩散(Forward Diffusion)
令数据点 x 0 ∈ R d \mathbf{x}_0 \in \mathbb{R}^d x0∈Rd 表示原始样本(如图像像素),我们定义一个“加噪”马尔可夫链:
x 0 → x 1 → … → x T \mathbf{x}_0 \;\to\; \mathbf{x}_1 \;\to\; \dots \;\to\; \mathbf{x}_T x0→x1→…→xT
其中每一步遵循
q ( x t ∣ x t − 1 ) = N ( x t ∣ 1 − β t x t − 1 , β t I ) , q(\mathbf{x}_t \mid \mathbf{x}_{t-1}) =\; \mathcal{N}\!\Bigl(\mathbf{x}_t \mid \sqrt{1-\beta_t}\,\mathbf{x}_{t-1},\;\beta_t \mathbf{I}\Bigr), q(xt∣xt−1)=N(xt∣1−βtxt−1,βtI),
β t \beta_t βt是第 t t t步的噪声强度( 0 < β 1 < ⋯ < β T < 1 0<\beta_1<\dots<\beta_T<1 0<β1<⋯<βT<1)。
直觉:在第 t t t步,我们把上一步 x t − 1 \mathbf{x}_{t-1} xt−1保留 1 − β t \sqrt{1-\beta_t} 1−βt那部分,另外 β t \beta_t βt的部分全改为随机高斯噪声,让图像变得比上一时刻更模糊。
通俗解释:想象有人在一幅画上撒了一点灰尘(噪声),然后下一步再撒更多灰尘,直到画面完全看不清。这便是“正向扩散”。
累积加噪公式
若我们一步步加噪到第 t t t步,可写
q ( x t ∣ x 0 ) = N ( x t ∣ α ˉ t x 0 , ( 1 − α ˉ t ) I ) , q(\mathbf{x}_t \mid \mathbf{x}_0) =\; \mathcal{N}\!\Bigl(\mathbf{x}_t \;\big|\; \sqrt{\bar{\alpha}_t}\,\mathbf{x}_0,\;\bigl(1-\bar{\alpha}_t\bigr)\mathbf{I}\Bigr), q(xt∣x0)=N(xt