狗都能看懂的DDPM的论文详解

DDPM/扩散模型是什么

DDPM(Denoising Diffusion Probabilistic Models)是扩散模型的一种,在视觉领域是属于生成式的模型。

扩散模型(Diffusion Model)的概念最早可以追溯到统计物理学中的玻尔兹曼机(Boltzmann Machines)。这是一种基于能量函数的概率模型,其目的是通过初始状态的蒙特卡洛采样,通过不断更新样本状态,使系统状态分布逐渐接近目标分布。而后科学家又在非均衡热力学的研究中发现,从一个初态经过一系列中间状态最终达到稳定状态,这与扩散模型通过一系列迭代过程从初始状态演化到目标分布的思想相契合。

扩散模型中最重要的思想根基是马尔可夫链,它的一个关键性质是平稳性。即如果一个概率随时间变化,那么再马尔可夫链的作用下,它会趋向于某种平稳分布,时间越长,分布越平稳。如图所示,当你向一滴水中滴入一滴颜料时,无论你滴在什么位置,只要时间足够长,最终颜料都会均匀的分布在水溶液中。这也就是扩散模型的前向过程。
diffusion main

既然颜料均匀分布在溶液中这个过程是必然会发生的,也就是说,通过某种方式,我们可以将其恢复成原来的状态。假设我们将颜料想象成一个噪声,它可以是一个任意的正态分布,我们在不断对一张图片逐步添加噪声的过程就可以看作是一个扩散过程。当添加噪声的次数足够多的时候,它已经变成了一个完全为噪声的图像,也就是我们说的稳定的状态,那么反向去噪的这个过程就是可逆的。那么给定一个神经网络,它只要预测出噪声,就能逐步将图像恢复。这个过程也被称为Stable Diffusion。
stable diffusion
Stable Diffusion 分为 Diffusion 和 Reverse 两个阶段。其中 Diffusion 阶段通过不断地对真实图片添加噪声,最终得到一张噪声图片。而 Reverse 阶段,模型需要学习预测出一张噪声图片中的噪声部分,然后减掉该噪声部分,即:去噪。随机采样一张完全噪声图片,通过不断地去噪,最终得到一张符合现实世界图片分布的真实图片。以下分别介绍两个阶段的具体原理与公式推导。

Diffusion 阶段

这个阶段就是不断地给真实图片加噪声,经过 T T T步加噪之后,噪声强度不断变大,得到一张完全为噪声地图像。整个扩散过程可以近似看成一次加噪即变为噪声图,那么其实我们只需要搞清楚其中一步加噪就可以了,也即搞清楚 X t = f ( X t − 1 ) X_t = f(X_{t-1}) Xt=f(Xt1)中, f ( x ) f(x) f(x)的过程。
diffusion
f ( x ) f(x) f(x)在论文的公式中有明确的定义:
X t = 1 − β t ∗ X t − 1 + β t ∗ Z t Z t ∼ N ( 0 , I ) X_t = \sqrt{1-\beta_t}*X_{t-1} + \sqrt{\beta_t}*Z_t \qquad\qquad\qquad Z_t \sim N(0,I) Xt=1βt Xt1+βt ZtZtN(0,I)
t t t是时间序列中一个值,取值范围为 [ 0 , T ] [0, T] [0,T] Z t Z_t Zt是对应时间产生的随机噪声, β t \beta_t βt是超参数,也是序列中的一个值,在论文的实验部分,其经验值范围是 [ 1 0 − 4 , 0.02 ] [10^{-4},0.02] [104,0.02]线性变化,而且一般来说, t t t越大, β t \beta_t βt的取值也就越大(一开始,加一点点噪声就能比较明显的看出和原图的区别,越到后面,图像退化的越厉害,轻微的扰动已经看不出明显的变化,所以 β t \beta_t βt的值需要更大)

训练时,这样逐步加噪声效率太低了。想要提高训练效率。那么既然最终都会扩散成一个稳定的状态,那么是否我们可以实现从 X 0 X_0 X0直接扩散成 X T X_T XT呢?答案是可以的。

