DDPM

/ 0评 / 0

参考文献

常见生成模型

image.png

DDPM

工作原理

特点

GAN(对抗生成网络)

工作原理

特点

VAE(变分自编码器)

工作原理

特点

EBM

NF

总结

讲解

文档讲解

What are Diffusion Models?

一文读懂扩散模型,DDPM原理+代码解读-CSDN博客

视频讲解

54、Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读_哔哩哔哩_bilibili

数学基础

条件概率+$Bayes$公式

$P(B | A)$读作 p b given a

$P(ABC) = P(C | BA) \cdot P(BA) = P(C | BA) \cdot P(B | A) \cdot P(A)$

$P(BC | A) = P(B | A) \cdot P(C | AB)$(左右两边条件概率都展开即可)

马尔科夫链

假设有马尔科夫链$A→B→C$

$P(ABC) = P(C | BA) \cdot P(BA) = P(C | B) \cdot P(B | A) \cdot P(A)$

$P(BC | A) = P(B | A) \cdot P(C | B)$

$Jensen$不等式

若$f(x)$是凸函数,则:

$f(\sum_{i=1}^{n} \lambda_i xi) \leq \sum{i=1}^{n} \lambda_i f(x_i)$

其中,$\sum_{i=1}^{n} \lambda_i = 1$。

如果为严格的凹函数,那么$\leq$改为$\geq$即可。

$KL$散度

两个单一变量的高斯分布$p$和$q$,

通过计算他们的$KL$散度可以计算出在近似一个分布与另一个分布时损失了多少信息,

从而更好地评估这两个不同概率分布之间的差异。

$KL(p, q) = \log \frac{\sigma_2}{\sigma_1} + \frac{\sigma_1^2 + (\mu_1 - \mu_2)^2}{2 \sigma_2^2} - \frac{1}{2} \geq 0$

参数重整化

若希望从高斯分布$N(\mu, \sigma)$中采样,可以先从标准分布$N(0,1)$中采样出$z$,再得到$\mu + z * \sigma$。

这样做的好处是将随机性转移到$z$这个常量上,而$\mu$和$\sigma$则当作仿射网络变换的一部分。

因此,重参数化技巧在扩散模型中是一个强大的工具,它允许模型在保持生成过程随机性的同时,能够进行有效的训练。这是为什么扩散模型能够使用基于梯度的优化方法来学习生成数据的过程。

数学推导

前向扩散过程

  1. 给定初始数据分布$x_0 \sim q(x)$,可以不断地向分布中添加高斯噪声,该噪声的标准差是以固定值$\beta_t$(很小的一个数,随着$t$增大而增大)而确定的,均值是以固定值$\alpha_t(\alpha_t = 1 - \beta_t)$和当前$t$时刻的数据$x_t$决定的。这个过程是一个马尔科夫链过程。

即:$x_t = \sqrt{\alphat}x{t-1}+\sqrt{1-\alphat}z{t-1}$

  1. 随着$t$的不断增大,最终数据分布$x$变成了一个各向独立的高斯分布。

$q(xt | x{t-1}) = N(x_t; \sqrt{1-\betat}x{t-1}, \beta_t I)$

$q(x_t|x_0) = N(x_t; \sqrt{\bar{a}}x_0, \sqrt{1-\bar{\alpha_t}}I)$(其中$\bar{\alphat}=\prod{i=1}^{t}\alpha_i$)

$q(x_{1:T} | x0) = \prod{t=1}^{T} q(xt | x{t-1})$(联合概率分布)

  1. 任意时刻的$q(x_t)$推导也可以完全基于$x_0$和$\beta_t$来计算出来,而不需要做迭代

注意这里,两个独立的正态分布$X \sim N(\mu_1, \sigma_1)$和$Y \sim N(\mu_2, \sigma_2)$的叠加后的分布$aX+bY$的均值为$a\mu_1 + b\mu_2$,方差为$a^2\sigma_1^2 + b^2\sigma_2^2$。

逆扩散过程

逆扩散过程是从高斯分布中恢复原始数据,我们可以假设它也是一个高斯分布,但是无法逐步的拟合分布,所以需要构建一个参数分布来做估计。逆扩散过程仍然是一个马尔科夫链过程。

$p\theta(x{0:T}) = p(xT)\prod{t=1}^{T}p\theta(x{t-1} | x_t)$

$p\theta(x{t-1} | xt) = N(x{t-1};\mu_\theta(xt, t), \sigma\theta(x_t, t))$ --------------------------------(0)

$q(x_{t-1}|x_t, x0) = N(x{t-1}; \tilde{\mu}(x_t, x_0), \tilde{\beta_t}I)$ --------------------------------(1)

(0)式和(1)式某种意义上来说是等价的。

注意:高斯分布的概率密度函数是$f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}$ ----------------------------------(2)

注意:$ax^2+bx=a\left(x+\frac{b}{2a}\right)^2+C$ -----------------------------(3)

后验的扩散条件概率$q(x_{t-1}|x_t, x_0)$分布是可以用贝叶斯公式推导出的,也就是说,给定$x_t$和$x0$,可以计算出$x{t-1}$

即:(将$x_t$和$x_0$看作已知常量)

$q(x_{t-1}|x_t, x0) = q(x{t-1},x_t,x_0)$

$\propto exp\left(-\frac{1}{2}\left(\frac{(x_t-\sqrt{\alphat}x{t-1})^2}{\betat} + \frac{(x{t-1}-\sqrt{\bar{\alpha_{t-1}}}x0)^2}{1-\bar{\alpha{t-1}}} - \frac{(x{t}-\sqrt{\bar{\alpha{t}}}x0)^2}{1-\bar{\alpha{t}}}\right)\right)$

$=exp\left( -\frac{1}{2} \left( (\frac{\alpha_t}{\betat} + \frac{1}{1-\bar{\alpha{t-1}}})x_{t-1}^2 - (\frac{2\sqrt{\alpha_t}}{\beta_t}x_t + \frac{2\sqrt{\bar{\alpha_t}}}{1-\bar{\alpha_t}}x0)x{t-1} + C(x_t, x_0) \right) \right)$ ------------------------------------(4)

结合(1)(2)(3)(4)式,可得:

基于前向扩散过程(虽然并没有真的做了前向扩散)中$x_t$与$x_0$的关系,我们可以知道,

将$x_0$的表达式代入(5)式中,可以重新给出该分布的均值表达式,也就是说,在给定$x_0$的条件下,后验条件高斯分布的均值计算只与$x_t$和$z_t$有关。

$z_t$是$t$时刻的随机正态分布变量,源自参数重整化。

重点来了:只有这个$z_t(x_t, t; \theta)$是需要用网络去拟合的

目标数据分布的似然函数

image.png

这里论文将$p\theta(x{t-1}|x_t)$分布的方差设置成一个与$\beta$相关的常数,因此可训练的参数只存在于其均值中。

网络模块

Unet职责

无论在前向过程还是反向过程,Unet的职责都是根据当前的样本和时间$t$预测噪声,也就是Unet实现$z_\theta(x_t, t)$的预测,整个训练过程其实就是在训练Unet网络的参数。

image.png

Gaussion Diffusion职责

前向过程:从$1$到$T$的时间采样一个时间$t$,生成一个随机噪声加到图片上,从$Unet$获取预测噪声,计算损失后更新Unet梯度

反向过程:先从正态分布随机采样和训练样本一样大小的纯噪声图片,从$T-1$到$0$逐步重复以下步骤:从$xt$还原$x{t-1}$。

训练过程

image.png

Algorithm1:Training

image.png

Algorithm2:Sampling

image.png

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注