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

DDPMDDPM 中,生成过程被定义为马尔可夫扩散过程的反向过程,在逆向采样过程的每一步,模型预测噪声

DDIMDDIM 的作者发现,扩散过程并不是必须遵循马尔科夫链,在之后的基于分数的扩散模型以及基于随机微分等式的理论都有相同的结论。

基于此,DDIMDDIM 的作者重新定义了扩散过程和去噪过程,并提出了一种新的采样技巧,可以大幅减少采样的步骤,极大的提高了图像生成的效率,代价是牺牲了一定的多样性,图像质量略微下降,但在可接受的范围内。

扩散模型的回顾

首先回顾一下 DDPM 模型的机制,在 DDPM 中,真实世界的图像数据用随机变量 x0x_0 表示,它的概率密度记作 q(x0)q(x_0),然而它的真实分布未知的,即 q(x0)q(x_0) 具体形式是未知的,所以我们没办法直接从 q(x0)q(x_0) 采样生成新的图片。

幸运的是,我们有很多 x0x_0 的观测样本,因此我们可以想办法利用这些观测样本估计出 q(x0)q(x_0) 的一个近似表示【近似表示称为 p(x0)p(x_0)】,然后从这个近似表示中抽样,从而生成样本。

DDPM核心的思想是,构建一个马尔科夫链式结构,逐步的向 x0x_0添加高斯随机噪声,并最终令其演变成一个纯高斯数据xTx_T(标准正态分布),把这个过程称为加噪过程,或者前向过程。

将原样本分布转成高斯分布

它的逆向过程就是逐步降噪的过程,主要估计出逆向过程中每一步的降噪转换核 p(xt1pt)p(x_{t-1}|p_{t}),就可以从一个标准正态分布的高斯噪声数据 xTx_T,逐步的降噪生成一张图片数据x^0\hat x_0

image-20240123231203400

加噪过程

整个网络的联合概率分布可以表示为 p(x0:T)p(x_{0:T})p(x0:T)p(x_{0:T}) 描述了整个序列中各个时间步的数据或状态在一起出现的概率分布情况。

链式分解方式使得整个生成过程更容易建模和推理,因为它将复杂的联合概率分布分解为一系列较简单的条件概率分布

根据联合概率的链式法则,前向扩散过程的链式分解

公式1.1

p(x0:T)=q(x0)t=1Tq(xtxt1)p(x_{0:T}) = q(x_0) \prod_{t=1}^T q(x_t|x_{t-1})

q(x0)q(x_0) 表示初始状态 x0x_0 的概率分布

每一项 q(xtxt1)q(x_t | x_{t-1}) 表示在给定前一个时间步的状态 xt1x_{t-1} 的条件下,当前时间步的状态 xtx_t 的概率分布。

然而 q(x0)q(x_0) 是具体形式是未知的,但是我们有它的观测样本,有了 x0x_0 的观测样本之后,相当于 x0x_0 的值已知,此时可以写成已知 x0x_0 的条件概率分布,

公式1.2

q(x1:Tx0)=q(x1x0)t=2Tq(xtxt1)=t=1Tq(xtxt1)q(x_{1:T}|x_0) = q(x_1|x_0) \prod_{t=2}^T q(x_t|x_{t-1}) = \prod_{t=1}^T q(x_t|x_{t-1})


前向扩散过程的转换核 q(xtxt1)q(x_t|x_{t-1}) 是一个条件高斯分布,它的概率密度为

公式1.3

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

其中,

  • αt\sqrt{\alpha_t}:表示高斯噪声的标准差,这个标准差是一个与时间步 tt 相关的参数。αt\alpha_t 控制了噪声的强度,随着时间步的增加,αt\alpha_t 会变化,从而影响噪声的强度。
  • (1αt)I(1 - \alpha_t)I:表示高斯噪声的协方差矩阵,其中 II 是单位矩阵。这个协方差矩阵通常与标准差 αt\sqrt{\alpha_t} 相关,用于描述噪声的分布形状。

q(xtxt1)q(x_t|x_{t-1}) 代表着在 xt1x_{t-1} 的基础上添加一个高斯噪声得到 xtx_{t},有了这个转换(加噪)核,就可以逐步的把一张有意义的图像数据 x0x_0转换为一个纯高斯噪声数据 xTx_T

然而这个加噪计算过程需要一步一步计算,计算效率比较差,这时可以利用条件高斯分布的一个计算技巧,直接x0x_{0} 一步计算得到任意时刻的 xtx_t,这个过程可以表示为条件概率分布 q(xtx0)q(x_t|x_{0})

公式1.4

q(xtx0)=q(x1:tx0)dx1:t1N(αˉt x0,(1αˉt)I)q(x_t|x_{0}) = \int q(x_{1:t}|x_0) d x_{1:t-1} \sim \mathcal{N}(\sqrt{\bar{ \alpha}_t } \ x_0, (1- \bar{ \alpha}_t) \textit{I})

αˉt\bar{\alpha}_t 是与时间步 tt 相关的参数,用于控制噪声的强度

q(xtx0)q(x_t|x_{0}) 的直接算数计算等式为:

公式1.5

