DDPM - Denoising Diffusion Probabilistic Models 扩散模型
扩散模型概述
扩散模型是在模拟图像加噪的逆向过程。也就是在实现一个去噪的过程。简单的来说就包括两个过程组成
- 前向的扩散过程 Forward Diffusion Process
- 反向扩散过程 Reverse Diffusion Process
下面我们对整个的加噪的过程细节进行一个简单的描述。每次加噪的比例都只占很小的一部分
下面的公式中我们说明了加噪的比例,
x t 与 x t − 1 的关系 : x t = β t × ϵ t + 1 − β t × x t − 1 x_{t} \text { 与 } x_{t-1} \text { 的关系 : } x_{t}=\sqrt{\beta}_{t} \times \epsilon_{t}+\sqrt{1-\beta_{t}} \times x_{t-1} xt 与 xt−1 的关系 : xt=βt×ϵt+1−βt×xt−1
为了方便进行表示我们可以定义:αt = 1 - βt
x t = 1 − α t ϵ t + α t x t − 1 x_{t}=\sqrt{1-\alpha_{t}} \epsilon_{t}+\sqrt{\alpha_{t}} x_{t-1} xt=1−αtϵt+αtxt−1
细节说明:
-
我们并不是在原图像上进行加噪的而是将图像 x0 像素值映射到 [-1,1] 之间。
x 255 × 2 − 1 \frac{x}{255} \times 2-1 255x×2−1 -
生成一张尺寸相同的噪声图片,像素值服从标准正态分布
ϵ ∼ N ( 0 , 1 ) \epsilon \sim N(0,1) ϵ∼N(0,1)
-
α与β 每个时刻的 βt 都各不相同, 0 < βt < 1, 且 β1 < β2 < … < βT-1 < βT
β是作为一个权重存在的
-
任一时刻的图像xt 都可以由原图像 x0 直接生成 (可以由含x0 的公式直接表示)
x t 与 x 0 的关系 : x t = 1 − α ˉ t ϵ + α ˉ t x 0 α t = 1 − β t α ˉ t = α t α t − 1 … α 2 α 1 x_{t} \text { 与 } x_{0} \text { 的关系 : } x_{t}=\sqrt{1-\bar{\alpha}_{t}} \epsilon+\sqrt{\bar{\alpha}_{t}} x_{0} \quad \alpha_{t}=1-\beta_{t} \quad \bar{\alpha}_{t}=\alpha_{t} \alpha_{t-1} \ldots \alpha_{2} \alpha_{1} xt 与 x0 的关系 : xt=1−αˉtϵ+αˉtx0αt=1−βtαˉt=αtαt−1…α2α1
我们将t时刻的值和图像输入到Denoise Model里面去。就可以得到一个输出的图像。
Denoise Model的一个最主要的部分就是其中的一个Unet
网络架构。T时刻的图像
和 t时刻的值
我们将其输入到Unet网络中去,其输出就是一张噪声图像。
ϵ θ \epsilon_{\theta} ϵθ
其中的theta表示的就是Unet网络中所有参数的集合。weight bias等等一些参数。
我们得到噪音图像之后将它乘以一个系数。
1 − α t 1 − α ˉ t ϵ θ \frac{1-\alpha_{t}}{\sqrt{1-\bar{\alpha}_{t}}} \boldsymbol{\epsilon}_{\theta} 1−αˉt1−αtϵθ
x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ ‾ t ϵ θ ) + σ t z \mathbf{x}_{t-1}=\frac{1}{\sqrt{\alpha_{t}}}\left(\mathbf{x}_{t}-\frac{1-\alpha_{t}}{\sqrt{1-\overline{\bar{\alpha}} t}} \boldsymbol{\epsilon}_{\theta}\right)+\sigma_{t} \mathbf{z} xt−1=αt1(xt−1−αˉt1−αtϵθ)+σtz
σ 2 = β t ( 1 − α ˉ t − 1 ) 1 − α ˉ t \sigma^{2}=\frac{\beta_{t}\left(1-\bar{\alpha}_{t-1}\right)}{1-\bar{\alpha}_{t}} σ2=1−αˉtβt(1−αˉt−1)
经过这些计算就可以得到前一时刻T-1的图像。整个过程可以用下面的一张图来进行表示。
这就是我们去噪的一个过程了。
训练阶段和预测阶段的示意图
论文中给出了训练阶段和预测阶段的算法描述图。
1: 对于训练阶段我们重复的进行执行直到模型收敛的时候算法结束。
x 0 ∼ q ( x 0 ) \mathbf{x}_{0} \sim q\left(\mathbf{x}_{0}\right) x0∼q(x0)
2:表示从我们的数据集中筛选出一张图像。其为x0
t ∼ Uniform ( { 1 , … , T } ) t \sim \operatorname{Uniform}(\{1, \ldots, T\}) t∼Uniform({1,…,T})
3: 表示从我们的均匀分布中取出一个值令其为t T=1000
ϵ ∼ N ( 0 , 1 ) \boldsymbol{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{1}) ϵ∼N(0,1)
4: 从标准的正态分布中采样出一个epsilon 这个epsilon的尺寸和原图像的尺寸要是一样的。
Take gradient descent step on ∇ θ ∥ ϵ − ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ , t ) ∥ 2 \begin{array}{l} \text { Take gradient descent step on }\\ \nabla_{\theta}\left\|\boldsymbol{\epsilon}-\boldsymbol{\epsilon}_{\theta}\left(\sqrt{\bar{\alpha}_{t}} \mathbf{x}_{0}+\sqrt{1-\bar{\alpha}_{t}} \boldsymbol{\epsilon}, t\right)\right\|^{2} \end{array} Take gradient descent step on ∇θ ϵ−ϵθ(αˉtx0+1−αˉtϵ,t) 2
5 : 计算epsilon和epsilon theta的均方误差作为损失函数,并通过梯度下降法去优化这个函数。
这个过程就类似于一个正向扩散的过程了。下面我们继续看我们这个模型的预测过程的算法流程
x T ∼ N ( 0 , I ) \mathbf{x}_{T} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) xT∼N(0,I)
1:我们先从随机分布中采样出一个XT来
2 :循环T次来执行我们的算法
z ∼ N ( 0 , I ) if t > 1 , else z = 0 \mathbf{z} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) \text { if } t>1 \text {, else } \mathbf{z}=\mathbf{0} z∼N(0,I) if t>1, else z=0
3: 根据条件在随机分布中又采样出了一个z
x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z \mathbf{x}_{t-1}=\frac{1}{\sqrt{\alpha_{t}}}\left(\mathbf{x}_{t}-\frac{1-\alpha_{t}}{\sqrt{1-\bar{\alpha}} t} \boldsymbol{\epsilon}_{\theta}\left(\mathbf{x}_{t}, t\right)\right)+\sigma_{t} \mathbf{z} xt−1=αt1(xt−1−αˉt1−αtϵθ(xt,t))+σtz
根据这个公式我们来预测上一个时刻的图像xt-1。
循环的执行这个操作直到产生出了最开始的原图像之后,整个预测过程中的算法在停止执行。
未完下周在写