注:

2024 年 12 月 26 日终于完工啦,如有错误,欢迎指正~

参考:

【大白话01】一文理清 Diffusion Model 扩散模型 | 原理图解+公式推导_哔哩哔哩_bilibili

多模态大模型:算法、应用与微调 刘兆峰 (豆瓣) (douban.com)

狗都能看懂的DDPM论文详解-CSDN博客

Diffusion model(一): 公式推导详解_diffusion模型公式推导-CSDN博客

扩散模型理论与公式推导——详细过程速览与理解加深_扩散模型加噪公式中加噪推导-CSDN博客

1. 什么是 Diffusion Model ?

扩散的设计灵感主要来自于非平衡热力学,在非平衡热力学中,系统和环境之间经常发生物质与能量的交换。如果在一个装有水的容器中滴入一滴墨水,那么会看到墨水在水中逐渐扩散,直至最后均匀的分布在整个容器。如果把这个扩散过程的每一步都控制的足够小,那么理论上这个过程就是可逆的。

Denoising Diffusion Probabilistic Models[^1],DDPM 是一种生成模型,所谓生成模型,就是从学习给定数据的分布,然后再通过该分布生成新的数据样本。那么理所当然的,DDPM 可以用于缓解数据集稀缺数据集类别分布不平衡数据增强

DDPM 包含两个关键过程:

  1. 正向扩散过程(Forward Diffusion Process)

    对数据逐步加入噪声,直到变为纯随机噪声

    Forward Diffusion Process

  2. 逆向生成过程(Reverse Diffusion Process)

    从纯噪声中逐步移除噪声,生成目标数据

    Reverse Diffusion Process

2. Diffusion Model 的数学推导

2.1 Forward Diffusion Process

这个阶段是一个逐渐往图片中加入噪声的过程,通过 T 步加入噪声之后,得到一个完全为噪声的图像。每个加噪的步骤都是类似的,对于 tt 步的样本 xtx_t,可以理解成一个递推过程:xt=f(xt1)x_t = f(x_{t-1}),而 f(x)f(x) 的定义如下:

xt=1βt  ×  xt1+βt  ×  εtεtN(0,I)x_t = \sqrt{1-\beta_t}\; × \; x_{t-1} + \sqrt{\beta_t} \; × \; \varepsilon_{t} \quad \quad \quad \quad \varepsilon_t \sim \mathcal{N}(0, I)

其中 tt 表示第 tt 个时间步,xtx_t 表示在第 tt 个时间步的数据,εt\varepsilon_t 表示第 tt 个时间步的多维标准高斯正态噪声,它的每个维度是独立同分布的,即: εN(0,I)\varepsilon \sim \mathcal{N}(0, I) ——均值为 0,协方差矩阵为单位矩阵 II

协方差矩阵:随机变量的各个维度之间是独立的,且每个维度的方差都为 1

βt\beta_t 表示时间步 tt噪声调度参数(Noise Schedule Parameter),用于控制噪声的强度( βt\beta_t 通常很小,如 0.0001 ∼ 0.02 ),通常来说, tt 越大,βt\beta_t 越大(因为越到后面,轻微扰动很难看出变化,所以 βt\beta_t 的值会越来越大)。

在训练的时候,如果直接使用这种逐步计算的过程,自然是效率很低的,那么通过这个公式能否直接从初始时刻推导到最后时刻呢?这里我们直到答案是肯定的,具体的步骤如下~

首先令 αt=1βt\alpha_t = 1 - \beta_t,那么 xtx_t 就转换成:

xt=αt  ×  xt1+1αt  ×  εtx_t = \sqrt{\alpha_t}\; × \; x_{t-1} + \sqrt{1-\alpha_t} \; × \; \varepsilon_{t}

对于上式中的 xt1x_{t-1} ,我们再利用该公式进行替换:

xt=αt(αt1  ×  xt2  +  1αt1  ×  εt1)+1αt  ×  εtx_t = \sqrt{\alpha_t}(\sqrt{\alpha_{t-1}} \; × \; x_{t-2} \; + \; \sqrt{1-\alpha_{t-1}} \; × \; \varepsilon_{t-1}) + \sqrt{1-\alpha_t} \; × \; \varepsilon_{t}

稍微化简一下:

xt=αtαt1  ×  xt2+(  αtαtαt1  ×  εt1  +  1αt  ×  εt)x_t = \sqrt{\alpha_t\alpha_{t-1}} \; × \; x_{t-2} + (\; \sqrt{\alpha_t-\alpha_{t}\alpha_{t-1}} \; × \; \varepsilon_{t-1} \; + \; \sqrt{1-\alpha_t} \; × \; \varepsilon_{t})

我们知道:

αtαtαt1  ×  εt1N(0,  (αtαtαt1)  ×  I)\sqrt{\alpha_t-\alpha_{t}\alpha_{t-1}} \; × \; \varepsilon_{t-1} \quad \sim \mathcal{N}(0, \; (\alpha_t-\alpha_{t}\alpha_{t-1}) \; × \; I)

1αt  ×  εtN(0,  (1αt)  ×  I)\sqrt{1-\alpha_t} \; × \; \varepsilon_{t} \quad \sim \mathcal{N}(0, \; (1-\alpha_t) \; × \; I)

二者相加,因为:

IFxN(μx,  σx2),YN(μy,  σy2)Z=x+YThenZN(μx+μy,  σx2+σy2)\begin{align*} IF \quad & x \sim \mathcal{N}(\mu_x,\; \sigma_x^2), \quad Y \sim \mathcal{N}(\mu_y,\; \sigma_y^2)\\ & Z = x + Y\\ Then \quad & Z \sim \mathcal{N}(\mu_x + \mu_y,\; \sigma_x^2 + \sigma_y^2) \end{align*}

根据均值方差相加,那么可以得到:

  αtαtαt1  ×  εt1  +  1αt  ×  εtN(0,(1αtαt1  ×  I))\; \sqrt{\alpha_t-\alpha_{t}\alpha_{t-1}} \; × \; \varepsilon_{t-1} \; + \; \sqrt{1-\alpha_t} \; × \; \varepsilon_{t} \sim \mathcal{N}(0, (1-\alpha_t\alpha_{t-1} \; × \; I))

所以 xtx_{t} 公式可以写为:

xt=αtαt1  ×  xt2+1αtαt1×εεN(0,  I)x_t = \sqrt{\alpha_t\alpha_{t-1}} \; × \; x_{t-2} + \sqrt{1-\alpha_t\alpha_{t-1}} × \varepsilon \quad \quad \quad \quad \varepsilon \sim \mathcal{N}(0, \; I)

那么我们可以推导出:

xt=αtαt1...α1  ×  x0+1αtαt1...α1×εx_t = \sqrt{\alpha_t\alpha_{t-1}...\alpha_1} \; × \; x_0 + \sqrt{1-\alpha_t\alpha_{t-1}...\alpha_1} × \varepsilon

方便起见,令 αt=αtαt1...α1\overline{\alpha}_t= \alpha_t\alpha_{t-1}...\alpha_1 ,最终我们可以得到:

xt=αt  ×  x0+1αt×εx_t = \sqrt{\overline{\alpha}_t} \; × \; x_0 + \sqrt{1-\overline{\alpha}_t} × \varepsilon

tt 很大的时候,xtεx_t ≈ \varepsilon (全噪声),αt\overline{\alpha}_t 为 0 ,βt\beta_t 此时比较大,符合一开始的结论。

这就是 Diffusion 模型的 Forward Diffusion Process 过程,还是比较容易的~

2.2 Reverse Diffusion Process

对于 Reverse 阶段,模型的目标是通过一个完全噪声的图片,逐步的进行去噪操作,最终得到我们所需要的图片。