首先,这里先做一个简单的变化, α t = 1 − β t \alpha_t = 1 - \beta_t αt=1βt,那么 X t X_t Xt就变为:
X t = α t ∗ X t − 1 + 1 − α t ∗ Z t X_t = \sqrt{\alpha_t}*X_{t-1} + \sqrt{1-\alpha_t}*Z_t Xt=αt Xt1+1αt Zt
既然要从 X 0 X_0 X0求到 X T X_T XT,那我们一步一步求,其中:
X t − 1 = α t − 1 ∗ X t − 2 + 1 − α t − 1 ∗ Z t − 1 X_{t-1} = \sqrt{\alpha_{t-1}}*X_{t-2} + \sqrt{1-\alpha_{t-1}}*Z_{t-1} Xt1=αt1 Xt2+1αt1 Zt1
X t − 1 X_{t-1} Xt1代入到 X t X_t Xt的公式中,得:
X t − 1 = α t ( α t − 1 ∗ X t − 2 + 1 − α t − 1 ∗ Z t − 1 ) + 1 − α t ∗ Z t = α t α t − 1 ∗ X t − 2 + α t − α t α t − 1 ∗ Z t − 1 + 1 − α t ∗ Z t \begin{aligned} X_{t-1} &= \sqrt{\alpha_t}(\sqrt{\alpha_{t-1}}*X_{t-2} + \sqrt{1-\alpha_{t-1}}*Z_{t-1}) + \sqrt{1-\alpha_t}*Z_t \\ &= \sqrt{\alpha_t\alpha_{t-1}}*X_{t-2} + \sqrt{\alpha_t-\alpha_t\alpha_{t-1}}*Z_{t-1} + \sqrt{1-\alpha_t}*Z_t \end{aligned} Xt1=αt (αt1 Xt2+1αt1 Zt1)+1αt Zt=αtαt1 Xt2+αtαtαt1 Zt1+1αt Zt
Z t 、 Z t − 1 Z_t、Z_{t-1} ZtZt1是从均值为0,方差为单位矩阵的正态分布的两次独立采样,所以:
α t − α t α t − 1 ∗ Z t − 1 ∼ N ( 0 , ( α t − α t α t − 1 ) ∗ I ) 1 − α t ∗ Z t − 1 ∼ N ( 0 , ( 1 − α t ) ∗ I ) \begin{aligned} & \sqrt{\alpha_t-\alpha_t\alpha_{t-1}}*Z_{t-1} &&\sim N(0,(\alpha_t-\alpha_t\alpha_{t-1})*I) \\ & \sqrt{1-\alpha_t}*Z_{t-1} &&\sim N(0,(1-\alpha_t)*I) \end{aligned} αtαtαt1 Zt11αt Zt1N(0,(αtαtαt1)I)N(0,(1αt)I)
二者相加,即为方差相加,得:
N ( 0 , ( 1 − α t α t − 1 ) ∗ I ) N(0,(1-\alpha_t\alpha_{t-1})*I) \\ N(0,(1αtαt1)I)
所以 X t − 1 X_{t-1} Xt1的公式可以写成:
X t − 1 = α t α t − 1 ∗ X t − 2 + 1 − α t α t − 1 ∗ Z Z ∼ N ( 0 , I ) X_{t-1} = \sqrt{\alpha_t\alpha_{t-1}}*X_{t-2} + \sqrt{1-\alpha_t\alpha_{t-1}}*Z \qquad\qquad\qquad Z \sim N(0,I) Xt1=αtαt1 Xt2+1αtαt1 ZZN(0,I)
那其实足以看出,从 X 0 X_0 X0推导至任意 X t X_t Xt,有:
X t = α t α t − 1 … α 1 ∗ X 0 + 1 − α t α t − 1 … α 1 ∗ Z Z ∼ N ( 0 , I ) X_t = \sqrt{\alpha_t\alpha_{t-1}\dots\alpha_1}*X_0 + \sqrt{1-\alpha_t\alpha_{t-1}\dots\alpha_1}*Z \qquad\quad Z \sim N(0,I) Xt=αtαt1α1 X0+1αtαt1α1 ZZN(0,I)
简写一下:
X t = α t ‾ ∗ X 0 + 1 − α t ‾ ∗ Z ( 1 ) X_t =\sqrt{\overline{\alpha_t}}*X_0 + \sqrt{1 - \overline{\alpha_t}}*Z \qquad\qquad\qquad (1) Xt=αt X0+1αt Z(1)
其中 α t ‾ \overline{\alpha_t} αt代表累乘。

t t t很大的时候, X t ≈ Z X_t \approx Z XtZ(全为噪声), α t ‾ {\overline{\alpha_t}} αt为0, β t \beta_t βt此时应比较大,也符合我们一开始的所给出来的结论。

