1、前言

在上篇文章,我们已经讲了Diffusion扩散模型原理解析,或者说,其实不能把它视作是Diffusion,我所讲的内容,其实只是按照里面的第二篇参考论文来的,第二篇论文是Denoising Diffusion Probabilistic Models (arxiv.org),它缩写为DDPM。而今天我们要讲的,是为了解决DDPM中存在的采样慢的问题。解决这个问题的模型被称为Denoising Diffusion Implicit Models,缩写DDIM。

对本篇内容,我不想按照论文里面的顺序来讲,打算从模型本身入手。我看网上大部分文章都是按照论文里面的顺序来讲,这种讲法问题很大。尤其是到了为何DDIM能够跳步采样那一段,什么由于我们去掉马尔可夫假设,所以可以跳步采样?那我想问一下,难道前向过程就没有马尔可夫假设吗?既然前向过程可以跳步,又何来去噪过程是因为马尔可夫假设而无法跳步呢?解释得实在过于牵强了。

Ps:由于本篇文章可供参考的文章很少(至少我没有在网上发现从这个角度去切入的)。对本篇文章,很多的想法皆是对论文的理解解读,我已经看过不下20遍这篇论文了。在文章中,如你觉得有什么不妥之处,还望提出来,谢谢!

视频:[加速采样——DDIM原理解析-哔哩哔哩]

2、DDPM回顾及为何不能跳步采样

2.1、回顾

回忆一下,我们是如何推导出DDPM的。我们来简单概括一下

首先,定义前向过程 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)为线性高斯加噪,又定义了马尔可夫链。然后,对数据进行极大似然估计。由于有一个概率分布理论不可解,于是我们只能退而求其次,只能够求极大似然的变分下界。也就是这样
log ⁡ P ( x 0 ) ≥ ∫ log ⁡ P ( x 0 : T ) q ( x 1 : T ∣ x 0 ) q ( x 1 : T ∣ x 0 ) d x 1 : T \log P(x_0)\ge \int\log \frac{P(x_{0:T})}{q(x_{1:T}|x_0)}q(x_{1:T}|x_0)dx_{1:T} logP(x0)logq(x1:Tx0)P(x0:T)q(x1:Tx0)dx1:T
x 0 x_0 x0表示图像的初始状态。而不等号右边,就是其变分下界

我们利用马尔可夫性质,对变分下界不断推导变化,最终便得到了目标函数
E q ( x 1 ∣ x 0 ) [ log ⁡ P ( x 0 ∣ x 1 ) ] − ∑ t = 2 T E q ( x t ∣ x 0 ) [ K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ P ( x t − 1 ∣ x t ) ) ] − K L ( q ( x T ∣ x 0 ) ∣ ∣ P ( x T ) ) \mathbb{E}_{q(x_1|x_0)}\left[\log P(x_0|x_1)\right]-\sum\limits_{t=2}^T\mathbb{E}_{q(x_t|x_0)}\left[KL(q(x_{t-1}|x_t,x_0)||P(x_{t-1}|x_t))\right]-KL\left(q(x_T|x_0)||P(x_T)\right) Eq(x1x0)[logP(x0x1)]t=2TEq(xtx0)[KL(q(xt1xt,x0)∣∣P(xt1xt))]KL(q(xTx0)∣∣P(xT))
后来,我们又发现第三项KL散度是完全可以求出来的。所以不需要神经网络去逼近。而真正需要学习参数的,其实只有第一项和第二项。

我们首先推导第二项的 K L 散度 \boxed{\mathbf{我们首先推导第二项的KL散度}} 我们首先推导第二项的KL散度

我们发现 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)是可以求解的,其期望跟方差为
q ( x t − 1 ∣ x t , x 0 ) ∼ N ( x t − 1 ∣ a t ( 1 − α ˉ t − 1 ) x t + α ˉ t − 1 ( 1 − α t ) x 0 1 − α ˉ t , 1 − α ˉ t − 1 1 − α ˉ t β t I ) q(x_{t-1}|x_t,x_0)\sim N(x_{t-1}|\frac{\sqrt{a_t}(1-\bar\alpha_{t-1})x_t+\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)x_0}{1-\bar\alpha_t},\frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t}\beta_tI) q(xt1xt,x0)N(xt11αˉtat (1αˉt1)xt+αˉt1 (1αt)x0,1αˉt1αˉt1βtI)
于是,对 P ( x t − 1 ∣ x t ) P(x_{t-1}|x_t) P(xt1xt)的参数,使用神经网络去逼近,让两个概率分布尽可能像。

为了推导的方便,我们首先设 P ( x t − 1 ∣ x t ) ∼ N ( x t − 1 ∣ μ θ , Σ θ ) P(x_{t-1}|x_t)\sim N(x_{t-1}|\mu_{\theta},\Sigma_{\theta}) P(xt1xt)N(xt1μθ,Σθ) q ( x t − 1 ∣ x t , x 0 ) ∼ N ( x t − 1 ∣ μ ϕ , Σ ϕ ) q(x_{t-1}|x_{t},x_0)\sim N(x_{t-1}|\mu_\phi,\Sigma_\phi) q(xt1xt,x0)N(xt1μϕ,Σϕ)

后面经过推导,得到了第二项KL散度的优化表达式
K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ P ( x t − 1 ∣ x t ) ) = 1 2 σ t 2 [ ∣ ∣ μ ϕ − μ θ ( x t , t ) ∣ ∣ 2 ] (1) KL(q(x_{t-1}|x_t,x_0)||P(x_{t-1}|x_t))=\frac{1}{2\sigma^2_t}\left[||\mu_\phi-\mu_\theta(x_t,t)||^2\right]\tag{1} KL(q(xt1xt,x0)∣∣P(xt1xt))=2σt21[∣∣μϕμθ(xt,t)2](1)
其中 σ t \sigma_t σt代表的是P分布的 Σ θ \Sigma_\theta Σθ

后来,我们还分别对他进行了另外两种表达,一种是预测 x 0 x_0 x0
K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ P ( x t − 1 ∣ x t ) ) = α ˉ t − 1 β t 2 2 σ t 2 ( 1 − α ˉ t ) 2 [ ∣ ∣ x 0 − f θ ( x t , t ) ∣ ∣ 2 ] (2) KL(q(x_{t-1}|x_t,x_0)||P(x_{t-1}|x_t))=\frac{\bar\alpha_{t-1}\beta_t^2}{2\sigma^2_t(1-\bar\alpha_t)^2}\left[||x_0-f_\theta(x_t,t)||^2\right]\tag{2} KL(q(xt1xt,x0)∣∣P(xt1xt))=2σt2(1αˉt)2αˉt1βt2[∣∣x0fθ(xt,t)2](2)
其中, f θ ( x t , t ) f_\theta(x_t,t) fθ(xt,t)由神经网络预测