这里可能有的同学会去想,那么我们把 Forward 过程直接逆过来可以吗?在这里是不可以的。因为初始状态是一个纯噪声的图片,想要一步步的去噪,生成所需的图片。那其实相当于我们直接知道了我们所需的图片了,这显然是自相矛盾了,我们怎么可能提前知道了所要生成的图片呢?

既然已经明确了这个阶段是一个逐步去噪的过程,那么是怎么做的呢?这里 DDPM 采用的方法是神经网络里的 UNet 去预测当前时间步 xtx_t 里的噪声 εt\varepsilon_{t},这里需要联系上方 Forward 过程,和之前的公式是同样的参数。

根据前面的 Forward 过程,我们知道,从 xt1x_{t-1} 生成 xtx_t 的过程是一个高斯分布:

q(xtxt1)=N(xt; αtxt1,  (1αt)I)q(x_{t}|x_{t-1})=\mathcal{N}(x_{t};\ \sqrt{\alpha_t}x_{t-1}, \; (1-\alpha_t)I)


给出该公式的计算过程:

因为 xt=αtxt1+1αtεtx_t = \sqrt{\alpha_t}x_{t-1} + \sqrt{1-\alpha_t}\varepsilon_{t} ,其中 εtN(0, I)\varepsilon_t \sim \mathcal{N}(0,\ I) 是标准高斯分布。可以看出 xtx_t 是由 xt1x_{t-1} 和一个独立的高斯噪声项线性组合而成,所以 xtx_t 也是一个高斯分布。

如果随机变量 xxyy 服从高斯分布,并且有以下线性关系:

y=Ax+b+ϵ y = Ax + b + \epsilon

yy 的分布也是高斯分布,均值和协方差分别为:
其中:

  • ϵN(0,Σ)\epsilon \sim \mathcal{N}(0, \Sigma) 是独立的高斯噪声;
  • AA 是线性变换矩阵,bb 是偏置项。
  • 均值:μy=Aμx+b\mu_y = A\mu_x + b
  • 协方差:Σy=AΣxAT+Σϵ\Sigma_y = A\Sigma_xA^T + \Sigma_\epsilon

在扩散模型中:

  • A=αtA = \sqrt{\alpha_t},即 xt1x_{t-1} 被缩放;
  • b=0b = 0,无偏移项;
  • ϵN(0,(1αt)I)\epsilon \sim \mathcal{N}(0, (1 - \alpha_t)I) ,协方差是 (1αt)I(1 - \alpha_t)I

因此,xtx_t 的分布是:

q(xtxt1)=N(xt;  αtxt1,  (1αt)I) q(x_{t} | x_{t-1}) = \mathcal{N}(x_t;\; \sqrt{\alpha_t}x_{t-1},\; (1 - \alpha_t)I)


对于后向分布 q(xt1xt)q(x_{t-1}|x_t),通过贝叶斯公式 q(xt1xt)=q(xt, xt1)q(xt)=q(xtxt1)q(xt1)q(xt)q(x_{t-1}|x_t)=\frac{q(x_t,\ x_{t-1})}{q(x_t)}=\frac{q(x_t|x_{t-1})q(x_{t-1})}{q(x_t)} 可以得到 q(xt1xt)q(x_{t-1}|x_t) 自然也属于高斯分布。但是我们不能够简单推断 q(xt1xt)q(x_{t-1}|x_t) ,那么需要做的就是,使用一个神经网络,去拟合这个噪声的分布,也就是让以下公式去拟合真实的 q(xt1xt)q(x_{t-1}|x_t)

pθ(xt1xt)=N(xt1; μθ(xt, t), Σθ(t))\begin{align} p_{\theta}(x_{t-1}|x_t)=\mathcal{N}(x_{t-1};\ \, \mu_{\theta}(x_t,\ t),\ \Sigma_{\theta}(t)) \end{align}

