c7w's blog

Diffusion-DDPM

发布于 # Learning

这一系列博文我们对 Diffusion 模型进行简单的介绍 :)

我们认为比较重要的 Paper List:

DDPM

DDPM(Denoising Diffusion Probabilistic Models)是一种生成式模型,其可以将噪声 xT\mathbf{x}_T 经过一系列级联的去噪(Denoising)过程生成具有真实感的图像 x0\mathbf{x}_0

在 DDPM 中,具有两个重要的过程:前向过程(forward process, or diffusion process)和去噪过程(denoising process):

前向过程

前向过程,也就是图中的 qq 过程,通过不断加高斯噪音的方式将原始数据分布 q(x0)q(\mathbf{x}_0) 转换为简单易处理的标准正态分布。在前向过程中,一个初始的噪声图像 xT\mathbf{x}_T 被迭代地与一系列高斯噪声进行混合,生成一系列经过随机扰动的图像 xt\mathbf{x}_t,其中 t=T1,T2,,0t=T-1,T-2,\ldots,0

更加形式化地,我们可以表示为:

q(xtxt1):=N(xt;1βtxt1,βtI)q\left(\mathbf{x}_t \mid \mathbf{x}_{t-1}\right):=\mathcal{N}\left(\mathbf{x}_t ; \sqrt{1-\beta_t} \mathbf{x}_{t-1}, \beta_t \mathbf{I}\right)

这里 q(xtxt1)q\left(\mathbf{x}_t \mid \mathbf{x}_{t-1}\right) 表示隐变量 xt\mathbf{x}_t 相对于 xt1\mathbf{x}_{t-1} 的条件概率分布。也就是说,如果我们已知隐变量 xt1\mathbf{x}_{t-1} 的取值,想要获得隐变量 xt\mathbf{x}_t 的取值,我们就要从这个关于 xt\mathbf{x}_t 的正态分布中采样,其均值为 1βtxt1\sqrt{1-\beta_t}\mathbf{x}_{t-1},方差为 βtI\beta_t\mathbf{I}。这里的数列 βt{\beta_t} 由人工手动定义,在原文的实现中实现为在 β1=104\beta_1=10^{-4}βT=0.02\beta_T=0.02 的线性插值,这里 T=1000T=1000。直观上,每一步前向过程的操作就是对输入的数据加入高斯噪声的扰动。

在该算法中,从原始图片输入 x0\mathbf{x}_0 到完全的高斯噪声 xT\mathbf{x}_T 的过程是由一系列 qq 过程级联产生的。我们认为这个级联后的过程是一个马尔科夫过程,这意味着在任意时间 tt,当前状态 xt\mathbf{x}_t 的条件概率分布只依赖于其前一个状态 xt1\mathbf{x}_{t-1},即:

q(xtxt1,xt2,,x0)=q(xtxt1)q\left(\mathbf{x}_t \mid \mathbf{x}_{t-1}, \mathbf{x}_{t-2}, \ldots, \mathbf{x}_0\right)=q\left(\mathbf{x}_t \mid \mathbf{x}_{t-1}\right)

这里 q(xtxt1,xt2,,x0)q(\mathbf{x}_t \mid \mathbf{x}_{t-1}, \mathbf{x}_{t-2}, \ldots, \mathbf{x}_0) 表示在给定之前的所有状态的条件下,当前状态 xt\mathbf{x}_t 的条件概率分布,q(xtxt1)q(\mathbf{x}_t \mid \mathbf{x}_{t-1}) 表示当前状态 xt\mathbf{x}_t 相对于 xt1\mathbf{x}_{t-1} 的条件概率分布。根据马尔科夫过程的性质,我们有:

q(x1,x2,,xTx0)=t=1Tq(xtxt1)q(\mathbf{x}_1, \mathbf{x}_2, \cdots, \mathbf{x}_T \mid \mathbf{x}_0) =\prod_{t=1}^T q\left(\mathbf{x}_t \mid \mathbf{x}_{t-1}\right)

