DDPM扩散模型
一、前置知识
1. 条件概率知识
P ( A ∣ B ) = P ( A B ) P ( B ) P(A|B) = \frac{P(AB)}{P(B)} P(A∣B)=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(C∣BA)P(BA)=P(C∣BA)P(B∣A)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(BC∣A)=P(B∣A)P(C∣A,B)
P ( C ∣ A , B ) = P ( B C ∣ A ) P ( B ∣ A ) P(C|A, B) = \frac{P(BC| A)}{P(B|A)} P(C∣A,B)=P(B∣A)P(BC∣A)
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(C∣BA)P(BA)=P(C∣B)P(B∣A)P(A)
P ( B C ∣ A ) = P ( B ∣ A ) P ( C ∣ B ) P(B C|A) = P(B|A)P(C|B) P(BC∣A)=P(B∣A)P(C∣B)
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)2−21
KL 散度,又称为相对熵,描述两个概率分布P和Q的差异和相似性,用 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q)表示
显然,散度越小,说明概率Q与概率P之间越接近,那么估计的概率分布与真实的概率分布也就越接近。
KL 散度的性质:
- 非对称性: D K L ≠ D K L ( Q ∣ ∣ P ) D_{KL} \neq D_{KL}(Q || P) DKL=DKL(Q∣∣P)
- 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是最终的图片(一个纯噪声的图片)。
- x 0 ∼ x T x_0 \sim x_T x0∼xT的过程是一个加噪过程,每次从 q ( x t ∣ x t − 1 ) q(x_t|x_{t - 1}) q(xt∣xt−1)分布中取噪声,然后添加到前一个时间步的图片数据中,这样经过T个时间步,我们就能得到一个纯噪声的图片了。
- x T ∼ x 0 x_T \sim x_0 xT∼x0的过程是一个去噪过程,每次从 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t - 1}|x_t) pθ(xt−1∣xt)分布中取噪声,然后使前一个时间步的图片数据减去该噪声,这样经过T个时间步,我们就能得到原始的图片了。
其中 q ( x t ∣ x t − 1 ) q(x_t|x_{t - 1}) q(xt∣xt−1)是自己设定的一个加噪分布,而 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t - 1}|x_t) pθ(xt−1∣xt)是需要神经网络去学习的一个分布,我们会使用参数分布来去对该分布做估计,由于使用了参数重整化的思想( σ × ϵ + μ \sigma \times \epsilon + \mu σ×ϵ+μ,其中 σ \sigma σ是分布的方差, μ \mu μ表示的是分布的均值, ϵ \epsilon ϵ是从标准正态分布中随机采样的一个值),我们加噪过程是从一个标准正态分布中随机采样一个值,然后再进行参数重整化,依据 μ \mu μ和 σ \sigma σ得到特定分布下的噪声,而去噪过程是利用神经网络学习这个噪声,然后在每个时间步上减去预测出的噪声。
三、加噪过程
给定初始数据分布 x 0 ∼ q ( x ) x_0 \sim q(x) x0∼q(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(xt∣xt−1)=N(xt;1−βt⋅xt−1,βtI) 其中 1 − β t ⋅ x t − 1 \sqrt{1 - \beta_t}\cdot x_{t- 1} 1−βt⋅xt−1表示该分布的均值, β 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−βtxt−1+βtzt,其中 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(x1∣x0)分布进行加噪,从而得到