另一种,是预测噪声
K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ P ( x t − 1 ∣ x t ) ) = β t 2 2 σ t 2 ( 1 − α ˉ t ) α t ∣ ∣ ϵ t − ϵ θ ( x t , t ) ∣ ∣ 2 (3) KL(q(x_{t-1}|x_t,x_0)||P(x_{t-1}|x_t))=\frac{\beta_t^2}{2\sigma_t^2(1-\bar\alpha_t)\alpha_t}||\epsilon_t-\epsilon_\theta(x_t,t)||^2\tag{3} KL(q(xt1xt,x0)∣∣P(xt1xt))=2σt2(1αˉt)αtβt2∣∣ϵtϵθ(xt,t)2(3)
其中, ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t)由神经网络预测

论文最终以式(3)作为优化目标。而后我们发现,对于式(3)的 β t 2 2 σ t 2 ( 1 − α ˉ t ) α t \frac{\beta_t^2}{2\sigma_t^2(1-\bar\alpha_t)\alpha_t} 2σt2(1αˉt)αtβt2这一部分,都是我们设定的超参数,并不需要优化,所以最终神经网络的损失函数就可以写成 ∣ ∣ ϵ t − ϵ θ ( x t , t ) ∣ ∣ 2 ||\epsilon_t-\epsilon_\theta(x_t,t)||^2 ∣∣ϵtϵθ(xt,t)2。也就只需要最小化它就可以了

这是第二项 K L 散度的,那么对第一项 \boxed{\mathbf{这是第二项KL散度的,那么对第一项}} 这是第二项KL散度的,那么对第一项

我们也发现,可以正比于得到 ∣ ∣ ϵ t − ϵ θ ( x t , t ) ∣ ∣ 2 ||\epsilon_t-\epsilon_\theta(x_t,t)||^2 ∣∣ϵtϵθ(xt,t)2这个优化目标。作者在模型训练的时候,是每个样本只训练一个时刻t,所以最终训练的方式写成这样(左边为训练,右边为采样

在这里插入图片描述

右边的采样步骤 x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z x_{t-1}=\frac{1}{\sqrt{\alpha_t}}\left(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(x_t,t)\right)+\sigma_tz xt1=αt 1(xt1αˉt 1αtϵθ(xt,t))+σtz,是 P ( x t − 1 ∣ x t ) P(x_{t-1}|x_t) P(xt1xt)重参数化的结果

2.2、从DDPM的目标函数视角上看,为什么无法跳步采样?

在DDPM里面,我们曾经依据 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)推导出了 q ( x t ∣ x t − 2 ) q(x_t|x_{t-2}) q(xtxt2),进而得到了 q ( x t ∣ x 0 ) q(x_t|x_0) q(xtx0)的表达式。通过这种方式,我们不难发现,我们并不需要一次次的加噪。而是可以一步到位。

那么,我们是否可以一步到位去噪呢?由于 P ( x t − 1 ∣ x t ) P(x_{t-1}|x_{t}) P(xt1xt)代表的是去噪,为什么我们不能像前向加噪过程那样,由 P ( x t − 1 ∣ x t ) P(x_{t-1}|x_t) P(xt1xt)推导出 P ( x t − 2 ∣ x t ) P(x_{t-2}|x_t) P(xt2xt)。进而导出 P ( x 0 ∣ x t ) P(x_0|x_t) P(x0xt)

**答案是,不行!**我们不妨来试一下

对于 P ( x t − 1 ∣ x t ) P(x_{t-1}|x_t) P(xt1xt),我们在DDPM里面重参数化得到
x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z (4) x_{t-1}=\frac{1}{\sqrt{\alpha_t}}\left(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(x_t,t)\right)+\sigma_tz\tag{4} xt1=αt 1(xt1αˉt 1αtϵθ(xt,t))+σtz(4)
那么我们同样可以得到 P ( x t − 2 ∣ x t − 1 ) P(x_{t-2}|x_{t-1}) P(xt2xt1)的表达式
x t − 2 = 1 α t − 1 ( x t − 1 − 1 − α t − 1 1 − α ˉ t − 1 ϵ θ ( x t − 1 , t − 1 ) ) + σ t − 1 z (5) x_{t-2}=\frac{1}{\sqrt{\alpha_{t-1}}}\left(x_{t-1}-\frac{1-\alpha_{t-1}}{\sqrt{1-\bar\alpha_{t-1}}}\epsilon_\theta(x_{t-1},t-1)\right)+\sigma_{t-1}z\tag{5} xt2=αt1 1(xt11αˉt1 1αt1ϵθ(xt1,t1))+σt1z(5)
把式(4)的 x t − 1 x_{t-1} xt1,代入到式(5)中,就可以得到 x t − 2 x_{t-2} xt2 x t x_t xt的表达式,也就对应 P ( x t − 2 ∣ x t ) P(x_{t-2}|x_t) P(xt2xt)。得到
x t − 2 = 1 α t − 1 ( 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z − 1 − α t − 1 1 − α ˉ t − 1 ϵ θ ( x t − 1 , t − 1 ) ) + σ t − 1 z (6) x_{t-2}=\frac{1}{\sqrt{\alpha_{t-1}}}\left(\frac{1}{\sqrt{\alpha_t}}\left(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(x_t,t)\right)+\sigma_tz-\frac{1-\alpha_{t-1}}{\sqrt{1-\bar\alpha_{t-1}}}\epsilon_\theta(x_{t-1},t-1)\right)+\sigma_{t-1}z\tag{6} xt2=αt1 1(αt 1(xt1αˉt 1αtϵθ(xt,t))+σtz1αˉt1 1αt1ϵθ(xt1,t1))+σt1z(6)
不难看到,这就是一个关于 x t x_t xt x t − 2 x_{t-2} xt2的等式,如果我们可以求解这个等式,那么自然就可以由 x t x_t xt跳步采样到 x t − 2 x_{t-2} xt2

**但是!我们求不出!!!为什么?**我们式(6)里面,有一个值求不出来,那就是 ϵ θ ( x t − 1 , t − 1 ) \epsilon_\theta(x_{t-1},t-1) ϵθ(xt1,t1),这个值是依赖神经网络求出来的,神经网络的输入是 x t − 1 x_{t-1} xt1和t-1时刻。但是当我们跳步采样时,从 x t x_t xt直接求出 x t − 2 x_{t-2} xt2,跳过了求出 x t − 1 x_{t-1} xt1的步骤,那我们就没有 x t − 1 x_{t-1} xt1,也就不能求出 ϵ θ ( x t − 1 , t − 1 ) \epsilon_\theta(x_{t-1},t-1) ϵθ(xt1,t1),更别说求解式(6)了。

因此,我们无法实现跳步采样

2.3、DDPM的困境

首先,DDPM我们不能跳步,而加噪步骤,必须要大,不能减小**(只有加的足够多的噪声,最终时刻才能逼近标准正态分布)**。那么,该怎么办呢?DDIM选择从马尔可夫假设入手

3、DDIM

3.1、马尔可夫假设