diffusion阶段的总结:

核心公式(从 X 0 X_0 X0一次扩散到 X t X_t Xt): X t = α t ‾ ∗ X 0 + 1 − α t ‾ ∗ Z Z ∼ N ( α t ∗ X 0 , ( 1 − α t ‾ ) ∗ I ) X_t =\sqrt{\overline{\alpha_t}}*X_0 + \sqrt{1 - \overline{\alpha_t}}*Z \qquad\qquad Z \sim N(\sqrt{\alpha_t}*X_0, (1 - \overline{\alpha_t})*I) Xt=αt X0+1αt ZZN(αt X0,(1αt)I)

其中某一步(从 X t − 1 X_{t-1} Xt1扩散到 X t X_t Xt): X t = α t ∗ X t − 1 + 1 − α t ∗ Z t Z ∼ N ( α t ∗ X t − 1 , ( 1 − α t ) ∗ I ) X_t = \sqrt{\alpha_t}*X_{t-1} + \sqrt{1-\alpha_t}*Z_t \qquad\quad Z \sim N(\sqrt{\alpha_t}*X_{t-1}, (1-\alpha_t)*I) Xt=αt Xt1+1αt ZtZN(αt Xt1,(1αt)I)

Reverse阶段

我们先来看一下整个reverse阶段是在做什么,首先取出batch size大小的t,然后针对每个image做diffusion,将我们得到的noise图像放到UNet网络预测噪声 Z ~ \widetilde{Z} Z (指代图中 Z ′ Z' Z,然后用noise信息预测多余的噪声 Z ~ \widetilde{Z} Z 即可。所以整个ddpm,需要训练的就是一个预测噪声的网络,使得预测出来的噪声与实际加的噪声越接近越好。对比GAN网络,不难发现GAN是需要训练2个模型,训练过程极其不稳定,有时候生成器训好了,判别器却没训好,以至于loss都不能真实的反映网络的性能。而ddpm只需要训练一个网络,相比之下稳定很多。
reverse
在加噪声的过程中,我们为了减少计算消耗,算出了一次扩散的公式,理论上我们也可以得到一次减噪的公式:
X 0 = ( X t − 1 − α t ‾ Z ~ ) α t ‾ ( 2 ) X_0 = \frac{(X_t-\sqrt{1 - \overline{\alpha_t}}{\widetilde{Z}})}{\sqrt{\overline{\alpha_t}}} \qquad\qquad\qquad (2) X0=αt (Xt1αt Z )(2)
论文中的结论可以知道,这么做的效果比较差,图片是很模糊的,不符合逆扩散的过程,最好还是一步一步推。先根据 X t X_t Xt预测出 Z ~ \widetilde{Z} Z ,求出 X t − 1 X_{t-1} Xt1,然后逐步逐步得到 X 0 X_0 X0,这个过程如下图所示:
backward
现在我们知道 Z ~ = U N e t ( X t , t ) \widetilde{Z} = UNet(X_t, t) Z =UNet(Xt,t)计算得出,整个reverse过程中,就只剩下 x t − 1 = f ( X t , Z ~ ) x_{t-1} = f(X_t, \widetilde{Z}) xt1=f(Xt,Z ) f ( x ) f(x) f(x)这个过程还没搞清楚了。

我们要推理 X t → X t − 1 X_t\rightarrow X_{t-1} XtXt1 的过程,相当于已知 X t − 1 X_{t-1} Xt1的概率,去求 X t X_t Xt的条件概率,即计算 q ( X t − 1 ∣ X t ) q(X_{t-1}|X_t) q(Xt1Xt),根据贝叶斯公式,有:
q ( X t − 1 ∣ X t ) = q ( X t , X t − 1 ) q ( 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)} = \frac{q(X_t|X_{t-1})q(X_{t-1})}{q(X_t)} q(Xt1Xt)=q(Xt)q(Xt,Xt1)=q(Xt)q(XtXt1)q(Xt1)
那么同样用条件概率的方式去等价(具体公式和其服从的正态分布见上文):

  • X t − 1 → X t X_{t-1}\rightarrow X_t Xt1Xt可以用 q ( X t ∣ X t − 1 ) q(X_t|X_{t-1}) q(XtXt1)表示
  • X 0 → X t X_0 \rightarrow X_t X0Xt可以用 q ( X t ) 、 q ( X t − 1 ) q(X_t)、q(X_{t-1}) q(Xt)q(Xt1)表示

