DDPM详解


前言

 DDPM是2020年被提出来的一篇论文,论文全称是《Denoising Diffusion Probabilistic Models》去噪扩散概率模型,这是一种基于马尔科夫链的图像生成模型,其生成的图像质量更好,多样性更强,并且训练更加稳定。DDPM模型的工作原理包括两个主要过程:前向过程(扩散过程)和反向过程(逆扩散过程)。在前向过程中,模型逐步向数据中添加噪声,直到数据完全变成高斯噪声;而在反向过程中,模型则逐步从高斯噪声中去除噪声,最终生成原始数据或新的数据样本。接下来我们详细介绍一下DDPM这篇论文。

一、建模

 图像生成可以建模如下图所示:
在这里插入图片描述
 首先从一个简单的分布Z中(例如高斯分布)进行采样,然后将其经过神经网络,使得最后生成图像X的概率 P θ ( x ) P_{\theta}(x) Pθ(x)和从真实分布中采样到图像X的概率 P d a t a ( x ) P_{data}(x) Pdata(x)相同。我们要求的就是神经网络的参数 θ \theta θ
 假设我们可以计算出 P θ ( x ) P_{\theta}(x) Pθ(x)的概率,在 P d a t a ( x ) P_{data}(x) Pdata(x)中进行采样的到{ x 1 , x 2 , x 3 , . . . , x m x^1,x^2,x^3,...,x^m x1,x2,x3,...,xm},则神经网络的优化目标就是极大似然估计,

θ ∗ = arg ⁡ max ⁡ θ ∏ i = 1 m P θ ( x i ) \theta^* = \arg \max_{\theta}\prod_{i=1}^mP_\theta(x^i) θ=argmaxθi=1mPθ(xi)

 这个公式可以理解为找到一个网络参数 θ \theta θ,让其产生{ x 1 , x 2 , x 3 , . . . , x m x^1,x^2,x^3,...,x^m x1,x2,x3,...,xm}的概率连乘最大。也就是说最终连乘概率最大,则 P θ ( x ) P_\theta(x) Pθ(x) P d a t a ( x ) P_{data}(x) Pdata(x)两个分布越接近。
 为什么最大似然估计(连乘概率越大),两个分布越接近呢?这个是可以通过数学公式推导出来。直接上结果:

θ ∗ = arg ⁡ max ⁡ θ ∏ i = 1 m P θ ( x i ) ≈ arg ⁡ min ⁡ θ K L ( P d a t a ∣ ∣ P θ ) \theta^* = \arg \max_\theta\prod_{i=1}^mP_\theta(x^i) \approx \arg\min_\theta KL(P_{data}||P_\theta) θ=argmaxθi=1mPθ(xi)argminθKL(Pdata∣∣Pθ)

因此可以理解为最大似然估计可以近似等于最小化两个分布之间的KL散度。
 对于最大似然公式,我们在前面加入 log ⁡ \log log,如下所示:

arg ⁡ max ⁡ θ ∏ i = 1 m P θ ( x i ) = arg ⁡ max ⁡ θ log ⁡ ∏ i = 1 m P θ ( x i ) = arg ⁡ max ⁡ θ ∑ i = 1 m log ⁡ P θ ( x i ) \arg \max_\theta\prod_{i=1}^mP_\theta(x^i) = \arg \max_\theta\log\prod_{i=1}^mP_\theta(x^i) = \arg\max_\theta\sum_{i=1}^m\log P_\theta(x^i) argmaxθi=1mPθ(xi)=argmaxθlogi=1mPθ(xi)=argmaxθi=1mlogPθ(xi)