我们不妨回忆一下马尔可夫假设

在这里插入图片描述

一阶马尔可夫假设:给定 t − 1 时刻的状态, t 时刻仅与 t − 1 时刻有关,与过去的状态无关 \boxed{\mathbf{一阶马尔可夫假设:给定t-1时刻的状态,t时刻仅与t-1时刻有关,与过去的状态无关}} 一阶马尔可夫假设:给定t1时刻的状态,t时刻仅与t1时刻有关,与过去的状态无关

也就是说,给定t-1时刻的图像,t时刻的图像仅跟t-1时刻相关,与过去的时刻都无关,数学可以表达为

扩散
q ( x t ∣ x t − 1 , x t − 2 , ⋯   , x 0 ) = q ( x t ∣ x t − 1 ) q(x_t|x_{t-1},x_{t-2},\cdots,x_0)=q(x_t|x_{t-1}) q(xtxt1,xt2,,x0)=q(xtxt1)
逆扩散
P ( x t − 1 ∣ x t , x t + 1 , ⋯   , x T ) = P ( x t − 1 ∣ x t ) P(x_{t-1}|x_t,x_{t+1},\cdots,x_T)=P(x_{t-1}|x_t) P(xt1xt,xt+1,,xT)=P(xt1xt)
由马尔可夫假设,我们将整个扩散链和逆扩散链分解成了这样
q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) P ( x 0 : T ) = P ( x T ) ∏ t = 1 T P ( x t − 1 ∣ x t ) (7) q(x_{1:T}|x_0)=\prod\limits_{t=1}^Tq(x_t|x_{t-1})\\P(x_{0:T})=P(x_T)\prod\limits_{t=1}^TP(x_{t-1}|x_{t})\tag{7} q(x1:Tx0)=t=1Tq(xtxt1)P(x0:T)=P(xT)t=1TP(xt1xt)(7)
对这些分解,我们可以理解成,因为有了马尔可夫假设这个**“规则”**,才可以将扩散和逆扩散链分解成这样

那换句话说,是否存在某一种**“规则”**,可以将扩散链分解成这样(冒号等于表示将右边赋值给左边)
q ( x 1 : T ∣ x 0 ) : = q ( x T ∣ x 0 ) ∏ t = 2 T q ( x t − 1 ∣ x t , x 0 ) (8) q(x_{1:T}|x_0):=q(x_T|x_0)\prod\limits_{t=2}^Tq(x_{t-1}|x_t,x_0)\tag{8} q(x1:Tx0):=q(xTx0)t=2Tq(xt1xt,x0)(8)
这当然是可以存在,马尔可夫假设,是我们假设出来的,我们当然也可以假设出某一种规则,将扩散链分解成式(8)。那你可能要问了,这种规则是什么?是什么其实不重要。

马尔可夫假设只是因为马尔可夫这个人,对这个特殊的规则(当前时刻仅跟上一个时刻有关),进行了命名。如果它没有命名,我们其实也可以表示成:存在某一种规则,将扩散链分解成式(7)

因此,我们完全可以说:存在某一种未被命名的规则,将扩散链分解成式(8)

回过头来,我们为什么要将扩散链分解成式(8)?我的答案是:为了使DDIM的最终损失函数和DDPM的一样,同时也能够跳步采样。

3.2、跳步采样构造

在这里插入图片描述

为了简单起见,我们先假设现在只有9个时刻,t=0对应原始图像

对除了0的所有时刻,我记为 S ∈ { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 } S\in\{1,2,3,4,5,6,7,8\} S{1,2,3,4,5,6,7,8},并且 A ∈ { 2 , 5 , 8 } A\in \{2,5,8\} A{2,5,8} B ∈ { 1 , 3 , 4 , 6 , 7 } B\in\{1,3,4,6,7\} B{1,3,4,6,7}

也就是说,S包含了所有时刻,A和B是S的子集,分别包含了部分时刻,并且 A + B = S A+B=S A+B=S

此时我们不难发现,对于集合A。时刻与时刻之间,隔着两个时刻,我们需要这种结构,才能实现跳步采样

因此,我们假设有一个规则,可以将扩散链分解成这样
q ( x 1 : 8 ∣ x 0 ) = q ( x 8 ∣ x 0 ) ∏ i ∈ A q ( x i − 1 ∣ x i , x 0 ) ∏ j ∈ B q ( x j ∣ x 0 ) (9) q(x_{1:8}|x_0)=q(x_8|x_0)\prod\limits_{i\in A}q(x_{{i-1}}|x_{i},x_0)\prod\limits_{j\in B}q(x_{{j}}|x_0)\tag{9} q(x1:8x0)=q(x8x0)iAq(xi1xi,x0)jBq(xjx0)(9)
集合A里面,是全部序列S的子序列,里面每个时刻之间都隔着几个时刻。而B代表的是是对A序列关于S集合的补足

那么假如有大T个时刻,式子(9)就可以写成这样
q ( x 1 : T ∣ x 0 ) = q ( x T ∣ x 0 ) ∏ i ∈ A q ( x i − 1 ∣ x i , x 0 ) ∏ j ∈ B q ( x j ∣ x 0 ) q(x_{1:T}|x_0)=q(x_T|x_0)\prod\limits_{i\in A}q(x_{{i-1}}|x_{i},x_0)\prod\limits_{j\in B}q(x_{{j}}|x_0) q(x1:Tx0)=q(xTx0)iAq(xi1xi,x0)jBq(xjx0)
其中A不再代表是{2,5,8},而是代表一大串跳步的序列。B也相应的代表其补足

与此同时,也可以存在某一个规则,将逆扩散链分解成这样
P ( x 0 : T ) = P ( x T ) ∏ i ∈ A P ( x i − 1 ∣ x i ) ∏ j ∈ B P ( x 0 ∣ x j ) P(x_{0:T})=P(x_T)\prod\limits_{i\in A}P(x_{i-1}|x_i)\prod\limits_{j\in B}P(x_0|x_j) P(x0:T)=P(xT)iAP(xi1xi)jBP(x0xj)
为什么要这样分解?当然是为了配成和DDPM一样的损失函数。我们来进行一遍推导目标函数即可

3.3、DDIM的目标函数