xt=αˉt x0+1αˉt ϵt   ,αˉt=i=1tαi,  ϵtN(0,I)N(αˉt x0,(1αˉt)I)x_t = \sqrt{\bar{\alpha}_t } \ x_0 + \sqrt{1- \bar{ \alpha}_t } \ \epsilon_t \ \ \ , \bar{\alpha}_t = \prod_{i=1}^t \alpha_i ,\ \ \epsilon_t \sim \mathcal{N}(0,\textit{I}) \sim \mathcal{N}(\sqrt{\bar{ \alpha}_t } \ x_0, (1- \bar{ \alpha}_t) \textit{I})

  • xtx_t:时间步 tt 的状态或数据。
  • αˉt\bar{\alpha}_t:与时间步 tt 相关的参数,表示从时间步 11 到时间步 tt 的累积参数乘积。它是一个累积的量,用于控制噪声的强度。
  • αi\alpha_i:时间步 ii 的参数,用于控制噪声的强度。
  • ϵt\epsilon_t:服从均值为零、协方差矩阵为单位矩阵的标准正态分布的随机变量
  • αˉt x0\sqrt{\bar{\alpha}_t} \ x_0:表示从初始状态 x0x_0 出发的部分,它是一个累积的项,根据 αˉt\bar{\alpha}_t 调整初始状态。
  • 1αˉt ϵt\sqrt{1 - \bar{\alpha}_t} \ \epsilon_t:表示随机噪声部分,它是一个标准正态分布的随机变量,根据 αˉt\bar{\alpha}_t 调整噪声的强度。

根据这个等式,可以看出 xtx_t 的值是由初始状态 x0x_0 加上一个随机噪声项 1αˉt ϵt\sqrt{1 - \bar{\alpha}_t} \ \epsilon_t 得到的,其中噪声的强度受累积参数 αˉt\bar{\alpha}_t 的影响。这个等式描述了 DDPM 模型中从初始状态生成整个数据序列的过程。


降噪过程

加噪过程的逆过程称为降噪过程,降噪过程是对联合概率 p(x0:T)p(x_{0:T})按照反向过程进行链式分解

公式1.6

(这里可以与公式1.1对比)

p(x0:T)=p(xT)t=T1p(xt1xt)p(x_{0:T}) = p(x_T) \prod_{t=T}^1 p(x_{t-1}|x_{t})

其中 p(xT)N(0,I)p(x_T) \sim \mathcal{N}(0,\textit{I}) 是一个标准正态分布p(xt1xt)p(x_{t-1}|x_{t}) 是逆向过程每一步的转换核(条件分布),他表示在 xtx_{t} 的基础上去掉一部分高斯噪声得到 xt1x_{t-1},所以称为降噪过程。

我们的关键就是估计出 p(xt1xt)p(x_{t-1}|x_{t}) 的一个近似表示。根据最大似然估计理论,我们需要极大化观测数据的对数似然 lnp(x0)\ln p(x_0),然而整个网络中随机变量有个 TT 个,可是只有 x0x_0有观测样本,这是就需要 TT 变量的联合概率 p(x0:T)p(x_{0:T})进行边际化进而得到 x0x_0 的边缘概率 p(x0)p(x_0),如下式所示,

公式1.7

lnp(x0)=lnp(x0:T)dx1:T\ln p(x_0) = \ln \int p(x_{0:T} ) d x_{1:T}

没有观测样本的变量 x1:Tx_{1:T} 称为隐变量,这是一个典型的含有隐变量模型的估计问题。如 公式1.7 所示,隐变量的存在(需要边际化消除)导致对数似然函数存在了积分操作,这导致对数函数无法分解成简单的形式,进而难以求解其梯度,无法直接极大化。

这时可以利用 JensenJensen 不等式,得到对数似然函数的一个下界函数(ELBO),当满足一定条件时,极大化这个下界函数和极大化对数似然是等价的。

公式1.8

E[qx0]lnp(x0)Eq(x1:Tx0)[lnp(x0:T)q(x1:Tx0)]Eq(x1x0)[lnp<!swig0>(x0x1)]t=2TEq(xtx0)[DKL(q(xt1xt,x0)p<!swig1>(xt1xt))]\mathbb{E}[q_{x_0}]{\ln p(x_0)} \geq {\mathbb{E}_{q(x_{1:T}|x_0)}\left[\ln \frac{p(x_{0:T})}{q(x_{1:T}|x_0)}\right]} \\ \Rightarrow \mathbb{E}_{q(x_{1}|x_0)}\left[\ln p_(x_0|x_1)\right] - \sum_{t=2}^{T} \mathbb{E}_{q(x_{t}|x_0)}\left[D_{KL}({q(x_{t-1}|x_t, x_0)}{p_(x_{t-1}|x_t)})\right]

代入各项之后,最后的目标函数是一个简单的均方误差,这里记作 LγL_{\gamma},其中 γt\gamma_t 表示一些常数项,它不影响极大化的结果。

公式1.9

Lγ:=t=1TγtE[q(xtx0)]ϵtϵ^<!swig2>(xt,t)22  ,ϵtN(0,I)L_{\gamma} := \sum_{t=1}^T \gamma_t \mathbb{E}[q(x_t|x_0)]{ \left\lVert\epsilon_t - {\hat\epsilon}_(x_t, t)\right\rVert_2^2 } \ \ , \epsilon_t \sim \mathcal{N}(0,\textit{I})

非马尔科夫前向过程

加噪过程

重点观察下 DDPM 最终的目标函数公式1.8公式1.9,目标函数中最关键的是 KL 散度的项, 这一项是 q(xt1xt,x0)q(x_{t-1}|x_t, x_0)pθ(xt1xt)p_{\theta}(x_{t-1}|x_t)的 KL 散度。

其中,

q(xt1xt,x0)q(x_{t-1}|x_t, x_0)去噪过程的转换核,它是逆过程(图像生成过程,图像采样过程)的核心,只要有了它就能完成生成过程。为了获得中间变量 xt1x_{t-1} 的条件概率分布

