扩散生成模型系列回顾

笔者主要基于原论文和优秀博客,二次总结自己的一些理解

从DDPM开始

前向扩散过程

对于扩散过程,为什么是如下形式?

\[ 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) \]

根据随机变量期望和方差的性质,从采样角度表示:

\[ \mathbf x_t = \sqrt{1 - \beta_t} \mathbf x_{t-1} + \sqrt{\beta_t} \boldsymbol{\epsilon}_{t-1}, ~\text{where}~\boldsymbol{\epsilon}_{t-1} \sim \mathcal{N}(0, \mathbf I) \]

首先,是因为假设了扩散过程具有马尔可夫性质,当前时刻隐变量只依赖前一时刻隐变量;

其次,根据高斯分布的叠加性质,有 \[ \mathbf x_t = \sqrt{\overline{\alpha}_t} \mathbf x_{0} + \sqrt{1 - \overline\alpha_t} \boldsymbol{\epsilon} \] 其中,\(\alpha_t = 1 - \beta_t\), \(\overline \alpha_t = \prod_{i=1}^t\alpha_i\), \(\boldsymbol{\epsilon} \sim \mathcal{N}(0, \mathbf I)\)

可以注意到,随着时间步增加,均值逐渐向0靠近,方差逐渐向1靠近,接近标准正态分布;

最后,\(\beta_t\) 足够小时,\(\sqrt{\beta_t} \boldsymbol{\epsilon}_{t-1}\) 可以忽略,因此 \(q(\mathbf x_{t-1} | \mathbf x_{t})\) 可以近似为高斯分布;

Lil'Log科学空间中都有对前向扩散过程的推导。

去噪过程

如果能够知道高斯分布 \(q(\mathbf x_{t-1} | \mathbf x_{t})\) 的解析形式,先从高斯分布中随机采样一个 \(\mathbf x_T\),之后采样加均值得到 \(\mathbf x_{T-1}\),以此类推,最终得到真实图像分布中的采样。

然而,只使用先前扩散过程中的条件,没有 \(q(\mathbf x_{t-1} | \mathbf x_{t})\) 的解析解;

小朋友可能会问,\(\mathbf x_t = \sqrt{\overline{\alpha}_t} \mathbf x_{0} + \sqrt{1 - \overline\alpha_t} \boldsymbol{\epsilon}\) 移项不就解出来了?上式是我们将某张真实图片加噪得到某个满足高斯分布的样本 \(\mathbf x_t\);而在去噪过程中,\(\mathbf x_T\) 是直接从高斯分布里面采样出来的,最终还原的 \(\mathbf x_0\) 符合自然图像分布,但不可能是已有的任何一张数据集中的图片,而这个过程中 \(\mathbf x_{t-1}\) 转移到 \(\mathbf x_{t}\) 的均值,就肯定不是我们扩散过程中采样的那些、或者它们的某种统计量,应当是 \(\mathbf x_t\) 的函数;

——笔者碎碎念

深度学习给了我们前进的方向,我们能不能学习一个 \(p_\theta(\mathbf x_{t-1} | \mathbf x_t)\) ?就是学习一个有参函数,在输入 \(\mathbf x_t\) 的时候,能够猜测 \(\mathbf x_{t-1}\);构造预测均值和方差的网络,之后根据训练集采样训练对,但是没有考虑到加噪时的随机变量,每次构造的 \(\mathbf x_{t-1}\)\(\mathbf{x}_t\) 训练对都完全不一样,模型不会收敛的。

——笔者碎碎念

聪明的前辈们发现如果能够在每一步去噪过程中,“前瞻性”地预测一个 \(\mathbf x_0\),那么问题会更加清晰:

Lil'Log科学空间中都有对 \(q(\mathbf x_{t-1} | \mathbf x_{t}, \mathbf x_{0})\) 解的推导

\[ q(\mathbf x_{t-1} | \mathbf x_{t}, \mathbf x_{0}) \sim \mathcal{N} (\mathbf x_{t-1}; \tilde{\boldsymbol\mu}_t(\mathbf x_{t-1},\mathbf x_0), \tilde{\beta}_t\mathbf I) \]

其中, \[ \tilde{\beta}_t = \frac{1-\overline{\alpha}_{t-1}}{1-\overline\alpha_{t}} \beta_t \]

\[ \tilde{\boldsymbol\mu}_t(\mathbf x_{t-1},\mathbf x_0) = \frac{\sqrt{\alpha_t}(1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} \mathbf{x}_t + \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1 - \bar{\alpha}_t} \mathbf{x}_0 \]

