Diffusion Model 深入剖析

202 篇文章 4 订阅

在这里插入图片描述

文章目录
    • 概述
    • 正向扩散过程
      • 公式推导
    • 逆向扩散过程
      • 损失函数
        • L _ T L\_T L_T : 常数项
        • L _ t − 1 L\_{t-1} L_t−1 : 逐步去噪项
        • L _ 0 L\_0 L_0 : 重构项
      • 简化损失函数
    • U-Net 模型
      • 数据集
      • 训练
      • 逆向扩散
    • 总结
概述

在这里插入图片描述

图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(xt​∣xt−1​)=N(xt​;1−βt​ ​xt−1​,βt​I)(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) x0​∼q(x)), β t \beta_t βt​ 是 variance schedule, 0 ≤ β t ≤ 1 0 \le \beta_t \le 1 0≤βt​≤1,且 β 0 \beta_0 β0​ 较小, β T \beta_T βT​ 较大。 I I I 是单位矩阵。

公式推导

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

如果 z ∼ N ( μ , σ 2 ) z \sim \mathcal{N}(\mu, \sigma^2) z∼N(μ,σ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​ ​xt−1​+βt​ ​εt−1​(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 x\_{t-1} x_t−1}+\sqrt{1-\alpha_t}\varepsilon_{t-1}&\dots\dots 设\alpha_t = 1-\beta_t\\ &=\sqrt{\alpha_t}\:\fcolorbox{red}{white}{ B i g ( s q r t a l p h a _ t − 1 x _ t − 2 + s q r t 1 − a l p h a _ t − 1 v a r e p s i l o n _ t − 2 B i g ) \\Big(\\sqrt{\\alpha\_{t-1}}x\_{t-2}+\\sqrt{1-\\alpha\_{t-1}}\\varepsilon\_{t-2}\\Big) Big(sqrtalpha_t−1x_t−2+sqrt1−alpha_t−1varepsilon_t−2Big)}+\sqrt{1-\alpha_t}\varepsilon_{t-1}&\dots\dots 递归展开x_{t-1}\\ &=\sqrt{\alpha_t\alpha_{t-1}}x_{t-2}+\:\fcolorbox{red}{white}{ s q r t a l p h a _ t ( 1 − a l p h a _ t − 1 ) v a r e p s i l o n _ t − 2 + s q r t 1 − a l p h a _ t v a r e p s i l o n _ t − 1 \\sqrt{\\alpha\_t(1-\\alpha\_{t-1})}\\varepsilon\_{t-2}+\\sqrt{1-\\alpha\_t}\\varepsilon\_{t-1} sqrtalpha_t(1−alpha_t−1)varepsilon_t−2+sqrt1−alpha_tvarepsilon_t−1}&\dots\dots 乘法分配律乘开\\ &=\sqrt{\alpha_t\alpha_{t-1}}x_{t-2}+\:\fcolorbox{red}{white}{ s q r t 1 − a l p h a _ t a l p h a _ t − 1 b a r v a r e p s i l o n _ t − 2 \\sqrt{1-\\alpha\_t\\alpha\_{t-1}}\\bar{\\varepsilon}\_{t-2} sqrt1−alpha_talpha_t−1barvarepsilon_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​ ​xt−1​+βt​ ​εt−1​=αt​ ​xt−1​​+1−αt​ ​εt−1​=αt​ ​(αt−1​ ​xt−2​+1−αt−1​ ​εt−2​)​+1−αt​ ​εt−1​=αt​αt−1​ ​xt−2​+αt​(1−αt−1​) ​εt−2​+1−αt​ ​εt−1​​=αt​αt−1​ ​xt−2​+1−αt​αt−1​ ​εˉt−2​​⋮=αt​αt−1​…α1​ ​x0​+1−αt​αt−1​…α1​ ​ε=αt​ˉ​ ​x0​+1−αˉt​ ​ε​……ε∼N(0,I)……设αt​=1−βt​……递归展开xt−1​……乘法分配律乘开……怎么突然得到这个结果?……αt​ˉ​=i=1∏t​α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−αt−1​) ​εt−2​1−αt​ ​εt−1​​=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​αt−1​ ​xt−2​+X αt​(1−αt−1​) ​εt−2​​​+Y 1−αt​ ​εt−1​​​
应用从重参数化技巧
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−αt−1​) ​εt−2​0+1−αt​ ​εt−1​​⟹X∼N(0,αt​(1−αt−1​)I)⟹Y∼N(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) X∼N(μX​,σX2​),Y∼N(μY​,σY2​),则 Z ∼ N ( μ X + μ Y , σ X 2 + σ Y 2 ) Z \sim \mathcal{N}(\mu_X+\mu_Y, \sigma_X2+\sigma_Y2) Z∼N(μ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_X2+\sigma_Y2 &= \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−αt−1​)+(1−αt​)=αt​ ​−αt​αt−1​+1−αt​ ​=1−αt​αt−1​​
所以 Z ∼ N ( 0 , ( 1 − α t α t − 1 ) I ) Z \sim \mathcal{N}(0, (1-\alpha_t\alpha_{t-1})I) Z∼N(0,(1−αt​αt−1​)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=Z∼N(0,(1−αt​αt−1​)I)=0+1−αt​αt−1​ ​εˉt−2​=1−αt​αt−1​ ​εˉt−2​
这就得到了第五行的结果。

重复以上步骤,最终我们将得到一个仅取决于输入图像 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(xt−1​∣xt​)=N(xt−1​;μ​t​(xt​,x0​),β​t​I)
与正向过程不同,我们不能使用 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt−1​∣xt​) 来逆转噪声,因为它很难处理(无法计算)。