其中:

  • 均值 μθ(xt, t)\mu_{\theta}(x_t,\ t) 是一个由神经网络预测的,输入时带噪的图片 xtx_t 和时间步 tt
  • 协方差 Σθ(t)\Sigma_{\theta}(t) 是一个固定值,可由神经网络预测。通常,为简化计算,协方差 Σθ(t)\Sigma_\theta(t) 被设为一个固定值或直接从前向过程的参数继承。
  • pθ(xt1  xt)p_{\theta}(x_{t-1}\ | \ x_t) 是一个可调分布,依赖于神经网络的参数 θ\theta 。通过训练,网络会逐步优化这个部分,使它尽可能接近真实的后向分布 q(xt1  xt)q(x_{t-1}\ |\ x_t)

后向分布(Backward Distribution)是指在扩散模型的生成阶段中,从当前时刻 xtx_t 推测上一时刻 xt1x_{t-1} 的条件分布。

训练过程的核心目标最小化两者之间的差距

DKL(q(xt1  xt)  pθ(xt1  xt))D_{KL}(q(x_{t-1}\ |\ x_t)\ || \ p_{\theta}(x_{t-1}\ | \ x_t))

这里 DKLD_{KL} 是 Kullback-Leibler 散度,用来衡量两个概率分布之间的差异。通过最小化 DKLD_{KL} ,神经网络会调整 μθ(xt, t)\mu_{\theta}(x_t,\ t)Σθ(t)\Sigma_{\theta}(t) ,使得 pθ(xt1  xt)p_{\theta}(x_{t-1}\ |\ x_t) 更加接近真实分布 q(xt1  xt)q(x_{t-1}\ |\ x_t)

KL 散度:

具体见:Kullback-Leibler 散度 - Excelius’s World

简单理解,KL 散度是用来衡量两个概率分布之间“相似度”的一个数学工具。如果 KL 散度小,表示 Q(x)Q(x) 能很好地近似 P(x)P(x);KL 散度大,表示 Q(x)Q(x)P(x)P(x) 有较大的差异。

2.2.1 Reverse 过程的具体步骤

  1. 初始化

    从纯噪声开始采样

    xTN(0, I)x_T \sim \mathcal{N}(0, \ I)

  2. 逐步去噪

    通过神经网络从 xtx_t 逐步生成 xt1x_{t-1}

    xt1pθ(xt1  xt)x_{t-1} \sim \mathcal{p_{\theta}}(x_{t-1}\ |\ x_t)

    • 对于每一步 tt,我们从近似分布 pθ(xt1  xt)p_{\theta}(x_{t-1}\ |\ x_t)采样
    • 逐步重复该过程,直到 t=0t=0,最终得到生成的样本 x0x_0
  3. 单步去噪公式

    采样过程通常按照如下公式进行:

    xt1=μθ(xt, t)+Σθ(t)zx_{t-1}=\mu_{\theta}(x_t,\ t)+\sqrt{\Sigma_{\theta}(t)} \cdot z

    其中:

    • zN(0, I)z \sim \mathcal{N}(0,\ I) 是随机噪声,用来为每一步增加随机性(如果 t=1t=1,可以直接去掉随机性)。
    • μθ(xt, t)\mu_{\theta}(x_t,\ t)Σθ(t)\Sigma_{\theta}(t) 由神经网络预测。

高斯分布采样公式:

对于一个随机变量 xN(μ,Σ)x \sim \mathcal{N}(\mu, \Sigma),高斯分布的采样公式为:

x=μ+Σz,zN(0,I)x = \mu + \sqrt{\Sigma} \cdot z, \quad z \sim \mathcal{N}(0, I)

  • μ\mu:高斯分布的均值。
  • Σ\Sigma:协方差矩阵(如果是对角矩阵,则每个元素是方差)。
  • zz:标准正态分布噪声。

扩散模型中的 pθ(xt1  xt)p_\theta(x_{t-1}\ |\ x_t) 是高斯分布,因此可以直接套用这一公式:

xt1=μθ(xt, t)+Σθ(t)zx_{t-1} = \mu_\theta(x_t,\ t) + \sqrt{\Sigma_\theta(t)} \cdot z

