DDPM扩散模型(模型结构图与公式推导)

news2024/12/24 12:27:03

DDPM扩散模型

一、前置知识

1. 条件概率知识

P ( A ∣ B ) = P ( A B ) P ( B ) P(A|B) = \frac{P(AB)}{P(B)} P(AB)=P(B)P(AB)

P ( A B C ) = P ( C ∣ B A ) P ( B A ) = P ( C ∣ B A ) P ( B ∣ A ) P ( A ) P(A B C) = P(C|B A)P(BA) = P(C|B A)P(B|A)P(A) P(ABC)=P(CBA)P(BA)=P(CBA)P(BA)P(A)

P ( B C ∣ A ) = P ( B ∣ A ) P ( C ∣ A , B ) P(B C|A) = P(B|A)P(C|A, B) P(BCA)=P(BA)P(CA,B)

P ( C ∣ A , B ) = P ( B C ∣ A ) P ( B ∣ A ) P(C|A, B) = \frac{P(BC| A)}{P(B|A)} P(CA,B)=P(BA)P(BCA)

2. 基于马尔科夫假设的条件概率

如果满足马尔科夫链关系 A − > B − > C A -> B -> C A>B>C那么有

P ( A B C ) = P ( C ∣ B A ) P ( B A ) = P ( C ∣ B ) P ( B ∣ A ) P ( A ) P(A B C) = P(C|BA)P(B A) = P(C|B)P(B|A)P(A) P(ABC)=P(CBA)P(BA)=P(CB)P(BA)P(A)

P ( B C ∣ A ) = P ( B ∣ A ) P ( C ∣ B ) P(B C|A) = P(B|A)P(C|B) P(BCA)=P(BA)P(CB)

3. 高斯分布的KL散度公式

对于两个单一变量的高斯分布 P 和 Q 而言,它们的 KL 散度为: K L ( P , Q ) = log ⁡ σ 1 σ 2 + σ 1 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 − 1 2 KL(P, Q) = \log{\frac{\sigma_1}{\sigma_2}} + \frac{\sigma_1^2 + (\mu_1 - \mu_2)^2}{2 \sigma_2^2} - \frac{1}{2} KL(P,Q)=logσ2σ1+2σ22σ12+(μ1μ2)221

KL 散度,又称为相对熵,描述两个概率分布P和Q的差异和相似性,用 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q)表示

在这里插入图片描述

显然,散度越小,说明概率Q与概率P之间越接近,那么估计的概率分布与真实的概率分布也就越接近。

KL 散度的性质:

  1. 非对称性: D K L ≠ D K L ( Q ∣ ∣ P ) D_{KL} \neq D_{KL}(Q || P) DKL=DKL(Q∣∣P)
  2. D K L ( P ∣ ∣ Q ) ≥ 0 D_{KL}(P || Q) \geq 0 DKL(P∣∣Q)0,仅在 P = Q P = Q P=Q时等于0

4. 参数重整化

如果希望从高斯分布 N ( μ , σ 2 ) N(\mu, \sigma^2) N(μ,σ2)中采样( μ \mu μ:表示均值, σ 2 \sigma^2 σ2:表示方差),可以先从标准分布 N ( 0 , 1 ) N(0, 1) N(0,1)采样处 z z z,再得到 σ × z + μ \sigma \times z + \mu σ×z+μ ,这样做的好处是将随机性转移到了 z z z这个常量上了,而 σ \sigma σ μ \mu μ则当做仿射变换网络的一部分。

二、Diffusion Model流程

在这里插入图片描述

x 0 x_0 x0是初始数据(一个初始的图片), x T x_T xT是最终的图片(一个纯噪声的图片)。

  1. x 0 ∼ x T x_0 \sim x_T x0xT的过程是一个加噪过程,每次从 q ( x t ∣ x t − 1 ) q(x_t|x_{t - 1}) q(xtxt1)分布中取噪声,然后添加到前一个时间步的图片数据中,这样经过T个时间步,我们就能得到一个纯噪声的图片了。
  2. x T ∼ x 0 x_T \sim x_0 xTx0的过程是一个去噪过程,每次从 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t - 1}|x_t) pθ(xt1xt)分布中取噪声,然后使前一个时间步的图片数据减去该噪声,这样经过T个时间步,我们就能得到原始的图片了。