部分超参随t变化曲线

笔者认为比较让人产生误解的地方在接下来这一步,利用扩散过程中的等式 \(\mathbf{x}_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}(\mathbf{x}_t - \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon}_t)\),重新用 \(\mathbf x_t\) 表达了 \(\mathbf x_0\)

\[ \tilde{\boldsymbol{\mu}}_t = \frac{1}{\sqrt{\alpha_t}} \Big( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_t \Big) \]

这好像让 \(\mathbf x_0\) 变成了求解过程中的技巧,最后完全消除了 \(\mathbf x_0\)

事实上并不是这样:\(\boldsymbol{\epsilon}_t\) 是一个与 \(\mathbf x_0\) 有关的随机变量,不是任意一个随机采样;准确的说,\(\boldsymbol{\epsilon}_t\)是原 \(\mathbf x_0\) 变成 \(t\) 时间步的 \(\mathbf x_t\) 所添加的高斯噪声,是我们所要去的 “噪”; 这里的 \(\mathbf x_0\) 就是在已知 \(\mathbf x_t\) 的前瞻性预测。

我们需要搭建的模型,可以直接输出 \(\boldsymbol{\mu}_\theta(\mathbf x_t, t)\):训练时,采样 \(\mathbf x_0, t\),便可以求出 \(\mathbf x_t, \boldsymbol\epsilon_t\),进而有 \(\tilde{\boldsymbol{\mu}}_t\) 作为学习目标,通过最小化目标与模型输出的L2距离,更新模型参数。

不过,由于上式中,唯一的未知量就是 \(\boldsymbol{\epsilon}_t\),因此我们可以让模型输出 \(\boldsymbol{\epsilon}_\theta(\mathbf x_t, t)\),最小化 \(\tilde{\boldsymbol{\mu}}_t\)\(\boldsymbol{\mu}_\theta\) 的L2距离,等价于最小化啊 \(\boldsymbol{\epsilon}_t\)\(\boldsymbol{\epsilon}_\theta\) 的L2距离。

值得注意的是,训练好上述模型,在推理时,我们可以直接从 \(\mathbf x_T\) 获得前瞻性的 \(\mathbf x_0\),但是这个结果很差,还是要按照构建的马尔可夫链,和得到的条件概率,多次迭代得到 \(\mathbf x_0\)

DDPM训练和推理伪代码

从极大似然估计角度获得获得目标函数

回顾:变分贝叶斯推断

我们首先需要回顾一些变分贝叶斯推断的概念(参考链接1参考链接2)。

观测变量 \(X\),一般可以是图像本身;隐变量 \(Z\),例如在扩散模型中 \(X_{1\dots T}\) 都是隐变量;图像的类别也是离散的一维随机变量;

一般的,假设我们知道如何计算似然 \(P(X|Z)\),以及先验 \(P(Z)\),使用贝叶斯定理即可以得到后验 \(P(Z|X)\),接着根据一个采样的 \(X\),就可以得到对应的 \(Z\)

但是对于更复杂的任务,采样 \(P(Z|X)\) 或者 计算似然 \(P(X|Z)\) 都无从下手 (关于从连续随机变量分布中采样);或者知道后验 \(P(Z|X)\) 的形式,但采样的计算量过大,这时候就需要变分贝叶斯推断。

基本思想是使用参数化的分布 \(Q_\phi (Z|X)\) 逼近 \(P(Z|X)\),把求后验的推断问题转化为在函数族中寻找 \(Q\) 的优化问题;

衡量两个分布匹配程度使用KL散度:

\[ KL(Q_\phi(Z|X)||P(Z|X)) = \sum_{z \in Z}{q_\phi(z|x)\log\frac{q_\phi(z|x)}{p(z|x)}} \]

  1. KL散度恒正;
  2. KL散度不对称;
  3. \(KL(q||p) = 0 \iff q = p ~\text{almost everywhere}\)

我们可以将 \(KL(Q||P)\) 拆成 \(\log (p(x))\) (与 \(\phi\) 无关) 和 所谓的置信下界(Evidence of Lower Bound, ELBO),只要最大化ELBO即可。

\[ KL(Q||P) = \log{p(x)} - ELBO \]

其中