pθ(xt1xt)p_{\theta}(x_{t-1}|x_t) 代表模型训练结果,我们的目标就是训练 pθ(xt1xt)p_{\theta}(x_{t-1}|x_t)令其尽量与 q(xt1xt,x0)q(x_{t-1}|x_t, x_0) 相似,它作为 q(xt1xt,x0)q(x_{t-1}|x_t, x_0) 的一个近似解。

通过模型训练来捕捉数据生成的模式,从而生成具有良好质量的样本。模型的目标是学习生成这些样本的条件概率分布,以便在生成阶段使用。

单纯的看 q(xt1xt,x0)q(x_{t-1}|x_t, x_0),它是去噪过程的转换核,貌似和前向过程无关,但这是个条件概率分布,它的条件变量是 xtx_tx0x_0,也就说它依赖 xtx_tx0x_0,那这两项怎么来的呢?注意这里关注的是训练阶段怎么来,再预测阶段(图像生成阶段)。

  • 先看 x0x_0,在训练阶段 x0x_0 是观测样本,本身就是已知的。
  • 再看 xtx_t,最直接的它通过 q(xtxt1)q(x_t|x_{t-1}) 计算得到,然而我们利用线性高斯的特性,可以直接通过 q(xtx0)q(x_t|x_0) 计算,绕过了 q(xtxt1)q(x_t|x_{t-1}) ,这意味这 xtx_t 可以不依赖 xt1x_{t-1}

看下 q(xtx0)q(x_t|x_0) 是怎么来的,它是在联合概率分布q(x1:tx0)q(x_{1:t}|x_0) 的基础上边际化(消除变量 x1:t1x_{1:t-1} )得到的,如下式所示,

公式2.1

q(xtx0)=q(x1:tx0)dx1:t1q(x_t|x_0) = \int q(x_{1:t}|x_0) d x_{1:t-1}

通过公式2.1,我们对联合概率分布 q(x1:tx0)q(x_{1:t}|x_0) 进行积分,积分掉了变量 x1:t1x_{1:t-1}。这意味着我们消除了对时刻 11t1t-1 之间状态的依赖,仅考虑了时刻 tt 的状态 xtx_t 与初始状态 x0x_0 之间的条件概率分布。这是边际化的过程,将高维的联合概率分布降维为条件概率分布,从而给定初始状态 x0x_0 的情况下,系统在时刻 tt 处于状态 xtx_t 的条件概率分布 q(xtx0)q(x_t|x_0)

在原始的 DDPM 模型中,对联合概率 q(x1:t)q(x_{1:t}) 的进一步分解是按照马尔科夫链的形式分解的,即

公式2.2

q(xtx0)=q(x1:tx0)dx1:t1=i=1tq(xixi1)dx1:t1q(x_t|x_0) = \int q(x_{1:t}|x_0) d x_{1:t-1} = \int \prod_{i=1}^t q(x_{i}|x_{i-1}) d x_{1:t-1}

然而,从概率计算规则上讲,不管 q(x1:t)q(x_{1:t}) 怎么分解,最终都是要把它通过积分消除掉,它可以有很多种不同的分解方式的,如何分解它并不影响积分后的结果,即不论 q(x1:t)q(x_{1:t}) 的分解方式是什么,最后 q(xtx0)q(x_t|x_0) 的结果都是一样的。也就说,这种马尔科夫链式分解的方式不是必须得。

如果放弃了马尔科夫链式结构的假设,那就得到了一个非马尔科夫的前向模型

从以上的分析结果看,如果想放弃非马尔科夫的假设,但又想得到和 DDPM 等价的模型(即不改变DDPM的目标函数)只需要确保 q(xtx0)q(x_t|x_0) q(xt1xt,x0)q(x_{t-1}|x_t, x_0) 的表达式与DDPM一样就可以了。接下来就尝试构建一个非马尔科夫建设的模型。

现在,我们重新定义 q(x1:Tx0)q(x_{1:T}|x_0) 的分解方式,在这过程中引入一个人工定义的自由参数 σ2\sigma^2,它代表 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 的方差,它的具体值稍后会讨论。定义 q(x1:Tx0)q(x_{1:T}|x_0) 的分解方式为

公式2.3

qσ(x1:Tx0):=qσ(xTx0)t=2Tqσ(xt1xt,x0)q_\sigma (x_{1:T}|x_0) := q_{\sigma}(x_T|x_0) \prod_{t=2}^T q_{\sigma}(x_{t-1}|x_t,x_0)

其中 qσ(xTx0)q_\sigma(x_T|x_{0}) 维持与DDPM一样,

公式2.4

qσ(xTx0)N(αˉT x0,(1αˉT)I)q_\sigma(x_T|x_{0}) \sim \mathcal{N}(\sqrt{\bar{ \alpha}_T } \ x_0, (1- \bar{ \alpha}_T) \textit{I})

  • qσ(xTx0)q_\sigma(x_T|x_{0}) 表示在给定初始状态 x0x_0 的情况下,时间步 TT 时刻的状态 xTx_T 的概率分布。
  • 这个概率分布是一个高斯分布,用 N(μ,Σ)\mathcal{N}(\mu, \Sigma) 表示,其中 μ\mu 是均值,Σ\Sigma 是协方差矩阵。在这里,均值 μ\muαˉTx0\sqrt{\bar{\alpha}_T} \cdot x_0,协方差矩阵 Σ\Sigma(1αˉT)I(1 - \bar{\alpha}_T) \cdot \textit{I},其中 αˉT\bar{\alpha}_T 是一个与时间步 TT 相关的参数。
  • αˉTx0\sqrt{\bar{\alpha}_T} \cdot x_0 表示均值,它是初始状态 x0x_0 乘以 αˉT\sqrt{\bar{\alpha}_T}。这个项表示了在时间步 TT 时刻的状态 xTx_T 在一定程度上依赖于初始状态 x0x_0
  • (1αˉT)I(1 - \bar{\alpha}_T) \cdot \textit{I} 表示协方差矩阵,其中 I\textit{I} 是单位矩阵。协方差矩阵决定了高斯分布的形状,它表示了时间步 TT 时刻的状态 xTx_T 的变化范围。

