DDPM扩散模型
一、前置知识
1. 条件概率知识
P(A∣B)=P(AB)P(B)P(A|B) = \frac{P(AB)}{P(B)}P(A∣B)=P(B)P(AB)
P(ABC)=P(C∣BA)P(BA)=P(C∣BA)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(BC∣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(BC∣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−>CA -> B -> CA−>B−>C那么有
P(ABC)=P(C∣BA)P(BA)=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(BC∣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 散度为: KL(P,Q)=logσ1σ2+σ12+(μ1−μ2)22σ22−12KL(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的差异和相似性,用DKL(P∣∣Q)D_{KL}(P||Q)DKL(P∣∣Q)表示
显然,散度越小,说明概率Q与概率P之间越接近,那么估计的概率分布与真实的概率分布也就越接近。
KL 散度的性质:
- 非对称性:DKL≠DKL(Q∣∣P)D_{KL} \neq D_{KL}(Q || P)DKL=DKL(Q∣∣P)
- DKL(P∣∣Q)≥0D_{KL}(P || Q) \geq 0DKL(P∣∣Q)≥0,仅在P=QP = QP=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)采样处zzz,再得到σ×z+μ\sigma \times z + \muσ×z+μ ,这样做的好处是将随机性转移到了zzz这个常量上了,而σ\sigmaσ和μ\muμ则当做仿射变换网络的一部分。
二、Diffusion Model流程
x0x_0x0是初始数据(一个初始的图片),xTx_TxT是最终的图片(一个纯噪声的图片)。
- x0∼xTx_0 \sim x_Tx0∼xT的过程是一个加噪过程,每次从q(xt∣xt−1)q(x_t|x_{t - 1})q(xt∣xt−1)分布中取噪声,然后添加到前一个时间步的图片数据中,这样经过T个时间步,我们就能得到一个纯噪声的图片了。
- xT∼x0x_T \sim x_0xT∼x0的过程是一个去噪过程,每次从pθ(xt−1∣xt)p_\theta(x_{t - 1}|x_t)pθ(xt−1∣xt)分布中取噪声,然后使前一个时间步的图片数据减去该噪声,这样经过T个时间步,我们就能得到原始的图片了。
其中q(xt∣xt−1)q(x_t|x_{t - 1})q(xt∣xt−1)是自己设定的一个加噪分布,而pθ(xt−1∣xt)p_\theta(x_{t - 1}|x_t)pθ(xt−1∣xt)是需要神经网络去学习的一个分布,我们会使用参数分布来去对该分布做估计,由于使用了参数重整化的思想(σ×ϵ+μ\sigma \times \epsilon + \muσ×ϵ+μ,其中σ\sigmaσ是分布的方差,μ\muμ表示的是分布的均值,ϵ\epsilonϵ是从标准正态分布中随机采样的一个值),我们加噪过程是从一个标准正态分布中随机采样一个值,然后再进行参数重整化,依据μ\muμ和σ\sigmaσ得到特定分布下的噪声,而去噪过程是利用神经网络学习这个噪声,然后在每个时间步上减去预测出的噪声。
三、加噪过程
给定初始数据分布x0∼q(x)x_0 \sim q(x)x0∼q(x),可以不断地向分布中添加高斯噪声,该噪声的方差是以固定值βt\beta_tβt而确定的,均值是以固定值βt\beta_tβt和当前ttt时刻的数据xtx_txt决定的。这个过程是一个马尔科夫链过程,随着ttt的不断增大,不断的向数据中添加噪声,最终数据分布xtx_txt变成了一个各向独立的高斯分布。
噪声的分布可以表示如下:
q(xt∣xt−1)=N(xt;1−βt⋅xt−1,βtI)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⋅xt−1\sqrt{1 - \beta_t}\cdot x_{t- 1}1−βt⋅xt−1表示该分布的均值,βtI\beta_t IβtI 表示方差(III表示单位矩阵)。
那么有:xt=1−βtxt−1+βtztx_t = \sqrt{1 - \beta_t}x_{t - 1} + \sqrt{\beta_t} z_txt=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 随着 ttt 的增大而增大。
通过上述的分布,我们可以将原始数据图片x0x_0x0通过q(x1∣x0)q(x_1| x_0)q(x1∣x0)分布进行加噪,从而得到x1x_1x1,然后再通过q(x2∣x1)q(x_2| x_1)q(x2∣x1)分布进行对x1x_1x1