Diffusion 入门

前置

高斯混合模型

一个复杂分布 PθP_{\theta} 可以用 KK 个高斯分布来表示。

Pθ=i=1KP(zi)Pθ(xzi)(1)P_{\theta} = \sum_{i=1}^{K} P (z_i) P_{\theta} (x\vert z_i) \tag{1}

由于 P(z)=1\int P(z) = 1,用一个连续的高斯分布来表示 P(z)N(0,1)P(z) \sim \mathcal{N}(0, 1),因此

Pθ=P(zi)Pθ(xzi)(2)P_{\theta} = \int P (z_i) * P_{\theta} (x\vert z_i) \tag{2}

KL 散度

DKL(pq)=xp(x)logq(x)p(x)dx(m)(3)D_{KL}(p\|q)= -\int\limits_{x} p(x) \log \frac{q(x)}{p(x)} dx \quad (m \to \infty) \tag{3}

优化目标

初衷是希望生成模型所产生的图片所遵从的概率分布尽可能接近真实世界图片的概率分布。使用 KL 散度描述,得到:

argminθKL(PdataPθ)(4)\arg\min_{\theta} \mathrm{KL}(P_{\text{data}} \parallel P_{\theta}) \tag{4}

其中 PθP_{\theta} 是模型所预测的分布,PdataP_{data} 为真实分布。对上式做如下变换

argminθKL(PdataPθ)=argminθxPdata(x)logPθ(x)Pdata(x)dx=argmaxθxPdata(x)logPθ(x)Pdata(x)dx=argmaxθxPdata(x)logPθ(x)dxargmaxθxPdata(x)logPdata(x)dx=argmaxθxPdata(x)logPθ(x)dx=argmaxθExPdata[logPθ(x)]argmaxθi=1mlogPθ(xi)=argmaxθlogi=1mPθ(xi)=argmaxθi=1mPθ(xi)(5)\begin{aligned} \arg\min_{\theta} \mathrm{KL}(P_{\text{data}} \parallel P_{\theta}) &= \arg\min_{\theta} -\int\limits_{x} P_{\text{data}}(x) \log\frac{P_{\theta}(x)}{P_{\text{data}}(x)} dx \\ &= \arg\max_{\theta} \int\limits_{x} P_{\text{data}}(x) \log\frac{P_{\theta}(x)}{P_{\text{data}}(x)} dx \\ &= \arg\max_{\theta} \int\limits_{x} P_{\text{data}}(x) \log P_{\theta}(x) dx - \arg\max_{\theta} \int\limits_{x} P_{\text{data}}(x) \log P_{\text{data}}(x) dx \\ &= \arg\max_{\theta} \int\limits_{x} P_{\text{data}}(x) \log P_{\theta}(x) dx \\ &= \arg\max_{\theta} \mathbb{E}_{x\sim P_{\text{data}}}[\log P_{\theta}(x)] \\ &\approx \arg\max_{\theta} \sum\limits_{i=1}^{m} \log P_{\theta}(x_i) \\ &= \arg\max_{\theta} \log \prod\limits_{i=1}^{m} P_{\theta}(x_i) \\ &= \arg\max_{\theta} \prod\limits_{i=1}^{m} P_{\theta}(x_i) \tag{5} \end{aligned}

(5.8)(5.8),得到新的优化目标 argmaxθi=1mPθ(xi)\arg\max_{\theta} \prod\limits_{i=1}^{m} P_{\theta}(x_i)

Lower Bound

要使 (5.8)(5.8) 成立,即极大似然估计 (Maximum Likelihood Estimate)

MLEθ=arg maxθPθ(x)(6)\text{MLE} \quad \theta^{*} = \argmax_{\theta} P _{\theta}(x) \tag{6}

q(zx)q(z \vert x) 是某个概率分布 (实际上是加噪过程的分布 qϕq_{\phi},通常记作 q(x1..Tx0)q(x_{1..T}|x_0)ϕ\phi 代表加噪过程的参数),则

log(Pθ(x))=log(Pθ(x))q(zx)dz=log(Pθ(x,z)Pθ(zx))q(zx)dz=log(Pθ(x,z)q(zx)q(zx)Pθ(zx))q(zx)dz=log(Pθ(x,z)q(zx))q(zx)dz+KL(q(zx)Pθ(zx))log(Pθ(x,z)q(zx))q(zx)dz=Eq(ZX)[log(Pθ(x,z)q(zx))](7)\begin{aligned} \log(P_\theta(x)) &= \log(P_\theta(x)) \cdot \int q(z|x) \, dz \\ &= \int \log\left(\frac{P_\theta(x,z)}{P_\theta(z|x)}\right) q(z|x) \, dz \\ &= \int \log\left(\frac{P_\theta(x,z)}{q(z|x)} \cdot \frac{q(z|x)}{P_\theta(z|x)}\right) q(z|x) \, dz \\ &= \int \log\left(\frac{P_\theta(x,z)}{q(z|x)}\right) q(z|x) \, dz + \text{KL}(q(z|x) \parallel P_\theta(z|x)) \\ &\geq \int \log\left(\frac{P_\theta(x,z)}{q(z|x)}\right) q(z|x) \, dz \\ &= \mathbb{E}_{q(Z|X)}\left[\log\left(\frac{P_\theta(x,z)}{q(z|x)}\right)\right] \\ \tag{7} \end{aligned}

