Diffusion Model 深入剖析

news2024/11/29 2:34:15

Diffusion Model 深入剖析

最近AI生成艺术领域非常火热,从 Midjourney 到 Stable Diffusion,不管你是绘画高手还是艺术小白,只要输入想要绘制内容的描述或者基础图像,就可以生成富有艺术感的画作! 这些风格各异、以假乱真的AI生成图像背后,离不开 Diffusion Model 。之前文章《Stable Diffusion原理详解》中我对 Diffusion Model 做了简要的介绍,本文将深入到 Diffusion Model 内部,深入剖析 Diffusion Model 的工作原理以及它是如何生成图像的。

在这里插入图片描述

文章目录

概述

在这里插入图片描述

图1. 扩散模型原理概要

Diffusion Model的训练可以分为两部分:

  1. 正向扩散过程 → 为图像添加噪声。
  2. 反向扩散过程 → 去除图像中的噪声。

正向扩散过程

在这里插入图片描述

图2. 正向扩散过程

正向扩散过程向输入图像 x 0 x_0 x0 逐步加入高斯噪声,一共 T T T 步。该过程将产生一系列噪声图像样本 x 1 , … , x T x_1, \dots , x_T x1,,xT

T → ∞ T \to \infin T 时,最终的结果将变成一张完全噪声图像,就好像它是从各向同性高斯分布中采样的一样。

但是我们可以使用一个闭合公式在特定的时间步长 t t t 直接对有噪声的图像进行采样,而不是设计一种算法来迭代地向图像添加噪声。

正向扩散可以用如下公式描述:
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) (1) q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt {1-\beta_t}x_{t-1}, \beta_tI) \tag{1} q(xtxt1)=N(xt;1βt xt1,βtI)(1)
其中 t t t 是时间帧(从 0 到 T T T), x t x_t xt 是从真实数据分布 q ( x ) q(x) q(x) 中采样的数据样本(例如 x 0 ∼ q ( x ) x_0 \sim q(x) x0q(x)), β t \beta_t βt 是 variance schedule, 0 ≤ β t ≤ 1 0 \le \beta_t \le 1 0βt1,且 β 0 \beta_0 β0 较小, β T \beta_T βT 较大。 I I I 是单位矩阵。

公式推导

可以使用重参数化技巧(Reparameterization Trick)推导出闭合公式。

如果 z ∼ N ( μ , σ 2 ) z \sim \mathcal{N}(\mu, \sigma^2) zN(μ,σ2) ,那么 z z z 可以写成 z = μ + σ ε z = \mu + \sigma\varepsilon z=μ+σε 的形式,其中 ε ∼ N ( 0 , 1 ) \varepsilon \sim \mathcal{N}(0, 1) εN(0,1)。这就是 重参数化技巧