这里的 zN(0,I)z \sim \mathcal{N}(0, I) 表示在采样过程中添加的随机性。


2.2.2 Reverse 过程中的噪声预测

在 DDPM 中,通常不直接预测后向分布的均值 μθ(xt, t)\mu_\theta(x_t,\ t),而是将任务转化为预测噪声 ϵ\epsilon,原因如下:

  1. 真实的均值依赖于 x0x_0

    • 在 Forward 过程中,xtx_t 可以由 x0x_0 和噪声 ϵ\epsilon 表示为:xt=αtx0+1αtϵx_t = \sqrt{\overline{\alpha}_t} x_0 + \sqrt{1-\overline{\alpha}_t} \epsilon
    • q(xt1  xt)q(x_{t-1}\ |\ x_t) 的均值公式中涉及 x0x_0,但 x0x_0 是未知的。
    • 神经网络可以间接通过预测 ϵ\epsilon 来推导 μθ\mu_\theta
  2. 预测噪声更简单

    • 对于上述的 xtx_t 计算公式,神经网络学习预测噪声 ϵ\epsilon,不直接预测均值 μθ(xt, t)\mu_\theta(x_t,\ t),通过预测噪声,可以间接计算出均值:

      μθ(xt, t)=1αt(xt1αt1αtϵθ(xt, t))\mu_\theta(x_t,\ t)=\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\overline{\alpha}_t}}\epsilon_{\theta}(x_t,\ t))


上述公式的推导公式:

在扩散模型中,前向过程(Forward Process)的每一步是一个加噪的马尔科夫链,其条件分布定义为:

q(xtxt1)=N(xt;αtxt1,(1αt)I) q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{\alpha_t} x_{t-1}, (1 - \alpha_t) I)

我们想要计算后向分布 q(xt1xt)q(x_{t-1} | x_{t}),实际上这个在理论上很难计算的——数据分布未知: 数据的真实分布 q(x0)q(x_0) 通常是未知的,而后向分布依赖于这个分布。

于是乎,对于这个马尔可夫过程,我们引入 q(xt1  xt, x0)q(x_{t-1}\ |\ x_{t},\ x_0)来代替原始的 q(xt1  xt)q(x_{t-1}\ |\ x_t),此时

q(xt1  xt, x0)=q(xt, xt1  x0)q(xt  x0)=q(xt  xt1, x0)q(xt1  x0)q(xt  x0) q(x_{t-1}\ |\ x_{t},\ x_0)=\frac{q(x_t,\ x_{t-1}\ |\ x_0)}{q(x_t\ |\ x_0)}=\frac{q(x_t\ | \ x_{t-1},\ x_0)q(x_{t-1}\ |\ x_0)}{q(x_t\ |\ x_0)}

在扩散模型中,Forward 过程是马尔可夫过程,意味着 xtx_t 的分布只依赖于上一时刻 xt1x_{t-1},与 x0x_0 无关:

q(xt  xt1, x0)=q(xt  xt1) q(x_t\ |\ x_{t-1},\ x_0) = q(x_t\ |\ x_{t-1})

然后,我们再忽略归一化项,最终,后向分布可以化简为:

q(xt1  xt, x0)q(xt  xt1)q(xt1  x0) q(x_{t-1}\ |\ x_t,\ x_0) \varpropto q(x_t\ |\ x_{t-1})q(x_{t-1}\ |\ x_0)

关于归一化项为什么要忽略:

归一化项 q(xtx0)q(x_t | x_0) 表示边际分布:

q(xt  x0)=q(xt  xt1)q(xt1  x0)dxt1q(x_t\ |\ x_0) = \int q(x_t\ |\ x_{t-1}) q(x_{t-1}\ |\ x_0) dx_{t-1}

这个积分在实际中难以解析计算,但它对于 q(xt1  xt,x0)q(x_{t-1}\ |\ x_t, x_0)相对值或形式并不重要。

实际采样中不需要归一化项