对任意 t>1t>1,定义 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 的分布为

公式2.5

qσ(xt1xt,x0)N(αˉt1 x0+1αˉt1σt2xtαˉt x01αˉt<!swig3>,σt2I方差)q_{\sigma}(x_{t-1}|x_t,x_0) \sim \mathcal{N} \left( \underbrace{ \sqrt{\bar{\alpha}_{t-1}} \ x_0 + \sqrt{1-\bar{\alpha}_{t-1}-\sigma_t^2} \cdot \frac{x_t - \sqrt{\bar{\alpha}_t} \ x_0 }{\sqrt{1-\bar{\alpha}_t}} }_ , \underbrace{ \sigma_t^2 \textit{I} }_{方差} \right )

定义完成后,还有一个问题,就是公式2.4是否对任意的 1tT1\le t \le T 成立,在 DDIM 的原论文中给出了证明,这里不再赘述证明过程,有兴趣的可以查看原论文的附录B。结论是:如下分布对任意的 1tT1\le t \le T 都是成立的。

公式2.6

qσ(xtx0)N(αˉt x0,(1αˉt)I)q_\sigma(x_t|x_{0}) \sim \mathcal{N}( \sqrt{\bar{ \alpha}_t } \ x_0 , (1- \bar{ \alpha}_t)\textit{I})

新的分解方式(公式2.3)下, 没有了马尔科夫链式结构的假设。其中 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 仍然是逆过程的转换核,在逆过程中,xt1x_{t-1} 同时依赖 xtx_tx0x_0

降噪过程

在原始的DPM模型中,训练的模型就是直接预测 x0x_0 进而得到 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 近似表示。在后来的 DDPM 改进中,利用了 x0,xt,ϵtx_0,x_t,\epsilon_t 三者的关系式(公式2.1),用 xt,ϵtx_t,\epsilon_t 替换了 x0x_0,进而令模型去预测 ϵt\epsilon_t。现在 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 的(公式2.5)期望又直接依赖 x0x_0 了,兜兜转转居然又回到了最初在这里为了能利用上已经训练好的 DDPM 模型(预测噪声的模型),再一次利用关系式公式2.1得到预测的 x^0\hat{x}_0,如下式所示

公式2.7

x^0=fθ(t)(xt)=xt1αˉt ϵ^t(xt,t)αˉt\hat{x}_0 =f_{\theta}^{(t)}(x_t)= \frac{x_t -\sqrt{1- \bar{ \alpha}_t } \ \hat{\epsilon}_t (x_t,t)}{ \sqrt{\bar{\alpha}_t } }

  • x^0\hat{x}_0 是用于表示初始状态 x0x_0 的估计值。通过已有的 DDPM 模型来估计的初始状态。

  • fθ(t)(xt)f_{\theta}^{(t)}(x_t) 是一个函数,它表示如何通过时间步 tt 时刻的状态 xtx_t 来估计初始状态 x^0\hat{x}_0。具体地,它使用了已有的 DDPM 模型,并且根据 公式2.1 的关系式来计算。这个函数 fθ(t)f_{\theta}^{(t)} 取决于模型的参数 θ\theta

  • xtx_t 是时间步 tt 时刻的状态。

  • ϵ^t(xt,t)\hat{\epsilon}_t(x_t, t) 是 DDPM 模型已经训练好的部分,它表示在时间步 tt 时刻的状态 xtx_t 以及时间步 tt 的情况下,噪声的预测。

  • αˉt\sqrt{\bar{\alpha}_t}1αˉt\sqrt{1 - \bar{\alpha}_t} 是模型中的参数,它们用于对 ϵ^t\hat{\epsilon}_t 的结果进行线性变换,以便估计初始状态 x^0\hat{x}_0

这样我们利用上已经训练好的 DDPM模型 ϵ^t(xt,t)\hat{\epsilon}_t (x_t,t) ,不需要再重新训练一个模型。利用公式2.7得到 x^0\hat{x}_0,代入到公式2.5进而就得到了逆向转换核 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0)近似分布

公式2.8

image-20240122215335963

我们整理下整个(去噪过程)生成过程,对于 xTx_T

公式2.9

p(xT)=N(0,I)p(x_T) = \mathcal{N}(0, \textit{I})

对于 p(xt1xt)p(x_{t-1}|x_t)

公式2.10