对于每一个 log ⁡ P ( x ) \log P(x) logP(x),对其进行变形,
log ⁡ P ( x ) = ∫ z q ( z ∣ x ) log ⁡ P ( x ) d z = ∫ z q ( z ∣ x ) log ⁡ ( P ( z , x ) P ( z ∣ x ) ) d z = ∫ z q ( z ∣ x ) log ⁡ ( P ( z , x ) q ( z ∣ x ) q ( z ∣ x ) P ( z ∣ x ) ) d z = ∫ z q ( z ∣ x ) log ⁡ ( P ( z , x ) q ( z ∣ x ) ) d z + ∫ z q ( z ∣ x ) log ⁡ ( q ( z ∣ x ) P ( z ∣ x ) ) d z ⩾ ∫ z q ( z ∣ x ) log ⁡ ( P ( z , x ) q ( z ∣ x ) ) d z = E q ( z ∣ x ) [ log ⁡ ( P ( x , z ) q ( z ∣ x ) ) ] \log P (x) \\= \int_zq(z|x)\log P(x)dz \\= \int_zq(z|x)\log(\frac{P(z,x)}{P(z|x)})dz \\= \int_zq(z|x)\log(\frac{P(z,x)}{q(z|x)}\frac{q(z|x)}{P(z|x)})dz \\= \int_zq(z|x)\log(\frac{P(z,x)}{q(z|x)})dz + \int_zq(z|x)\log(\frac{q(z|x)}{P(z|x)})dz \\\geqslant\int_zq(z|x)\log(\frac{P(z,x)}{q(z|x)})dz \\= E_{q(z|x)}[\log(\frac{P(x,z)}{q(z|x)})] logP(x)=zq(zx)logP(x)dz=zq(zx)log(P(zx)P(z,x))dz=zq(zx)log(q(zx)P(z,x)P(zx)q(zx))dz=zq(zx)log(q(zx)P(z,x))dz+zq(zx)log(P(zx)q(zx))dzzq(zx)log(q(zx)P(z,x))dz=Eq(zx)[log(q(zx)P(x,z))]
 可以得出, log ⁡ P ( x ) \log P(x) logP(x)的下界为 E q ( z ∣ x ) [ log ⁡ ( P ( x , z ) q ( z ∣ x ) ) ] E_{q(z|x)}[\log(\frac{P(x,z)}{q(z|x)})] Eq(zx)[log(q(zx)P(x,z))],最大化 log ⁡ P ( x ) \log P(x) logP(x)的问题可以转化为最大化 E q ( z ∣ x ) [ log ⁡ ( P ( x , z ) q ( z ∣ x ) ) ] E_{q(z|x)}[\log(\frac{P(x,z)}{q(z|x)})] Eq(zx)[log(q(zx)P(x,z))]。其中 q ( z ∣ x ) q(z|x) q(zx)可以是任意分布,可以把其看作是模型中编码的过程,根据一个已知输入 x x x,映射为 z z z的概率。因为模型的参数和输入是确定的,所以 q ( z ∣ x ) q(z|x) q(zx)是一个确定性的分布。

二、重参数化技巧

 在正式介绍DDPM之前,首先介绍一下高斯分布的重参数化相关知识。
 对于一个高斯分布 ϵ ∼ N ( 0 , I ) \epsilon\sim\mathcal{N}(0, I) ϵN(0,I) y = μ + σ ∗ ϵ y = \mu+\sigma*\epsilon y=μ+σϵ,则 y ∼ N ( μ , σ 2 I ) y\sim\mathcal{N}(\mu,\sigma^2I) yN(μ,σ2I)
y 1 ∼ N ( μ 1 , σ 1 2 I ) , y 2 ∼ N ( μ 2 , σ 2 2 I ) y_1\sim\mathcal{N}(\mu_1,\sigma_1^2I),y_2\sim\mathcal{N}(\mu_2,\sigma_2^2I) y1N(μ1,σ12I),y2N(μ2,σ22I),假设 y 3 = y 1 + y 2 y_3=y_1+y_2 y3=y1+y2,则 y 3 ∼ N ( μ 1 + μ 2 , ( σ 1 2 + σ 2 2 ) I ) y_3\sim\mathcal{N}(\mu_1+\mu_2,(\sigma_1^2+\sigma_2^2)I) y3N(μ1+μ2,(σ12+σ22)I)
 接下来举一个详细的例子说明重参数化的作用。

