AI学习交流qq群 | 873673497 |
官网 | turingevo.com |
邮箱 | wmx@turingevo.com |
github | https://github.com/turingevo |
huggingface | https://huggingface.co/turingevo |
论文《 Denoising Diffusion Probabilistic Models 》前向过程的公式推导
原文:
推导前向加噪声的过程
这张图展示的是扩散过程的一个重要特性:可以直接基于原始数据 x 0 x_0 x0 来对任意时间步 t 的 x t x_t xt 进行采样。具体的推导过程如下:
-
初始化:
x t = α ˉ t x 0 + 1 − α ˉ t ϵ x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon xt=αˉtx0+1−αˉtϵ
其中, α ˉ t = ∏ i = 1 t α i \bar{\alpha}_t = \prod_{i=1}^{t} \alpha_i αˉt=∏i=1tαi, ϵ ∼ N ( 0 , I ) \epsilon \sim N(0, I) ϵ∼N(0,I) -
递推公式:
x t = α t x t − 1 + 1 − α t ϵ t − 1 x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{1 - \alpha_t} \epsilon_{t-1} xt=αtxt−1+1−αtϵt−1
其中, α t = 1 − β t \alpha_t = 1 - \beta_t αt=1−βt -
逐层展开:
x t = α t ( α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 2 ) + 1 − α t ϵ t − 1 x_t = \sqrt{\alpha_t} \left( \sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{1 - \alpha_{t-1}} \epsilon_{t-2} \right) + \sqrt{1 - \alpha_t} \epsilon_{t-1} xt=αt(αt−1xt−2+1−αt−1ϵt−2)+1−αtϵt−1
继续展开,直到 x 0 x_0 x0:
x t = α t α t − 1 ⋯ α 1 x 0 + 1 − α t α t − 1 ⋯ α 1 ϵ x_t = \sqrt{\alpha_t \alpha_{t-1} \cdots \alpha_1} x_0 + \sqrt{1 - \alpha_t \alpha_{t-1} \cdots \alpha_1} \epsilon xt=αtαt−1⋯α1x0+1−αtαt−1⋯α1ϵ
其中 ϵ = 1 − α t α t − 1 ⋯ α 1 ⋅ ϵ ~ t − 1 \epsilon = \sqrt{1 - \alpha_t \alpha_{t-1} \cdots \alpha_1} \cdot \tilde{\epsilon}_{t-1} ϵ=1−αtαt−1⋯α1⋅ϵ~t−1 -
高斯分布的相加:
如果 X ∼ N ( μ X , σ X 2 ) X \sim N(\mu_X, \sigma_X^2) X∼N(μX,σX2) 和 Y ∼ N ( μ Y , σ Y 2 ) Y \sim N(\mu_Y, \sigma_Y^2) Y∼N(μY,σY2),则 Z = X + Y Z = X + Y Z=X+Y 服从 N ( μ X + μ Y , σ X 2 + σ Y 2 ) N(\mu_X + \mu_Y, \sigma_X^2 + \sigma_Y^2) N(μX+μY,σX2+σY2) -
最终结果:
x t = α ˉ t x 0 + 1 − α ˉ t ϵ x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon xt=αˉtx0+1−αˉtϵ
其中, ϵ ∼ N ( 0 , I ) \epsilon \sim N(0, I) ϵ∼N(0,I)
这个推导过程表明,通过逐层展开并利用高斯分布的相加性质,可以从原始数据 x 0 x_0 x0 直接生成任意时间步 t 的样本 x t x_t xt ,这就是DDPM模型前向计算给图片加噪声的过程!!!
关于上面步骤5的推导,高斯分布的相加性质,准确说是标准正态分布的相加
要从给定的表达式
x t = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 x_t = \sqrt{\alpha_t \alpha_{t-1}} x_{t-2} + \sqrt{\alpha_t (1 - \alpha_{t-1})} \epsilon_{t-2} + \sqrt{1 - \alpha_t} \epsilon_{t-1} xt=αtαt−1xt−2+αt(1−αt−1)ϵt−2+1−αtϵt−1
推导到 x t = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ ′ x_t = \sqrt{\alpha_t \alpha_{t-1}} x_{t-2} + \sqrt{1 - \alpha_t \alpha_{t-1}} \epsilon' xt=αtαt−1xt−2+1−αtαt−1ϵ′
我们需要证明 ϵ ′ \epsilon' ϵ′可以表示为 ϵ t − 2 \epsilon_{t-2} ϵt−2 和 ϵ t − 1 \epsilon_{t-1} ϵt−1 的线性组合,并且这个组合的方差为: 1 − α t α t − 1 1 - \alpha_t \alpha_{t-1} 1−αtαt−1
- 步骤 1:定义新的随机变量 ϵ ′ \epsilon' ϵ′
ϵ ′ = α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 \epsilon' = \sqrt{\alpha_t (1 - \alpha_{t-1})} \epsilon_{t-2} + \sqrt{1 - \alpha_t} \epsilon_{t-1} ϵ′=αt(1−αt−1)ϵt−2+1−αtϵt−1
-
步骤 2:计算 ϵ ′ \epsilon' ϵ′ 的期望值
由于 ϵ t − 2 \epsilon_{t-2} ϵt−2 和 ϵ t − 1 \epsilon_{t-1} ϵt−1 都是零均值的标准正态分布随机变量,即 E [ ϵ t − 2 ] = 0 \mathbb{E}[\epsilon_{t-2}] = 0 E[ϵt−2]=0 和 E [ ϵ t − 1 ] = 0 \mathbb{E}[\epsilon_{t-1}] = 0 E[ϵt−1]=0,因此:
E [ ϵ ′ ] = E [ α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 ] \mathbb{E}[\epsilon'] = \mathbb{E}[\sqrt{\alpha_t (1 - \alpha_{t-1})} \epsilon_{t-2} + \sqrt{1 - \alpha_t} \epsilon_{t-1}] E[ϵ′]=E[αt(1−αt−1)ϵt−2+1−αtϵt−1]
E [ ϵ ′ ] = α t ( 1 − α t − 1 ) E [ ϵ t − 2 ] + 1 − α t E [ ϵ t − 1 ] \mathbb{E}[\epsilon'] = \sqrt{\alpha_t (1 - \alpha_{t-1})} \mathbb{E}[\epsilon_{t-2}] + \sqrt{1 - \alpha_t} \mathbb{E}[\epsilon_{t-1}] E[ϵ′]=αt(1−αt−1)E[ϵt−2]+1−αtE[ϵt−1]
E [ ϵ ′ ] = 0 \mathbb{E}[\epsilon'] = 0 E[ϵ′]=0
所以 ϵ ′ \epsilon' ϵ′也是零均值的 -
步骤 3:计算 ϵ ′ \epsilon' ϵ′的方差
接下来计算 ϵ ′ \epsilon' ϵ′ 的方差。由于 ϵ t − 2 \epsilon_{t-2} ϵt−2 和 ϵ t − 1 \epsilon_{t-1} ϵt−1 是独立的标准正态分布随机变量,即 Var ( ϵ t − 2 ) = 1 \text{Var}(\epsilon_{t-2}) = 1 Var(ϵt−2)=1 和 Var ( ϵ t − 1 ) = 1 \text{Var}(\epsilon_{t-1}) = 1 Var(ϵt−1)=1,(因为相互独立)它们之间的协方差为零,因此:
Var ( ϵ ′ ) = Var ( α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 ) \text{Var}(\epsilon') = \text{Var}(\sqrt{\alpha_t (1 - \alpha_{t-1})} \epsilon_{t-2} + \sqrt{1 - \alpha_t} \epsilon_{t-1}) Var(ϵ′)=Var(αt(1−αt−1)ϵt−2+1−αtϵt−1)
Var ( ϵ ′ ) = Var ( α t ( 1 − α t − 1 ) ϵ t − 2 ) + Var ( 1 − α t ϵ t − 1 ) \text{Var}(\epsilon') = \text{Var}(\sqrt{\alpha_t (1 - \alpha_{t-1})} \epsilon_{t-2}) + \text{Var}(\sqrt{1 - \alpha_t} \epsilon_{t-1}) Var(ϵ′)=Var(αt(1−αt−1)ϵt−2)+Var(1−αtϵt−1)
Var ( ϵ ′ ) = ( α t ( 1 − α t − 1 ) ) 2 Var ( ϵ t − 2 ) + ( 1 − α t ) 2 Var ( ϵ t − 1 ) \text{Var}(\epsilon') = (\sqrt{\alpha_t (1 - \alpha_{t-1})})^2 \text{Var}(\epsilon_{t-2}) + (\sqrt{1 - \alpha_t})^2 \text{Var}(\epsilon_{t-1}) Var(ϵ′)=(αt(1−αt−1))2Var(ϵt−2)+(1−αt)2Var(ϵt−1)
Var ( ϵ ′ ) = α t ( 1 − α t − 1 ) ⋅ 1 + ( 1 − α t ) ⋅ 1 \text{Var}(\epsilon') = \alpha_t (1 - \alpha_{t-1}) \cdot 1 + (1 - \alpha_t) \cdot 1 Var(ϵ′)=αt(1−αt−1)⋅1+(1−αt)⋅1
Var ( ϵ ′ ) = α t ( 1 − α t − 1 ) + 1 − α t \text{Var}(\epsilon') = \alpha_t (1 - \alpha_{t-1}) + 1 - \alpha_t Var(ϵ′)=αt(1−αt−1)+1−αt
Var ( ϵ ′ ) = α t − α t α t − 1 + 1 − α t \text{Var}(\epsilon') = \alpha_t - \alpha_t \alpha_{t-1} + 1 - \alpha_t Var(ϵ′)=αt−αtαt−1+1−αt
Var ( ϵ ′ ) = 1 − α t α t − 1 \text{Var}(\epsilon') = 1 - \alpha_t \alpha_{t-1} Var(ϵ′)=1−αtαt−1 -
步骤 4:替换原表达式中的 ϵ t − 2 \epsilon_{t-2} ϵt−2 和 ϵ t − 1 \epsilon_{t-1} ϵt−1
现在我们已经证明了 ϵ ′ \epsilon' ϵ′ 是零均值且方差为 1 − α t α t − 1 1 - \alpha_t \alpha_{t-1} 1−αtαt−1 的随机变量,可以将原表达式中的 ϵ t − 2 \epsilon_{t-2} ϵt−2 和 ϵ t − 1 \epsilon_{t-1} ϵt−1 替换为 ϵ ′ \epsilon' ϵ′:
x t = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 x_t = \sqrt{\alpha_t \alpha_{t-1}} x_{t-2} + \sqrt{\alpha_t (1 - \alpha_{t-1})} \epsilon_{t-2} + \sqrt{1 - \alpha_t} \epsilon_{t-1} xt=αtαt−1xt−2+αt(1−αt−1)ϵt−2+1−αtϵt−1
x t = α t α t − 1 x t − 2 + ϵ ′ x_t = \sqrt{\alpha_t \alpha_{t-1}} x_{t-2} + \epsilon' xt=αtαt−1xt−2+ϵ′
由于 ϵ ′ \epsilon' ϵ′ 的方差为 1 − α t α t − 1 1 - \alpha_t \alpha_{t-1} 1−αtαt−1,我们可以写成:
x
t
=
α
t
α
t
−
1
x
t
−
2
+
1
−
α
t
α
t
−
1
ϵ
x_t = \sqrt{\alpha_t \alpha_{t-1}} x_{t-2} + \sqrt{1 - \alpha_t \alpha_{t-1}} \epsilon
xt=αtαt−1xt−2+1−αtαt−1ϵ
其中
ϵ
\epsilon
ϵ 服从正态分布
这个 x t x_t xt 展开到 x t − 2 x_{t-2} xt−2公式,可以当做正太分布的相加性质,大家可以当做一个结果来用!!!