利用这个技巧,我们可以将采样图像 x t x_t xt 表示为如下形式:
x t = 1 − β t x t − 1 + β t ε t − 1 (2) x_t = \sqrt{1-\beta_t}x_{t-1}+\sqrt{\beta_t}\varepsilon_{t-1} \tag{2} xt=1βt xt1+βt εt1(2)
这样我们就可以递归地展开它得到闭式公式:
x t = 1 − β t x t − 1 + β t ε t − 1 … … ε ∼ N ( 0 , I ) = α t   x t − 1 + 1 − α t ε t − 1 … … 设 α t = 1 − β t = α t   ( α t − 1 x t − 2 + 1 − α t − 1 ε t − 2 ) + 1 − α t ε t − 1 … … 递归展开 x t − 1 = α t α t − 1 x t − 2 +   α t ( 1 − α t − 1 ) ε t − 2 + 1 − α t ε t − 1 … … 乘法分配律乘开 = α t α t − 1 x t − 2 +   1 − α t α t − 1 ε ˉ t − 2 … … 怎么突然得到这个结果? ⋮ = α t α t − 1 … α 1 x 0 + 1 − α t α t − 1 … α 1 ε = α t ˉ x 0 + 1 − α ˉ t ε … … α t ˉ = ∏ i = 1 t α i \begin{aligned} x_t &= \sqrt{1-\beta_t}x_{t-1}+\sqrt{\beta_t}\varepsilon_{t-1}&\dots\dots \varepsilon \sim \mathcal{N}(0, I)\\ &=\sqrt{\alpha_t}\:\fcolorbox{red}{white}{$x_{t-1}$}+\sqrt{1-\alpha_t}\varepsilon_{t-1}&\dots\dots 设\alpha_t = 1-\beta_t\\ &=\sqrt{\alpha_t}\:\fcolorbox{red}{white}{$\Big(\sqrt{\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_{t-1}}\varepsilon_{t-2}\Big)$}+\sqrt{1-\alpha_t}\varepsilon_{t-1}&\dots\dots 递归展开x_{t-1}\\ &=\sqrt{\alpha_t\alpha_{t-1}}x_{t-2}+\:\fcolorbox{red}{white}{$\sqrt{\alpha_t(1-\alpha_{t-1})}\varepsilon_{t-2}+\sqrt{1-\alpha_t}\varepsilon_{t-1}$}&\dots\dots 乘法分配律乘开\\ &=\sqrt{\alpha_t\alpha_{t-1}}x_{t-2}+\:\fcolorbox{red}{white}{$\sqrt{1-\alpha_t\alpha_{t-1}}\bar{\varepsilon}_{t-2}$}&\dots\dots \textcolor{red}{怎么突然得到这个结果?}\\ &\quad\vdots\\ &=\sqrt{\alpha_t\alpha_{t-1}\dots\alpha_1}x_0 + \sqrt{1-\alpha_t\alpha_{t-1}\dots\alpha_1}\varepsilon\\ &=\sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha}_t}\varepsilon&\dots\dots \bar{\alpha_t}=\prod_{i=1}^t\alpha_i \end{aligned} xt=1βt xt1+βt εt1=αt xt1+1αt εt1=αt (αt1 xt2+1αt1 εt2)+1αt εt1=αtαt1 xt2+αt(1αt1) εt2+1αt εt1=αtαt1 xt2+1αtαt1 εˉt2=αtαt1α1 x0+1αtαt1α1 ε=αtˉ x0+1αˉt ε……εN(0,I)……αt=1βt……递归展开xt1……乘法分配律乘开……怎么突然得到这个结果?……αtˉ=i=1tαi

注意:所有 ε \varepsilon ε 都是独立同分布的标准正态随机变量。

这里使用不同的符号和下标区分它们很重要,因为它们是独立的并且它们的值在采样后可能不同。

上面的公式推导最难理解的是第4行到第5行,很多人卡在这一步止步不前,下面我将给出详细的推导步骤并解释它是如何工作的:

我们设:
α t ( 1 − α t − 1 ) ε t − 2 = X 1 − α t ε t − 1 = Y \begin{aligned} \sqrt{\alpha_t(1-\alpha_{t-1})}\varepsilon_{t-2} &= X\\ \sqrt{1-\alpha_t}\varepsilon_{t-1} &= Y \end{aligned} αt(1αt1) εt21αt εt1=X=Y