\[ \begin{aligned} ELBO &= -\sum_{z}{q_\phi(z|x)\log{\frac{q_\phi(z|x)}{p(z,x)}}} \\ &= \mathbb{E}_Q\big[ \log{p(x|z)} + \log{\frac{p(z)}{ q_\phi(z|x)}} \big] \\ & = \mathbb{E}_Q\big[ \log{p(x|z)} \big] + \sum_{Q}{q(z|x)\log{\frac{p(z)}{ q_\phi(z|x)}}} && \text{Definition of expectation} \\ & = \mathbb{E}_Q\big[ \log{p(x|z)} \big] - KL(Q(Z|X)||P(Z)) && \text{Definition of KL divergence} \end{aligned} \]

优化ELBO的方法在这里略过。

回顾:VAE

VAE的目的是将隐变量的分布变换为数据集的分布。

生成模型的最高理想是总一堆数据样本中,计算出 \(p(X)\),然而没有这样的模型能让我们直接统计出 \(p(X)\) 的参数;

因此,如果能获得 \(p(X|Z)\),可以先采样 \(z\) 再转化为 \(x\)

详见Lil'Log

Improved DDPM

DDIM

在先前引入 \(\mathrm x_0\) 求解 \(q(\mathbf x_{t-1} | \mathbf x_{t}, \mathbf x_{0})\) 的时候,使用的贝叶斯定理+配凑高斯分布形式的方法。然而,最终的解中没有依赖 \(q(\mathrm{x}_t | \mathrm{x}_{t-1})\),那么干脆就不要把推理过程施加马尔可夫限制。

下面的推导直接写出 \(\mathrm x_{t-1} = \boldsymbol{\mu}_\theta(\mathrm{x}_t, t) + \sigma_t\boldsymbol{\epsilon}\),其中 \(\boldsymbol{\epsilon} \sim \mathcal{N}(0, \mathrm{I})\)

\[ \begin{aligned} \mathbf{x}_{t-1} &= \sqrt{\bar{\alpha}_{t-1}}\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_{t-1}}\boldsymbol{\epsilon}_{t-1} \\ &= \sqrt{\bar{\alpha}_{t-1}}\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_{t-1} - \sigma_t^2} \boldsymbol{\epsilon}_t + \sigma_t\boldsymbol{\epsilon} \\ &= \sqrt{\bar{\alpha}_{t-1}}\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_{t-1} - \sigma_t^2} \frac{\mathbf{x}_t - \sqrt{\bar{\alpha}_t}\mathbf{x}_0}{\sqrt{1 - \bar{\alpha}_t}} + \sigma_t\boldsymbol{\epsilon} \\ q_\sigma(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) &= \mathcal{N}(\mathbf{x}_{t-1}; \sqrt{\bar{\alpha}_{t-1}}\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_{t-1} - \sigma_t^2} \frac{\mathbf{x}_t - \sqrt{\bar{\alpha}_t}\mathbf{x}_0}{\sqrt{1 - \bar{\alpha}_t}}, \sigma_t^2 \mathbf{I}) \end{aligned} \]

科学空间中,对该求解过程的解释是,去除了 \(p(\mathrm{x}_t|\mathrm{x}_{t-1})\) 的条件,使用待定系数法求解如下边缘分布的等式: \[ \int p(\mathrm{x}_{t-1}|\mathrm{x}_t, \mathrm{x}_0) p(\mathrm{x}_t|\mathrm{x}_0) d\mathrm{x}_t = p(\mathrm{x}_{t-1}|\mathrm{x}_0) \]

对于上述通解中的自由变量 \(\sigma_t\),可以根据之前得到的特解 \(\tilde{\beta}_t\) 写成:

\[ \sigma^2_t = \eta \tilde{\beta}_t \]

训练过程不需要改变,但是采样过程中,引入超参 \(\eta\) 使得采样的过程更加多样。\(\eta=0\) 时即DDIM,推理的结果是确定的,推理时的时间步可以远远比训练时的时间步更稀疏。

\[ q_\sigma(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_{t-1}; \sqrt{\bar{\alpha}_{t-1}} \left( \frac{\mathrm{x}_t - \sqrt{1-\bar\alpha_t}\boldsymbol{\epsilon}_\theta(\mathrm{x}_t, t)}{\sqrt{\bar\alpha_t}} \right) + \sqrt{1 - \bar{\alpha}_{t-1} - \sigma_t^2} \boldsymbol{\epsilon}_\theta(\mathrm{x}_t, t), \sigma_t^2 \mathbf{I}) \]