y 1 = μ 1 + σ 1 ∗ ϵ 1 y_1 = \mu_1+\sigma_1*\epsilon_1 y1=μ1+σ1ϵ1,  y 1 ∼ N ( μ 1 , σ 1 2 I ) y_1\sim\mathcal{N}(\mu_1,\sigma_1^2I) y1N(μ1,σ12I)
y 2 = μ 2 + σ 2 ∗ ϵ 2 y_2 = \mu_2+\sigma_2*\epsilon_2 y2=μ2+σ2ϵ2,  y 2 ∼ N ( μ 2 , σ 2 2 I ) y_2\sim\mathcal{N}(\mu_2,\sigma_2^2I) y2N(μ2,σ22I)
y 3 = y 1 + y 2 y_3 = y_1+y_2 y3=y1+y2,  y 3 ∼ N ( μ 1 + μ 2 , ( σ 1 2 + σ 2 2 ) I ) y_3\sim\mathcal{N}(\mu_1+\mu_2,(\sigma_1^2+\sigma_2^2)I) y3N(μ1+μ2,(σ12+σ22)I)
因此, y 3 = μ 1 + μ 2 + ( σ 1 2 + σ 2 2 ) ∗ ϵ 因此,y_3 = \mu_1+\mu_2+\sqrt{(\sigma_1^2+\sigma_2^2)}*\epsilon 因此,y3=μ1+μ2+(σ12+σ22) ϵ,  ϵ ∼ N ( 0 , I ) \epsilon\sim\mathcal{N}(0,I) ϵN(0,I)

 通过重参数化技巧,我们可以把两个不同的高斯分布的和用一个新的高斯分布表示。

三、DDPM理论

 DDPM可以分为两个过程,分别是前向(加噪)过程和反向(去噪)过程。如下图所示:
在这里插入图片描述
 前向(加噪)过程对应图中从 x 0 x_0 x0 x T x_T xT的过程,对于一张图片,逐渐向其中加入噪声,直至照片变成一张高斯白噪声。反向(去噪)过程对应从图中 x T x_T xT x 0 x_0 x0的过程,给定一张噪声图片,逐步去噪最终生成完整的照片。DDPM可以理解为照片本来就存在于噪声中,通过不断的去噪把隐藏在噪声中的照片显示出来。
 DDPM与经典图像生成模型VAE的区别如下:
在这里插入图片描述
 VAE在训练时首先将图片使用编码器映射成简单的分布,然后在使用解码器将简单的分布映射成图片,最后将解码器生成的图片与一开始输入的图片算LOSS。在使用VAE进行图片生成时只需要使用解码器即可,在简单分布中进行采样然后经过解码器生成最终图片。
 而DDPM与VAE相比,其前向(加噪)过程看以看作是VAE中的编码器,其反向(去噪)过程可以看作是VAE中的解码器。而与VAE不同的是,其加噪过程是一个确定性的过程,不需要使用模型进行预测。
 因此个人认为,DDPM之所以可以生成高质量的图片,是因为其不确定性元素较少,模型的预测难度变低,所以最终生成图片结果质量较好。

四、前向过程

 扩散模型的前向过程又称为扩散过程(加噪过程),那么在前向过程中每一步加多少噪声呢?对应的加噪公式对应为:

X t = ( 1 − β t ) ∗ x t − 1 + β t ∗ ϵ ϵ ∼ N ( 0 , I ) X_t = \sqrt{(1-\beta_t)}*x_{t-1}+\beta_t*\epsilon \\\epsilon\sim \mathcal{N}(0, I) Xt=(1βt) xt1+βtϵϵN(0,I)

 下面举一个例子:

对于图片 x 0 x_0 x0,对他进行第一次加噪得到 x 1 x_1 x1,则 x 1 x_1 x1为:
x 1 = ( 1 − β 1 ) ∗ x 0 + β 1 ∗ ϵ 1 x_1 = \sqrt{(1-\beta_1)} *x_0+\beta_1*\epsilon_1 x1=(1β1) x0+β1ϵ1
然后进行第二次加噪得到 x 2 x_2 x2
x 2 = ( 1 − β 2 ) ∗ x 1 + β 2 ∗ ϵ 2 x_2 = \sqrt{(1-\beta_2)} *x_1+\beta_2*\epsilon_2 x2=(1β2) x1+β2ϵ2
x 1 x_1 x1带入,得到
x 2 = ( 1 − β 2 ) ∗ ( ( 1 − β 1 ) ∗ x 0 + β 1 ∗ ϵ 1 ) + β 2 ∗ ϵ 2 = ( 1 − β 2 ) ( 1 − β 1 ) ∗ x 0 + ( 1 − β 2 ) β 1 ∗ ϵ 1 + β 2 ∗ ϵ 2 x_2 = \sqrt{(1-\beta_2)}*(\sqrt{(1-\beta_1)} *x_0+\beta_1*\epsilon_1)+\beta_2*\epsilon_2\\ =\sqrt{(1-\beta_2)(1-\beta_1)}*x_0+\sqrt{(1-\beta_2)}\beta_1*\epsilon_1+\beta_2*\epsilon_2 x2=(1β2) ((1β1) x0+β1ϵ1)+β2ϵ2=(1β2)(1β1) x0+(1β2) β1ϵ1+β2ϵ2
由于 ϵ 1 , ϵ 2 \epsilon_1,\epsilon_2 ϵ1,ϵ2都是标准高斯分布,根据重参数化技巧, ( 1 − β 2 ) β 1 ∗ ϵ 1 + β 2 ∗ ϵ 2 \sqrt{(1-\beta_2)}\beta_1*\epsilon_1+\beta_2*\epsilon_2 (1β2) β1ϵ1+β2ϵ2可以合并为 1 − ( 1 − β 2 ) ( 1 − β 1 ) ∗ ϵ \sqrt{1-(1-\beta_2)(1-\beta_1)}*\epsilon 1(1β2)(1β1) ϵ
因此 x 2 = ( 1 − β 2 ) ( 1 − β 1 ) ∗ x 0 + 1 − ( 1 − β 2 ) ( 1 − β 1 ) ∗ ϵ x_2 = \sqrt{(1-\beta_2)(1-\beta_1)}*x_0+\sqrt{1-(1-\beta_2)(1-\beta_1)}*\epsilon x2=(1β2)(1β1) x0+1(1β2)(1β1) ϵ

 可以看到, x 2 x_2 x2可以只根据 x 0 x_0 x0和一个标准高斯分布 ϵ \epsilon ϵ来表示。在此基础上进行归纳总结,可以得到,