x t = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ε t − 2 ⏟ X + 1 − α t ε t − 1 ⏟ Y x_t=\sqrt{\alpha_t\alpha_{t-1}}x_{t-2}+\underbrace{\sqrt{\alpha_t(1-\alpha_{t-1})}\varepsilon_{t-2}}_X+\underbrace{\sqrt{1-\alpha_t}\varepsilon_{t-1}}_Y xt=αtαt1 xt2+X αt(1αt1) εt2+Y 1αt εt1
应用从重参数化技巧
0 + α t ( 1 − α t − 1 ) ε t − 2    ⟹    X ∼ N ( 0 , α t ( 1 − α t − 1 ) I ) 0 + 1 − α t ε t − 1    ⟹    Y ∼ N ( 0 , ( 1 − α t ) I ) \begin{aligned} 0 + \sqrt{\alpha_t(1-\alpha_{t-1})}\varepsilon_{t-2} &\implies X \sim \mathcal{N}(0, \alpha_t(1-\alpha_{t-1})I)\\ 0 + \sqrt{1-\alpha_t}\varepsilon_{t-1} &\implies Y \sim \mathcal{N}(0, (1-\alpha_{t})I) \end{aligned} 0+αt(1αt1) εt20+1αt εt1XN(0,αt(1αt1)I)YN(0,(1αt)I)
Z = X + Y Z = X + Y Z=X+Y ,我们知道,如果 X ∼ N ( μ X , σ X 2 ) , Y ∼ N ( μ Y , σ Y 2 ) X \sim \mathcal{N}(\mu_X, \sigma_X^2), \quad Y \sim \mathcal{N}(\mu_Y, \sigma_Y^2) XN(μX,σX2),YN(μY,σY2),则 Z ∼ N ( μ X + μ Y , σ X 2 + σ Y 2 ) Z \sim \mathcal{N}(\mu_X+\mu_Y, \sigma_X^2+\sigma_Y^2) ZN(μX+μY,σX2+σY2)

代入 X X X Y Y Y 的实际数值可得
μ X = 0 μ Y = 0 σ X 2 + σ Y 2 = α t ( 1 − α t − 1 ) + ( 1 − α t ) = α t − α t α t − 1 + 1 − α t = 1 − α t α t − 1 \begin{aligned} \mu_X &= 0 \qquad \mu_Y = 0\\ \\ \sigma_X^2+\sigma_Y^2 &= \alpha_t(1-\alpha_{t-1}) + (1-\alpha_{t})\\ &=\cancel{\alpha_t}-\alpha_t\alpha_{t-1}+1-\cancel{\alpha_{t}}\\ &=1-\alpha_t\alpha_{t-1} \end{aligned} μXσX2+σY2=0μY=0=αt(1αt1)+(1αt)=αt αtαt1+1αt =1αtαt1
所以 Z ∼ N ( 0 , ( 1 − α t α t − 1 ) I ) Z \sim \mathcal{N}(0, (1-\alpha_t\alpha_{t-1})I) ZN(0,(1αtαt1)I),应用重参数化技巧即可得到:
X + Y = Z ∼ N ( 0 , ( 1 − α t α t − 1 ) I ) = 0 + 1 − α t α t − 1   ε ˉ t − 2 = 1 − α t α t − 1   ε ˉ t − 2 X+Y = Z \sim \mathcal{N}(0, (1-\alpha_t\alpha_{t-1})I)=0+\sqrt{1-\alpha_t\alpha_{t-1}}\:\bar\varepsilon_{t-2}=\sqrt{1-\alpha_t\alpha_{t-1}}\:\bar\varepsilon_{t-2} X+Y=ZN(0,(1αtαt1)I)=0+1αtαt1 εˉt2=1αtαt1 εˉt2
这就得到了第五行的结果。

重复以上步骤,最终我们将得到一个仅取决于输入图像 x 0 x_0 x0 的公式:
x t = α t ˉ x 0 + 1 − α ˉ t ε (3) x_t=\sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha}_t}\varepsilon \tag{3} xt=αtˉ x0+1αˉt ε(3)
这样我们就可以使用公式(3)在任何时间帧 t t t 直接对 x t x_t xt 进行采样,这极大提高了正向扩散过程的执行效率。

逆向扩散过程

在这里插入图片描述

图3. 逆向扩散过程

逆向扩散过程可以用下面的公式描述:
q ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ ~ t ( x t , x 0 ) , β ~ t I ) q(x_{t-1}|x_{t}) = \mathcal{N}(x_{t-1};\tilde\mu_t(x_t, x_0),\tilde\beta_tI) q(xt1xt)=N(xt1;μ~t(xt,x0),β~tI)
与正向过程不同,我们不能使用 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt) 来逆转噪声,因为它很难处理(无法计算)。

