DDPM阅读笔记
论文(NeurIPS 2020):Denoising Diffusion Probabilistic Models
1 Diffusion Pipeline
1.1 加噪过程
总体过程:
$$x_0 \xrightarrow{q} x_1 \xrightarrow{q} x_2 \xrightarrow{q} \cdots \xrightarrow{q} x_{T-1} \xrightarrow{q} x_T = z$$
定义每一步中,加噪声 $\beta_t=1-\alpha_t$ ,其中 $\beta_t$ 随 $t$ 增加而增加;加噪过程每一步都是步长为 $1$ 的马尔科夫过程:
$$q(x_{1:T}|x_0) := \prod_{t=1}^{T} q(x_t|x_{t-1}), \quad \text{where} \quad q(x_t|x_{t-1}) := \mathcal{N}(x_t; \sqrt{\alpha_t}x_{t-1}, (1-\alpha_t)I)$$
可以看出 $x_t$ 随时间增大,越来越接近高斯分布(下式中,$z_t$ 为标准正态分布):
$$x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{(1 – \alpha_t)} z_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{\beta_t} z_t$$
将递推式整合,其中 $\overline{\alpha}_t$ 定义为 $\alpha_1$ 到 $\alpha_t$ 的乘积,可以得到:
$$\begin{aligned} q(x_t|x_0) &= \mathcal{N}(x_t; \mu(x_t, t), \sigma^2(x_t, t)I) \\ &= \mathcal{N}\left(x_t; \sqrt{\overline{\alpha}_t}x_0, (1 – \overline{\alpha}_t)I\right) \end{aligned}$$
加噪过程是确定的,没有模型的介入. 其目的是制作训练时标签。
1.2 去噪过程
由贝叶斯公式:
$$p(x_{t-1} | x_t, x_0) = \frac{p(x_t | x_{t-1}, x_0) p(x_{t-1} | x_0)}{p(x_t | x_0)}$$
可以推出 $p(x_{t-1} | x_t, x_0)$ 也服从高斯分布:
$$p(x_{t-1} | x_t, x_0) = \mathcal{N}\left(x_{t-1}; \frac{\sqrt{\alpha_t} (1 – \overline{\alpha}_{t-1})}{1 – \overline{\alpha}_t} x_t + \frac{\sqrt{\overline{\alpha}_{t-1}} (1 – \alpha_t)}{1 – \overline{\alpha}_t} x_0, \frac{1 – \overline{\alpha}_{t-1}}{1 – \overline{\alpha}_t} (1 – \alpha_t)I\right)$$
我们的目标就是让 $p_{\theta}(x_{t-1} | x_t)$ 更接近真实分布 $p(x_{t-1} | x_t,x_0)$ ,即最小化:
$$\underset{\theta}{\mathrm{argmin}} \, \left| u(x_0, x_t), u_\theta(x_t, t) \right|$$
DDPM认为,直接预测真实分布是比较困难的,于是预测每一步加的噪声,并用MSE最小化:
$$\mathbb{E}_{t \sim T} \left\| \epsilon – \epsilon_\theta (x_t, t) \right\|_2^2$$
1.3 训练与推理
- 在训练过程中,只需要对齐均值(方差是定值);
- 在推理过程中,自然带有方差,使得生成的图片具有多样性;
训练过程(1000个时间步):
- 随机采样一批图片作为数据集;
- 随机采样一些时间步;
- 随机采样基于高斯分布的噪声;
- 加噪:计算在采样时间步上的噪声
- 预测噪声:输入 $x_T,t$ 来预测 $t$ 时刻的噪声(使用一个带有时间步编码的UNet),并计算损失、优化模型