p(x_{t-1}|x_t) = \{ \begin{array}{rcl} &\mathcal{N}(\hat{x}_0(x_1,t=1), \sigma^2_1 \textit{I} \ ) &\mbox{if}\quad t =1\\ &q_{\sigma}(x_{t-1}|x_t,\hat{x}_0(x_t,t)) &\mbox{if}\quad 1 \lt t \le T \end{array}

根据公式2.8xt1x_{t-1} 具体地计算(采样)公式为:

公式2.11

xt1=αˉt1 x^0+1αˉt1σt2xtαˉt x^01αˉt+σtϵt=αˉt1(xt1αˉt ϵ^t(xt,t)αˉt)predict x0+1αˉt1σt2ϵ^t(xt,t)direction pointing to xt+σtϵtrandom noisewhereϵtN(0,I)x_{t-1} = \sqrt{\bar{\alpha}_{t-1}} \ \hat{x}_0 + \sqrt{1-\bar{\alpha}_{t-1}-\sigma_t^2} \cdot \frac{x_t - \sqrt{\bar{\alpha}_t} \ \hat{x}_0 }{\sqrt{1-\bar{\alpha}_t}} + \sigma_t \epsilon_t^* \\ =\sqrt{\bar{\alpha}_{t-1}} \underbrace{ \left ( \frac{x_t -\sqrt{1- \bar{ \alpha}_t } \ \hat{\epsilon}_t (x_t,t)}{ \sqrt{\bar{\alpha}_t } } \right ) }_{\text{predict } x_0} + \underbrace{\sqrt{1-\bar{\alpha}_{t-1}-\sigma_t^2} \quad \hat{\epsilon}_t (x_t,t)}_{\text{direction pointing to }x_t} + \underbrace{\sigma_t \epsilon_t^{*}}_{\text{random noise}} \text{where}\quad \epsilon_t^{*} \sim \mathcal{N}(0,\textit{I})

在这个新的定义中,前向过程没有了马尔科夫的假设,并且逆向转换核 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 也不再满足马尔科夫链的定义(仅依赖上一个状态),因此本论文作者称之为非马尔科夫扩散过程。同时可以直接利用之前已经训练好的 DDPM 预测噪声的模型,不用再重新训练一个新模型。

加速采样

回顾下公式2.5公式2.10公式2.11,多了一个方差参数 σ2\sigma^2,它代表的是 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 的方差。
实际上,它并不是在 DDIM 中额外新增的,现在回顾一下 DDPM 的内容,在 DDPM 中这个方差也是存在的,只是在 DDPM 中 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 是直接通过贝叶斯定理推导出来的,推导的结果中这个方差有一个固定的表达式,即

公式3.1

σ2=(1αt)(1αˉt1)1αˉt\sigma^2 = \frac{(1 - \alpha_t)(1 - \bar\alpha_{t-1})}{ 1 -\bar\alpha_{t}}

在 DDIM 中,把 σ2\sigma^2 当做一个可以人工调整的超参数,这样就可以通过调整方差 σ2\sigma^2 而得到不一样的效果。而在 DDIM 中,如果令 公式2.11 成立,那么 DDIM 就退化成了 DDPM。这里给出推导的过程。

公式2.5 成立,并将其代入到 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 的期望中,有

公式3.2

Eqσ(xt1xt,x0)=αˉt1 x0+1αˉt1σt2xtαˉt x01αˉt=αˉt1 x0+1αˉt1(1αt)(1αˉt1)1αˉtxtαˉt x01αˉt=αˉt1 x0+(1αˉt1)(1αˉt)(1αt)(1αˉt1)1αˉtxtαˉt x01αˉt=αˉt1 x0+(1αˉt1)(αtαˉt)1αˉtxtαˉt x01αˉt=αˉt1 x0+αt(1αˉt1)21αˉtxtαˉt x01αˉt=αˉt1 x0+αt(1αˉt1)2(1αˉt)2(xtαˉt x0)=αˉt1 x0+αt(1αˉt1)(xtαˉt x0)(1αˉt)=(1αˉt)αˉt1 x0(1αˉt)+αt(1αˉt1)xtαt(1αˉt1)αˉt x0(1αˉt)=(1αˉt)αˉt1 x0+αt(1αˉt1)xt(1αˉt1)αtαˉt x0(1αˉt)=αt(1αˉt1)xt+(1αˉt)αˉt1 x0(1αˉt1)αt2αˉt1 x0(1αˉt)=αt(1αˉt1)xt+(1αˉt)αˉt1 x0(1αˉt1)αtαˉt1 x0(1αˉt)=αt(1αˉt1)xt+[(1αˉt)(1αˉt1)αt]αˉt1 x0(1αˉt)=αt(1αˉt1)xt+(1αˉtαt+αˉt)αˉt1 x0(1αˉt)=αt(1αˉt1)xt+αˉt1(1αt) x0(1αˉt)\mathbb{E}{q_{\sigma}(x_{t-1}|x_t,x_0)} \\ =\sqrt{\bar{\alpha}_{t-1}} \ x_0 + \sqrt{ 1-\bar{\alpha}_{t-1}-\sigma_t^2} \cdot \frac{x_t - \sqrt{\bar{\alpha}_t} \ x_0 }{\sqrt{ 1-\bar{\alpha}_t}} \\ = \sqrt{\bar{\alpha}_{t-1}} \ x_0 + \sqrt{ 1-\bar{\alpha}_{t-1}- \frac{(1 - \alpha_t)(1 - \bar\alpha_{t-1})}{ 1 -\bar\alpha_{t}} } \cdot \frac{x_t - \sqrt{\bar{\alpha}_t} \ x_0 }{\sqrt{ 1-\bar{\alpha}_t}} \\ = \sqrt{\bar{\alpha}_{t-1}} \ x_0 + \sqrt{ \frac{(1-\bar{\alpha}_{t-1})(1 -\bar\alpha_{t})- (1 - \alpha_t)(1 - \bar\alpha_{t-1})}{ 1 -\bar\alpha_{t} } } \cdot \frac{x_t - \sqrt{\bar{\alpha}_t} \ x_0 }{\sqrt{ 1-\bar{\alpha}_t}} \\ = \sqrt{\bar{\alpha}_{t-1}} \ x_0 + \sqrt{ \frac{(1-\bar{\alpha}_{t-1})(\alpha_{t} -\bar\alpha_{t}) }{ 1 -\bar\alpha_{t} } } \cdot \frac{x_t - \sqrt{\bar{\alpha}_t} \ x_0 }{\sqrt{ 1-\bar{\alpha}_t}} \\= \sqrt{\bar{\alpha}_{t-1}} \ x_0 + \sqrt{ \frac{\alpha_{t}(1-\bar{\alpha}_{t-1})^2 }{ 1 -\bar\alpha_{t} } } \cdot \frac{x_t - \sqrt{\bar{\alpha}_t} \ x_0 }{\sqrt{ 1-\bar{\alpha}_t}} \\ = \sqrt{\bar{\alpha}_{t-1}} \ x_0 + \sqrt{ \frac{\alpha_{t}(1-\bar{\alpha}_{t-1})^2 }{ (1 -\bar\alpha_{t})^2 } } \cdot (x_t - \sqrt{ \bar{\alpha}_t} \ x_0 ) \\ = \sqrt{\bar{\alpha}_{t-1}} \ x_0 + \frac{ \sqrt{\alpha_{t} } (1-\bar{\alpha}_{t-1}) (x_t - \sqrt{ \bar{\alpha}_t} \ x_0 ) }{ (1 -\bar\alpha_{t}) } \\ = \frac{ (1 -\bar\alpha_{t}) \sqrt{\bar{\alpha}_{t-1}} \ x_0 }{(1 -\bar\alpha_{t})} + \frac{ \sqrt{\alpha_{t} } (1-\bar{\alpha}_{t-1}) x_t - \sqrt{\alpha_{t} } (1-\bar{\alpha}_{t-1}) \sqrt{ \bar{\alpha}_t} \ x_0 }{ (1 -\bar\alpha_{t}) } \\ =\frac{ (1 -\bar\alpha_{t}) \sqrt{\bar{\alpha}_{t-1}} \ x_0 + \sqrt{\alpha_{t} } (1-\bar{\alpha}_{t-1}) x_t - (1-\bar{\alpha}_{t-1}) \sqrt{ \alpha_{t} \bar{\alpha}_t } \ x_0 } { (1 -\bar\alpha_{t}) } \\ =\frac{ \sqrt{\alpha_{t} } (1-\bar{\alpha}_{t-1}) x_t +(1 -\bar\alpha_{t}) \sqrt{\bar{\alpha}_{t-1}} \ x_0 - (1-\bar{\alpha}_{t-1}) \sqrt{ \alpha_{t}^2 \bar{\alpha}_{t-1} } \ x_0 } { (1 -\bar\alpha_{t}) } \\ =\frac{ \sqrt{\alpha_{t} } (1-\bar{\alpha}_{t-1}) x_t +(1 -\bar\alpha_{t}) \sqrt{\bar{\alpha}_{t-1}} \ x_0 - (1-\bar{\alpha}_{t-1}) \alpha_{t}\sqrt{ \bar{\alpha}_{t-1} } \ x_0 } { (1 -\bar\alpha_{t}) } \\ =\frac{ \sqrt{\alpha_{t} } (1-\bar{\alpha}_{t-1}) x_t +[(1 -\bar\alpha_{t}) - (1-\bar{\alpha}_{t-1}) \alpha_{t}] \sqrt{ \bar{\alpha}_{t-1} } \ x_0 } { (1 -\bar\alpha_{t}) } \\ =\frac{ \sqrt{\alpha_{t} } (1-\bar{\alpha}_{t-1}) x_t +(1 -\bar\alpha_{t} - \alpha_{t} +\bar{\alpha}_{t}) \sqrt{ \bar{\alpha}_{t-1} } \ x_0 } { (1 -\bar\alpha_{t}) } \\ =\frac{ \sqrt{\alpha_{t} } (1-\bar{\alpha}_{t-1}) x_t + \sqrt{ \bar{\alpha}_{t-1} }(1 - \alpha_{t} ) \ x_0 } { (1 -\bar\alpha_{t}) }

可以看到,这和上一章 DDPM 中 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 的期望是完全一样的,可以得出:DDIM 可以看做是 DDPM 的扩展, DDPM 是 DDIM 的一个特例

可以想到,σ2\sigma^2 另一个特殊的选择是令 σ2=0\sigma^2=0,这意味 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 的方差为 00。最直接的公式2.11中的随机噪声项 σtϵt\sigma_t \epsilon_t^{*} 没了,相当于 xt1x_{t-1} 直接等于了 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 的期望。

想一想这意味着什么?

  1. 从随机采样的角度看, xt1x_{t-1} 不再是从 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 进行随机采样,而是直接选择 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0) 的期望,而又由于 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0)是高斯分布,它的期望就是它概率密度最大的点,这又相当于 xt1x_{t-1} 每次都是选取的 qσ(xt1xt,x0)q_{\sigma}(x_{t-1}|x_t,x_0)概率密度最大的点,相当于最大概率采样。
  2. 从数值计算角度看,没有了随机项 σtϵt\sigma_t \epsilon_t^{*},成了确定性等式计算,不再具有随机性。

