今天读了一篇编译,接下来回到老本行,来一篇diffusion model。这篇工作很有名,有点碰瓷DDPM的意思,其中“IMPLICIT”的意思是隐含。和DDPM的“probabilistic”相比,意思是减少随机性,加速采样。作者自己在AI Time上有个报告,好挺好的。
这篇工作和别的diffusion model工作一样,比较数学,很多推导我就不详细写了,可以从附录里看。
Introduction
大概意思就是:
- GAN很好,但今年的DDPM也不差
21年有一篇OpenAI的 BEAT GANS,用了DDIM,关注度很高,意思就是DDPM真的比GAN好
-
DDPM的问题是慢
- 在CIFAR-10做32x32要20h
- 在CIFAR-10做256x256要1000h
-
本文解决这个问题,通过一个非马尔科夫的过程
Background
作者先讲了一般的DDPM是怎么搞的,这个叙述方式挺好的,讲讲重点
有一个公式:
$$
q(x_{1:T} | x_0) := \prod_{t=1}^T q(x_t |x_{t-1}) \
q(x_t |x_{t-1}) := N(\sqrt{\frac{\alpha_t}{\alpha_{t-1}} } x_{t-1},(1- \frac{\alpha_t}{\alpha_{t-1}})I)
$$
也就是说,正常的DDPM是一个马尔科夫过程,想要从$X_0$得到后面,需要一步一步加噪声。这个噪声是一个高斯分布,其均值和$X_{t-1}$有关,是sample出来的。
反向的公式是:
$$
q(x_{t−1}|x_t,x_0) = N(x_{t−1};μ_t(x_t,x_0),\hat{\beta_t} I),
$$
其中
$$
\text{均值:} \mu_t(x_t,x_0) = \frac{ \sqrt{ \overline{\alpha_{t-1}} }\beta_t }{1 - \overline{\alpha_{t}}} x_0 + \frac{\sqrt{\alpha_t} (1 - \overline{\alpha_{t-1}} )}{1 - \overline{\alpha_{t}}} x_t \
\text{方差:} \hat{\beta_t} = \frac{1 - \overline{\alpha_{t-1}}}{1 - \overline{\alpha_{t}}}\beta_t
$$
另一方面,由于这个高斯分布的传递性,我们可以把$x_t$视为单位高斯分布和$x_0$的线性叠加:
$$
x_t = \sqrt{\hat\alpha_t} x_0 + \sqrt{1 - \hat\alpha_t} \epsilon, \quad \epsilon \sim N(0,I)
$$
我们在训练时我们想要让 $\log p_\theta(x_0) \to \log q(x_0)$,也就是说,我们想要优化:
$$
L_{t-1} = E_q [ \frac{1}{2\sigma^2} || \mu_t(x_t,x_0) - \mu_\theta(x_t,t)||^2]
$$
其中
-
左边是实际马尔科夫链对$x_{t-1}$的估计,可计算
-
右边是我们的去噪模型$\theta$对$x_{t-1}$的估计,可计算
这里我们套入上面$x_t$的公式,看做$x_t,\epsilon$的函数,进行一波化简,最终得到
$$
L_{t-1} = C * \frac{1}{2\sigma^2} || \epsilon - \mu_\theta(\sqrt{\hat\alpha_t} x_0 + \sqrt{1 - \hat\alpha_t},t)||^2
$$
忽略常数C,同时对所有的L进行优化:
$$
L_{\text{simple}} = \sum_{t=1}^T L_t
$$
就能学出DDPM模型了
VARIATIONAL INFERENCE FOR NON-MARKOVIAN FORWARD PROCESSES
上面全是DDPM的数学推导。接下来,作者讲了他的贡献。它发现:
- DDPM中的loss$L_\lambda$只依赖于$q(x_t|x_0)$,和$q(x_{1:T} |x_0)$无关。这样符合边缘分布的可能性有很多,作者选取了一个非马尔科夫的过程
$$
q_\sigma(x_{1:T} |x_0) := q(x_{T} |x_0) \prod_{t=2}^T q_\sigma (x_{t−1} |x_t , x_0 ) \
q_\sigma (x_{t−1} |x_t , x_0 ) = N \left( \sqrt{\alpha_{t-1}}x_0 + \sqrt{1 - \alpha_{t-1} - \sigma^2_t} \times \frac{x_t - \sqrt{\alpha_t}x_0}{\sqrt{1-\alpha_t}} , \sigma_t^2 I\right)
$$
接下来,对于 $x_0 \sim q(x_0) , \epsilon_t \sim N (0, I)$我们可以获取其对应的$X_t$,由
$$
x_t = \sqrt{\hat\alpha_t} x_0 + \sqrt{1 - \hat\alpha_t} \epsilon_t
$$
如果我们有一个对$\epsilon_t$的预测器$\epsilon_\theta^{(t)}(x_t)$输入不含$X_0$。我们可以用他来预测$X_0$:
$$
f^{(t)}(x_t) := (x_t − \sqrt{1 − \alpha_t} · \epsilon^{(t)}(x_t))/\sqrt{\alpha_t}
$$
由此,这个去噪的过程可以看做:
$$
p_\theta^{(t)}(x_{t-1} | x_t) = q_\sigma (x_{t−1} |x_t , f^{(t)}(x_t) )
$$
式子右边只和$x_t,\epsilon$有关
作者接下来证明了这个算法的train过程用到的loss和DDPM是等价的(差一个常数)。也就是说,训好的DDPM模型可以认为是训好的DDIM模型
sample
这个模型是怎么infer的呢?
进一步展开、化简刚才的$p_\theta^{(t)}(x_{t-1} | x_t)$,我们可以得到
这个式子里面只有最右边的部分是带有随机成分的。而且当
$$
\sigma_t = \sqrt{(1 − \alpha_{t−1})/(1 − \alpha_{t})}\sqrt{1 − \alpha_{t}/\alpha_{t-1}}
$$
时退化为DDPM
如果我们取$\sigma_t = 0$。式子有确定性的输出,这个模型称作DDIM。
ACCELERATED GENERATION PROCESSES
说完了采样,那么加速在哪呢?
作者证明了:
- 上面的逆过程不需要从$T,T-1,…,1,0$一路下降,其实选取一个递减的子集也是可以的!
实验
实验部分,作者实际上选取了:
$$
\sigma_t = \eta \sqrt{(1 − \alpha_{t−1})/(1 − \alpha_{t})}\sqrt{1 − \alpha_{t}/\alpha_{t-1}}
$$
其中$\eta$是超参,0代表是DDIM,1代表是DDPM。另一个变量是选取的子集S的大小($|S|=1000$代表没有简化),跑了这个图:
可以看出,DDIM在步数少的时候表现最好。最下面那个$\hat\sigma$代表原始的DDPM祖先采样。可以看出,衰减非常明显
作者还提到了这个方法的另一个优势:
- 由于确定性的增加,相同的初始噪声映射到基本相同的结果。可以方便做图片的修改。
我的思考
- 虽然证明和数学过程很复杂,但结论却是惊人的简单:同样的DDPM,换一个采样方法,就能加速50倍
- 这个感觉是对上面论文ODE的一种实现?作者在论文里也用一小节说了这事。
- 有个后文 DPM-Solver,10步就能媲美DDPM-1000步,过两天笔记整上