因此,我们需要训练神经网络 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt) 来近似 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt)
p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , ∑ θ ( x t , t ) ) p_\theta(x_{t-1}|x_{t}) = \mathcal{N}(x_{t-1};\mu_\theta(x_t, t),\sum_\theta (x_t, t)) pθ(xt1xt)=N(xt1;μθ(xt,t),θ(xt,t))
近似值 $pθ(xₜ₋₁|xₜ) $服从正态分布,其均值和方差需要满足:
{ μ θ ( x t , t ) : = μ ~ t ( x t , x 0 ) ∑ θ ( x t , t ) : = β ~ t I \begin{cases} \mu_\theta(x_t, t) &:= \tilde\mu_t(x_t, x_0)\\ \sum_\theta(x_t, t) &:= \tilde\beta_tI \end{cases} {μθ(xt,t)θ(xt,t):=μ~t(xt,x0):=β~tI

损失函数

我们可以将损失定义为负对数似然
Loss = − log ⁡ ( p θ ( x 0 ) ) \text{Loss} = -\log(p_\theta(x_0)) Loss=log(pθ(x0))
其中 p θ ( x 0 ) p_\theta(x_0) pθ(x0) 依赖于 x 1 , x 2 , … , x T x_1, x_2, \dots, x_T x1,x2,,xT ,因此处理起来很棘手。

不难发现,这里的设置与变分下界中的设置非常相似。因此我们可以绕开棘手的损失函数本身,转而优化变分下界。通过优化可计算下界,我们可以间接优化棘手的损失函数。

在这里插入图片描述

下面是变分下界的推导和展开:
− log ⁡ p θ ( x 0 ) ≤ − log ⁡ p θ ( x 0 ) + D K L ( q ( x 1 : T   ∣   x 0 )   ∣ ∣   p θ ( x 1 : T   ∣   x 0 ) ) ⋮ − log ⁡ p θ ( x 0 ) ≤ E q [ log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) ] ⋮ − log ⁡ p θ ( x 0 ) ≤ 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 ] \begin{aligned} -\log p_\theta(x_0) &\le -\log p_\theta(x_0) + D_{KL}\big(q(x_{1:T}\:|\:x_0)\:||\:p_\theta(x_{1:T}\:|\:x_0)\big)\\ \vdots\\ -\log p_\theta(x_0) &\le \mathbb{E}_q\Big[\log \frac{q(x_{1:T}|x_0)}{p_\theta(x_{0:T})}\Big]\\ \vdots\\ -\log p_\theta(x_0) &\le \mathbb{E}_q\Big[\underbrace{D_{KL}(q(x_T|x_0)||p_\theta(x_T))}_{L_T} + \sum_{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}\Big] \end{aligned} logpθ(x0)logpθ(x0)logpθ(x0)logpθ(x0)+DKL(q(x1:Tx0)∣∣pθ(x1:Tx0))Eq[logpθ(x0:T)q(x1:Tx0)]Eq[LT DKL(q(xTx0)∣∣pθ(xT))+t=2TLt1 DKL(q(xt1xt,x0)∣∣pθ(xt1xt))L0 logpθ(x0x1)]
其中 E q [ log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) ] \mathbb{E}_q\Big[\log \frac{q(x_{1:T}|x_0)}{p_\theta(x_{0:T})}\Big] Eq[logpθ(x0:T)q(x1:Tx0)] 就是变分下界;展开后的公式由3部分构成,我将其分别命名为 L T , L t − 1 , L 0 L_T, L_{t-1}, L_0 LT,Lt1,L0。下面重点解释一下这3部分。

L T L_T LT : 常数项

L T = D K L ( q ( x T ∣ x 0 ) ∣ ∣ p θ ( x T ) ) L_T = D_{KL}(q(x_T|x_0)||p_\theta(x_T)) LT=DKL(q(xTx0)∣∣pθ(xT))

由于 q ( x T ∣ x 0 ) q(x_T|x_0) q(xTx0) 没有可学习的参数, p θ ( x T ) p_\theta(x_T) pθ(xT) 只是一个高斯噪声概率,因此这一项在训练期间是一个常数,可以忽略。

L t − 1 L_{t-1} Lt1 : 逐步去噪项