DDIM 原论文中阐述方差为 00 时可以加速采样(图像生成)过程,它从子序列的角度解释,不是很容易理解。这里我们就从随机性的直观角度理解。

  • 方差不为 00 时, xtx_txt1x_{t-1} 的每一步是随机性采样,随机性导致不可控,会走很多弯路。就好比你从起点 xTx_T走到终点 x0x_0,每一步你不好好走,虽然指向目的地的方向(期望)确定了,但是总是在这个方向上加上一个随机量(方差)作为你的步进,自然你会走很多弯路绕路,走的不是直线。这样你到达目的地 x0x_0 的步数(时间)就变长了。
  • 方差为 00 时, xtx_txt1x_{t-1} 的每一步,你就专注的向着目的地笔直前进(沿着期望的方向),不搞幺蛾子,自然到达目的地就快了很多。

回顾一下,我们讲的扩散模型的三个等价表示,其中一个就是基于分数的等价模型,所谓分数(score),不就是 p(xt)p(x_t) 的梯度么,想想梯度下降法,梯度是什么?就是指向 p(x0)p(x_0) 的方向,xtx_txt1x_{t-1} 的每一步就是在沿着 p(xt)p(x_t) 的梯度向着 p(x0)p(x_0) 前进。

梯度 logp(xt)\nabla\log p(x_t)和预测噪声 ϵ^t(xt,t)\hat{\epsilon}_t(x_t,t) 的关系为