其中 q ( x t ∣ x t − 1 ) q(x_t|x_{t - 1}) q(xtxt1)是自己设定的一个加噪分布,而 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t - 1}|x_t) pθ(xt1xt)是需要神经网络去学习的一个分布,我们会使用参数分布来去对该分布做估计,由于使用了参数重整化的思想( σ × ϵ + μ \sigma \times \epsilon + \mu σ×ϵ+μ,其中 σ \sigma σ是分布的方差, μ \mu μ表示的是分布的均值, ϵ \epsilon ϵ是从标准正态分布中随机采样的一个值),我们加噪过程是从一个标准正态分布中随机采样一个值,然后再进行参数重整化,依据 μ \mu μ σ \sigma σ得到特定分布下的噪声,而去噪过程是利用神经网络学习这个噪声,然后在每个时间步上减去预测出的噪声。

三、加噪过程

给定初始数据分布 x 0 ∼ q ( x ) x_0 \sim q(x) x0q(x),可以不断地向分布中添加高斯噪声,该噪声的方差是以固定值 β t \beta_t βt而确定的,均值是以固定值 β t \beta_t βt和当前 t t t时刻的数据 x t x_t xt决定的。这个过程是一个马尔科夫链过程,随着 t t t的不断增大,不断的向数据中添加噪声,最终数据分布 x t x_t xt变成了一个各向独立的高斯分布。

噪声的分布可以表示如下:

q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t ⋅ x t − 1 , β t I ) q(x_t|x_{t - 1}) = N(x_t; \sqrt{1 - \beta_t}\cdot x_{t - 1}, \beta_tI) q(xtxt1)=N(xt;1βt xt1,βtI) 其中 1 − β t ⋅ x t − 1 \sqrt{1 - \beta_t}\cdot x_{t- 1} 1βt xt1表示该分布的均值, β t I \beta_t I βtI 表示方差( I I I表示单位矩阵)。

那么有: x t = 1 − β t x t − 1 + β t z t x_t = \sqrt{1 - \beta_t}x_{t - 1} + \sqrt{\beta_t} z_t xt=1βt xt1+βt zt,其中 1 − β t \sqrt{1 - \beta_t} 1βt 是一个控制噪声强度的系数, β t \beta_t βt是一个添加噪声比例的系数,论文中说明,当分布越来月接近噪声分布的时候,可以将 β t \beta_t βt变得大一点,这样做可以再初始的时候 β t \beta_t βt很小,那么添加的噪声也就很小,而 1 − β t \sqrt{1 - \beta_t} 1βt 会很大,那么将会保留更多原来数据的特征,再最后的时候 β t \beta_t βt很大,那么添加的噪声也会更大,而 1 − β t \sqrt{1 - \beta_t} 1βt 也就会更大,那么将会去除掉更多原来数据的特征。

设定噪声的方差 β t ∈ ( 0 , 1 ) \beta_t \in (0, 1) βt(0,1),并且 β t \beta_t βt 随着 t t t 的增大而增大。

通过上述的分布,我们可以将原始数据图片 x 0 x_0 x0通过 q ( x 1 ∣ x 0 ) q(x_1| x_0) q(x1x0)分布进行加噪,从而得到 x 1 x_1 x1,然后再通过 q ( x 2 ∣ x 1 ) q(x_2| x_1) q(x2x1)分布进行对 x 1 x_1 x1加噪,从而得到 x 2 x_2 x2,并以此类推,我们可以得到最终纯噪声的高斯分布。

上述过程时比较麻烦的,因为我们需要得到 t − 1 t - 1 t1时刻的数据分布才能得到 t t t 时刻加噪后的数据分布,其实任意时刻的 q ( x t ) q(x_t) q(xt)数据分布可以直接基于 x 0 x_0 x0 β t \beta_t βt而计算出来,而不需要一步一步的迭代,其推导过程如下:

正态分布叠加性质:正态分布 X ∼ N ( μ 1 , σ 1 2 ) X \sim N(\mu_1, \sigma_1^2) XN(μ1,σ12) Y ∼ N ( μ 2 , σ 2 ) Y \sim N(\mu_2, \sigma_2) YN(μ2,σ2)线性叠加后的分布为 Z = a X + b Y Z = aX + bY Z=aX+bY,则叠加后分布的均值为 a μ 1 + b μ 2 a\mu_1 + b\mu_2 aμ1+bμ2,方差为 a 2 σ 1 2 + b 2 σ 2 2 a^2\sigma_1^2 + b^2\sigma_2^2 a2σ12+b2σ22,即 Z ∼ N ( a μ 1 + b μ 2 , a 2 σ 1 2 + b 2 σ 2 2 ) Z \sim N(a\mu_1 + b\mu_2, a^2\sigma_1^2 + b^2\sigma_2^2) ZN(aμ1+bμ2,a2σ12+b2σ22)

推导公式

在这里插入图片描述

有正态分布的叠加性质可知: α t − α t α t − 1 ⋅ z t − 2 + 1 − α t ⋅ z t − 1 \sqrt{\alpha_t - \alpha_t\alpha_{t - 1}} \cdot z_{t - 2} + \sqrt{1 - \alpha_t}\cdot z_{t - 1} αtαtαt1 zt2+1αt zt1可以参数重整化成只含一个随机变量 z z z构成的 1 − α t ⋅ z t − 1 \sqrt{1 - \alpha_t}\cdot z_{t - 1} 1αt zt1可以参数重整化为只含一个随机变量 z z z构成的 1 − α t α t − 1 ⋅ z \sqrt{1 - \alpha_t\alpha_{t - 1}}\cdot z 1αtαt1 z 的形式,以此类推可以化简为一个最终的结果。

上述公式中的 z t − 1 、 z t − 2 、 ⋯ z_{t -1}、z_{t - 2}、\cdots zt1zt2都是一个从正态分布中随其采样的数据。

最终可以得到: q ( x t ∣ x 0 ) = N ( x t ; α t ˉ ⋅ x 0 , ( 1 − α t ˉ ) I ) q(x_t | x_0) = N(x_t; \sqrt{\bar{\alpha_{t}}}\cdot x_0, (1 - \bar{\alpha_{t}}) I) q(xtx0)=N(xt;αtˉ x0,(1αtˉ)I) , 此时我们只需要知道初始的数据分布即可直接计算处任意时刻加噪后的数据分布,而不需要一个一个迭代求得。

四、去噪过程

去噪过程是加噪过程的逆过程,是从高斯噪声中恢复原始数据的过程,我们可以假设去噪的噪声也是取自一个高斯分布,我们无法逐步地去直接拟合分布,因此需要构建一个参数分布来去做估计,逆扩散过程仍然是一个马尔科夫链过程。

x T x_T xT(纯噪声数据)恢复到初始图片数据 x 0 x_0 x0的公式: p θ ( x 0 ⋯ T ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) p_\theta(x_{0\cdots T}) = p(x_T)\prod\limits_{t = 1}^{T}p_\theta(x_{t - 1}| x_t) pθ(x0T)=p(xT)t=1Tpθ(xt1xt)

其中 p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , σ θ 2 ( x t , t ) ) p_\theta(x_{t - 1}| x_t) = N(x_{t - 1};\mu_\theta(x_t, t), \sigma_\theta^2(x_t, t)) pθ(xt1xt)=N(xt1;μθ(xt,t),σθ2(xt,t)),里面有两个未知的参数,分别是 t t t时刻的 μ θ \mu_\theta μθ σ θ \sigma_\theta σθ,这两个参数就是需要神经网络需要拟合的参数。

我们无法直接知道 q ( x t − 1 ∣ x t ) q(x_{t -1}|x_t) q(xt1xt),但是 q ( x t − 1 ∣ x t , x 0 ) q(x_{t - 1}| x_t, x_0) q(xt1xt,x0)分布是可以用 q ( x t ∣ x 0 ) q(x_{t}|x_0) q(xtx0) p ( x t ∣ x t − 1 ) p(x_t|x_{t - 1}) p(xtxt1)进行表示,也就是说知道了 x t x_t xt x 0 x_0 x0,我们是可以计算出 x t − 1 x_{t - 1} xt1

知识回顾