x t = ( 1 − β 1 ) . . . ( 1 − β t ) ∗ x 0 + ( 1 − ( 1 − β 1 ) . . . ( 1 − β t ) ∗ ϵ x_t = \sqrt{(1-\beta_1)...(1-\beta_t)}*x_0+\sqrt{(1-(1-\beta_1)...(1-\beta_t)}*\epsilon xt=(1β1)...(1βt) x0+(1(1β1)...(1βt) ϵ

α = 1 − β \alpha = 1-\beta α=1β, α t ‾ = ( 1 − β 1 ) ( 1 − β 2 ) . . . ( 1 − β t ) \overline{\alpha_t} = (1-\beta_1)(1-\beta_2)...(1-\beta_t) αt=(1β1)(1β2)...(1βt),则最终在前向过程中

x t = α t ‾ ∗ x 0 + 1 − α t ‾ ∗ ϵ x_t = \sqrt{\overline{\alpha_t}}*x_0+\sqrt{1-\overline{\alpha_t}}*\epsilon xt=αt x0+1αt ϵ, ϵ ∼ N ( 0 , I ) \epsilon\sim\mathcal{N}(0,I) ϵN(0,I)

 上述公式可以理解为:尽管在理论上从 x 0 x_0 x0加噪到 x t x_t xt的过程中需要经过 t t t次的加噪过程,但是实际上在从 x 0 x_0 x0 x t x_t xt可以根据上述公式一步得到。

五、反向过程

 DDPM中反向过程指的是给定一个高斯噪声,然后通过一步一步的去噪最后生成完整照片的过程。可以理解为给定 x t x_t xt生成 x t − 1 x_{t-1} xt1,进行不断自回归迭代生成最终 x 0 x_0 x0。因此在反向过程中我们只要知道 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt)便可以生成最终的图片 x 0 x_0 x0
 事实上,当 x 0 x_0 x0已知时, q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)反向过程也是一个确定性的过程。首先根据前向过程中推到的公式我们可以得到:

q ( x t ∣ x 0 ) ∼ N ( α t ‾ ∗ x 0 , ( 1 − α t ‾ ) I ) q(x_t|x_0) \sim\mathcal{N}(\sqrt{\overline{\alpha_t}}*x_0,(1-\overline{\alpha_t})I) q(xtx0)N(αt x0,(1αt)I)
q ( x t − 1 ∣ x 0 ) ∼ N ( α t − 1 ‾ ∗ x 0 , ( 1 − α t − 1 ‾ ) I ) q(x_{t-1}|x_0) \sim\mathcal{N}(\sqrt{\overline{\alpha_{t-1}}}*x_0,(1-\overline{\alpha_{t-1}})I) q(xt1x0)N(αt1 x0,(1αt1)I)
q ( x t ∣ x t − 1 ) ∼ N ( α t ∗ x t − 1 ] , ( 1 − α t ) I ) q(x_t|x_{t-1}) \sim\mathcal{N}(\alpha_t*x_{t-1}],(1-\alpha_t)I) q(xtxt1)N(αtxt1],(1αt)I)

 根据贝叶斯公式定理,

q ( x t − 1 ∣ x t ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ) q ( x t ) q(x_{t-1}|x_t) = \frac{q(x_t|x_{t-1})q(x_{t-1})}{q(x_t)} q(xt1xt)=q(xt)q(xtxt1)q(xt1)

 可以得到,

q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) 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},x_0)q(x_{t-1}|x_0)}{q(x_t|x_0)} q(xt1xt,x0)=q(xtx0)q(xtxt1,x0)q(xt1x0)

等号右边的三个分布我们都已经知道,根据重参数化技巧,经过一系列复杂的计算,我们可以得到

q ( x t − 1 ∣ x t , x 0 ) ∼ N ( α t ( 1 − α t − 1 ‾ ) x t + α t − 1 ‾ ( 1 − α t ) x 0 1 − α t ‾ , ( ( 1 − α t ) ( 1 − α t − 1 ‾ ) 1 − α t ‾ ) I ) q(x_{t-1}|x_t,x_0)\sim\mathcal{N}(\frac{\sqrt{\alpha_t}(1-\overline{\alpha_{t-1}})x_t+\sqrt{\overline{\alpha_{t-1}}}(1-\alpha_t)x_0}{1-\overline{\alpha_t}},(\frac{(1-\alpha_t)(1-\overline{\alpha_{t-1}})}{1-\overline{\alpha_t}})I) q(xt1xt,x0)N(1αtαt (1αt1)xt+αt1 (1αt)x0,(1αt(1αt)(1αt1))I)

这里 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)是真实分布,我们可以在 x 0 x_0 x0已知的情况下求出来的真实存在的分布,与模型无关。可以把其理解为训练过程中的标签,我们要做的是让模型生成这样一个分布。

六、优化目标

 在第一节我们说过,我们的优化目标是要找一组网络参数去Maximize
E q ( z ∣ x ) [ log ⁡ ( P ( x , z ) q ( z ∣ x ) ) ] E_{q(z|x)}[\log(\frac{P(x,z)}{q(z|x)})] Eq(zx)[log(q(zx)P(x,z))]。其中, q ( z ∣ x ) q(z|x) q(zx)可以是任意的分布,在DDPM中, q ( z ∣ x ) q(z|x) q(zx) q ( x 1 : x T ∣ x 0 ) q(x_1:x_T|x_0) q(x1:xTx0) P ( x , z ) P(x,z) P(x,z) P ( x 0 : x T ) P(x_0:x_T) P(x0:xT),因此,优化目标变为Maximize E q ( x 1 : x T ∣ x 0 ) [ log ⁡ ( P ( x 0 : x T ) q ( x 1 : x T ∣ x 0 ) ) ] E_{q(x_1:x_T|x_0)}[\log(\frac{P(x_0:x_T)}{q(x_1:x_T|x_0)})] Eq(x1:xTx0)[log(q(x1:xTx0)P(x0:xT))],通过复杂的计算可以得到,