L t − 1 = D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) L_{t-1} = D_{KL}(q(x_{t-1}|x_t,x_0)||p_\theta(x_{t-1}|x_t)) Lt1=DKL(q(xt1xt,x0)∣∣pθ(xt1xt))

这一项对目标去噪步骤 q q q 和近似去噪步骤 p θ p_\theta pθ 进行比较。这里通过以 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 q q p θ p_\theta pθ
q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ ( x t , x 0 ) , β ~ t I ) β ~ t = 1 − α ˉ t − 1 1 − α ˉ t ⋅ β t μ ~ ( x t , x 0 ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + α ˉ t − 1 β t 1 − α ˉ t x 0 ⋮ μ ~ ( x t ) = 1 α t ( x t − 1 − α t 1 − α ˉ t ε t ) q(x_{t-1}|x_t,x_0) = \mathcal{N}(x_{t-1};\tilde\mu(x_t, x_0), \tilde\beta_tI)\\ \tilde\beta_t = \frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t} \sdot \beta_t\\ \tilde\mu(x_t, x_0) = \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\\ \vdots \\ \tilde\mu(x_t) = \frac{1}{\sqrt{\alpha_t}}\Big(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\varepsilon_t\Big) q(xt1xt,x0)=N(xt1;μ~(xt,x0),β~tI)β~t=1αˉt1αˉt1βtμ~(xt,x0)=1αˉtαt (1αˉt1)xt+1αˉtαˉt1 βtx0μ~(xt)=αt 1(xt1αˉt 1αtεt)
经过一系列的推导, q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0) 的均值 μ ~ t \tilde\mu_t μ~t 如上所示。其中 x 0 = 1 α ˉ t ( x t − 1 − α ˉ t ε t ) x_0 = \frac{1}{\sqrt{\bar\alpha_t}}\Big(x_t-\sqrt{1-\bar\alpha_t}\varepsilon_t\Big) x0=αˉt 1(xt1αˉt εt)

为了逼近目标去噪步骤 q q q,我们只需要使用神经网络来逼近其均值。因此,我们将近似均值 μ θ \mu_\theta μθ 设置为与目标均值 μ ~ t \tilde{\mu}_t μ~t 相同的形式(使用可学习的神经网络 ε θ \varepsilon_\theta εθ):
μ ~ ( x t ) = 1 α t ( x t − 1 − α t 1 − α ˉ t ε t ) μ θ ( x t , t ) = 1 α t ( x t − 1 − α t 1 − α ˉ t ε θ ( x t , t ) ) \begin{aligned} \tilde\mu(x_t) &= \frac{1}{\sqrt{\alpha_t}}\Big(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\boxed{\varepsilon_t}\Big)\\ \mu_\theta(x_t,t) &= \frac{1}{\sqrt{\alpha_t}}\Big(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\boxed{\varepsilon_\theta(x_t,t)}\Big) \end{aligned} μ~(xt)μθ(xt,t)=αt 1(xt1αˉt 1αtεt)=αt 1(xt1αˉt 1αtεθ(xt,t))
目标均值和近似均值之间的比较可以使用均方误差 (MSE) 来完成:
L t = E x 0 , ε [ 1 2 σ t 2 ∣ ∣ μ ~ t ( x t ) − μ θ ( x t , t ) ∣ ∣ 2 ] = E x 0 , ε [ 1 2 σ t 2 ∣ ∣ 1 α t ( x t − 1 − α t 1 − α ˉ t ε t ) − 1 α t ( x t − 1 − α t 1 − α ˉ t ε θ ( x t , t ) ) ∣ ∣ 2 ] = E x 0 , ε [ ( 1 − α t ) 2 2 α t ( 1 − α ˉ t ) σ t 2 ∣ ∣ ε t − ε θ ( x t , t ) ∣ ∣ 2 ] \begin{aligned} L_t &= \mathbb{E}_{x_0,\varepsilon}\Big[\frac{1}{2\sigma_t^2} ||\tilde{\mu}_t(x_t)-\mu_\theta(x_t, t)||^2 \Big]\\ &= \mathbb{E}_{x_0,\varepsilon}\Big[\frac{1}{2\sigma_t^2} ||\frac{1}{\sqrt{\alpha_t}}\big(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\varepsilon_t\big) - \frac{1}{\sqrt{\alpha_t}}\big(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\varepsilon_\theta(x_t,t)\big)||^2 \Big]\\ &= \mathbb{E}_{x_0,\varepsilon}\Big[\frac{(1-\alpha_t)^2}{2\alpha_t(1-\bar\alpha_t)\sigma_t^2}||\varepsilon_t-\varepsilon_\theta(x_t,t)||^2\Big] \end{aligned} Lt=Ex0,ε[2σt21∣∣μ~t(xt)μθ(xt,t)2]=Ex0,ε[2σt21∣∣αt 1(xt1αˉt 1αtεt)αt 1(xt1αˉt 1αtεθ(xt,t))2]=Ex0,ε[2αt(1αˉt)σt2(1αt)2∣∣εtεθ(xt,t)2]
上面公式中 ( 1 − α t ) 2 2 α t ( 1 − α ˉ t ) σ t 2 \frac{(1-\alpha_t)^2}{2\alpha_t(1-\bar\alpha_t)\sigma_t^2} 2αt(1αˉt)σt2(1αt)2 是个常数,可以忽略掉,因此简化后的逐步去噪损失为:
L t simple = E t ∼ [ 1 , T ] , x 0 , ε t [ ∣ ∣ ε t − ε θ ( x t , t ) ∣ ∣ 2 ] L_t^{\text{simple}} = \mathbb{E}_{t \sim [1,T],x_0,\varepsilon_t}\Big[||\varepsilon_t-\varepsilon_\theta(x_t,t)||^2\Big] Ltsimple=Et[1,T],x0,εt[∣∣εtεθ(xt,t)2]
实践中,通过忽略加权项并简单地将目标噪声和预测噪声与 MSE 进行比较,可以获得更好的结果。