高斯分布的概率密度函数
f ( x ) = 1 2 π ⋅ σ ⋅ e − ( x − μ ) 2 2 σ 2 f(x) = \frac{1}{\sqrt{2 \pi}\cdot \sigma}\cdot e^{- \frac{(x - \mu)^2}{2 \sigma^2}} f(x)=2π σ1e2σ2(xμ)2
其中一个重要的转换 exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) \exp{(-\frac{(x - \mu)^2}{2\sigma_2})} exp(2σ2(xμ)2) = exp ⁡ ( − 1 2 ( 1 σ 2 x 2 ) − 2 μ σ 2 x + μ 2 σ 2 ) \exp{(-\frac{1}{2}(\frac{1}{\sigma^2}x^2) - \frac{2\mu}{\sigma^2}x + \frac{\mu^2}{\sigma^2})} exp(21(σ21x2)σ22μx+σ2μ2)

二次函数的转换:
a x 2 + b x = a ( x + b 2 a ) 2 + C ax^2 + bx = a(x + \frac{b}{2a})^2 + C ax2+bx=a(x+2ab)2+C
转换后的数据最后 + C +C +C表示数据转换后的一些常数项,其中 b 2 a \frac{b}{2a} 2ab是二次函数的对称轴部分,高斯分布中为均值部分。

我们假设 q ( x t − 1 ∣ x t , x 0 ) q(x_{t - 1}| x_t, x_0) q(xt1xt,x0)也是一个高斯分布,并且其分布如下:均值是一个与 x t x_t xt x 0 x_0 x0相关的数据,方差是一个与 β t \beta_t βt相关的数据。
q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ ( x t , x 0 ) , β t ~ I ) q(x_{t - 1}| x_t, x_0) = N(x_{t - 1};\widetilde{\mu}(x_t, x_0), \widetilde{\beta_t}I) q(xt1xt,x0)=N(xt1;μ (xt,x0),βt I)
我们可以进行如下推导:
在这里插入图片描述

上述公式的具体推导过程如下:

在这里插入图片描述

我们已知:

在这里插入图片描述

将已知条件带入到公式中可得:

在这里插入图片描述

根据高斯分布重要的转换公式,我们可以得到方差 β ~ t = 1 ( α t β t + 1 1 − α t − 1 ˉ ) = 1 − α t − 1 ˉ 1 − α t ˉ ⋅ β t \widetilde\beta_t = \frac{1}{(\frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha_{t-1}}}) } = \frac{1 - \bar{\alpha_{t - 1}}}{1 - \bar{\alpha_{t}}} \cdot \beta_t β t=(βtαt+1αt1ˉ1)1=1αtˉ1αt1ˉβt

根据二次函数的转换,我们可以得到均值 μ ~ ( x t , x 0 ) = ( α t β t x t + α t ˉ 1 − α ˉ t x 0 ) / ( α t β t + 1 1 − α t − 1 ˉ ) = α t ( 1 − α t − 1 ˉ ) 1 − α t ˉ x t + α t − 1 ˉ β t 1 − α t ˉ x 0 \widetilde{\mu}(x_t, x_0) = (\frac{\sqrt{\alpha_t}}{\beta_t}x_t + \frac{\sqrt{\bar{\alpha_t}}}{1 - \bar\alpha_t}x_0)/ (\frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha_{t - 1}}}) = \frac{\sqrt{\alpha_t(1 - \bar{\alpha_{t - 1}})}}{1 - \bar{\alpha_t}}x_t + \frac{\sqrt{\bar{\alpha_{t - 1}}} \beta_t}{1 - \bar{\alpha_t}}x_0 μ (xt,x0)=(βtαt xt+1αˉtαtˉ x0)/(βtαt+1αt1ˉ1)=1αtˉαt(1αt1ˉ) xt+1αtˉαt1ˉ βtx0