在扩散模型的 Reverse 过程中,我们需要通过采样生成 xt1x_{t-1}。采样过程中,只需要知道分布的相对权重(如 P~(x)\tilde{P}(x) 的形状),而不需要知道它的具体归一化值 ZZ。因此,在推导和实现中,可以省略 ZZ

那么好,此时我们也知道了 q(xt  xt1)=N(xt; αtxt1, (1αt)I)q(x_t\ |\ x_{t-1})=\mathcal{N}(x_t;\ \sqrt{\alpha_t}x_{t-1},\ (1-\alpha_t)I) (前方已经给出了)和 q(xt1  x0)=N(xt1; αt1x0, (1αt1)I)q(x_{t-1}\ |\ x_0)=\mathcal{N}(x_{t-1};\ \sqrt{\overline{\alpha}_{t-1}}x_0,\ (1-\overline{\alpha}_{t-1})I) (根据先前的公式可以计算出),其两者相乘的后向分布 q(xt1  xt, x0)q(x_{t-1}\ |\ x_t,\ x_0) 依然是高斯分布。其条件均值 μ(xt, x0)\mu(x_t,\ x_0) 计算步骤如下:

  • 联合分布方差:

    Σ=(Σ11+Σ21)1=(11αt+11αt1)1I=(1αt)(1αt1)(1αt)+(1αt1)I=(1αt)(1αt1)1αtI \Sigma = \left( \Sigma_1^{-1} + \Sigma_2^{-1} \right)^{-1}=(\frac{1}{1-\alpha_t}+\frac{1}{1-\overline{\alpha}_{t-1}})^{-1}I=\frac{(1-\alpha_t)(1-\overline{\alpha}_{t-1})}{(1-\alpha_t)+(1-\overline{\alpha}_{t-1})}I=\frac{(1-\alpha_t)(1-\overline{\alpha}_{t-1})}{1-\overline{\alpha}_t}I

    其中,累积噪声衰减因子 αˉt\bar{\alpha}_t 的一个性质:

    1αt=1αtαt1=乘法展开(1αt)+(1αt1)(1αt)(1αt1)(1αt)+(1αt1) 1-\overline{\alpha}_t=1-\alpha_t\overline{\alpha}_{t-1} \overset{\text{乘法展开}}{=} (1-\alpha_t) + (1-\overline{\alpha}_{t-1}) - (1-\alpha_t)(1-\overline{\alpha}_{t-1}) \approx (1-\alpha_t)+(1-\overline{\alpha}_{t-1})

    注意:在扩散模型中,(1αˉt1)(1αt)(1 - \bar{\alpha}_{t-1})(1 - \alpha_t) 是高阶小量,可以被忽略(噪声强度通常很小)。

  • 联合分布均值:

    μ=Σ(Σ11μ1+Σ21μ2)=(1αt)(1αt1)1αt(αtxt1αt+αt1x01αt1)=(1αt1)αt1αtxt+(1αt)αt11αtx0 \mu = \Sigma \left( \Sigma_1^{-1}\mu_1 + \Sigma_2^{-1}\mu_2 \right)=\frac{(1-\alpha_t)(1-\overline{\alpha}_{t-1})}{1-\overline{\alpha}_t}{(\frac{\sqrt{\alpha_t}x_t}{1-\alpha_t}+\frac{\sqrt{\overline{\alpha}_{t-1}}x_0}{1-\overline{\alpha}_{t-1}})}=\frac{(1-\overline{\alpha}_{t-1})\sqrt{\alpha_t}}{1-\overline{\alpha}_t}x_t+\frac{(1-\alpha_t)\sqrt{\overline{\alpha}_{t-1}}}{1-\overline{\alpha}_t}x_0

即:

μ(xt,x0)=(1αt1)αt1αtxt+(1αt)αt11αtx0 \mu(x_t,x_0)=\frac{(1-\overline{\alpha}_{t-1})\sqrt{\alpha_t}}{1-\overline{\alpha}_t}x_t+\frac{(1-\alpha_t)\sqrt{\overline{\alpha}_{t-1}}}{1-\overline{\alpha}_t}x_0