因此,事实证明,为了逼近所需的去噪步骤 q q q ,我们只需要使用神经网络 ε θ \varepsilon_\theta εθ 来逼近噪声 ε t \varepsilon_t εt

L 0 L_0 L0 : 重构项

这是最后一步去噪的重构损失,在训练过程中可以忽略,原因如下:

  • 可以使用 L t − 1 L_{t-1} Lt1 中的相同神经网络对其进行近似。
  • 忽略它会使样本质量更好,且更易于实施。

简化损失函数

上面分别解释了 L T , L t − 1 , L 0 L_T, L_{t-1}, L_0 LT,Lt1,L0 。我们可以发现 L T L_T LT L 0 L_0 L0 都可以忽略,那么我们的损失函数就可以简化为:
L simple = E t , x 0 , ε [ ∣ ∣ ε t − ε θ ( x t , t ) ∣ ∣ 2 ] x t = α t ˉ x 0 + 1 − α ˉ t ε L_{\text{simple}} = \mathbb{E}_{t,x_0,\varepsilon}\Big[||\varepsilon_t-\varepsilon_\theta(x_t,t)||^2\Big]\\ x_t=\sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha}_t}\varepsilon Lsimple=Et,x0,ε[∣∣εtεθ(xt,t)2]xt=αtˉ x0+1αˉt ε

U-Net 模型

数据集

在每轮迭代:

  • 为每个训练样本(图像)选择一个随机时间步长 t t t
  • 将高斯噪声(对应于 t t t)应用于每个图像。
  • 将时间步长转换为嵌入(向量)。

在这里插入图片描述

训练

官方给出的训练算法如下:

在这里插入图片描述

下面详细解释一下训练步骤是如何工作的:

在这里插入图片描述

逆向扩散

在这里插入图片描述

我们可以使用上述算法从噪声中生成图像。 下图是具体说明:

在这里插入图片描述

注意,在最后一步中,我们只是简单地输出学习到的均值 μ θ ( x 1 , 1 ) \mu_\theta(x_1, 1) μθ(x1,1),而不向其添加噪声。