这里 q(x1,x2,,xTx0)q(\mathbf{x}_1, \mathbf{x}_2, \cdots, \mathbf{x}_T \mid \mathbf{x}_0) 表示隐变量 x1,x2,,xT\mathbf{x}_1, \mathbf{x}_2, \cdots, \mathbf{x}_T(之后简记为 x1:T\mathbf{x}_{1:T})相对于 x0\mathbf{x}_0 的联合条件概率分布。

同时,根据高斯分布的可叠加性,我们可以得出:

q(xtx0)=N(xt;αˉtx0,(1αˉt)I),q\left(\mathbf{x}_t \mid \mathbf{x}_0\right)=\mathcal{N}\left(\mathbf{x}_t ; \sqrt{\bar{\alpha}_t} \mathbf{x}_0,\left(1-\bar{\alpha}_t\right) \mathbf{I}\right),

这里 αt:=1βt\alpha_t:=1-\beta_t, αˉt:=s=1tαs\bar{\alpha}_t:=\prod_{s=1}^t \alpha_s

去噪过程

我们希望去噪过程是上述前向过程的逆过程,也就是说,我们要获得 q(xtxt1)q(\mathbf{x}_t \mid \mathbf{x}_{t-1}) 的逆分布。我们知道,如果 q(xtxt1)q(\mathbf{x}_t \mid \mathbf{x}_{t-1}) 是正态分布且 βt\beta_t 足够接近 0,那么其逆过程也近似为一个正态分布。我们通过一个神经网络 θ\theta 来拟合这个正态分布的均值(与方差,Improved DDPM)。

pθ(xt1xt):=N(xt1;μθ(xt,t),Σθ(xt,t))p_\theta\left(\mathbf{x}_{t-1} \mid \mathbf{x}_t\right):=\mathcal{N}\left(\mathbf{x}_{t-1} ; \boldsymbol{\mu}_\theta\left(\mathbf{x}_t, t\right), \boldsymbol{\Sigma}_\theta\left(\mathbf{x}_t, t\right)\right)

如果这个网络 θ\theta 被成功训练到可以拟合 pp 过程,那么我们就具有了一个具有“去噪”能力的网络。进而,我们可以从标准正态分布中采样 xT\mathbf{x}_T,然后经过 TTpθp_\theta 的变换,便得到了具有真实感的图像 x0\mathbf{x}_0

马尔可夫过程保证了:

pθ(x0:T):=p(xT)t=1Tpθ(xt1xt)p_\theta\left(\mathbf{x}_{0: T}\right):=p\left(\mathbf{x}_T\right) \prod_{t=1}^T p_\theta\left(\mathbf{x}_{t-1} \mid \mathbf{x}_t\right)

训练过程

训练的目标是通过模型生成的数据分布 pθ(x0)p_\theta(\mathbf{x}_0) 与真实数据分布 q(x0)q(\mathbf{x}_0) 尽可能相近。这可以通过最小化假设检验 E[logpθ(x0)]\mathbb{E}\left[-\log p_\theta\left(\mathbf{x}_0\right)\right] 来实现。由于:

pθ(x0)=pθ(x0:T)dx1:Tpθ(x0:T)=pθ(xT)t=1Tpθ(xt1xt)\begin{aligned} p_\theta\left(\boldsymbol{x}_0\right) & =\int p_\theta\left(\boldsymbol{x}_{0: T}\right) d \boldsymbol{x}_{1: T}\\ p_\theta\left(\boldsymbol{x}_{0: T}\right) & =p_\theta\left(\boldsymbol{x}_T\right) \prod_{t=1}^T p_\theta\left(\boldsymbol{x}_{t-1} \mid \boldsymbol{x}_t\right) \end{aligned}

我们尝试去推出 E[logpθ(x0)]\mathbb{E}\left[-\log p_\theta\left(\mathbf{x}_0\right)\right] 的上界,通过将其上界优化小的方式去优化该假设检验值:

Lce=Eq(x0)(logpθ(x0))=Eq(x0)(logpθ(x0:T)dx1:T)=Eq(x0)(logq(x1:Tx0)pθ(x0:T)q(x1:Tx0)dx1:T)=Eq(x0)(logEq(x1:Tx0)(pθ(x0:T)q(x1:Tx0)))Eq(x0)(Eq(x1:Tx0)(logpθ(x0:T)q(x1:Tx0)))=q(x0)q(x1:Tx0)logpθ(x0:T)q(x1:Tx0)dx0dx1:T=q(x0:T)logpθ(x0:T)q(x1:Tx0)dx0:T=Eq(x0:T)[logpθ(x0:T)q(x1:Tx0)]=Eq(x0:T)[logq(x1:Tx0)pθ(x0:T)]\begin{aligned} \mathcal{L}_{c e} & =-\mathbb{E}_{q\left(\boldsymbol{x}_0\right)}\left(\log p_\theta\left(\boldsymbol{x}_0\right)\right) \\ & =-\mathbb{E}_{q\left(\boldsymbol{x}_0\right)}\left(\log \int p_\theta\left(\boldsymbol{x}_{0: T}\right) d \boldsymbol{x}_{1: T}\right) \\ & =-\mathbb{E}_{q\left(\boldsymbol{x}_0\right)}\left(\log \int q\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}_0\right) \frac{p_\theta\left(\boldsymbol{x}_{0: T}\right)}{q\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}_0\right)} d \boldsymbol{x}_{1: T}\right) \\ & =-\mathbb{E}_{q\left(\boldsymbol{x}_0\right)}\left(\log \mathbb{E}_{q\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}_0\right)}\left(\frac{p_\theta\left(\boldsymbol{x}_{0: T}\right)}{q\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}_0\right)}\right)\right) \\ & \leq-\mathbb{E}_{q\left(\boldsymbol{x}_0\right)}\left(\mathbb{E}_{q\left(\boldsymbol{x}_{1: T \mid} \mid \boldsymbol{x}_0\right)}\left(\log \frac{p_\theta\left(\boldsymbol{x}_{0: T}\right)}{q\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}_0\right)}\right)\right) \\ & =-\iint q\left(\boldsymbol{x}_0\right) q\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}_0\right) \log \frac{p_\theta\left(\boldsymbol{x}_{0: T}\right)}{q\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}_0\right)} d \boldsymbol{x}_0 d \boldsymbol{x}_{1: T} \\ & =-\int q\left(\boldsymbol{x}_{0: T}\right) \log \frac{p_\theta\left(\boldsymbol{x}_{0: T}\right)}{q\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}_0\right)} d \boldsymbol{x}_{0: T} \\ & =-\mathbb{E}_{q\left(\boldsymbol{x}_{0: T}\right)}\left[\log \frac{p_\theta\left(\boldsymbol{x}_{0: T}\right)}{q\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}_0\right)}\right]=\mathbb{E}_{q\left(\boldsymbol{x}_{0: T}\right)}\left[\log \frac{q\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}_0\right)}{p_\theta\left(\boldsymbol{x}_{0: T}\right)}\right] \end{aligned}

这里用了变分自编码器(VAE)中的重要不等式,通常称为“ELBO(evidence lower bound)不等式”。下面对式子进行解释:

左边的期望值是关于潜在变量 z\mathbf{z} 的先验分布 p(z)p(\mathbf{z}) 取期望后的结果,其中 z\mathbf{z} 通过生成模型 pθ(x0,z)p_\theta(\mathbf{x}_0, \mathbf{z}) 与观测变量 x0\mathbf{x}_0 相关联。根据贝叶斯定理,我们有:

pθ(x0,z)=pθ(x0z)p(z)p_\theta\left(\mathbf{x}_0, \mathbf{z}\right)=p_\theta\left(\mathbf{x}_0 \mid \mathbf{z}\right) p(\mathbf{z})

