DDIM
1 Introduction
DDPM虽然能生成高质量的照片,但是由于他是依赖马尔科夫链来进行推理的,所以需要一步一步的进行采样,这样效率很低。在DDPM中,通过不断给图片增加噪声,最后得到一个高斯噪声的过程称为前向过程也叫扩散过程,这个过程中每一个 x T x_T xT 之和上一阶段的样本 x T − 1 x_{T-1} xT−1 相关。DDIM希望我们可以绕开这个马尔科夫链的限制,从而不需要进行迭代的加噪采样,便可以直接得到最终的 x T x_T xT。后续的训练过程与DDPM保持一致,就可以解决DDPM训练速度较慢的缺陷。总的来说,作者的思路方向是减少迭代的步数来缩短推理时间。
术语:
- x 0 x_0 x0:输入的图片样本
- x T x_T xT:最终从标准高斯分布中采样得出的样本
- 前向过程(扩散过程,加噪过程):用 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt∣xt−1) 代表每一步的概率分布,表示对照片样本进行加噪的过程
- 后向过程(采样过程,去噪过程):用 p ( x t − 1 ∣ x t ) p(x_{t-1}|x_t) p(xt−1∣xt) 代表每一步的概率分布,表示对高斯噪声不断去噪生成一张新照片的过程。
2 Background
DDPM这类模型是利用变分推断的方法来完成生成任务。假如说模型需要得到一个数据分布 q ( x 0 ) q(x_0) q(x0),变分推断的方法聚焦于找到另一个新的数据分布 p θ ( x 0 ) p_{\theta}(x_0) pθ(x0),让 q ( x 0 ) q(x_0) q(x0)和 p θ ( x 0 ) p_{\theta}(x_0) pθ(x0) 两个数据分布的相差越来越小,而不是求出具体的 q ( x 0 ) q(x_0) q(x0) 的值大小。这种想法本质上是想用一个粗糙的估计出的分布来代替真实的数据分布。{虽然 VAE 和 DDPM都是基于变分推断的方法,但DDPM是基于一个固定的推断过程来训练的,也就是前向过程是不变的,只有后向过程会随着训练的而参数更新,而VAE则是前向过程和后向过程都参与训练过程中,所以他的推断过程是会随着训练的迭代而发生变化。}
后面就是讲述了DDPM的推断过程和训练过程,但是DDIM论文中和DDPM原文中有些符号表示的不是一个意思。例如DDIM论文中的 α t \alpha_t αt 对应的是DDPM中连乘后的结果 α ˉ t \sqrt{\bar{\alpha}_{t}} αˉt。所以基于 x 0 x_0 x0 的条件概率写成了:
而在DDPM中是这样表示的,其中 α t = 1 − β t \alpha_t = 1 - \beta_t αt=1−βt
在DDPM中,推理过程是提前定义好的,也就是 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt∣xt−1),所以可以迭代的套入得到 q ( x t ∣ x 0 ) q(x_t|x_0) q(xt∣x0)的表达式:
将其采样,写成线性表达式的形式即为:
当 α t \alpha_t αt 趋近于0的时候,则 x t x_t xt 的概率分布趋近于标准正太分布,即均值为0,方差为1,这就可以接近最开始设定的 x t x_t xt 的概率分布。
最后是损失函数的表示,之前DDPM论文中,损失函数可以分为三项:
但训练的时候大部分的优化其实都落在了第二项,如果直接优化KL散度,有点难训练。查看公式可以看到这一项中需要求出 x t x_t xt 的值作为条件,去推测 x t − 1 x_{t-1} xt−1 的值,而 x t x_t xt 又需要 x 0 x_0 x0 不断加噪来得到,所以我们可以去优化每一步加在 x 0 x_0 x0 上的噪声 ϵ θ ( t ) \epsilon_\theta^{(t)} ϵθ(t),它表示当前条件下的 x t x_t xt 和迭代步数 t t t 所对应的噪声值,所以损失函数可以简化成。DDIM论文中将损失函数所有的系数值简写成了一个 γ t \gamma_{t} γt。
对于DDPM来说,迭代步数 T T T 是一个重要的取值。依据 x 0 x_0 x0推导得到 x t x_t xt的公式:
x T = α ˉ T x 0 + 1 − α ˉ T ϵ x_T=\sqrt{\bar{\alpha}_T}x_0+\sqrt{1-\bar{\alpha}_T}\epsilon xT=αˉTx0+1−αˉTϵ
由于 α t \alpha_t αt取值为(0, 1),所以当T的值很大时, α ˉ T \bar{\alpha}_T αˉT取值就趋近于0, 1 − α ˉ T 1-\bar{\alpha}_T 1−αˉT取值趋近于1,这样得到的 x T x_T xT 就接近于服从标准高斯分布,而他的逆向生成过程是基于 x t x_t xt满足标准高斯分布假设的,所以它的结果就会较好。如果分析 x t x_t xt 和 x t − 1 x_{t-1} xt−1 之间的关系式,可以得出 α t \alpha_t αt 的取值倾向:
x t = α t x t − 1 + 1 − α t ϵ x_t=\sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}\epsilon xt=αtxt−1+1−αtϵ
可以看出希望每一个 α t \alpha_t αt 在取值上都接近于1, 1 − α t 1-\alpha_t 1−αt 接近于0,这样 x t − 1 x_{t-1} xt−1 就可以最大程度的保留 x t x_t xt 的信息,而噪声信息 ϵ \epsilon ϵ 会较小,这样就可以保持DDPM中前后都是正态分布的假设。但是迭代步数增加的时候,逻辑上每一步的操作是无法并行计算的。因为每一步需要拟合的概率是通过一个贝叶斯公式表示的:
q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) q(x_{t-1}|x_t,x_0)=\frac{q(x_t|x_{t-1})q(x_{t-1}|x_0)}{q(x_t|x_0)} q(x