E q ( x 1 : x T ∣ x 0 ) [ log ⁡ ( P ( x 0 : x T ) q ( x 1 : x T ∣ x 0 ) ) ] = E q ( x 1 ∣ x 0 ) [ log ⁡ P ( x 0 ∣ x 1 ) ] − K L ( q ( x T ∣ x 0 ) ∣ ∣ P ( x T ) ) − ∑ 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 ) ] E_{q(x_1:x_T|x_0)}[\log(\frac{P(x_0:x_T)}{q(x_1:x_T|x_0)})]\\=E_{q(x_1|x_0)}[\log P(x_0|x_1)]-KL(q(x_T|x_0)||P(x_T))-\sum_{t=2}^TE_{q(x_t|x_0)}[KL(q(x_{t-1}|x_t,x_0)||P(x_{t-1}|x_t)] Eq(x1:xTx0)[log(q(x1:xTx0)P(x0:xT))]=Eq(x1x0)[logP(x0x1)]KL(q(xTx0)∣∣P(xT))t=2TEq(xtx0)[KL(q(xt1xt,x0)∣∣P(xt1xt)]

 其中,我们只需要关注的就是第三项。在第三项中, q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)的分布我们已经在上一节中求出来了。因此DDPM的优化目标转化为最小化真实分布 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)和模型预测的分布 P θ ( x t − 1 ∣ x t ) P_\theta(x_{t-1}|x_t) Pθ(xt1xt)之间的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 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)分布的均值中含有 x 0 x_0 x0,根据

x t = α t ‾ x 0 + 1 − α t ‾ ϵ x_t = \sqrt{\overline{\alpha_t}}x_0+\sqrt{1-\overline{\alpha_t}}\epsilon xt=αt x0+1αt ϵ

可以得到

x 0 = x t − 1 − α t ‾ ϵ α t ‾ x_0 = \frac{x_t-\sqrt{1-\overline{\alpha_t}}\epsilon}{\sqrt{\overline{\alpha_t}}} x0=αt xt1αt ϵ

将其带入 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 ( 1 α t ( x t − 1 − α t 1 − α t ‾ ϵ ) , ( ( 1 − α t ) ( 1 − α t − 1 ‾ ) 1 − α t ‾ ) I ) q(x_{t-1}|x_t,x_0)\sim\mathcal{N}(\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\overline{\alpha_t}}}\epsilon),(\frac{(1-\alpha_t)(1-\overline{\alpha_{t-1}})}{1-\overline{\alpha_t}})I) q(xt1xt,x0)N(αt 1(xt1αt 1αtϵ),(1αt(1αt)(1αt1))I)

 我们要做的就是模型预测的分布 P θ ( x t − 1 ∣ x t ) P_\theta(x_{t-1}|x_t) Pθ(xt1xt) 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 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)的分布的方差是一个常数,因此,只要让模型预测的均值和 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)分布的均值 1 α t ( x t − 1 − α t 1 − α t ‾ ϵ ) \frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\overline{\alpha_t}}}\epsilon) αt 1(xt1αt 1αtϵ)一样即可。
 可以看到, q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)分布的均值中只有 ϵ \epsilon ϵ不确定, ϵ \epsilon ϵ代表前向过程中从 x 0 x_0 x0 x t x_t xt这一步中加入的噪声,让模型根据输入的 x t x_t xt t t t预测 ϵ \epsilon ϵ即可。
 最后,经过这么多的公式推导,DDPM在训练过程中的Loss可以总结为:

∣ ϵ − ϵ θ ( x t , t ) ) ∣ 2 |\epsilon-\epsilon_{\theta(x_t,t)})|^2 ϵϵθ(xt,t))2

 可以理解为让模型预测前向过程中加入的噪声,然后与真实噪声算MSE,得到Loss。标签 ϵ \epsilon ϵ是前向过程中加入的噪声,这是我们已知的,是一个确定性的东西。

七、采样

 在模型训练完成后,我们使用模型进行预测。首先要明确,模型的输入是 x t x_t xt t t t,输出是从 x 0 x_0 x0 x t x_t xt过程中加入的噪声 ϵ θ ( x t , t ) 。 \epsilon_{\theta}(x_t,t)。 ϵθ(xt,t)
 在得到模型输出后,将其带入到 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)分布的均值中,得到 1 α t ( x t − 1 − α t 1 − α t ‾ ϵ θ ( x t , t ) ) \frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\overline{\alpha_t}}}\epsilon_{\theta}(x_t,t)) αt 1(xt1αt 1αtϵθ(xt,t))需要值得注意的是, 1 α t ( x t − 1 − α t 1 − α t ‾ ϵ θ ( x t , t ) ) \frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\overline{\alpha_t}}}\epsilon_{\theta}(x_t,t)) αt 1(xt1αt 1αtϵθ(xt,t))这是一个均值,并不是生成的照片,因为我们当时在推导Loss的目标是最小化两个分布的均值之间的差异。在得到均值后,我们还需要方差,而前面也提到了,真实分布 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)的方差是一个常数 ( 1 − α t ) ( 1 − α t − 1 ‾ ) 1 − α t ‾ \frac{(1-\alpha_t)(1-\overline{\alpha_{t-1}})}{1-\overline{\alpha_t}} 1αt(1αt)(1αt1),所以在反向过程中 P θ ( x t − 1 ∣ x t ) P_\theta(x_{t-1}|x_t) Pθ(xt1xt)的分布是 P θ ( x t − 1 ∣ x t ) ∼ N ( 1 α t ( x t − 1 − α t 1 − α t ‾ ϵ θ ( x t , t ) ) , ( ( 1 − α t ) ( 1 − α t − 1 ‾ ) 1 − α t ‾ ) I ) P_\theta(x_{t-1}|x_t)\sim\mathcal{N}(\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\overline{\alpha_t}}}\epsilon_{\theta}(x_t,t)),(\frac{(1-\alpha_t)(1-\overline{\alpha_{t-1}})}{1-\overline{\alpha_t}})I) Pθ(xt1xt)N(αt 1(xt1αt 1αtϵθ(xt,t)),(1αt(1αt)(1αt1))I)
因此,最终根据 x t x_t xt得到采样图片 x t − 1 x_{t-1} xt1的公式为:
x t − 1 = ( 1 α t ( x t − 1 − α t 1 − α t ‾ ϵ θ ( x t , t ) ) + ( 1 − α t ) ( 1 − α t − 1 ‾ ) 1 − α t ‾ z x_{t-1} = (\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\overline{\alpha_t}}}\epsilon_{\theta}(x_t,t))+\frac{(1-\alpha_t)(1-\overline{\alpha_{t-1}})}{1-\overline{\alpha_t}}z xt1=(αt 1(xt1αt 1αtϵθ(xt,t))+1αt(1αt)(1αt1)z, z ∼ N ( 0 , I ) z\sim\mathcal{N}(0,I) zN(0,I)
 然后重复上述采样过程,根据 x t − 1 x_{t-1} xt1采样得到 x t − 2 x_{t-2} xt2,根据不断的迭代最终采样得到图片 x 0 x_0 x0

八、模型结构

 前面讲完了DDPM的整个训练流程和采样流程,接下来我们介绍DDPM的模型结构。
 DDPM采用的是U-net结构的网络模型,输入为image x t x_t xt和当前去噪步数t。其中对于步数t进行embeddind的方法为Transformer中的位置编码。
在这里插入图片描述
在这里插入图片描述

总结

 DDPM的训练过程和采样过程伪代码如下图所示:
在这里插入图片描述

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值