此时可以将 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 ( x t − 1 ; ( 1 − α t − 1 ˉ ) α t 1 − α t ˉ x t + β t α t − 1 ˉ 1 − α t ˉ x 0 , 1 − α t − 1 ˉ 1 − α t ˉ β t ) q(x_{t - 1}|x_t, x_0) \sim N(x_{t - 1};\frac{(1 - \bar{\alpha_{t - 1}})\sqrt{\alpha_t}}{1 - \bar{\alpha_t}}x_t + \frac{\beta_t \sqrt{\bar{\alpha_{t - 1}}}}{1 - \bar{\alpha_t}}x_0, \frac{1 - \bar{\alpha_{t - 1}}}{1 - \bar{\alpha_t}}\beta_t) q(xt1xt,x0)N(xt1;1αtˉ(1αt1ˉ)αt xt+1αtˉβtαt1ˉ x0,1αtˉ1αt1ˉβt)
可以看到, 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 x_t xt之间的关系( x t = α t ˉ ⋅ x 0 + 1 − α t ˉ ⋅ z t x_t = \sqrt{\bar{\alpha_t}}\cdot x_0 + \sqrt{1 - \bar{\alpha_t}}\cdot z_t xt=αtˉ x0+1αtˉ zt),我们可以知道:
x 0 = 1 α t ˉ ( x t − 1 − α t ˉ ⋅ z t ) x_0 = \frac{1}{\sqrt{\bar{\alpha_{t}}}}(x_t - \sqrt{1 - \bar{\alpha_t}}\cdot z_t) x0=αtˉ 1(xt1αtˉ zt)
x 0 x_0 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 x_t xt z t z_t zt有关。 z t z_t zt是从第 t t t个时间步的正态分布中采样出来的样本
μ t ~ = α t ( 1 − α t − 1 ˉ ) 1 − α t ˉ x t + α t − 1 ˉ β t 1 − α t ˉ 1 α t ˉ ( x t − 1 − α t ˉ z t ) = 1 α t ( x t − β t 1 − α t ˉ z t ) \widetilde{\mu_t} = \frac{\sqrt{\alpha_t}(1-\bar{\alpha_{t - 1}})}{1 - \bar{\alpha_t}}x_t + \frac{\sqrt{\bar{\alpha_{t - 1}}}\beta_t}{1 - \bar{\alpha_t}} \frac{1}{\sqrt{\bar{\alpha_t}}}(x_t - \sqrt{1 - \bar{\alpha_t}}z_t) = \frac{1}{\sqrt{\alpha_t}}(x_t - \frac{\beta_t}{\sqrt{1 - \bar{\alpha_t}}}z_t) μt =1αtˉαt (1αt1ˉ)xt+1αtˉαt1ˉ βtαtˉ 1(xt1αtˉ zt)=αt 1(xt1αtˉ βtzt)

得到最终的 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 ( x t − 1 ; 1 α t ( x t − β t 1 − α t ˉ z t ) , 1 − α t − 1 ˉ 1 − α t ˉ β t ) q(x_{t - 1}|x_t, x_0) = N(x_{t - 1}; \frac{1}{\sqrt{\alpha_t}}(x_t - \frac{\beta_t}{\sqrt{1 - \bar{\alpha_t}}}z_t), \frac{1 - \bar{\alpha_{t - 1}}}{1 - \bar{\alpha_t}}\beta_t) q(xt1xt,x0)=N(xt1;αt 1(xt1αtˉ βtzt),1αtˉ1αt1ˉβt)

五、损失函数

我们可以在负对数似然函数的基础上加一个KL散度,于是就构成了负对数似然的上界了,上界越小,负对数似然自然也就越小,那么对数似然就越大了。

在这里插入图片描述

等式两边都加上 E q ( x 0 ) E_{q(x_0)} Eq(x0)可以得到得到: E q ( x 0 : T ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) ] ≥ − E q ( x 0 ) log ⁡ p θ ( x 0 ) E_{q(x_{0:T})}[\log{\frac{q(x_{1:T} | x_0)}{p_\theta(x_{0:T})}}] \geq -E_{q(x_0)}\log{p_\theta(x_0)} Eq(x0:T)[logpθ(x0:T)q(x1:Tx0)]Eq(x0)logpθ(x0)

我们令 L V L B = E q ( x 0 : T ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) ] ≥ − E q ( x 0 ) log ⁡ p θ ( x 0 ) L_{VLB} = E_{q(x_{0:T})}[\log{\frac{q(x_{1:T} | x_0)}{p_\theta(x_{0:T})}}] \geq -E_{q(x_0)}\log{p_\theta(x_0)} LVLB=Eq(x0:T)[logpθ(x0:T)q(x1:Tx0)]Eq(x0)logpθ(x0)

现在我们只需要简化交叉熵上界即可,对 L V B L L_{VBL} LVBL进行化简:

已知:在这里插入图片描述