(7.1)(7.2)(7.1) → (7.2),由 Pθ(x,z)=Pθ(x)Pθ(zx)P_{\theta}(x, z) = P_{\theta}(x) * P_{\theta}(z | x)

(7.4)(7.4),由 KL(pq)=plogpq0\text{KL}(p\|q) = \int{p\log{\frac{p}{q}}} \ge 0

因此,要优化最大对数似然,就是在优化 Evidence Lower Bound (ELBO). 至此,得到初步的优化目标,下面开始讲解 DDPM.

DDPM

Overview

通俗理解 DDPM。允许多步 (TT) 生成过程,从而分多次估计噪声 ϵ^t\hat{\epsilon}_t 比一步估计图片 xTx^0x_T → \hat{x}_0 容易。DDPM 的大部分数学框架在更早时候已有之,而该工作的最大贡献其实是用 U-Net 作为噪声估计器调通了这一模型,并得到了不错的效果。

前向扩散过程

给定初始数据分布 x0q(x)x_0 \sim q(x),前向扩散过程向 x0x_0 逐步添加 TT 次高斯噪声,得到一系列带噪声图片 x1,...,xTx_1, ..., x_T。定义 xt1xtx_{t-1} \rightarrow x_t 的加噪过程:

q(xtxt1)=N(xt;1βtxt1,βtI)(8)q(\mathbf{x}_t | \mathbf{x}_{t-1}) = \mathcal{N}(\mathbf{x}_t; \sqrt{1 - \beta_t} \mathbf{x}_{t-1}, \beta_t \mathbf{I}) \tag{8}

q(x1:Tx0)=t=1Tq(xtxt1)(9)q(\mathbf{x}_{1:T} | \mathbf{x}_0) = \prod_{t=1}^T q(\mathbf{x}_t | \mathbf{x}_{t-1}) \tag{9}

从而,加噪过程是一个马尔可夫链,满足分布 N(xt;1βtxt1,βtI)\mathcal{N}(\mathbf{x}_t; \sqrt{1 - \beta_t} \mathbf{x}_{t-1}, \beta_t \mathbf{I}),生成 xt1xtx_{t-1} \rightarrow x_t 的过程只由 {βt,xt1}\{\beta_t, x_{t-1}\} 确定。β1,...,βT\beta_1, ..., \beta_T 是可学习的参数,提前确定 β1,...,βT\beta_1, ..., \beta_T 后即可得到加噪过程 x1,...,xTx_1, ..., x_T 任意一步。

关于 qϕq_{\phi} 的设计。为什么选择 1βt\sqrt{1-\beta_t}βt\sqrt{\beta_t} 用于修饰加噪过程的均值和方差,并不知道 DDPM 的前置工作中是否有提及。但在训练过程中,这个设计可以方便地引出 αt\alpha_tαˉt\bar{\alpha}_t 的定义,从而实现对 x0xtx_0 \rightarrow x_t 的一步加噪。

注意,此时我们实际上只定义了加噪过程满足的分布 qϕq_{\phi},尚未定义实际的加噪过程,这部分将在「重参数化」一节说明。但可以知道的是,随着加噪过程的进行, βt\beta_t 不断增大,即每一步的噪声比例不断升高。最终,当 TT \rightarrow \inftyxTx_T 趋近于一个各向独立的高斯分布,视觉上就是一张接近纯粹高斯噪声的「雪花」图。

重参数化

一步加噪

x0\mathbf{x}_0 和固定序列 {βt(0,1)}t=1T\{\beta_t \in (0, 1)\}_{t=1}^{T} 可以直接得到任意一步 xt\mathbf{x}_t,从而省去前向迭代。这使得训练过程变得容易。

References

DDPM

  1. 【较真系列】讲人话-Diffusion Model全解(原理+代码+公式)_哔哩哔哩_bilibili(讲得很不错,完整看下来基本明白 DDPM 前后向过程都在干什么)
  2. VictorYuki视频专辑-VictorYuki视频合集-哔哩哔哩视频(手写过程,可作为参考)
  3. 【大白话01】一文理清 Diffusion Model 扩散模型 | 原理图解+公式推导_哔哩哔哩_bilibili(入门 DDPM 看的第一个精讲,还可以)
  4. 54、Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读_哔哩哔哩_bilibili | 64、扩散模型加速采样算法DDIM论文精讲与PyTorch源码逐行解读_哔哩哔哩_bilibili(主讲代码)
  5. 此外还看了李宏毅的视频,和之前看老师其他视频的感受一样,需要有些基础再来看,作为巩固增强。否则很多推导都是一语带过,理解起来会有问题。

DDIM

  1. 【串讲系列】讲人话-Stable Diffusion全解(原理+代码+公式)之 DDIM + SDXL Turbo_哔哩哔哩_bilibili

DDNM

  1. denoising_diffusion_nullspace_model_ddnm__method_explained