公式3.3

logp(xt)=11αˉtϵ^t(xt,t)\nabla\log p(x_t) = -\frac{1}{\sqrt{1 - \bar\alpha_t}} \hat{\epsilon}_t(x_t,t)

x^0\hat{x}_0 可以用梯度替换

公式3.4

x^0=xt+(1αˉt)logp(xt)αˉt\hat{x}_0 = \frac{x_t + (1 - \bar\alpha_t)\nabla\log p(x_t)}{\sqrt{\bar\alpha_t}}

公式2.8代入到 xt1x_{t-1} 的迭代公式公式2.11

公式3.5

xt1=αˉt1 x^0+1αˉt1σt2xtαˉt x^01αˉt+σtϵt=αˉt1xt+(1αˉt)logp(xt)αˉt+1αˉt1σt2[xtαˉt1αˉtαˉt1αˉtxt+(1αˉt)logp(xt)αˉt]+σtϵt=xtαˉt1+αˉt1(1αˉt)logp(xt)αˉt+αˉt1σt2[xtαˉtαˉtαˉt1αˉtxtαˉt+αˉt(1αˉt)logp(xt)αˉt1αˉt]+σtϵt=xtαˉt1αˉt+αˉt1(1αˉt)logp(xt)αˉt+1αˉt1σt2αˉtαˉt(1αˉt)logp(xt)αˉt1αˉt+σtϵt=xtαˉt1αˉt+αˉt1(1αˉt)logp(xt)αˉt1αˉt1σt2αˉt+αˉt(1αˉt)logp(xt)αˉt1αˉt+σtϵt=xtαˉt1αˉt+αˉt1(1αˉt)logp(xt)αˉt1αˉt1σt2αˉt(1αˉt)logp(xt)αˉt1αˉt+αˉt1αˉt1σt2αˉt1αˉt+σtϵt=xtαt+αˉt1(1αˉt)logp(xt)αˉt1αˉt1σt2αˉt(1αˉt)logp(xt)αˉt+αˉt1αˉt1σt21αˉt+σtϵt=xtαt+[αˉt1(1αˉt)1αˉt1σt2αˉt(1αˉt)]logp(xt)αˉt+αˉt1αˉt1σt21αˉt+σtϵt=Axt+Blogp(xt)+C+σtϵtx_{t-1} \\ = \sqrt{\bar{\alpha}_{t-1}} \ \hat{x}_0 + \sqrt{ 1-\bar{\alpha}_{t-1}-\sigma_t^2} \cdot \frac{x_t - \sqrt{\bar{\alpha}_t} \ \hat{x}_0 }{\sqrt{ 1-\bar{\alpha}_t}} + \sigma_t \epsilon_t^* \\ = \sqrt{\bar{\alpha}_{t-1}} \frac{x_t + (1 - \bar\alpha_t)\nabla\log p(x_t)}{\sqrt{\bar\alpha_t}} \quad + \sqrt{ 1-\bar{\alpha}_{t-1}-\sigma_t^2} \cdot \left [ \frac{x_t - \sqrt{\bar{\alpha}_t} }{\sqrt{ 1-\bar{\alpha}_t}} - \frac{\sqrt{\bar{\alpha}_t}}{\sqrt{ 1-\bar{\alpha}_t}} \cdot \frac{x_t + (1 - \bar\alpha_t)\nabla\log p(x_t)}{\sqrt{\bar\alpha_t}} \right ] \quad + \sigma_t \epsilon_t^* \\ = \frac{x_t \sqrt{\bar{\alpha}_{t-1}} + \sqrt{\bar{\alpha}_{t-1}} (1 - \bar\alpha_t)\nabla\log p(x_t)}{\sqrt{\bar\alpha_t}} \quad + \sqrt{ -\bar{\alpha}_{t-1}-\sigma_t^2} \cdot \left [ \frac{x_t\sqrt{\bar{\alpha}_t} - \bar{\alpha}_t }{\sqrt{\bar{\alpha}_t} \sqrt{ 1-\bar{\alpha}_t}} - \frac{x_t\sqrt{\bar{\alpha}_t} + \sqrt{\bar{\alpha}_t}(1 - \bar\alpha_t)\nabla\log p(x_t)}{\sqrt{\bar\alpha_t} \sqrt{ 1-\bar{\alpha}_t}} \right ] \quad + \sigma_t \epsilon_t^* \\ = \frac{x_t \sqrt{\bar{\alpha}_{t-1}}}{\sqrt{\bar\alpha_t}} + \frac{\sqrt{\bar{\alpha}_{t-1}} (1 - \bar\alpha_t)\nabla\log p(x_t)}{ \sqrt{\bar\alpha_t}} \quad + \sqrt{ 1-\bar{\alpha}_{t-1}-\sigma_t^2} \cdot \frac{-\bar{\alpha}_t - \sqrt{\bar{\alpha}_t}(1 - \bar\alpha_t)\nabla\log p(x_t)}{\sqrt{\bar\alpha_t} \sqrt{ 1-\bar{\alpha}_t}} \quad + \sigma_t \epsilon_t^* \\ = \frac{x_t \sqrt{\bar{\alpha}_{t-1}} }{ \sqrt{\bar\alpha_t}} + \frac{\sqrt{\bar{\alpha}_{t-1}} (1 - \bar\alpha_t)\nabla\log p(x_t)}{ \sqrt{\bar\alpha_t} } \quad - \sqrt{ 1-\bar{\alpha}_{t-1}-\sigma_t^2} \cdot \frac{\bar{\alpha}_t + \sqrt{\bar{\alpha}_t}(1 - \bar\alpha_t)\nabla\log p(x_t)}{\sqrt{\bar\alpha_t} \sqrt{ 1-\bar{\alpha}_t}} \quad + \sigma_t \epsilon_t^* \\ = \frac{x_t \sqrt{\bar{\alpha}_{t-1}} }{ \sqrt{\bar\alpha_t}} + \frac{\sqrt{\bar{\alpha}_{t-1}} (1 - \bar\alpha_t)\nabla\log p(x_t)}{ \sqrt{\bar\alpha_t}} \quad - \frac{ \sqrt{ 1-\bar{\alpha}_{t-1}-\sigma_t^2} \sqrt{\bar{\alpha}_t}(1 - \bar\alpha_t)\nabla\log p(x_t)}{\sqrt{\bar\alpha_t} \sqrt{ 1-\bar{\alpha}_t}} \quad + \frac{\bar{\alpha}_t \sqrt{ 1-\bar{\alpha}_{t-1}-\sigma_t^2} }{\sqrt{\bar\alpha_t} \sqrt{ 1-\bar{\alpha}_t}} \quad + \sigma_t \epsilon_t^* \\ = \frac{x_t }{ \sqrt{\alpha_t}} + \frac{\sqrt{\bar{\alpha}_{t-1}} (1 - \bar\alpha_t)\nabla\log p(x_t)}{ \sqrt{\bar\alpha_t}} \quad - \frac{ \sqrt{ 1-\bar{\alpha}_{t-1}-\sigma_t^2} \sqrt{\bar{\alpha}_t }\sqrt{(1 - \bar\alpha_t)}\nabla\log p(x_t)}{\sqrt{\bar\alpha_t} } \quad + \frac{\sqrt{\bar{\alpha}_t} \sqrt{ 1-\bar{\alpha}_{t-1}-\sigma_t^2} }{ \sqrt{ 1-\bar{\alpha}_t}} \quad + \sigma_t \epsilon_t^* \\ = \frac{x_t }{ \sqrt{\alpha_t}} \quad + \frac{ \left [ \sqrt{\bar{\alpha}_{t-1}} (1 - \bar\alpha_t) - \sqrt{ 1-\bar{\alpha}_{t-1}-\sigma_t^2} \sqrt{\bar{\alpha}_t }\sqrt{(1 - \bar\alpha_t)} \right ] \nabla\log p(x_t)}{ \sqrt{\bar\alpha_t}} \quad + \frac{\sqrt{\bar{\alpha}_t} \sqrt{ 1-\bar{\alpha}_{t-1}-\sigma_t^2} }{ \sqrt{1-\bar{\alpha}_t}} \quad + \sigma_t \epsilon_t^* \\ = A x_t + B \nabla\log p(x_t) + C + \sigma_t \epsilon_t^*