在这里插入图片描述

最终化简为: L V L B = E q [ D K L ( q ( x T ∣ x 0 ) ∣ ∣ p θ ( x T ) ) ⏟ L T + ∑ t = 2 T D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ⏟ L t − 1 − log ⁡ p θ ( x 0 ∣ x 1 ) ⏟ L 0 ] L_{VLB}= \underbrace{E_q[D_{KL}(q(x_T|x_0) || p_\theta(x_T))}_{L_T}+ \sum\limits_{t = 2}^T \underbrace{D_{KL}(q(x_{t-1}|x_t, x_0)|| p_\theta(x_{t - 1}| x_t)}_{L_{t - 1}} -\underbrace{\log{p_\theta(x_0|x_1)}}_{L_0}] LVLB=LT Eq[DKL(q(xTx0)∣∣pθ(xT))+t=2TLt1 DKL(q(xt1xt,x0)∣∣pθ(xt1xt)L0 logpθ(x0x1)]

L T L_T LT部分: q ( x T ∣ x 0 ) q(x_T|x_0) q(xTx0)是不含参的,可以由 β t \beta_t βt计算出来,是一个完全高斯分布。

L 0 L_0 L0部分:这一部分是 log ⁡ p θ ( x 0 ∣ x 1 ) \log{p_\theta(x_0|x_1)} logpθ(x0x1),也就是说从 x 1 x_1 x1分布推理出 x 0 x_0 x0分布的一个分布,现在我们要使 − log ⁡ p θ ( x 0 ∣ x 1 ) -\log{p_\theta(x_0|x_1)} logpθ(x0x1)尽可能小,也就是使 log ⁡ p θ ( x 0 ∣ x 1 ) \log{p_\theta(x_0|x_1)} logpθ(x0x1)的值越大,说明要从 x 1 x_1 x1推理出 x 0 x_0 x0的概率更大,也就是 x 0 x_0 x0的分布要与 x 1 x_1 x1的分布越相似,这一步我们在设定参数时就已经考虑了这一情况,即( β t \beta_t βt随时间 t t t而增大)。

L t − 1 L_{t -1} Lt1部分:是涉及参数的主要部分。

可以知道参数主要存在于 L t − 1 L_{t - 1} Lt1中,这里论文将 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t - 1} | x_t) pθ(xt1xt)分布的方差设置成了一个与 β \beta β相关的常数,因此可训练的参数只存在于其均值中,对于两个单一变量的高斯分布 p p p q q q而言,它们的 KL 散度为: K L ( p , q ) = log ⁡ σ 1 σ 2 + σ 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 − 1 2 KL(p,q) = \log{\frac{\sigma_1}{\sigma_2}} + \frac{\sigma^2 + (\mu_1 - \mu_2)^2}{2 \sigma_2^2} - \frac{1}{2} KL(p,q)=logσ2σ1+2σ22σ2+(μ1μ2)221,我们将 L t − 1 L_{t - 1} Lt1展开,并且只取 ( μ 1 − μ 2 ) 2 (\mu_1 - \mu_2)^2 (μ1μ2)2部分,其它的部分都用一个常数 C C C来表示。

在这里插入图片描述

我们将 μ θ \mu_\theta μθ同样写为 μ ~ \widetilde\mu μ 的形式,这样参数从均值 μ \mu μ转移到了变量 ϵ \epsilon ϵ上。

在这里插入图片描述

将上述 μ θ ( x t , t ) \mu_\theta(x_t, t) μθ(xt,t)带入到 L t − 1 − C L_{t - 1} - C Lt1C中可得:

E x 0 , ϵ [ β t 2 2 σ t 2 α t ( 1 − α ˉ t ) ∣ ∣ ϵ − ϵ θ ( α t ˉ x 0 + 1 − α t ˉ ϵ , t ) ∣ ∣ 2 ] E_{x_0, \epsilon}[\frac{\beta_t^2}{2\sigma_t^2\alpha_t(1 - \bar\alpha_t)}|| \epsilon - \epsilon_\theta(\sqrt{\bar{\alpha_t}}x_0 + \sqrt{1 - \bar{\alpha_t}}\epsilon, t)||^2] Ex0,ϵ[2σt2αt(1αˉt)βt2∣∣ϵϵθ(αtˉ x0+1αtˉ ϵ,t)2]
在论文中,作者声明可以将系数部分完全丢掉,这样训练会更加稳定,质量会更好,因此最终的损失函数可以写为:
L s i m p l e ( θ ) = E t , x 0 , ϵ [ ∣ ∣ ϵ − ϵ θ ( α t ˉ x 0 + 1 − α t ˉ ϵ , t ) ∣ ∣ 2 ] L_{simple}(\theta) = E_{t, x_0, \epsilon}[|| \epsilon - \epsilon_\theta(\sqrt{\bar{\alpha_t}}x_0 + \sqrt{1 - \bar{\alpha_t}}\epsilon, t)||^2] Lsimple(θ)=Et,x0,ϵ[∣∣ϵϵθ(αtˉ x0+1αtˉ ϵ,t)2]
这样我们只需要将加噪过程中的 ϵ \epsilon ϵ与预测过程中的 ϵ θ \epsilon_\theta ϵθ的误差不断减小即可。

六、总结

算法训练与采样流程:

在这里插入图片描述

在训练过程中,我们要让模型去学习加噪过程中的每次从正态分布取得的随机噪声 ϵ \epsilon ϵ,我们通过这个噪声可以推理出每一个时刻 t t t的数据分布的均值。

在推理过程中,我们通过模型输出 t t t时刻的随机噪声 ϵ θ \epsilon_\theta ϵθ来计算出 t t t时刻数据分布的均值,然后再通过该均值与方差来进行参数重整化,得到 t − 1 t - 1 t1时刻的数据分布。

七、附录

DDPM模型结构图

在这里插入图片描述

其中resblockattn模块的具体结构如下:

在这里插入图片描述

该模块中Attention部分不是必要的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java | 自制AWT单词猜一猜小游戏(测试版)

目录 游戏标题 开发过程 开发想法 技术栈 代码呈现 导包 核心代码 游戏标题 探索知识的迷宫,体验自制AWT单词猜一猜小游戏 在数字时代,学习可以是多彩的,游戏可以是智慧的。我们自豪地推出“单词猜猜猜”是一款结合了教育与娱乐的自制…

NODEJS复习(ctfshow334-344)

NODEJS复习 web334 下载源码代码审计 发现账号密码 代码逻辑 var findUser function(name, password){ return users.find(function(item){ return name!CTFSHOW && item.username name.toUpperCase() && item.password password; }); }; 名字不等于ctf…

2015年全国大学生数学建模竞赛B题出租车资源配置(含word论文和源代码资源)

文章目录 一、部分题目二、部分论文三、部分源代码问题1问题3 四、完整word版论文和源代码 一、部分题目 2015高教社杯全国大学生数学建模竞赛题目 B题 “互联网”时代的出租车资源配置 出租车是市民出行的重要交通工具之一,“打车难”是人们关注的一个社会热点问…

【CSS in Depth 2 精译_019】3.2 CSS 的盒模型

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

STM32基础篇:USART(下)

双缓冲与连续发送 双缓冲 在发送数据的时候,首先将要发送的字节写入TDR中,然后TDR将此字节发生给移位寄存器,由移位寄存器执行串并转换,通过Tx引脚逐个比特位发送出去。 在此过程中,存在两级缓冲,即双缓…

[GIS实验]居住环境适宜性评价

目的: 拟购买住宅,需在现有条件下,基于地理空间分析方法和空间认知模型对居住环境进行综合评价。通过该实验掌握基于GIS的地理空间认知方法及土地适宜性评价基本原理与方法。 数据: (1)人口调查图&#…

记录uni-app横屏项目:自定义弹出框

目录 前言: 正文: 前言:横屏的尺寸问题 最近使用了uniapp写了一个横屏的微信小程序和H5的项目,也是本人首次写的横屏项目,多少是有点踩坑不太适应。。。 先说最让我一脸懵的点,尺寸大小,下面一…

探索Python错误美化:pretty_errors库的魔法之旅

探索Python错误美化:pretty_errors库的魔法之旅 背景:为什么需要pretty_errors? 在Python编程中,错误和异常是不可避免的。然而,Python默认的错误信息往往不够直观,对于新手来说可能难以理解。pretty_erro…

MySQL学习之InnoDB引擎,索引