在DDPM里面,我们是从变分下界之后,才真正需要用到马尔可夫假设来分解。所以,在变分下界之前,DDIM的所有步骤都和DDPM的一样。那么我就从变分下界开始推了
log ⁡ P ( x 0 ) ≥ ∫ log ⁡ P ( x 0 : T ) q ( x 1 : T ∣ x 0 ) q ( x 1 : T ∣ x 0 ) d x 1 : T = E q [ log ⁡ P ( x 0 : T ) q ( x 1 : T ∣ x 0 ) ] = E q [ log ⁡ P ( x T ) ∏ i ∈ A P ( x i − 1 ∣ x i ) ∏ j ∈ B P ( x 0 ∣ x j ) q ( x T ∣ x 0 ) ∏ i ∈ A q ( x i − 1 ∣ x i , x 0 ) ∏ j ∈ B q ( x j ∣ x 0 ) ] = E q [ log ⁡ P ( x T ) q ( x T ∣ x 0 ) + log ⁡ ∏ i ∈ A P ( x i − 1 ∣ x i ) q ( x i − 1 ∣ x i , x 0 ) + log ⁡ ∏ j ∈ B P ( x 0 ∣ x j ) q ( x j ∣ x 0 ) ] = E q [ log ⁡ P ( x T ) q ( x T ∣ x 0 ) + ∑ i ∈ A log ⁡ P ( x i − 1 ∣ x i ) q ( x i − 1 ∣ x i , x 0 ) + ∑ j ∈ B log ⁡ P ( x 0 ∣ x j ) q ( x j ∣ x 0 ) ] = E q ( x T ∣ x 0 ) [ log ⁡ P ( x T ) q ( x T ∣ x 0 ) ] + ∑ i ∈ A E q ( x i − 1 , x i ∣ x 0 ) [ log ⁡ P ( x i − 1 ∣ x i ) q ( x i − 1 ∣ x i , x 0 ) ] + ∑ j ∈ B E q ( x j ∣ x 0 ) [ log ⁡ P ( x 0 ∣ x j ) q ( x j ∣ x 0 ) ] = − K L ( q ( x T ∣ x 0 ) ∣ ∣ P ( x T ) ) − ∑ i ∈ A E q ( x i ∣ x 0 ) [ K L ( q ( x i − 1 ∣ x i , x 0 ) ∣ ∣ P ( x i − 1 ∣ x i ) ) ] − ∑ j ∈ B K L ( q ( x j ∣ x 0 ) ∣ ∣ P ( x 0 ∣ x j ) ) \begin{aligned}\log P(x_0)\ge& \int\log \frac{P(x_{0:T})}{q(x_{1:T}|x_0)}q(x_{1:T}|x_0)dx_{1:T}\\=&\mathbb{E}_q\left[\log \frac{P(x_{0:T})}{q(x_{1:T}|x_0)}\right]\\=&\mathbb{E}_q\left[\log \frac{P(x_T)\prod\limits_{i\in A}P(x_{i-1}|x_i)\prod\limits_{j\in B}P(x_0|x_j)}{q(x_T|x_0)\prod\limits_{i\in A}q(x_{{i-1}}|x_{i},x_0)\prod\limits_{j\in B}q(x_{{j}}|x_0)}\right]\\=&\mathbb{E}_q\left[\log \frac{P(x_T)}{q(x_T|x_0)}+\log\prod\limits_{i\in A}\frac{P(x_{i-1}|x_i)}{q(x_{i-1}|x_i,x_0)}+\log\prod\limits_{j\in B}\frac{P(x_{0}|x_j)}{q(x_j|x_0)}\right]\\=&\mathbb{E}_q\left[\log \frac{P(x_T)}{q(x_T|x_0)}+\sum\limits_{i\in A}\log\frac{P(x_{i-1}|x_i)}{q(x_{i-1}|x_i,x_0)}+\sum\limits_{j\in B}\log\frac{P(x_{0}|x_j)}{q(x_j|x_0)}\right]\\=&\mathbb{E}_{q(x_T|x_0)}\left[\log \frac{P(x_T)}{q(x_T|x_0)}\right]+\sum\limits_{i\in A}\mathbb{E}_{q(x_{i-1},x_{i}|x_0)}\left[\log\frac{P(x_{i-1}|x_i)}{q(x_{i-1}|x_i,x_0)}\right]+\sum\limits_{j\in B}\mathbb{E}_{q(x_j|x_0)}\left[\log\frac{P(x_{0}|x_j)}{q(x_j|x_0)}\right]\\=&-KL(q(x_T|x_0)||P(x_T))-\sum\limits_{i\in A}\mathbb{E_{q(x_i|x_0)}}\left[KL(q(x_{i-1}|x_i,x_0)||P(x_{i-1}|x_i))\right]-\sum\limits_{j\in B}KL(q(x_j|x_0)||P(x_0|x_j))\end{aligned}\nonumber logP(x0)======logq(x1:Tx0)P(x0:T)q(x1:Tx0)dx1:TEq[logq(x1:Tx0)P(x0:T)]Eq logq(xTx0)iAq(xi1xi,x0)jBq(xjx0)P(xT)iAP(xi1xi)jBP(x0xj) Eq logq(xTx0)P(xT)+logiAq(xi1xi,x0)P(xi1xi)+logjBq(xjx0)P(x0xj) Eq logq(xTx0)P(xT)+iAlogq(xi1xi,x0)P(xi1xi)+jBlogq(xjx0)P(x0xj) Eq(xTx0)[logq(xTx0)P(xT)]+iAEq(xi1,xix0)[logq(xi1xi,x0)P(xi1xi)]+jBEq(xjx0)[logq(xjx0)P(x0xj)]KL(q(xTx0)∣∣P(xT))iAEq(xix0)[KL(q(xi1xi,x0)∣∣P(xi1xi))]jBKL(q(xjx0)∣∣P(x0xj))

3.4、求解目标函数

为了构造同DDPM一样的训练方式,对任意时刻 1 ≤ t ≤ T 1\le t\le T 1tT,假设都有
q ( x t ∣ x 0 ) ∼ N ( x t ∣ α ˉ t x 0 , ( 1 − α ˉ t ) I ) (10) q(x_t|x_0)\sim N(x_t|\sqrt{\bar\alpha_t}x_{0},(1-\bar\alpha_t)I)\tag{10} q(xtx0)N(xtαˉt x0,(1αˉt)I)(10)
其中里面的 α \alpha α是我们定义的参数。而 P ( x T ) P(x_T) P(xT)也和DDPM那里一样,都被设置为标准正太分布。因此,第一项不存在需要学习的参数。我们重点看第二项和第三项
max ⁡ ( − ∑ i ∈ A E q ( x i ∣ x 0 ) [ K L ( q ( x i − 1 ∣ x i , x 0 ) ∣ ∣ P ( x i − 1 ∣ x i ) ) ] − ∑ j ∈ B K L ( q ( x j ∣ x 0 ) ∣ ∣ P ( x 0 ∣ x j ) ) ) \max\left(-\sum\limits_{i\in A}\mathbb{E_{q(x_i|x_0)}}\left[KL(q(x_{i-1}|x_i,x_0)||P(x_{i-1}|x_i))\right]-\sum\limits_{j\in B}KL(q(x_j|x_0)||P(x_0|x_j))\right) max iAEq(xix0)[KL(q(xi1xi,x0)∣∣P(xi1xi))]jBKL(q(xjx0)∣∣P(x0xj))
请注意 q ( x i − 1 ∣ x i , x 0 ) q(x_{i-1}|x_i,x_0) q(xi1xi,x0)表示的,并不是连续的时刻,里面的 i i i来自A里面的元素,是一个跨步的序列。比如我们之前提到的例子 A ∈ { 2 , 5 , 8 } A\in \{2,5,8\} A{2,5,8},那么当 i i i取5, i − 1 i-1 i1就是2。则 q ( x i − 1 ∣ x i , x 0 ) q(x_{i-1}|x_i,x_0) q(xi1xi,x0)表示成 q ( x 2 ∣ x 5 , x 0 ) q(x_{2}|x_5,x_0) q(x2x5,x0)