总结

最后对本文的要点做一个总结:

  • 扩散模型分为正向扩散和逆向扩散两部分。
  • 正向扩散可以使用闭合的公式来完成。
  • 可以使用经过训练的神经网络完成逆向扩散。
  • 为了逼近去噪步骤 q q q,我们只需要使用神经网络 ε θ \varepsilon_\theta εθ 来近似噪声 ε t \varepsilon_t εt
  • 对简化损失函数的训练产生更好的样本质量。

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

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

相关文章

CodeForces..构建美丽数组.[简单].[情况判断].[特殊条件下的最小值奇偶问题]

题目描述&#xff1a; 题目解读&#xff1a; 给定数组a[n]&#xff0c;ai>0&#xff0c;问能否得到一个数组b[n]&#xff0c;数组b中的元素都大于0且全奇or全偶。 数组b中的元素biai or ai-aj&#xff08;1<j<n&#xff09;。 解题思路&#xff1a; 数组b中的元素都…

IDEA代码替换

IDEA代码替换 快捷键 当前文件内容 C t r l R CtrlR CtrlR 全局替换 C t r l S h i f t R CtrlShiftR CtrlShiftR 使用 第一行输入栏&#xff1a;输入被替换内容 第二行输入栏&#xff1a;输入替换内容 详细使用 第一行输入栏后第一个图标&#xff1a;换行 第一行输…

数论专题(3)逆元

目录 初步认识 逆元 定义 应用 费马小定理 好久没有更新我们的数论专题板块了&#xff0c;今天&#xff0c;我们就来探究一下新知——逆元。 初步认识 在数据非常大的情景下&#xff0c;我们通常会对数据先进行取模运算&#xff0c;来计算在一定的范围内进行处理。而运算…

SpringBoot启动扩展应用:干预优化+加快启动时间

目录 一、SpringBoot启动配置原理简述 二、SpringBoot启动过程干预 &#xff08;一&#xff09;ApplicationContextInitializer扩展 修改Spring Boot默认的environment属性 添加自定义的PropertySource 注册自定义bean &#xff08;二&#xff09;SpringApplicationRunL…

【计算思维题】少儿编程 蓝桥杯青少组计算思维真题及详细解析第6套

少儿编程 蓝桥杯青少组计算思维真题及详细解析第6套 1、兰兰有一些数字卡片,从 1 到 100 的数字都有,她拿出几张数字卡片按照一定顺序摆放。想一想,第 5 张卡片应该是 A、11 B、12 C、13 D、14 答案:C 考点分析:主要考查小朋友们的观察能力和数学推理能力,从给定的图…

[Nacos] Nacos Server处理心跳请求 (八)

文章目录 1.InstanceController#beat()1.1 serviceManager.registerInstance()1.2 serviceManager.getService()1.3 处理本次心跳 1.InstanceController#beat() CanDistroPutMapping("/beat")Secured(parser NamingResourceParser.class, action ActionTypes.WRITE…

面了个字节出来的00后,我见识到了什么叫“自动化测试+性能测试”

前两天看到字节一个老哥写的帖子&#xff0c;提到高阶测试工程师必须掌握的技能&#xff0c;其中他明确提出了“精通性能测试”。 为啥性能测试对测试工程师如此重要&#xff1f; 性能测试是指在特定的负载情况下&#xff0c;测试目标系统的响应时间、吞吐量、并发用户数、资源…

Eclipse 教程Ⅳ

Eclipse 工作空间(Workspace) eclipse 工作空间包含以下资源&#xff1a; 项目文件文件夹 项目启动时一般可以设置工作空间&#xff0c;你可以将其设置为默认工作空间&#xff0c;下次启动后无需再配置&#xff1a; 工作空间(Workspace)有明显的层次结构。 项目在最顶级&…

HTML 教程1

HTML文档的后缀名 .html.htm 以上两种后缀名没有区别&#xff0c;都可以使用。 HTML 实例 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body><h1&g…