那么如果将所有的概率都用正态分布表示:

  • q ( X t ∣ X t − 1 ) ∼ N ( α t ∗ X t − 1 , ( 1 − α t ) ∗ I ) q(X_t|X_{t-1}) \quad \sim N(\sqrt{\alpha_t}*X_{t-1}, (1-\alpha_t)*I) q(XtXt1)N(αt Xt1,(1αt)I)
  • q ( X t ) ∼ N ( α t ∗ X 0 , ( 1 − α t ‾ ) ∗ I ) q(X_t) \qquad\quad \sim N(\sqrt{\alpha_t}*X_0, (1 - \overline{\alpha_t})*I) q(Xt)N(αt X0,(1αt)I)
  • q ( X t − 1 ) ∼ N ( α t − 1 ∗ X 0 , ( 1 − α t − 1 ‾ ) ∗ I ) q(X_{t-1}) \quad\quad \sim N(\sqrt{\alpha_{t-1}}*X_0, (1 - \overline{\alpha_{t-1}})*I) q(Xt1)N(αt1 X0,(1αt1)I)

而在已知高斯分布的均值和方差时,有正比关系: N ( μ , σ 2 ) ∝ e x p ( 1 2 ∗ ( x − μ ) 2 σ 2 ) N(\mu,\sigma^2)\propto exp(\frac{1}{2}*\frac{(x-\mu)^2}{\sigma^2}) N(μ,σ2)exp(21σ2(xμ)2), 将上面几个高斯分布的均值和方差分别代入(分子上相加,分母上相减),得:
q ( X t ∣ X t − 1 ) q ( X t − 1 ) q ( X t ) ∝ e x p { − 1 2 ( ∗ ( x t − α t ∗ X t − 1 ) 2 1 − α t + ( x t − 1 − α t − 1 ‾ ∗ X 0 ) 2 1 − α t − 1 − ( x t − α t ‾ ∗ X 0 ) 2 1 − α t ‾ ) } \frac{q(X_t|X_{t-1})q(X_{t-1})}{q(X_t)} \propto exp\{-\frac{1}{2}(*\frac{(x_t-\sqrt{\alpha_t}*X_{t-1})^2}{1-\alpha_t} + \frac{(x_{t-1}-\sqrt{\overline{\alpha_{t-1}}}*X_0)^2}{1-\alpha_{t-1}} - \frac{(x_t-\sqrt{\overline{\alpha_t}}*X_0)^2}{1-\overline{\alpha_t}})\} q(Xt)q(XtXt1)q(Xt1)exp{21(1αt(xtαt Xt1)2+1αt1(xt1αt1 X0)21αt(xtαt X0)2)}
但别忘了,我们最初的目标是求分布 q ( X t − 1 ∣ X t ) q(X_{t-1}|X_t) q(Xt1Xt),也即求 X t − 1 X_{t-1} Xt1,可以观察到,目前我们推导的结果是一个 X t − 1 X_{t-1} Xt1的二项式,将其配方,找到我们关心的 q ( X t − 1 ∣ X t ) q(X_{t-1}|X_t) q(Xt1Xt)的均值和方差。我们对上式进一步简化:
q ( X t − 1 ∣ X t ) ∝ e x p { − 1 2 ( α t β t + 1 1 − α t − 1 ‾ ∗ X t − 1 2 ) − 2 ( α t ∗ X t β t + α t − 1 ‾ ∗ X 0 1 − α t − 1 ‾ ) ∗ X t − 1 + ? } q(X_{t-1}|X_t)\propto exp\{ -\frac{1}{2} (\frac{\alpha_t}{\beta_t}+\frac{1}{1-\overline{\alpha_{t-1}}}*X_{t-1}^2)-2(\frac{\sqrt{\alpha_t}*X_t}{\beta_t} + \frac{\sqrt{\overline{\alpha_{t-1}}}*X_0}{1-\overline{\alpha_{t-1}}})*X_{t-1} + ?\} q(Xt1Xt)exp{21(βtαt+1αt11Xt12)2(βtαt Xt+1αt1αt1 X0)Xt1+?}
最后边的常量是什么不重要,我们只关心均值和方差,所以利用变量 A 、 B A、B AB替代,简化求解过程:
e x p ∝ − 1 2 ( A ∗ X t − 1 2 ) − 2 B ∗ X t − 1 + C e x p ∝ { − 1 2 A ( X t − 1 + B 2 A ) 2 + C } \begin{aligned} & exp \propto -\frac{1}{2}(A*X_{t-1}^2)-2B*X_{t-1} + C \\ & exp \propto \{-\frac{1}{2}A(X_{t-1} + \frac{B}{2A})^2 + C\} \end{aligned} exp21(AXt12)2BXt1+Cexp{21A(Xt1+2AB)2+C}
由此可得均值和方差表示为:
μ = − B 2 A σ 2 = 1 A \mu = -\frac{B}{2A} \qquad \sigma^2 = \frac{1}{A} μ=2ABσ2=A1
A A A B B B是替代的变量,为:
A = α t β t + 1 1 − α t − 1 ‾ B = α t ∗ X t β t + α t − 1 ‾ ∗ X 0 1 − α t − 1 ‾ A = \frac{\alpha_t}{\beta_t}+\frac{1}{1-\overline{\alpha_{t-1}}} \qquad B = \frac{\sqrt{\alpha_t}*X_t}{\beta_t} + \frac{\sqrt{\overline{\alpha_{t-1}}}*X_0}{1-\overline{\alpha_{t-1}}} A=βtαt+1αt11B=βtαt Xt+1αt1αt1 X0
代入计算,方差为:
σ 2 = 1 A = 1 / ( α t β t + 1 1 − α t − 1 ‾ ) = 1 / ( α t − α t ∗ α t − 1 ‾ + β t β t ∗ ( 1 − α t − 1 ‾ ) ) = 1 − α t − 1 ‾ 1 − α t ‾ ∗ β t \begin{aligned} \sigma^2 &=\frac{1}{A} \\ &=1/(\frac{\alpha_t}{\beta_t}+\frac{1}{1-\overline{\alpha_{t-1}}}) \\ &=1/(\frac{\alpha_t-\alpha_t*\overline{\alpha_{t-1}}+ \beta_t}{\beta_t*(1-\overline{\alpha_{t-1}})}) \\ &=\frac{1-\overline{\alpha_{t-1}}}{1-\overline{\alpha_t}}*\beta_t \end{aligned} σ2=A1=1/(βtαt+1αt11)=1/(βt(1αt1)αtαtαt1+βt)=1αt1αt1βt
均值为:
μ = − B 2 A = ( α t ∗ X t β t + α t − 1 ‾ ∗ X 0 1 − α t − 1 ‾ ) ∗ α t − 1 ‾ 1 − α t ‾ ∗ β t = α t ∗ 1 − α t − 1 ‾ 1 − α t ‾ ∗ X t + α t − 1 ‾ ∗ β t 1 − α t ‾ ∗ X 0 \begin{aligned} \mu &= - \frac{B}{2A} \\ &= (\frac{\sqrt{\alpha_t}*X_t}{\beta_t} +\frac{\sqrt{\overline{\alpha_{t-1}}}*X_0}{1-\overline{\alpha_{t-1}}})* \frac{\sqrt{\overline{\alpha_{t-1}}}}{1-\overline{\alpha_t}}*\beta_t \\ &= \sqrt{\alpha_t}*\frac{1-\overline{\alpha_{t-1}}}{1-\overline{\alpha_t}}*X_t + \frac{\sqrt{\overline{\alpha_{t-1}}}*\beta_t}{1-\overline{\alpha_t}}*X_0 \end{aligned} μ=2AB=(βtαt Xt+1αt1αt1 X0)1αtαt1 βt=αt 1αt1αt1Xt+1αtαt1 βtX0
所以为什么说逆扩散的时候,一步一步推是更准的,因为这个地方的 X 0 X_0 X0是估计出来的,里面含有 Z ~ = U N e t ( X t , t ) \widetilde{Z} = UNet(X_t, t) Z =UNet(Xt,t),由于这个值每一次都是当前步估计的结果,而它本身由 X t X_t Xt Z ~ \widetilde{Z} Z 计算得来,这两个值,t越小,占比也就越小,噪声越小,估计也就越准。