因此,我们需要训练神经网络 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ​(xt−1​∣xt​) 来近似 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt−1​∣xt​):
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θ​(xt−1​∣xt​)=N(xt−1​;μθ​(xt​,t),θ∑​(xt​,t))
近似值 $p_\theta
(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​):=β​t​I​

损失函数

我们可以将损失定义为负对数似然
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:T​∣x0​)∣∣pθ​(x1:T​∣x0​))≤Eq​[logpθ​(x0:T​)q(x1:T​∣x0​)​]≤Eq​[LT​ DKL​(q(xT​∣x0​)∣∣pθ​(xT​))​​+t=2∑T​Lt−1​ DKL​(q(xt−1​∣xt​,x0​)∣∣pθ​(xt−1​∣xt​))​​L0​ −logpθ​(x0​∣x1​)​​]​
其中 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:T​∣x0​)​] 就是变分下界;展开后的公式由3部分构成,我将其分别命名为 L T , L t − 1 , L 0 L_T, L_{t-1}, L_0 LT​,Lt−1​,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(xT​∣x0​)∣∣pθ​(xT​))

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

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

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)) Lt−1​=DKL​(q(xt−1​∣xt​,x0​)∣∣pθ​(xt−1​∣xt​))

这一项对目标去噪步骤 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(xt−1​∣xt​,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(xt−1​∣xt​,x0​)=N(xt−1​;μ​(xt​,x0​),β​t​I)β​t​=1−αˉt​1−αˉt−1​​⋅βt​μ​(xt​,x0​)=1−αˉt​αt​ ​(1−αˉt−1​)​xt​+1−αˉt​αˉt−1​ ​βt​​x0​⋮μ~​(xt​)=αt​ ​1​(xt​−1−αˉt​ ​1−αt​​εt​)
经过一系列的推导, q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt−1​∣xt​,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​(xt​−1−αˉ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​(xt​−1−αˉt​ ​1−αt​​εt​​)=αt​ ​1​(xt​−1−αˉ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_t2}||\varepsilon_t-\varepsilon_\theta(x_t,t)||^2\Big] \end{aligned} Lt​​=Ex0​,ε​[2σt2​1​∣∣μ~​t​(xt​)−μθ​(xt​,t)∣∣2]=Ex0​,ε​[2σt2​1​∣∣αt​ ​1​(xt​−1−αˉt​ ​1−αt​​εt​)−αt​ ​1​(xt​−1−αˉ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_t2} 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} Lt−1​ 中的相同神经网络对其进行近似。
  • 忽略它会使样本质量更好,且更易于实施。
简化损失函数

上面分别解释了 L T , L t − 1 , L 0 L_T, L_{t-1}, L_0 LT​,Lt−1​,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​。
  • 对简化损失函数的训练产生更好的样本质量。

关于AI绘画技术储备

学好 AI绘画 不论是就业还是做副业赚钱都不错,但要学会 AI绘画 还是要有一个学习规划。最后大家分享一份全套的 AI绘画 学习资料,给那些想学习 AI绘画 的小伙伴们一点帮助!

对于0基础小白入门:

如果你是零基础小白,想快速入门AI绘画是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案

包括:stable diffusion安装包、stable diffusion0基础入门全套PDF,视频学习教程。带你从零基础系统性的学好AI绘画!

需要的可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

1.stable diffusion安装包 (全套教程文末领取哈)

随着技术的迭代,目前 Stable Diffusion 已经能够生成非常艺术化的图片了,完全有赶超人类的架势,已经有不少工作被这类服务替代,比如制作一个 logo 图片,画一张虚拟老婆照片,画质堪比相机。

最新 Stable Diffusion 除了有win多个版本,就算说底端的显卡也能玩了哦!此外还带来了Mac版本,仅支持macOS 12.3或更高版本

在这里插入图片描述

2.stable diffusion视频合集

我们在学习的时候,往往书籍源码难以理解,阅读困难,这时候视频教程教程是就很适合了,生动形象加上案例实战,一步步带你入坑stable diffusion,科学有趣才能更方便的学习下去。

在这里插入图片描述

3.stable diffusion模型下载

stable diffusion往往一开始使用时图片等无法达到理想的生成效果,这时则需要通过使用大量训练数据,调整模型的超参数(如学习率、训练轮数、模型大小等),可以使得模型更好地适应数据集,并生成更加真实、准确、高质量的图像。

在这里插入图片描述

4.stable diffusion提示词

提示词是构建由文本到图像模型解释和理解的单词的过程。可以把它理解为你告诉 AI 模型要画什么而需要说的语言,整个SD学习过程中都离不开这本提示词手册。

在这里插入图片描述

5.AIGC视频教程合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述
这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值