高斯分布乘积的性质

两个高斯分布:

p1(x)=N(x; μ1, Σ1),p2(x)=N(x; μ2, Σ2)p_1(x) = \mathcal{N}(x;\ \mu_1,\ \Sigma_1), \quad p_2(x) = \mathcal{N}(x;\ \mu_2,\ \Sigma_2)

相乘的结果是:

p(x)N(x;μ,Σ)p(x) \propto \mathcal{N}(x; \mu, \Sigma)

其中:

  • 协方差: Σ=(Σ11+Σ21)1\Sigma = \left( \Sigma_1^{-1} + \Sigma_2^{-1} \right)^{-1}
  • 均值: μ=Σ(Σ11μ1+Σ21μ2)\mu = \Sigma \left( \Sigma_1^{-1}\mu_1 + \Sigma_2^{-1}\mu_2 \right)

之后呢,我们使用神经网络预测噪声,由 x0=xt1αtϵαtx_0 = \frac{x_t-\sqrt{1-\overline{\alpha}_t}\epsilon}{\sqrt{\overline{\alpha}_t}}(上方公式可推导),因为噪声 ϵ\epsilon 是未知的,我们使用神经网络 ϵθ(xt, t)\epsilon_\theta(x_t,\ t) 来预测,可近似为:

x^0=xt1αtϵθ(xt, t)αt \hat{x}_0 = \frac{x _t-\sqrt{1-\overline{\alpha}_t}\epsilon_\theta(x_t,\ t)}{\sqrt{\overline{\alpha}_t}}

x^0\hat{x}_0 带入到 μ(xt,x0)\mu(x_t,x_0)得:

μ(xt,x^0)=(1αt1)αt1αtxt+(1αt)αt11αtxt1αtϵθ(xt, t)αt \mu(x_t,\hat{x}_0)=\frac{(1-\overline{\alpha}_{t-1})\sqrt{\alpha_t}}{1-\overline{\alpha}_t}x_t+\frac{(1-\alpha_t)\sqrt{\overline{\alpha}_{t-1}}}{1-\overline{\alpha}_t} \cdot \frac{x _t-\sqrt{1-\overline{\alpha}_t}\epsilon_\theta(x_t,\ t)}{\sqrt{\overline{\alpha}_t}}

整理便可得:

μθ(xt, t)=1αt(xt1αt1αtϵθ(xt, t)) \mu_\theta(x_t,\ t)=\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\overline{\alpha}_t}}\epsilon_{\theta}(x_t,\ t))


  • 这样,我们可以通过噪声预测模型间接计算 μθ(xt, t)\mu_\theta(x_t,\ t) ,然后通过预测的 μθ(xt, t)\mu_\theta(x_t,\ t) 和后向分布的协方差 Σθ(xt, t)\Sigma_\theta(x_t,\ t),生成 xt1x_{t-1},然后我们逐步重复这个过程,就可以得到最终样本 x0x_0
  1. 训练目标转换为噪声预测

    • 目标是让神经网络预测噪声 ϵ^θ(xt, t)\hat{\epsilon}_\theta(x_t,\ t),并与真实噪声 ϵ\epsilon 之间最小化均方误差(MSE):

      L=Et[ϵϵ^θ(xt,t)2]L = \mathbb{E}_t \left[ \| \epsilon - \hat{\epsilon}_\theta(x_t, t) \|^2 \right]

好了,现在我们已经讲解完毕 Diffusion 模型的 Reverse 阶段了,这个阶段比较复杂,但是经过梳理之后,我们也顺利推导出来各项公式了~

接下来我会再写一篇 Diffusion 模型在 NLP 的一篇实战博文,敬请期待~

[^1]: Ho J, Jain A, Abbeel P. Denoising diffusion probabilistic models. NeuralPS, 2020.