因此,可以将左边的期望值写成以下形式:

E[logpθ(x0)]=Ep(z)[logpθ(x0z)]H[p(z)]\mathbb{E}\left[-\log p_\theta\left(\mathbf{x}_0\right)\right]=\mathbb{E}_{p(\mathbf{z})}\left[-\log p_\theta\left(\mathbf{x}_0 \mid \mathbf{z}\right)\right]-\mathbb{H}[p(\mathbf{z})]

其中,H[p(z)]\mathbb{H}\left[p(\mathbf{z})\right] 是潜在变量的先验分布 p(z)p(\mathbf{z}) 的熵,可以看作是潜在变量的不确定度的度量。在我们的例子中,潜在变量 z\mathbf{z}x1:T\mathbf{x}_{1:T}

接下来我们用马尔科夫过程的性质把 Eq(x0:T)[logq(x1:Tx0)pθ(x0:T)]\mathbb{E}_{q\left(\boldsymbol{x}_{0: T}\right)}\left[\log \frac{q\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}_0\right)}{p_\theta\left(\boldsymbol{x}_{0: T}\right)}\right] 中的联合概率分布拆开。同时,因为 q(xtxt1)q\left(\mathbf{x}_t \mid \mathbf{x}_{t-1}\right) 的分布的 closed-form solution 不可知,我们引入 x0\mathbf{x}_0 后利用贝叶斯公式可以转换成 q(xt1xt,x0)q\left(\mathbf{x}_{t-1} \mid \mathbf{x}_t, \mathbf{x}_0\right),这个分布的参数为:

q(xt1xt,x0)=N(xt1;μ~t(xt,x0),β~tI)whereμ~t(xt,x0):=αˉt1βt1αˉtx0+αt(1αˉt1)1αˉtxtandβ~t:=1αˉt11αˉtβtq\left(\mathbf{x}_{t-1} \mid \mathbf{x}_t, \mathbf{x}_0\right)=\mathcal{N}\left(\mathbf{x}_{t-1} ; \tilde{\boldsymbol{\mu}}_t\left(\mathbf{x}_t, \mathbf{x}_0\right), \tilde{\beta}_t \mathbf{I}\right) \\ \text{where} \quad \tilde{\boldsymbol{\mu}}_t\left(\mathbf{x}_t, \mathbf{x}_0\right):=\frac{\sqrt{\bar{\alpha}_{t-1}} \beta_t}{1-\bar{\alpha}_t} \mathbf{x}_0+\frac{\sqrt{\alpha_t}\left(1-\bar{\alpha}_{t-1}\right)}{1-\bar{\alpha}_t} \mathbf{x}_t \quad \\ \text{and} \quad \tilde{\beta}_t:=\frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t} \beta_t

最终我们发现上述上界等价于:

Eq[DKL(q(xTx0)p(xT))LT+t>1DKL(q(xt1xt,x0)pθ(xt1xt))Lt1logpθ(x0x1)L0]\mathbb{E}_q[\underbrace{D_{\mathrm{KL}}\left(q\left(\mathbf{x}_T \mid \mathbf{x}_0\right) \| p\left(\mathbf{x}_T\right)\right)}_{L_T}+\sum_{t>1} \underbrace{D_{\mathrm{KL}}\left(q\left(\mathbf{x}_{t-1} \mid \mathbf{x}_t, \mathbf{x}_0\right) \| p_\theta\left(\mathbf{x}_{t-1} \mid \mathbf{x}_t\right)\right)}_{L_{t-1}} \underbrace{-\log p_\theta\left(\mathbf{x}_0 \mid \mathbf{x}_1\right)}_{L_0}]

我们希望的优化目标,便是这些概率分布之间的 KL 散度。

优化目标的进一步改进

我们考虑 Lt1L_{t-1},由于计算 KL 散度的两个分布都是正态分布,我们可以直接得到闭式解:

Lt1=Eq(x0,xt)[12σt2μ~(xt,x0)μθ(xt,t)2]+C\begin{aligned} \mathcal{L}_{t-1} =\mathbb{E}_{q\left(\boldsymbol{x}_0, \boldsymbol{x}_t\right)}\left[\frac{1}{2 \sigma_t^2}\left\|\tilde{\boldsymbol{\mu}}\left(\boldsymbol{x}_t, \boldsymbol{x}_0\right)-\boldsymbol{\mu}_\theta\left(\boldsymbol{x}_t, t\right)\right\|^2\right]+C \end{aligned}

这相当于直接预测 pθp_\theta 过程的均值

而由于我们在训练过程中知道前向过程 xt=αˉtx0+1αˉtϵ\mathbf{x}_t=\sqrt{\bar{\alpha}_t} \mathbf{x}_0+\sqrt{1-\bar{\alpha}_t} \boldsymbol{\epsilon},且在训练过程中要将 μθ(xt,t)\boldsymbol{\mu}_\theta\left(\boldsymbol{x}_t, t\right) 回归到的值只与 x0\boldsymbol{x}_0xt\boldsymbol{x}_t 有关,于是我们可以代入消去这个回归值中的 x0\boldsymbol{x}_0,得到我们要把 μθ(xt,t)\boldsymbol{\mu}_\theta\left(\boldsymbol{x}_t, t\right) 回归到:

1αt(xtβt1αˉtϵ)\frac{1}{\sqrt{\alpha_t}}\left(\mathbf{x}_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}} \boldsymbol{\epsilon}\right)

而这里的 xt\boldsymbol{x}_tμθ(xt,t)\boldsymbol{\mu}_\theta\left(\boldsymbol{x}_t, t\right) 的输入。本着简便的原则,我们可以设计:

μθ(xt,t)=1αt(xtβt1αˉtϵθ(xt,t))\boldsymbol{\mu}_\theta\left(\boldsymbol{x}_t, t\right) = \frac{1}{\sqrt{\alpha_t}}\left(\mathbf{x}_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}} \boldsymbol{\epsilon}_\theta\left(\boldsymbol{x}_t, t\right)\right)

也就是说,我们的网络 ϵθ\boldsymbol{\epsilon}_\theta 最终只需要输入 xt\boldsymbol{x}_t 和当前时间的 time embedding,输出我们在前向过程中相对原图添加的噪声即可。

于是我们可以对 Loss 稍作修改:

Ex0,ϵ[βt22σt2αt(1αˉt)ϵϵθ(αˉtx0+1αˉtϵ,t)2]\mathbb{E}_{\mathbf{x}_0, \epsilon}\left[\frac{\beta_t^2}{2 \sigma_t^2 \alpha_t\left(1-\bar{\alpha}_t\right)}\left\|\boldsymbol{\epsilon}-\boldsymbol{\epsilon}_\theta\left(\sqrt{\bar{\alpha}_t} \mathbf{x}_0+\sqrt{1-\bar{\alpha}_t} \boldsymbol{\epsilon}, t\right)\right\|^2\right]

再简便一些,我们丢弃前面的系数:

Lsimple (θ):=Et,x0,ϵ[ϵϵθ(αˉtx0+1αˉtϵ,t)2]L_{\text {simple }}(\theta):=\mathbb{E}_{t, \mathbf{x}_0, \epsilon}\left[\left\|\boldsymbol{\epsilon}-\boldsymbol{\epsilon}_\theta\left(\sqrt{\bar{\alpha}_t} \mathbf{x}_0+\sqrt{1-\bar{\alpha}_t} \boldsymbol{\epsilon}, t\right)\right\|^2\right]

这相当于对于不同时间步的 Loss 做了一个分配不同权重的操作。事实上,这里将 tt 较小的时间步的 Loss 权重降低,使得模型不用花费太多精力在考虑 fine-grained 的细节上。

Reference

除了原论文外,本节内容的整理我们参考了以下内容:

感觉水够一篇的篇幅了,换一篇接着写 :)