此时,我们的目标是最大化这个式子。但问题是,我们在DDPM里面,依赖于马尔可夫假设,是可以计算出 q ( x i − 1 ∣ x i , x 0 ) q(x_{i-1}|x_i,x_0) q(xi1xi,x0)的,也就是(利用马尔可夫假设消去 x 0 x_0 x0
q ( x i − 1 ∣ x i , x 0 ) = q ( x i ∣ x i − 1 , x 0 ) q ( x i − 1 ∣ x 0 ) q ( x i ∣ x 0 ) = q ( x i ∣ x i − 1 ) q ( x i − 1 ∣ x 0 ) q ( x i ∣ x 0 ) (11) q(x_{i-1}|x_i,x_0)=\frac{q(x_i|x_{i-1},x_0)q(x_{i-1}|x_0)}{q(x_i|x_0)}=\frac{q(x_i|x_{i-1})q(x_{i-1}|x_0)}{q(x_i|x_0)}\tag{11} q(xi1xi,x0)=q(xix0)q(xixi1,x0)q(xi1x0)=q(xix0)q(xixi1)q(xi1x0)(11)
在DDPM里面, q ( x i − 1 ∣ x i , x 0 ) q(x_{i-1}|x_i,x_0) q(xi1xi,x0)是可以计算的。但是在DDIM里面,我们依据某种“规则”分解扩散链的时候,显然那个“规则”不是马尔可夫假设,那么对于式(11),我们仍然有一个未知量,那就是 q ( x i ∣ x i − 1 , x 0 ) q(x_i|x_{i-1},x_0) q(xixi1,x0)。那该怎么办呢?

3.4.1、设定逆扩散过程

答案就是直接设定一个出来(但不能随意设定,我们看到式11,它的值依赖于 q ( x i ∣ x 0 ) 、 q ( x i − 1 ∣ x 0 ) q(x_i|x_0)、q(x_{i-1}|x_0) q(xix0)q(xi1x0)

这是非常容易理解的 q ( x i − 1 ∣ x t , x 0 ) q(x_{i-1}|x_t,x_0) q(xi1xt,x0)表示逆扩散,既然我们假定了扩散的过程(式子10),那么再假定逆扩散的话,肯定要依据扩散过程来假定,否则两者不一一对应,那都不用训练了,直接开席

我们将其假设成与 x i , x 0 x_{i},x_0 xi,x0相关的表达式, λ i 、 k i \lambda_i、k_i λiki是待求参数,而 σ i \sigma_i σi是我们指定的
q ( x i − 1 ∣ x i , x 0 ) = N ( x i − 1 ∣ k i x i + λ i x 0 , σ i 2 I ) q(x_{i-1}|x_i,x_0)=N(x_{i-1}|k_ix_i+\lambda_ix_0,\sigma_i^2I) q(xi1xi,x0)=N(xi1kixi+λix0,σi2I)
重参数化
x i − 1 = k i x i + λ i x 0 + σ i ϵ 1 (12) x_{i-1}=k_ix_i+\lambda_ix_0+\sigma_i\epsilon_1\tag{12} xi1=kixi+λix0+σiϵ1(12)
同时,依据式(10),我们也可以获得 q ( x i ∣ x 0 ) q(x_i|x_0) q(xix0)的重参数化表达式
x i = α ˉ i x 0 + ( 1 − α ˉ i ) ϵ 2 (13) x_i=\sqrt{\bar\alpha_i}x_{0}+\sqrt{(1-\bar\alpha_i)}\epsilon_2\tag{13} xi=αˉi x0+(1αˉi) ϵ2(13)
把式(13)的 x i x_i xi,代入式(12)可得
x i − 1 = k i ( α ˉ i x 0 + ( 1 − α ˉ i ) ϵ 2 ) + λ i x 0 + σ i ϵ 1 = ( k i α ˉ i + λ i ) x 0 + k i 1 − α ˉ i ϵ 2 + σ i ϵ 1 \begin{aligned}x_{i-1}=&k_i(\sqrt{\bar\alpha_i}x_{0}+\sqrt{(1-\bar\alpha_i)}\epsilon_2)+\lambda_ix_0+\sigma_i\epsilon_1\\=&(k_i\sqrt{\bar\alpha_i}+\lambda_i)x_0+k_i\sqrt{1-\bar\alpha_i}\epsilon_2+\sigma_i\epsilon_1\end{aligned}\nonumber xi1==ki(αˉi x0+(1αˉi) ϵ2)+λix0+σiϵ1(kiαˉi +λi)x0+ki1αˉi ϵ2+σiϵ1
同在DDPM里面的一样,将第二和第三项其实可以表示成同一个
k i 1 − α ˉ i ϵ 2 + σ i ϵ 1 = k i 2 ( 1 − α ˉ i ) + σ i 2 ϵ k_i\sqrt{1-\bar\alpha_i}\epsilon_2+\sigma_i\epsilon_1=\sqrt{k_i^2(1-\bar\alpha_i)+\sigma_i^2}\epsilon ki1αˉi ϵ2+σiϵ1=ki2(1αˉi)+σi2 ϵ
所以便可得到
x i − 1 = ( k i α ˉ i + λ i ) x 0 + k i 2 ( 1 − α ˉ i ) + σ i 2 ϵ x_{i-1}=(k_i\sqrt{\bar\alpha_i}+\lambda_i)x_0+\sqrt{k_i^2(1-\bar\alpha_i)+\sigma_i^2}\epsilon xi1=(kiαˉi +λi)x0+ki2(1αˉi)+σi2 ϵ
因此
q ( x i − 1 ∣ x 0 ) ∼ N ( x i − 1 ∣ ( k i α ˉ i + λ i ) x 0 , ( k i 2 ( 1 − α ˉ i ) + σ i 2 ) I ) (14) q(x_{i-1}|x_0)\sim N(x_{i-1}|(k_i\sqrt{\bar\alpha_i}+\lambda_i)x_0,(k_i^2(1-\bar\alpha_i)+\sigma_i^2)I)\tag{14} q(xi1x0)N(xi1(kiαˉi +λi)x0,(ki2(1αˉi)+σi2)I)(14)
又因为依据式(10),我们可得出
q ( x i − 1 ∣ x 0 ) ∼ N ( x i − 1 ∣ α ˉ i − 1 x 0 , ( 1 − α ˉ i − 1 ) I ) (15) q(x_{i-1}|x_0)\sim N(x_{i-1}|\sqrt{\bar\alpha_{i-1}}x_{0},(1-\bar\alpha_{i-1})I)\tag{15} q(xi1x0)N(xi1αˉi1 x0,(1αˉi1)I)(15)

显然,式(14)和式(15)取等,于是便有
k i α ˉ i + λ i = α ˉ i − 1 k i 2 ( 1 − α ˉ i ) + σ i 2 = 1 − α ˉ i − 1 k_i\sqrt{\bar\alpha_i}+\lambda_i=\sqrt{\bar\alpha_{i-1}}\\k_i^2(1-\bar\alpha_i)+\sigma_i^2=1-\bar\alpha_{i-1} kiαˉi +λi=αˉi1 ki2(1αˉi)+σi2=1αˉi1
求解上面这个等式,便得到
k i = 1 − α ˉ i − 1 − σ i 2 1 − α ˉ i ; λ i = α ˉ i − 1 − α ˉ i ( 1 − α ˉ i − 1 − σ i 2 ) 1 − α ˉ i k_i=\sqrt{\frac{1-\bar\alpha_{i-1}-\sigma_i^2}{1-\bar\alpha_i}};\\\lambda_i=\sqrt{\bar\alpha_{i-1}}-\sqrt{\frac{\bar\alpha_i(1-\bar\alpha_{i-1}-\sigma_i^2)}{1-\bar\alpha_i}} ki=1αˉi1αˉi1σi2 ;λi=αˉi1 1αˉiαˉi(1αˉi1σi2)

由此,我们便得到
k i x i + λ i x 0 = 1 − α ˉ i − 1 − σ i 2 1 − α ˉ i x i + ( α ˉ i − 1 − α ˉ i ( 1 − α ˉ i − 1 − σ i 2 ) 1 − α ˉ i ) x 0 = 1 − α ˉ i − 1 − σ i 2 1 − α ˉ i x i + α ˉ i − 1 x 0 − α ˉ i ( 1 − α ˉ i − 1 − σ i 2 ) 1 − α ˉ i x 0 = α ˉ i − 1 x 0 + 1 − α ˉ i − 1 − σ i 2 1 − α ˉ i ( x i − α ˉ i x 0 ) = α ˉ i − 1 x 0 + 1 − α ˉ i − 1 − σ i 2 x i − α ˉ i x 0 1 − α ˉ i \begin{aligned}k_ix_i+\lambda_ix_0=&\sqrt{\frac{1-\bar\alpha_{i-1}-\sigma_i^2}{1-\bar\alpha_i}}x_i+\left(\sqrt{\bar\alpha_{i-1}}-\sqrt{\frac{\bar\alpha_i(1-\bar\alpha_{i-1}-\sigma_i^2)}{1-\bar\alpha_i}}\right)x_0\\=&\sqrt{\frac{1-\bar\alpha_{i-1}-\sigma_i^2}{1-\bar\alpha_i}}x_i+\sqrt{\bar\alpha_{i-1}}x_0-\sqrt{\frac{\bar\alpha_i(1-\bar\alpha_{i-1}-\sigma_i^2)}{1-\bar\alpha_i}}x_0\\=&\sqrt{\bar\alpha_{i-1}}x_0+\sqrt{\frac{1-\bar\alpha_{i-1}-\sigma_i^2}{1-\bar\alpha_i}}(x_i-\sqrt{\bar\alpha_i}x_0)\\=&\sqrt{\bar\alpha_{i-1}}x_0+\sqrt{1-\bar\alpha_{i-1}-\sigma_i^2}\frac{x_i-\sqrt{\bar\alpha_i}x_0}{\sqrt{1-\bar\alpha_i}}\end{aligned}\nonumber kixi+λix0====1αˉi1αˉi1σi2 xi+ αˉi1 1αˉiαˉi(1αˉi1σi2) x01αˉi1αˉi1σi2 xi+αˉi1 x01αˉiαˉi(1αˉi1σi2) x0αˉi1 x0+1αˉi1αˉi1σi2 (xiαˉi x0)αˉi1 x0+1αˉi1σi2 1αˉi xiαˉi x0
所以
q ( x i − 1 ∣ x i , x 0 ) ∼ N ( x i − 1 ∣ α ˉ i − 1 x 0 + 1 − α ˉ i − 1 − σ i 2 x i − α ˉ i x 0 1 − α ˉ i , σ i 2 I ) q(x_{i-1}|x_i,x_0)\sim N(x_{i-1}|\sqrt{\bar\alpha_{i-1}}x_0+\sqrt{1-\bar\alpha_{i-1}-\sigma_i^2}\frac{x_i-\sqrt{\bar\alpha_i}x_0}{\sqrt{1-\bar\alpha_i}},\sigma_i^2I) q(xi1xi,x0)N(xi1αˉi1 x0+1αˉi1σi2 1αˉi xiαˉi x0,σi2I)
再由
x i = α ˉ i x 0 + 1 − α ˉ i ϵ i → x 0 = x i − 1 − α ˉ i ϵ i α ˉ i (16) x_i=\sqrt{\bar\alpha_i}x_{0}+\sqrt{1-\bar\alpha_i}\epsilon_i \rightarrow x_0=\frac{x_{i}-\sqrt{1-\bar\alpha_i}\epsilon_i}{\sqrt{\bar\alpha_i}}\tag{16} xi=αˉi x0+1αˉi ϵix0=αˉi xi1αˉi ϵi(16)
x 0 x_0 x0代入 q ( x i − 1 ∣ x i , x 0 ) q(x_{i-1}|x_i,x_0) q(xi1xi,x0)里面,便可得到
q ( x i − 1 ∣ x i , x 0 ) ∼ N ( x i − 1 ∣ α ˉ i − 1 x i − 1 − α ˉ i ϵ i α ˉ i + 1 − α ˉ i − 1 − σ i 2 ϵ i , σ i 2 I ) (17) q(x_{i-1}|x_i,x_0)\sim N(x_{i-1}|\sqrt{\bar\alpha_{i-1}}\frac{x_{i}-\sqrt{1-\bar\alpha_i}\epsilon_i}{\sqrt{\bar\alpha_i}}+\sqrt{1-\bar\alpha_{i-1}-\sigma_i^2}\epsilon_i,\sigma_i^2I)\tag{17} q(xi1xi,x0)N(xi1αˉi1 αˉi xi1αˉi ϵi+1αˉi1σi2 ϵi,σi2I)(17)

事实上,论文里面并不是用的这种方法求解 q ( x i − 1 ∣ x i , x 0 ) q(x_{i-1}|x_i,x_0) q(xi1xi,x0)。而是用到了一个定理,该定理来自机器学习圣经,里面有所证明。但是课本省略了很多的证明步骤。感兴趣的可以看我这篇文章线性动态系统中的概率求解

该定理如下

在这里插入图片描述

我们知道
q ( x i − 1 ∣ x 0 ) = ∫ q ( x i − 1 ∣ x i , x 0 ) q ( x i ∣ x 0 ) d x i q(x_{i-1}|x_0)=\int q(x_{i-1}|x_i,x_0)q(x_i|x_0)dx_i q(xi1x0)=q(xi1xi,x0)q(xix0)dxi
q ( x i ∣ x 0 ) q(x_i|x_0) q(xix0)当作定理里面的 P ( x ) P(x) P(x) q ( x i − 1 ∣ x i , x 0 ) q(x_{i-1}|x_i,x_0) q(xi1xi,x0)当作是 P ( y ∣ x ) P(y|x) P(yx),而 q ( x i − 1 ∣ x 0 ) q(x_{i-1}|x_0) q(xi1x0) P ( y ) P(y) P(y)。然后直接代入公式就可以求出来了。

3.4.2、求解KL散度

不妨再回忆一下我们的目标函数,即最大化下面这两项
max ⁡ ( − ∑ i ∈ A E q ( x i ∣ x 0 ) [ K L ( q ( x i − 1 ∣ x i , x 0 ) ∣ ∣ P ( x i − 1 ∣ x i ) ) ] − ∑ j ∈ B K L ( q ( x j ∣ x 0 ) ∣ ∣ P ( x 0 ∣ x j ) ) ) (18) \max\left(-\sum\limits_{i\in A}\mathbb{E_{q(x_i|x_0)}}\left[KL(q(x_{i-1}|x_i,x_0)||P(x_{i-1}|x_i))\right]-\sum\limits_{j\in B}KL(q(x_j|x_0)||P(x_0|x_j))\right)\tag{18} max iAEq(xix0)[KL(q(xi1xi,x0)∣∣P(xi1xi))]jBKL(q(xjx0)∣∣P(x0xj)) (18)
现在,我们知道了 q ( x i − 1 ∣ x i , x 0 ) q(x_{i-1}|x_i,x_0) q(xi1xi,x0) q ( x j ∣ x 0 ) q(x_j|x_0) q(xjx0)。而对于 P ( x i − 1 ∣ x i ) P(x_{i-1}|x_i) P(xi1xi) P ( x 0 ∣ x j ) P(x_0|x_j) P(x0xj),只需要用神经网络去逼近就可以了。

P ( x i − 1 ∣ x i ) P(x_{i-1}|x_i) P(xi1xi)的参数假定为式(17),唯一需要改变的是里面 ϵ i \epsilon_i ϵi需要神经网络去预测,所以
P ( x i − 1 ∣ x i ) ∼ N ( x i − 1 ∣ α ˉ i − 1 x i − 1 − α ˉ i ϵ θ ( x i , i ) α ˉ i + 1 − α ˉ i − 1 − σ i 2 ϵ θ ( x i , i ) , σ i 2 I ) (19) P(x_{i-1}|x_i)\sim N(x_{i-1}|\sqrt{\bar\alpha_{i-1}}\frac{x_{i}-\sqrt{1-\bar\alpha_i}\epsilon_\theta(x_i,i)}{\sqrt{\bar\alpha_i}}+\sqrt{1-\bar\alpha_{i-1}-\sigma_i^2}\epsilon_\theta(x_i,i),\sigma_i^2I)\tag{19} P(xi1xi)N(xi1αˉi1 αˉi xi1αˉi ϵθ(xi,i)+1αˉi1σi2 ϵθ(xi,i),σi2I)(19)
P ( x 0 ∣ x j ) P(x_0|x_j) P(x0xj)可以简单理解为由 x j x_j xj预测 x 0 x_0 x0,我们不妨先对 q ( x j ∣ x 0 ) q(x_j|x_0) q(xjx0)进行一些变化
q ( x j ∣ x 0 ) ∼ N ( x j ∣ α ˉ j x 0 , ( 1 − α ˉ j ) I ) q(x_j|x_0)\sim N(x_j|\sqrt{\bar\alpha_j}x_{0},(1-\bar\alpha_j)I) q(xjx0)N(xjαˉj x0,(1αˉj)I)
由式(16)将 x 0 x_0 x0代换掉 x 0 = x j − 1 − α ˉ j ϵ j α ˉ j x_0=\frac{x_{j}-\sqrt{1-\bar\alpha_j}\epsilon_j}{\sqrt{\bar\alpha_j}} x0=αˉj xj1αˉj ϵj

可得
q ( x j ∣ x 0 ) ∼ N ( x j ∣ x j − 1 − α ˉ j ϵ j , ( 1 − α ˉ j ) I ) q(x_j|x_0)\sim N(x_j|x_{j}-\sqrt{1-\bar\alpha_j}\epsilon_j,(1-\bar\alpha_j)I) q(xjx0)N(xjxj1αˉj ϵj,(1αˉj)I)
所以可以
P ( x 0 ∣ x j ) ∼ N ( x 0 ∣ x j − 1 − α ˉ j ϵ θ ( x j , j ) α ˉ j , σ j 2 I ) (20) P(x_0|x_j)\sim N(x_0|\frac{x_{j}-\sqrt{1-\bar\alpha_j}\epsilon_\theta(x_j,j)}{\sqrt{\bar\alpha_j}},\sigma_j^2I)\tag{20} P(x0xj)N(x0αˉj xj1αˉj ϵθ(xj,j),σj2I)(20)

到了这里,论文不推导了,直接给出结论,式(18)的优化目标和DDPM一样。其实推导过程直接套用KL散度的公式就可以了。我试过着推导过了,在这里直接给出结论(在忽略常数项的情况下):
K L ( q ( x i − 1 ∣ x i , x 0 ) ∣ ∣ P ( x i − 1 ∣ x i ) ) ∝ ∣ ∣ ϵ i − ϵ θ ( x i , i ) ∣ ∣ 2 (21) KL(q(x_{i-1}|x_i,x_0)||P(x_{i-1}|x_i)) \propto ||\epsilon_i-\epsilon_\theta(x_i,i)||^2\tag{21} KL(q(xi1xi,x0)∣∣P(xi1xi))∣∣ϵiϵθ(xi,i)2(21)
而对于第二个KL散度,老实说,我算了很多次,最终的优化目标,根本得不到和DDPM一样的(除非我真的算错了。Ps:如果你推导出来了,请务必告诉我,谢谢)

我们现在暂且当作
K L ( q ( x j ∣ x 0 ) ∣ ∣ P ( x 0 ∣ x j ) ) ∝ ∣ ∣ ϵ j − ϵ θ ( x j , j ) ∣ ∣ 2 (22) KL(q(x_j|x_0)||P(x_0|x_j))\cancel{\propto} ||\epsilon_j-\epsilon_\theta(x_j,j)||^2\tag{22} KL(q(xjx0)∣∣P(x0xj)) ∣∣ϵjϵθ(xj,j)2(22)
那这一个KL散度无法求出与DDPM一样的损失函数,那该怎么办呢?

以下,我做一些个人看法的推测

我后来又仔仔细细地重看了一遍论文,发现了一个疑似解决方案的点,我们来看它的这一段话

在这里插入图片描述

翻译过来大概是这个意思

在这里插入图片描述

我理解的意思是,对于变分下界,我们仔细看DDPM的优化目标函数
E q ( x 1 ∣ x 0 ) [ log ⁡ P ( x 0 ∣ x 1 ) ] − ∑ t = 2 T E q ( x t ∣ x 0 ) [ K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ P ( x t − 1 ∣ x t ) ) ] − K L ( q ( x T ∣ x 0 ) ∣ ∣ P ( x T ) ) \mathbb{E}_{q(x_1|x_0)}\left[\log P(x_0|x_1)\right]-\sum\limits_{t=2}^T\mathbb{E}_{q(x_t|x_0)}\left[KL(q(x_{t-1}|x_t,x_0)||P(x_{t-1}|x_t))\right]-KL\left(q(x_T|x_0)||P(x_T)\right) Eq(x1x0)[logP(x0x1)]t=2TEq(xtx0)[KL(q(xt1xt,x0)∣∣P(xt1xt))]KL(q(xTx0)∣∣P(xT))
很容易就能发现对于不同时刻t,都有一个优化目标。而我们在训练的时候,是一个样本随机优化一个时刻t。

那么我们是否可以理解为,我们只需要让每个时刻都最大化就可以了呢?换句话说,每一个时刻的最大化的总和,就等于上述DDPM目标的最大化。

那是否可以说明,存在一种极端的情况,我们每个时刻都选用不同的神经网络去优化,也就是初始化T个神经网络,网络之间参数不共享(实际上DDPM并不需要这么做,因为每个时刻的优化目标都相同,只需要同一个网络即可),只需要让这T个神经网络优化各自对应的时刻参数,便可达到全局最优。

那么对于DDIM而言,也是一样的。式(18)里面包含了不同时刻的优化目标,我们对每一个时刻都最小化KL散度。那么所有时刻的KL散度总和,便是全局最小。

但我们注意到DDIM的优化目标函数并不相同,那么我们可以对式(21)选择一个神经网络(记为 f 1 f_1 f1)去优化;而对于式(22)选择另一个神经网络去优化(记为 f 2 f_2 f2)。当两个网络都达到最优,那就意味着DDIM达到最优

好,现在我们不难发现, f 1 f_1 f1的优化目标是和DDPM是一样的,但是 f 1 f_1 f1的时刻点是跳步的(里面的值来自集合A,前面提到过)。也就是说,此时 f 1 f_1 f1的优化的时刻,是DDPM优化目标的子序列。那么DDPM收敛时,就意味着 f 1 f_1 f1也收敛(因为DDPM优化全部,而 f 1 f_1 f1优化其中一部分,DDPM全局收敛代表每一个时刻都收敛,也就包括 f 1 f_1 f1的时刻)。

此时我们注意到,我们要实现跳步采样,其实用的 f 1 f_1 f1的那些跳步采样。采用DDPM的训练方法,间接导致 f 1 f_1 f1收敛。那么就没有 f 2 f_2 f2什么事了,因为我们根本不使用 f 2 f_2 f2。也就是说,只需要 f 1 f_{1} f1最优即可,那 f 1 f_1 f1的对应时刻变化已经是最优,而 f 2 f_2 f2是否最优,完全不重要

此时,你是否会有疑惑,那这样的话我们只需要优化 f 1 f_1 f1就可以实现跳步采样了,为什么还要费尽心思优化整个DDPM呢?论文作者针对审稿人的这个问题进行了回答。事实上,这很大程度上加大我所猜测为真的可能性

在这里插入图片描述

以上为推测

训练好之后,我们就得到了 P ( x i − 1 ∣ x i ) P(x_{i-1}|x_i) P(xi1xi),而我们提到过 i − 1 i-1 i1 i i i之间,是两个不连续的时间序列,存在跳步。

所以,这就是为什么可以采用DDPM的训练方法,又可以跳步采样的原因。只是采样的步骤变了一些。

3.5、采样方法

将式(19)重参数化便可得到采样步骤
x i − 1 = α ˉ i − 1 x i − 1 − α ˉ i ϵ θ ( x i , i ) α ˉ i + 1 − α ˉ i − 1 − σ i 2 ϵ θ ( x i , i ) + σ i z (23) x_{i-1}=\sqrt{\bar\alpha_{i-1}}\frac{x_{i}-\sqrt{1-\bar\alpha_i}\epsilon_\theta(x_i,i)}{\sqrt{\bar\alpha_i}}+\sqrt{1-\bar\alpha_{i-1}-\sigma_i^2}\epsilon_\theta(x_i,i)+\sigma_iz\tag{23} xi1=αˉi1 αˉi xi1αˉi ϵθ(xi,i)+1αˉi1σi2 ϵθ(xi,i)+σiz(23)
其中 z z z是一个随机采样的噪声, α 0 = 1 \alpha_0=1 α0=1

3.6、方差的选定

我们注意到, q x i − 1 ∣ x i , x 0 ) q_{x_{i-1}|x_{i},x_0)} qxi1xi,x0)是我们选定的。之前也说过 σ i \sigma_i σi是我们选定的。当我们除了 i = 1 i=1 i=1,对其他时刻,选定 σ i = 0 \sigma_i=0 σi=0。那么式子(23)的 σ i z = 0 \sigma_iz=0 σiz=0,所以式(23)就是固定的,不再加入随机噪声,作者把这种情况命名为DDIM。

