Conditional Diffusion Model

扩散模型简介

扩散模型分为两个过程,前向(forward)和逆向(reverse)两个过程。在前向过程中,我们按照一定的schedule向图像中添加随机高斯噪声,在逆向过程中我们逐步将图片中的噪声去除。

听起来是不是很鸡肋?为什么要先进行加噪再去噪?这里的加噪其实只是在训练阶段使用,我们在训练阶段的每一个时间步上预测逆向扩散过程要去除的噪声参数,这样我们就能从一个完全的高斯噪声图像中逐步恢复出有意义的图像,如果加入了条件(condition)那就可以实现图像的翻译,超分辨,修补等等。

前向过程

首先要介绍的是在前向过程中如何逐步加噪,以及如何快速的知道某个时间步上所加的噪声。

我们假设初识图像为$x^{(0)}$,我们逐步加噪声到第$T$步得到$x^{(T)}$,这个过程用公式表达为: $$x^{(t)} = a_tx^{(t-1)} + b_t\varepsilon_t,\space \varepsilon_t\sim\mathcal{N}(x^{(T)};0,\bold{I})$$

用概率分布到观点来看,$$q(x^{(t)}|x^{(t-1)}) = \mathcal{N}(x^{(t)};x^{(t-1)}\sqrt{1-\beta_t},\bold{I}\beta_t)$$ 其中的$\beta$叫做noise schedule,即这个参数控制加噪的过程,通常是一个序列,式子中的$\sqrt{1-\beta_t}$和$\beta_t$的由来是预设了$a_t^2+b_t^2=1$

$$x^{(t)} = a_tx^{(t-1)} + b_t\varepsilon_t\\ =(a_t\dots a_1)x^{(0)} + (a_t\dots a_2) b_1\varepsilon_1 + (a_t\dots a_3) b_2\varepsilon_2 + \cdots + a_tb_{t-1}\varepsilon_{t-1} + b_t\varepsilon_t\\ =(a_t\dots a_1)x^{(0)} + \sqrt{(a_t\dots a_2)^2 b_1^2 + (a_t\dots a_3)^2 b_2^2 + \cdots + a_t^2 b_{t-1}^2 + b_t^2}\bar{\varepsilon}_t\\ =$$

训练过程

最小化网络预测的噪声与真实添加的噪声的MSELoss

反向采样

DDPM最原始的采样方法

$$ x^{(t-1)} = \frac{1}{\sqrt{\alpha_t}} (x_t - \frac{1-\alpha_t}{\sqrt{1-{\bar\alpha_t}}} \varepsilon_{\theta} (x_t,t)) + \sigma_{t}\bold{z} $$

SDE的角度

$$x^{(t)} = a_tx^{(t-1)} + b_t\varepsilon_t$$

Forward SDE: $$ \text{d}x_t = f(t)x_t\text{d}t + g(t)\text{d}w_t $$ $$ f(t) = \frac{\text{d}\log\alpha_t}{\text{d}t},\\ g^2(t) = \frac{\text{d}\sigma^2_t}{\text{d}t} - 2\frac{\text{d}\log\alpha_t}{\text{d}t}\sigma^2_t $$

Reverse SDE: $$\text{d}x_t = [f(t)x_t-g^2(t)\nabla_x\log p_t (x_t)]\text{d}t + g(t)\text{d}w$$ Probability flow ODE: $$\text{d}x = [f(x,t)-\frac{1}{2}g^2(x)\nabla_x\log p_t (x)]\text{d}t$$

通过求解ODE来采样

$$ \frac{\text{d}x_t}{\text{d}t} = f(t)x_t + \frac{g^2(x)}{2\sigma_t}\varepsilon_\theta(x_t,t), \space x_T\sim \mathcal{N}(\bold{0},{\tilde\sigma^2}\bold{I})$$

$$x_t = \frac{\alpha_t}{\alpha_s}x_s - \alpha_t\int_{\lambda_s}^{\lambda_t}e^{-\lambda}\hat{\varepsilon_\theta}(\hat{x}_\lambda , \lambda)\text{d}\lambda$$

where $$ \lambda_t:=\log(\alpha_t/\sigma_t)\\ {\hat{x}{\lambda}} := x{t_{\lambda}} (\lambda) $$

$$ {\hat{x}{\lambda}} := x{t_{\lambda}} (\lambda) $$

\hat\varepsilon_\theta(x_\lambda,\lambda):=\varepsilon_\theta(x_{{t_\lambda}(\lambda)},t_\lambda(\lambda))

DPM-Solver-1 $$\tilde{x}{t_i} = \frac{\alpha{t_i}}{\alpha_{t_{i-1}}}\tilde{x}{t{i-1}}-\sigma_{t_i}(e^{h_i} - 1)\epsilon_\theta(\tilde{x}{t{i-1}},t_{i-1}),\text{where} \space h_i=\lambda_{t_i}-\lambda_{t_{i-1}}$$

分类

  • DDPMs
  • SGMs
  • Score SDEs

DDPM

两个马尔可夫链,前向和逆向