【扩散模型】正向扩散过程(Forward Diffusion)

0. Diffusion模型是什么?

Diffusion Model(扩散模型)是一类生成模型,可以从随机噪声逐步“还原”出高质量数据(如图像),其核心思想是:

正向过程把数据逐步加噪变成纯噪声,反向过程学会从噪声中一步步“去噪”还原出原始数据。


正向扩散过程(Forward Diffusion)

  • 输入原始数据(如一张图像 x0x_0x0);
  • 按照某个“时间步数”t=1,2,...,Tt = 1, 2, ..., Tt=1,2,...,T,逐步向数据添加高斯噪声,得到 x1,x2,...,xTx_1, x_2, ..., x_Tx1,x2,...,xT
  • t=Tt = Tt=T 时,图像变成了近似纯噪声

这是一种马尔可夫过程,形式化如下:

q(xt∣xt−1)=N(xt;1−βtxt−1,βtI) q(x_t|x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} x_{t-1}, \beta_t \mathbf{I}) q(xtxt1)=N(xt;1βt xt1,βtI)

其中:

  • βt∈(0,1)\beta_t \in (0, 1)βt(0,1) 是每一步添加的噪声强度;
  • xtx_txt 是第 ttt 步的图像。

下面来详细拆解你没看懂的这个扩散过程的公式


原始公式回顾

我们说的 正向扩散过程(Forward Diffusion) 的公式是:

q(xt∣xt−1)=N(xt;1−βtxt−1,βtI) q(x_t|x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} x_{t-1}, \beta_t \mathbf{I}) q(xtxt1)=N(xt;1βt xt1,βtI)

它表示第 ttt 步图像 xtx_txt 是在第 t−1t-1t1 步图像 xt−1x_{t-1}xt1 的基础上加噪声得到的。


逐项解释

我们把这个公式拆成两部分讲:

1️⃣ 整体结构q(xt∣xt−1)=N(μ,σ2)q(x_t|x_{t-1}) = \mathcal{N}(\mu, \sigma^2)q(xtxt1)=N(μ,σ2)

这表示:

“在给定上一时刻图像 xt−1x_{t-1}xt1 的前提下,第 ttt 步的图像 xtx_txt 是一个正态分布随机变量”。

这是马尔可夫链的经典形式:当前状态只依赖于上一个状态。


2️⃣ 均值项μ=1−βt⋅xt−1\mu = \sqrt{1 - \beta_t} \cdot x_{t-1}μ=1βt xt1

这说明我们对上一步的图像进行缩放(<1),意思是“保留一部分原图内容”。

  • 1−βt∈(0,1)\sqrt{1 - \beta_t} \in (0, 1)1βt (0,1) 是一个缩放系数;(这里加根号是想要控制总的“方差”维持在 1,让模型好学,训练稳定。
  • 越到后面步数 ttt 越大,噪声越多,原图保留越少。

3️⃣ 方差项σ2=βt⋅I\sigma^2 = \beta_t \cdot \mathbf{I}σ2=βtI

  • 这是一个“加噪”的强度参数;
  • I\mathbf{I}I 是单位矩阵,表示噪声在每个像素上都独立;
  • βt\beta_tβt 是人为设定的超参数,控制每一步加多少噪声。

简化理解:
“我们保留一部分旧图像,并加上一点高斯噪声。”


用一句话总结这个过程

每一步的图像 xtx_txt 是这样来的:

“拿上一步的图像 xt−1x_{t-1}xt1,稍微压一压(乘 1−βt\sqrt{1 - \beta_t}1βt ),再撒一层噪声粉末(加高斯噪声)”。

就像你用 Photoshop 滤镜一点点“模糊”一张照片。


图像类比(帮助理解)

想象我们有一张猫的清晰图片:

  • 第1步:图像稍微糊了一点(噪声强度 β1=0.001\beta_1 = 0.001β1=0.001);
  • 第100步:猫脸已经看不清了;
  • 第1000步:完全变成随机的彩色噪声。

这中间的每一步,都是基于上一帧加了一点点噪声得到的,而公式就是在数学上描述这个过程


如果用代码模拟这个过程:

x_t = sqrt(1 - beta_t) * x_{t-1} + sqrt(beta_t) * torch.randn_like(x_{t-1})

这就是实际 PyTorch 实现中最核心的一行代码。


你可能感兴趣的:(深度学习,生成式模型,机器学习,人工智能,深度学习,python)