Mysql中的引擎 我们先来看一下MySql提供的有哪些引擎 mysql> show engines; 从上图我们可以查看出 MySQL 当前默认的存储引擎是InnoDB,并且在5.7版本所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务。 查看MySQL当前默认的存储引…

Transformer之Vision Transformer结构解读

论文地址 代码地址 写在前面 什么是Transformer呢?就是把符号向量化为Token, 再和位置编码求和或者做阿达玛积,最后送入一定层数的Attention Block构成的Encoder和Decoder,就完成了Transformer的基础功能。 那么,把上…

关于模的问题

写代码的时候遇到模的问题 class Solution:def countCompleteDayPairs(self, hours: List[int]) -> int:ans 0t [0 for _ in range(24)]for h in hours:u (24-h%24)%24ans t[u]t[h%24] 1return ans如果写成 u (24-h%24) 是不对的,没有考虑h等于0的情况

【多任务YOLO】 A-YOLOM: You Only Look at Once for Real-Time and Generic Multi-Task

You Only Look at Once for Real-Time and Generic Multi-Task 论文链接:http://arxiv.org/abs/2310.01641 代码链接:https://github.com/JiayuanWang-JW/YOLOv8-multi-task 一、摘要 高精度、轻量级和实时响应性是实现自动驾驶的三个基本要求。本研究…

51单片机(STC8H8K64U/STC8051U34K64)_RA8889驱动TFT大屏_I2C_HW参考代码(v1.3) 硬件I2C方式

本篇介绍单片机使用硬件I2C方式控制RA8889驱动彩屏。 提供STC8H8K64U和STC8051U34K64的参考代码。 【硬件部份】STC8H8K64U/STC8051U34K64 RA8889开发板 7寸TFT 800x480 1. 实物连接图:STC8H8K64URA8889开发板,使用P2口I2C接口: 2.实物连…

怎样制作高品质的电子画册,一看就会

随着数字化进程的加速,电子画册以其便捷的传播方式、丰富的展现形式,越来越受到各类人士的青睐。一份高品质的电子画册,不仅需要有吸引人的内容,更需要有专业的制作技巧。下面,就让我来为您详细解析,如何制…

量子计划 Quark 捯饬

1 蓝牙 系统镜像中具有内置的蓝牙驱动程序,可以按照以下步骤启动蓝牙: bluetoothctl# 进入 bluetoothctl 界面后。运行scan扫描列出附近所有的蓝牙设备 scan on# 复制设备的MAC地址,然后使用以下命令连接到设备: pair A4:xx:xx:…

艺术与技术的交响曲:CSS绘图的艺术与实践

在前端开发的世界里,CSS(层叠样式表)作为网页布局和样式的基石,其功能早已超越了简单的颜色和间距设置。近年来,随着CSS3的普及,开发者们开始探索CSS在图形绘制方面的潜力,用纯粹的代码创造出令…

32_ConvNeXt网络详解

1.1 简介 ConvNeXt是一种计算机视觉模型,由Meta AI(前Facebook AI)的研究人员在2022年提出,它旨在探索卷积神经网络(CNN)在图像识别任务上的潜力,尤其是在与当时流行的Vision Transformer&…

【windows】【系统还原】亦是美kms执行一键关闭defender 之后,windows defender 被卸载了,无论如何都打不开

在那之后,你是否一直无法启动 defender??? 你是否一直担心电脑的安全问题?? 我也尝试了很多方法 无论是 powershell 执行 dism.exe /online /cleanup-image /scanhealth dism.exe /online /cleanup-ima…

【项目】星辰博客介绍

目录 一、项目背景 二、项目功能 1. 登录功能: 2. 列表页面: 3. 详情页面: 4. 写博客: 三、技术实现 四、功能页面展示 1. 用户登录 2. 博客列表页 3. 博客编辑更新页 4.博客发表页 5. 博客详情页 五.系统亮点 1.强…

c# 开发AutoCAD扩展

在C#中开发AutoCAD扩展涉及使用AutoCAD的.NET API, 利用AutoCAD的功能并创建自定义命令、对话框、块、图层和其他图形元素。以下是一些关键步骤和概念,可以帮助你开始使用C#开发AutoCAD扩展: 准备开发环境 安装AutoCAD:确保你有一…