QTableWidget加载大文件数据

由于最近在项目中需要加载几GB的文件&#xff0c;并且需要在QTableWidget中进行显示&#xff1b;粗略估计可能得有几千万行&#xff0c;如果使用常规的方法&#xff0c;直接在QTableWidget中进行全部显示&#xff0c;会比较卡。所以查找相关资料&#xff0c;最终想到了一个比较…

算法基础学习笔记——⑧堆\哈希表

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 ✨堆 &#x1f353;堆模板&#xff1a; ✨哈希表 &#x1f353;一般哈希模板&#xff1a; &#x1f353;字符串哈希模板&#xff1a; 前言&#xff1a;算法学习笔记记录日常分享&#xff0c;需要的看哈O(…

【是C++,不是C艹】 类与对象 | 认识面向对象 | 访问限定符 | 封装 | this指针

&#x1f49e;&#x1f49e;欢迎来到 Claffic 的博客&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《是C&#xff0c;不是C艹》&#x1f448; 前言&#xff1a; 在C入门之后&#xff0c;就要进入C的第一个核心&#xff1a;类与对象&#xff0c;这期带大家认识认识…

Multichain跨链无法到账,DApp真去中心化or伪去中心化?

团队出问题&#xff0c;DApp就用不了&#xff0c;multichain被不少人质疑伪去中心化&#xff0c;甚至更有人开始质疑web3&#xff0c;那么这到底是怎么回事呢&#xff1f; 跨链桥问题让DApp的去中心化引发质疑 事情是这样的&#xff0c;5月24下午0xscope发推称与multichain有关…

leetcode 11.盛最多水的容器

题目描述 跳转到leetocde题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff…

RabbitMQ手动ACK与死信队列

为了保证消息从队列可靠的达到消费者&#xff0c;RabbitMQ 提供了消息确认机制&#xff08;Message Acknowledgement&#xff09;。 默认情况下RabbitMQ在消息发出后就立即将这条消息删除,而不管消费端是否接收到,是否处理完,导致消费端消息丢失时RabbitMQ自己又没有这条消息了…

spring-Bean管理-springboot原理-Maven高级

spring-Bean管理-springboot原理-Maven高级 配置优先级Bean管理1.获取bean2.bean作用域3.第三方bean SpringBoot原理Maven高级1.分模块设计与开发2.继承与聚合3.私服1.介绍2.资源上传与下载 配置优先级 优先级(低→高) application.yaml&#xff08;忽略) application.yml appl…

利用Servlet编写第一个“hello world“(续)

利用Servlet编写第一个“hello world“ &#x1f50e;通过插件 Smart Tomcat 简化 打包代码 与 部署 操作下载Smart Tomcat配置Smart Tomcat &#x1f50e;Servlet 中的常见错误404(Not Found)&#x1f36d;请求路径出错&#x1f36d;war 包未被正确加载 405(Method Not Allowe…

【Android-JetpackCompose】13、实战在线课程 App

文章目录 一、BottomNavigation 底部导航1.1 底部导航栏的布局、点击1.2 设置 bottomBar 的颜色1.3 设置顶部 actionBar 的颜色 二、主页 StudyScreen2.1 顶部状态栏2.2 一、BottomNavigation 底部导航 1.1 底部导航栏的布局、点击 首先&#xff0c;构造 NavigationItem 的 d…

安装stable-diffusion

安装流程&#xff1a; 下载stable-diffusion源码 <https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/tag/v1.2.1>安装python <https://www.python.org/ftp/python/3.10.6/python-3.10.6-amd64.exe>添加host 打开C:\Windows\System32\drivers\etc…

django基于scrapy的音乐歌曲分析及推荐系统

而在线音乐网站作为一个网络载体&#xff0c;在音乐的传播&#xff0c;创作&#xff0c;欣赏等方面对音乐的发展产生了前所未有的影响—。 &#xff08;1&#xff09;电脑网络技术的发展使人们通过音乐网站接触到了多的音乐模式。 &#xff08;2&#xff09;网民数量的激增使更…