从结果可以看出,均值和方差都是由已知的 α 、 β \alpha、\beta αβ计算出来的,这些都是我们预设好的超参数,而 X t 、 X 0 X_t、X_0 XtX0又是之前公式(1)(2)中以求的了,继续将 X 0 X_0 X0待入,可得:
μ = α t ∗ 1 − α t − 1 ‾ 1 − α t ‾ ∗ X t + α t − 1 ‾ ∗ β t 1 − α t ‾ ∗ ( X t − 1 − α t ‾ ∗ Z ~ ) α t ‾ = X t α t ∗ ( α t − α t ‾ + β t 1 − α t ‾ ) + Z ~ α t ∗ β t 1 − α t ‾ = 1 α t ∗ ( X t − β t 1 − α t ‾ ∗ Z ~ ) \begin{aligned} \mu &= \sqrt{\alpha_t}*\frac{1-\overline{\alpha_{t-1}}}{1-\overline{\alpha_t}}*X_t + \frac{\sqrt{\overline{\alpha_{t-1}}}*\beta_t}{1-\overline{\alpha_t}}*\frac{(X_t - \sqrt{1-\overline{\alpha_t}}*\widetilde{Z})}{\sqrt{\overline{\alpha_t}}} \\ &= \frac{X_t}{\sqrt{\alpha_t}}*(\frac{\alpha_t-\sqrt{\overline{\alpha_t}}+\beta_t}{1-\overline{\alpha_t}})+\frac{\widetilde{Z}}{\sqrt{\alpha_t}}*\frac{\beta_t}{\sqrt{1-\overline{\alpha_t}}} \\ &=\frac{1}{\sqrt{\alpha_t}}*(X_t - \frac{\beta_t}{\sqrt{1-\overline{\alpha_t}}}*\widetilde{Z}) \end{aligned} μ=αt 1αt1αt1Xt+1αtαt1 βtαt (Xt1αt Z )=αt Xt(1αtαtαt +βt)+αt Z 1αt βt=αt 1(Xt1αt βtZ )
由于我们刚刚说过:
q ( X t − 1 ∣ X t ) = X t − 1 ∼ N ( μ , σ 2 ∗ I ) q(X_{t-1}|X_t) = X_{t-1} \sim N(\mu, \sigma^2*I) q(Xt1Xt)=Xt1N(μ,σ2I)
所以最终得到的结论就是:
q ( X t − 1 ∣ X t ) ∼ N ( 1 α t ( X t − β t 1 − α t ‾ ∗ Z ~ , 1 − α t − 1 ‾ 1 − α t ‾ ∗ β t ) q(X_{t-1}|X_t) \sim N(\frac{1}{\sqrt{\alpha_t}}(X_t - \frac{\beta_t}{\sqrt{1-\overline{\alpha_t}}}*\widetilde{Z}, \quad \frac{1-\overline{\alpha_{t-1}}}{1-\overline{\alpha_t}}*\beta_t) q(Xt1Xt)N(αt 1(Xt1αt βtZ ,1αt1αt1βt)
利用重参数化技巧(高斯分布里面写的是方差,乘的是标准差,要加上一个根号),得:
X t − 1 = 1 α t ( X t − β t 1 − α t ‾ ∗ Z ~ ) + 1 − α t − 1 ‾ 1 − α t ‾ ∗ β t ) ∗ Z X_{t-1} = \frac{1}{\sqrt{\alpha_t}}(X_t - \frac{\beta_t}{\sqrt{1-\overline{\alpha_t}}}*\widetilde{Z}) + \sqrt{\frac{1-\overline{\alpha_{t-1}}}{1-\overline{\alpha_t}}*\beta_t}) * Z Xt1=αt 1(Xt1αt βtZ )+1αt1αt1βt )Z
其中
Z ~ = U N e t ( X t , t ) Z ∼ N ( 0 , I ) \widetilde{Z} = UNet(X_t, t)\qquad Z\sim N(0,I) Z =UNet(Xt,t)ZN(0,I)
这里的 Z Z Z采样也是希望在重建的过程中,能添加一些不确定性,不至于每一次重建的结果都是由UNet决定。从公式里面也可以看出, X t − 1 X_{t-1} Xt1也是从 X t X_t Xt减去 Z ~ \widetilde{Z} Z ,将预测噪声移除。