现在看明白了吧,逆向生成过程中 xtx_t 的迭代(降噪)过程,其实就是沿着 xtx_t 的梯度在前进。
放开你的想象力,这和利用梯度下降法求解最优参数是不是一样的!!!
那是不是意味着我可以把各种高级的优化器算法、自适应性学习率算法等等用在这里,比如 $$adam$$ 算法等等。

如果令 σt0\sigma_t \neq 0,意味着保留了随机项,生成的多样性更好,但是收敛速度会下降。反之,令 σt=0\sigma_t = 0,去掉随机项,收敛速度加快,但会损失多样性。

能不能兼顾速度和多样性呢? 显然是可以的,设计一个动态自适应的调度算法,开始一段时刻,令 σt=0\sigma_t = 0 加快前进收敛速度,最后一段(个)时刻,再令 σt0\sigma_t \neq 0,增加一点多样性,可以线性控制,也可以余弦控制,总之可以把自适应调度那套玩法借鉴过来。
同样系数 AABB 类似于学习率作用,同样可以采用自适应学习率那套玩法。

在 DDIM 论文中,虽然提出了自由方差参数 σt\sigma_t,并做一些实验,但论文中把只有 σt=0\sigma_t = 0 的情况定义成 DDIM 模型,意为 隐式(implicit)扩散模型

关于算法的实现代码,可以参考论文作者的实现 https://github.com/ermongroup/ddim.git
或者 huggingface 开发的扩散模型工具包 $$diffusers$$ 的源码,
建议看 diffusers 的源码,代码写的非常清晰工整,并且在关键点上有注释。