同时,如果我们把,如果我们对所有时刻,都有
σ i = 1 − α ˉ i − 1 1 − α ˉ i 1 − α ˉ t α ˉ i − 1 \sigma_i=\sqrt{\frac{1-\bar\alpha_{i-1}}{1-\bar\alpha_i}}\sqrt{\frac{1-\bar\alpha_t}{\bar\alpha_{i-1}}} σi=1αˉi1αˉi1 αˉi11αˉt

那么此时采样方法就会退化成和DDPM一样,也就是说, q ( x i − 1 ∣ x i , x 0 ) q(x_{i-1}|x_i,x_0) q(xi1xi,x0)会直接变成和DDPM那个一样。文章篇幅太长,不作证明了,不然又发不了了。感兴趣的看参考②

4、其他细节

对于子序列如何选择(线性和二次),以及插值等一系列的小细节,在论文里面有提到,但论文篇幅实在太长了,破电脑已经开始卡了,就先这样吧

5、结束

本篇文章到此为止,如有问题,还望指出,阿里嘎多!

在这里插入图片描述

6、参考

①生成扩散模型漫谈(四):DDIM = 高观点DDPM - 科学空间|Scientific Spaces (kexue.fm)

②去噪扩散隐式模型(Denoising Diffusion Implicit Models,DDIM) (zhangzhenhu.com)

③Denoising Diffusion Implicit Models | OpenReview

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