去躁步进可以比 1 大,生成图片更快
(图片)-> 噪声 -> 随机图片,随机图片
DDIM 如何看待 DDPM?
- DDPM 的加噪和去噪操作其实都是在某个正态分布中采样。因此,我们可以用概率 q,p 分别表示加噪和去噪的分布,DDPM 中去躁的目的是使得 p(xt−1∣xt) 尽可能和 q(xt∣xt−1) 互逆
- 但是,「互逆」并不是一个严格的数学表述。更具体地,我们应该让分布 p(xt−1∣xt) 和 q(xt−1∣xt) 尽可能相似,q(xt−1∣xt) 是不好求得的,但在给定了输入数据 x0,q(xt−1∣xt,x0) 可使用贝叶斯公式求
q(xt−1∣xt,x0)=q(xt∣xt−1,x0)q(xt∣x0)q(xt−1∣x0)
- 在 DDPM 中,q(xt∣xt−1) 是已经确定的分布,以上式子右边是:
q(xt∣xt−1,x0)q(xt∣x0)q(xt−1∣x0)=N(xt;1−βtxt−1,βtI)=N(xt;αˉtx0,(1−αˉt)I)=N(xt−1;αˉt−1x0,(1−αˉt−1)I)
- 根据两个高斯分布相除、相乘的规则,并根据公式 q(xt∣x0) 将 xt−1 换算为 x0,其 q(xt−1∣xt,x0) 结果如下,其中参数 βt 是可调的,α 是根据 βt 算出来的,即 αt=1−βt,αˉt=∏i=1tαi,
q(xt−1∣xt,x0)=N(xt−1;1−αˉtαt(1−αˉt−1)xt+1−αˉtαˉt−1βtx0,1−αˉt1−αˉt−1⋅βtI)
- 对比 DDPM 的原始去躁公式(以下),可知上式中,只有 x0 是未知的,在实际使用中,通过 xt,t 两个输入的神经网络去预测 xt 到 x0 的噪声(当然不是一步完成的,而是多次迭代),即 DDPM 的 ϵθ(xt,t) 的过程
pθ(xt−1∣xt)μθ(xt,t)=N(xt−1;μθ(xt,t),σt2I)=αt1(xt−1−αtˉβtϵθ(xt,t))
什么是 DDIM ?
q(xt−1∣xt,x0)=q(xt∣xt−1,x0)q(xt∣x0)q(xt−1∣x0)
- 根据这一推理过程,DDIM 论文的作者想到,假如我们把贝叶斯公式中的 t 替换成 t2, t−1 替换成 t1,其中 t2 是比 t1 大的任一时刻,比如令 t2=t1+10,意味着只需一步去躁就可顶上 DDPM 的 10
q(xt1∣xt2,x0)=q(xt2∣xt1,x0)q(xt2∣x0)q(xt1∣x0)
- 上式的 q(xt1∣x0),q(xt2∣x0) 很好求,直接代入 DDPM 的前向加躁公式即可,但是 q(xt1∣xt2,x0) 如何求呢?已知 DDPM 步长为 1 时的去躁公式为:q(xt∣xt−1,x0)=N(xt;1−βtxt−1,βtI),现在步长为 t2−t1,其去躁公式能直接使用吗?
- 假如我们能把公式中的 βt 换成一个由 t 和 t−1 决定的变量,我们就能把 t 换成 t2,t−1 换成t1,如此就可以直接利用 DDPM 去躁公式,得到 DDIM 的采样公
q(xt1∣xt2,x0)=N(xt1;αt1x0+1−αt1−σt221−αt2xt2−αt2x0,σt22I)
- 以上公式这意味着我们可以先照着原 DDPM 的方法训练,再用 DDIM 这种更快速的方式采样
DDIM 的特点?
- DDIM 不用每一步从高斯噪声中采样,然后去躁,这就意味着扩散模型的反向过程变成了一个没有噪声的确定性过程。给定随机噪声 xT,我们只能得到唯一的采样结果 x0。这种结果确定的概率模型被称为隐式概率模型(implicit probabilistic model)
- 特别地,作者把方差为 0 的这种扩散模型称为 DDIM(Denoising Diffusion Implicit Model)
DDIM 的采样一致性 (sample consistency)?
- DDIM 将采样高斯 σt 设置为 0,这让采样过程是确定的,只受 xT 影响。作者发现,当给定 xT ,不同的的采样时间序列 T 所生成图片都很相近,xT 似乎可以视作生成图片的隐编码信息
- 有个小 trick,我们在实际的生成中可以先设置较小的采样步长进行生成,若生成的图片是我们想要的,则用较大的步长重新生成高质量的图片
DDIM 的语义插值效应?(sementic interpolation effect)
- 即然 xT 可能是生成图片的隐空间编码,那么它是否具备其它隐概率模型 (如 GAN) 所观察到的语义插值效应呢?
- 首先从高斯分布采样两个随机变量 xT(0),xT(1) ,并用他们做图像生成得到下图最左侧与最右侧的结果。随后用球面线性插值方法(spherical linear interpolation,Slerp)对它们进行插值,得到一系列中间结果。
xT(α)=sin(θ)sin((1−α)θ)xT(0)+sin(θ)sin(αθ)xT(1)
参考:
- DDIM 简明讲解与 PyTorch 实现:加速扩散模型采样的通用方法 - 知乎
- diffusion model(二)—— DDIM(将 diffusion model 提速 50 倍!) - 知乎