这里补充说明一下,重参数的过程,假设从某个正态分布 N ( μ , σ 2 ∗ I ) N(\mu, \sigma^2*I) N(μ,σ2I)采样一个X的话,它可以等价于,从一个标准正态分布 N ( 0 , I ) N(0,I) N(0,I)去采样一个 Z Z Z,然后利用 Z Z Z去生成 X X X
X = μ + σ ∗ Z ∼ N ( μ , σ 2 ∗ I ) X = \mu + \sigma * Z \quad \sim \quad N(\mu,\sigma^2*I) X=μ+σZN(μ,σ2I)

总结

Algorithm

最后我们对照一下DDPM中的给出的算法流程。

训练过程中,我们对每个 x x x都会采样出一个 t t t,然后根据 t t t,生成对应的噪音 ϵ \epsilon ϵ,我们的UNet网络需要预测的就是这个噪声,它的参数被记作 θ \theta θ,这里额外说明一下,也并不是一定要用UNet,只是这个网络结构资源消耗和适用性更好。当训练完成之后,我们就有了一个条件去噪网络。

采样过程中,我们是没有任何真实图像的,所以我们需要从一个标准正态分布中采样一个 X T X_T XT,这是我们采样的起点,接下来,我们会对它做 T T T步的reverse,一直推到 X 0 X_0 X0,这里算法还有个小细节,只有 t > 1 t>1 t>1的时候, z z z才需要采样,否则它就是0,当 t = 0 t=0 t=0时,我们想求的就是真实的 X 0 X_0 X0,这时候就不需要加扰动了,它必须是个确定的结果。相当于均值给定的是一个确定的生成方向,方差和噪声给定的是一个不确定的方向。另外呢,从训练经验来看,这个扰动值也不需要和推理结果完全一样,论文只是提供了这个扰动强度的上界 σ \sigma σ,比他小甚至为 0,也是可以的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/522202.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WPS解决插入公式在正文带来行间距变大问题

问题描述 写论文解释公式时,插入对应的变量,导致行间距变大,如图 显然上文与下文行间距不等。但无法通过修改数值修改下文行间距。 解决办法

给毕业生推荐的三款二手车

我是一名纯正的90后,2011年毕业,汽车维修专业毕业,从小对汽车非常感兴趣,由于某些不可抗拒的原因,我在当年义无反顾的选择了去学习汽车维修,想着自己能做一名牛B 的汽车修理工,不为别的&#xf…

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--php数组与基本循环

php数组与基本循环 <?php$myName"xixi";$namesarray(xixi1,xixi2,xixi3); ?> <p> Hi ,my name is <?php echo $myName; ?> </p> <p> Hi,my name is <?php echo $names[0] ?> </p> <p> Hi,my name is <?…

SMW200A罗德与施瓦茨SMW200A信号发生器

181/2461/8938产品概述&#xff1a; SMW200A是开发新型宽带通信系统&#xff0c;验证3G和4G基站&#xff0c;以及需数字调制信号的理想信号发生器。 SMW200A 矢量信号发生器 具有内部基带、高达2 GHz的I/Q调制带宽可以满足第4代和第5代标准(例如&#xff0c;5G、LTE-Advanced…

小程序商城免费搭建之java商城 电子商务Spring Cloud+Spring Boot+二次开发+mybatis+MQ+VR全

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

最短路计数

题目描述 给出一个 N 个顶点 M 条边的无向无权图&#xff0c;顶点编号为 1∼N。问从顶点 1 开始&#xff0c;到其他每个点的最短路有几条。 输入描述 第一行包含 2 个正整数 N,M&#xff0c;为图的顶点数与边数。 接下来 M 行&#xff0c;每行两个正整数 x,y&#xff0c;表示…

机器学习周记(第三十三周:文献阅读[GWO-GART])2024.4.1~2024.4.7

目录 摘要 ABSTRACT 1 论文信息 1.1 论文标题 1.2 论文摘要 1.3 论文数据集 1.4 论文模型 2 相关知识 摘要 本周阅读了一篇使用GAT结合GRU预测PM2.5浓度的文章。论文模型为图注意力循环网络&#xff08;GART&#xff09;&#xff0c;首次提出了一种新型的多层GAT架构&…

2024-简单点-python中的多重继承mro和super的联系

在Python的多重继承中&#xff0c;super()函数的作用主要是确保父类的方法被正确地调用&#xff0c;同时避免了直接调用父类可能带来的问题&#xff0c;如方法覆盖或名称冲突。super()的使用是Python实现合作式多重继承的关键。 具体来说&#xff0c;当一个类从多个父类继承时…

HTTP 摘要认证

文章目录 一、什么是摘要认证二、工作流程三、实例演示 一、什么是摘要认证 摘要认证&#xff0c;即 Digest Access Authentication&#xff0c;是一种HTTP身份验证机制&#xff0c;用于验证用户的身份。相较于基本认证&#xff08;Basic Authentication&#xff09;使用用户名…

Qt快速入门到熟练(3.程序运行发布与设置图标)

程序运行发布 当我们执行过qt过后&#xff0c;将会在项目目录里面生成出一个debug构建目录&#xff0c;点击进去选择debug文件夹&#xff0c;就可以看到我们生成出来的可执行文件。 很显然我们的项目就叫做MyFirstWidget&#xff0c;所以生成的可执行文件在没有人为设置的情…

CLR学习

视频链接&#xff1a;《CLR十分钟》系列之CLR运行模型_哔哩哔哩_bilibili 什么是 CLR 公共语言运行时&#xff08;Common Language Runtime CLR&#xff09; 是一个可有多种编程语言使用的 运行时&#xff0c;CLR 的核心功能&#xff08;比如 内存管理&#xff0c;程序集加载…

notion的使用心得

从老石的视频知道了notion是一个很强大的管理工具&#xff1a;这就是最棒的效率软件&#xff01;如果不是&#xff0c;我倒想试试你的 | Notion使用技巧分享_哔哩哔哩_bilibili 我一时半会不能全部学会&#xff0c;但是借用大家的好模板&#xff1a;如何用5分钟搭建简洁高效的…

html5分步问卷调查表模板源码

文章目录 1.设计来源1.1 问卷调查11.2 问卷调查21.3 问卷调查31.4 问卷调查41.5 问卷调查51.6 问卷调查6 2.效果和源码2.1 完整效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/137454703 html5分…

React 项目配置代码提交规范 ESLint、Pretttier、Husky、CommitLint

React 项目配置代码提交规范 ESLint、Pretttier、Husky、CommitLint 前言 团队开发的成员越来越多&#xff0c;项目都是由多个人进行开发和维护&#xff0c;每个人的代码书写习惯和风格又不尽相同&#xff0c;commit 的提交log 也是乱七八糟&#xff0c;为以后的开发和维护增…

PPT在线压缩工具推荐

有时候使用邮箱发送邮件时&#xff0c;添加的PPT、Word、PDF文档总会因为过大而转为其他类型的附件发送&#xff0c;不仅上传缓慢&#xff0c;对方查收下载时还有有效期限制&#xff0c;7天或15天后就过期再也无法下载了&#xff0c;有没有什么办法可以压缩PPT等文档&#xff0…

python3内置持久化模块shelve心得

python3内置持久化模块shelve心得 来自python官方网站的解释&#xff1a; https://docs.python.org/zh-cn/3.10/library/shelve.html 本文环境&#xff1a; Windows 10 专业版 64 位 Thonny 3.2.6 概述 内置模块 shelve 可以将任意 Python 对象&#xff08;即 https://docs…

第29篇:秒表计时器

Q&#xff1a;本期我们采用计数器来实现秒表计时器&#xff0c;循环进行0~9计时。 A&#xff1a;在数码管HEX0上循环从0到9计数&#xff0c;间隔时间为1s&#xff0c;使用计数器实现1s时间间隔。 DE2-115开发板提供了50MHz时钟&#xff0c;触发器直接以50MHz信号作为同步时钟…

C++ | Leetcode C++题解之第11题盛最多水的容器

题目&#xff1a; 题解&#xff1a; class Solution { public:int maxArea(vector<int>& height) {int l 0, r height.size() - 1;int ans 0;while (l < r) {int area min(height[l], height[r]) * (r - l);ans max(ans, area);if (height[l] < height[r…

鸿蒙实现一种仿小红书首页滑动联动效果

前言&#xff1a; DevEco Studio版本&#xff1a;4.0.0.600 效果描述&#xff1a;通过手指滑动列表&#xff0c;控制位置显示效果为&#xff1a;不论列表在什么位置下滑时下图粉色位置布局显示&#xff0c;手指上滑时下图粉色位置布局隐藏。 效果&#xff1a; 原理分析&…

简单介绍css及其代码样式

css简介 css用于前端开发&#xff0c;负责对界面进行美化。让页面更美观。 他可以改变html代码的样式&#xff0c;让html代码的网页不那么死板。 css代码格式 选择器 {属性:值; 属性:值&#xff1b;} css的模版架构 css代码放到<style>标签中。 而<style>通常是…