阐明扩散模型的设计空间

Introduction

扩散模型的火热吸引了众多研究者,相关工作百花齐放,但这样繁荣的景象也就带来了一个问题——每篇论文都有一套自己的体系,缺乏一个统一的框架;并且扩散模型的各个组件相互耦合,不便于单独研究。终于,NVIDIA 的研究人员在论文[1]中详细阐述了扩散模型的设计空间。其实扩散模型无非由以下几部分构成:

  • Formulation:扩散和去噪过程可以用 SDE/ODE 描述,方程的系数有多种选取方案;
  • Sampling:可以自定义采样器种类、时间步离散化方式和采样轨迹;
  • Training:可以将网络参数化为不同形式,网络的输入输出可以进行各种预处理,可以调整各时间步权重,可以运用各种训练技巧。

将这些部分解耦并分别研究后,研究者将各部分的最优实践组合起来,提出了 EDM,达到了扩散模型的 SOTA.

Formulation

扩散模型的SDE与ODE描述一文中我们看到,Song 等人[2]通过将 DDPM 和 SMLD 连续化,指出扩散过程可以描述为如下的 SDE 形式: \[ \mathrm d\mathbf x=f(\mathbf x,t)\mathrm dt+g(t)\mathrm d\mathbf w \] 由于无论是 VP SDE (对应 DDPM) 还是 VE SDE (对应 SMLD),\(f(\mathbf x,t)\) 其实都是 \(f(t)\mathbf x\) 的形式,所以不妨将该 SDE 改写作: \[ \mathrm d\mathbf x=f(t)\mathbf x\mathrm dt+g(t)\mathrm d\mathbf w\tag{1}\label{sde} \] 另一方面,在以变分扩散模型[3]为代表的一系列基于贝叶斯框架推导扩散模型的论文中,人们常用如下马尔可夫过程表示扩散过程: \[ q(\mathbf x_{0:T})=q(\mathbf x_0)\prod_{t=1}^Tq(\mathbf x_t\vert\mathbf x_{t-1}),\quad q(\mathbf x_t\vert\mathbf x_0)=\mathcal N\left(\mathbf x_t;\alpha_t\mathbf x_0,\sigma_t^2\mathbf I\right),\quad t\in[0,1] \] 为方便后续推导,将其改写作: \[ q(\mathbf x_t\vert\mathbf x_0)=\mathcal N\left(\mathbf x_t;s(t)\mathbf x_0,s^2(t)\sigma^2(t)\mathbf I\right),\quad t\in [0,1]\tag{2}\label{p} \] 事实上,\(\eqref{p}\) 式可以视作 \(\eqref{sde}\) 式的扰动核 (perturbation kernel),因此二者本质其实是一样的。鉴于 SDE 形式的灵活性,现阶段的研究倾向于用 SDE 描述扩散模型,但是 \(\eqref{sde}\) 式中的参数 \(f(t),g(t)\) 本身没有什么实际意义,反而 \(\eqref{p}\) 式的参数 \(s(t),\sigma(t)\) 有直观的含义,即加噪强度。因此,我们希望结合二者的优点,将扩散过程写作以 \(s(t),\sigma(t)\) 为参数的 SDE 形式。经过推导,可以证明 \(f(t),g(t)\)\(s(t),\sigma(t)\) 之间存在如下的关系: \[ \begin{gather} f(t)=\frac{\dot s(t)}{s(t)},\quad g(t)=s(t)\sqrt{2\dot\sigma(t)\sigma(t)}\\ s(t)=\exp\left(\int_0^t f(\xi)\mathrm d\xi\right),\quad \sigma(t)=\sqrt{\int_0^t\frac{g^2(\xi)}{s^2(\xi)}\mathrm d\xi} \end{gather}\tag{3}\label{rel} \] 于是将 \(\eqref{rel}\) 式代入 \(\eqref{sde}\) 式就得到了我们想要的扩散过程的 SDE 描述: \[ \mathrm d\mathbf x=\frac{\dot s(t)}{s(t)}\mathbf x\mathrm dt+s(t)\sqrt{2\dot\sigma(t)\sigma(t)}\mathrm d\mathbf w \]

推导过程:由 \(\eqref{p}\) 式可知: \[q(\mathbf x_t\vert\mathbf x_r)=\mathcal N\left(\mathbf x_t;\;\frac{s(t)}{s(r)}\mathbf x_r,s^2(t)\left(\sigma^2(t)-\sigma^2(r)\right)\mathbf I\right),\quad 0\leq r<t\leq 1\] 即: \[\mathbf x_t=\frac{s(t)}{s(r)}\mathbf x_r+s(t)\sqrt{\sigma^2(t)-\sigma^2(r)}\;\boldsymbol\epsilon,\quad\boldsymbol\epsilon\sim\mathcal N(\mathbf 0,\mathbf I),\quad 0\leq r\leq t\leq 1\] 整理一下: \[\frac{\mathbf x_t}{s(t)}=\frac{\mathbf x_r}{s(r)}+\sqrt{\sigma^2(t)-\sigma^2(r)}\;\boldsymbol\epsilon,\quad\boldsymbol\epsilon\sim\mathcal N(\mathbf 0,\mathbf I),\quad 0\leq r\leq t\leq 1\]\(r=t-\Delta t\)\[\frac{\mathbf x_t}{s(t)}-\frac{\mathbf x_{t-\Delta t}}{s(t-\Delta t)}=\sqrt{\sigma^2(t)-\sigma^2(t-\Delta t)}\;\boldsymbol\epsilon,\quad\boldsymbol\epsilon\sim\mathcal N(\mathbf 0,\mathbf I)\]\(\Delta t\to0\),得: \[\mathrm d\left(\frac{\mathbf x_t}{s(t)}\right)=\frac{\mathbf x_t\mathrm ds(t)-s(t)\mathrm d\mathbf x_t}{s(t)^2}=\sqrt{(\sigma^2(t))'}\mathrm d\mathbf w=\sqrt{2\dot\sigma(t)\sigma(t)}\mathrm d\mathbf w\] 整理得: \[\mathrm d\mathbf x_t=\frac{\dot s(t)}{s(t)}\mathbf x_t\mathrm dt-s(t)\sqrt{2\dot\sigma(t)\sigma(t)}\mathrm d\mathbf w\] 对比 \(\eqref{sde}\) 式可知: \[f(t)=\frac{\dot s(t)}{s(t)},\quad g(t)=s(t)\sqrt{2\dot\sigma(t)\sigma(t)}\] 反过来用 \(f(t),g(t)\) 表示 \(s(t),\sigma(t)\) 即为: \[s(t)=\exp\left(\int_0^t f(\xi)\mathrm d\xi\right),\quad \sigma(t)=\sqrt{\int_0^t\frac{g^2(\xi)}{s^2(\xi)}\mathrm d\xi}\]

根据论文[2]\(\eqref{sde}\) 式对应如下的与之具有相同边缘分布的 reverse SDE 和 probability flow ODE: \[ \begin{align} &\mathrm d\mathbf x=\left[f(t)\mathbf x-g^2(t)\nabla_\mathbf x\log p_t(\mathbf x)\right]\mathrm dt+g(t)\mathrm d\bar{\mathbf w}\tag{4}\label{reverse-sde-old}\\ &\mathrm d\mathbf x=\left[f(t)\mathbf x-\frac{1}{2}g(t)^2\nabla_\mathbf x\log p_t(\mathbf x)\right]\mathrm dt\tag{5}\label{ode-old} \end{align} \]

其中 \(p_t(\mathbf x)\) 表示数据在 \(t\) 时刻加噪后的分布。考虑到 ODE 比 SDE 更容易分析,我们从 ODE 下手,将 \(\eqref{rel}\) 式代入 \(\eqref{ode-old}\) ​式得: \[ \mathrm d\mathbf x=\left[\frac{\dot s(t)}{s(t)}\mathbf x-s^2(t)\dot\sigma(t)\sigma(t)\nabla_\mathbf x\log p_t(\mathbf x)\right]\mathrm dt\tag{6}\label{ode-notready} \]

进一步地,注意到 \(p_t(\mathbf x)\) 这种表示方式并不能直观地告诉我们 \(t\) 时刻加了多少噪声。换句话说,上式与 noise schedule 耦合起来了。为了解耦,定义 \(p(\mathbf x;\sigma)\) 表示数据加上方差为 \(\sigma^2\) 的高斯噪声后的分布,那么可以推导: \[ \begin{align} p_t(\mathbf x)&=\int_{\mathbb R^d}p_{0t}(\mathbf x\vert\mathbf x_0)p_\text{data}(\mathbf x_0)\mathrm d\mathbf x_0\\ &=\int_{\mathbb R^d}p_\text{data}(\mathbf x_0)\left[\mathcal N\left(\mathbf x;s(t)\mathbf x_0,s^2(t)\sigma^2(t)\mathbf I\right)\right]\mathrm d\mathbf x_0\\ &=\int_{\mathbb R^d}p_\text{data}(\mathbf x_0)\left[s^{-d}(t)\mathcal N\left(\mathbf x/s(t);\mathbf x_0,\sigma^2(t)\mathbf I\right)\right]\mathrm d\mathbf x_0\\ &=s^{-d}(t)\int_{\mathbb R^d}p_\text{data}(\mathbf x_0)\mathcal N\left(\mathbf x/s(t);\mathbf x_0,\sigma^2(t)\mathbf I\right)\mathrm d\mathbf x_0\\ &=s^{-d}(t)\left[p_\text{data}\ast\mathcal N(\mathbf 0,\sigma^2(t)\mathbf I)\right](\mathbf x/s(t))\\ &=s^{-d}(t)p(\mathbf x/s(t);\sigma(t)) \end{align} \]

代入 \(\eqref{ode-notready}\)​​ 式得: \[ \mathrm d\mathbf x=\left[\frac{\dot s(t)}{s(t)}\mathbf x-s^2(t)\dot\sigma(t)\sigma(t)\nabla_\mathbf x\log p\left(\frac{\mathbf x}{s(t)};\sigma(t)\right)\right]\mathrm dt\tag{7}\label{ode} \] 特别地,若 \(s(t)\equiv 1\),则有: \[ \mathrm d\mathbf x=-\dot\sigma(t)\sigma(t)\nabla_\mathbf x\log p(\mathbf x;\sigma(t))\mathrm dt\tag{8}\label{ode-simple} \] 上述 \(\eqref{ode},\eqref{ode-simple}\) 式即是 EDM 论文采用的 ODE 形式化。

为了获得 score function \(\nabla_\mathbf x\log p(\mathbf x;\sigma(t))\),我们利用 denoising score matching 训练模型拟合之。在不同的工作中,模型有不同的参数化形式,如拟合 \(\mathbf x_0\)\(\epsilon\)\(\mathbf v\) 或 score function 等,它们可以容易地互相转换。这里统一用 \(D_\theta(\mathbf x;\sigma)\) 表示“去噪模型”(即拟合 \(\mathbf x_0\) 的模型)而暂时不讨论其具体形式,那么有: \[ \nabla_\mathbf x\log p(\mathbf x;\sigma)=\frac{D_\theta(\mathbf x;\sigma)-\mathbf x}{\sigma^2} \]

于是: \[ \nabla_\mathbf x\log p\left(\frac{\mathbf x}{s(t)};\sigma(t)\right)=\frac{1}{s(t)}\nabla_{\frac{\mathbf x}{s(t)}}\log p\left(\frac{\mathbf x}{s(t)};\sigma(t)\right)=\frac{1}{s(t)\sigma^2(t)}\left(D_\theta\left(\frac{\mathbf x}{s(t)};\sigma(t)\right)-\frac{\mathbf x}{s(t)}\right) \] 代入 \(\eqref{ode}\)​ 式得到: \[ \begin{align} \mathrm d\mathbf x&=\left[\frac{\dot s(t)}{s(t)}\mathbf x-\frac{s^2(t)\dot\sigma(t)\sigma(t)}{s(t)\sigma^2(t)}\left(D_\theta\left(\frac{\mathbf x}{s(t)};\sigma(t)\right)-\frac{\mathbf x}{s(t)}\right)\right]\mathrm dt\\ &=\left[\left(\frac{\dot s(t)}{s(t)}+\frac{\dot\sigma(t)}{\sigma(t)}\right)\mathbf x-\frac{s(t)\dot\sigma(t)}{\sigma(t)}D_\theta\left(\frac{\mathbf x}{s(t)};\sigma(t)\right)\right]\mathrm dt \tag{9}\label{ode-real} \end{align} \]

生成过程(采样过程)就是使用数值方法迭代求解该 ODE 的过程。

Deterministic Sampling

ODE Solver

采样器,即 reverse SDE 或 probability flow ODE 的数值求解器,是扩散模型的一个重点研究方向。采样器用迭代前进的方式近似 SDE/ODE 真实的轨迹,因此每一步都会带来截断误差。越高阶的采样器允许人们用越少的迭代步数达到相同的效果。然而,高阶采样器的每一步迭代往往也需要更多次的模型推断(即神经网络的前向传播),而扩散模型的时耗基本都是前向传播造成的,所以在扩散模型的语境下,并不一定是越高阶的采样器就越高效。事实上正因如此,人们倾向于用 NFE (Neural Function Evaluation),即网络前向传播次数而非求解器的采样步数作为采样时间来比较不同采样器的效率。

最简单常用的 ODE 求解器无疑是 Euler 法,即在每一个时间步上用矩形近似积分,这是一个一阶求解器,即若设步长为 \(h\),则其局部截断误差是 \(O(h^2)\) 的。另一些常用的求解器包括高阶 Runge-Kutta 方法和线性多步法。EDM 的作者通过大量实验发现,二阶的 Heun 方法(即改进 Euler 法,用梯形近似积分)的效率最高,其算法如下所示:

如果去掉 6-8 行则 Heun 方法退化为 Euler 法,即 \(\eqref{ode-real}\) 式的简单离散化。

Discretization

除了 ODE 求解器的算法以外,还有一个因素会影响采样质量——时间步离散化的方式,即如何选取序列 \(\{t_0,t_1,\ldots,t_N\}\). 由于 \(\sigma(t)\) 单调增加存在反函数,这等价于选取序列 \(\{\sigma_0,\sigma_1,\ldots,\sigma_N\}\),然后令 \(t_i=\sigma^{-1}(\sigma_i)\). 作者决定采用 \(\sigma_{i<N}=(Ai+B)^\rho\) 的幂函数形式并选择 \(A,B\) 以使得 \(\sigma_0=\sigma_\max,\,\sigma_{N-1}=\sigma_\min\),可解得: \[ \sigma_{i<N}=\left(\sigma_\max^{\frac{1}{\rho}}+\frac{i}{N-1}\left(\sigma_\min^{\frac{1}{\rho}}-\sigma_\max^{\frac{1}{\rho}}\right)\right)^{\rho},\quad \sigma_N=0 \] 超参数 \(\rho\) 越大,则接近 \(\sigma_\min\) 处的步长越小(采得越密),接近 \(\sigma_\max\) 处的步长越大(采得越密);而步长越小,求解器的局部截断误差就越小。实验发现当 \(\rho=3\) 时各 \(\sigma\) 处的局部截断误差比较均衡,但对图像而言 \(\rho\in[5,10]\) 时生成质量更好,这说明接近 \(\sigma_\min\) 处的误差对图像质量影响更大,因此作者最终采用 \(\rho=7\).

Trajectory

ODE 解的轨迹形状由 \(\sigma(t)\)\(s(t)\),即 noise schedule 决定,下图展示了 VP ODE、VE ODE 和 DDIM 的轨迹:

它们对应的 noise schedule 分别为:

  • VP ODE: \(\sigma(t)=\sqrt{\exp(\frac{1}{2}\beta_\text{d}t^2+\beta_\min t)-1},\,s(t)=1/\sqrt{\exp(\frac{1}{2}\beta_\text{d}t^2+\beta_\min t)}\)
  • VE ODE: \(\sigma(t)=\sqrt{t},\,s(t)=1\)
  • DDIM: \(\sigma(t)=t,\,s(t)=1\)

作者认为,DDIM 的设置最好,因为对任意的 \(\mathbf x,t\),执行一个 Euler 步就可以得到去噪结果 \(D_\theta(\mathbf x;t)\). 从图中也可以看见 DDIM 的轨迹曲率最小,任意噪声下轨迹的切线都基本指向去噪结果。并且,实验也发现在 VP ODE 和 VE ODE 的预训练模型的基础上使用 DDIM 的设置,图像质量相比原设置有着明显的提升。在 DDIM 的 noise scheduler 设置下,对应的 ODE 方程 \(\eqref{ode-real}\) 式简化为: \[ \mathrm d\mathbf x=\frac{\mathbf x-D_\theta(\mathbf x;t)}{t}\mathrm dt \]

Stochastic Sampling

确定性采样有非常多的好处,例如可以反向采样 ODE 从而将图像转换回它的隐变量表示,但是其采样质量往往不如随机性采样。

可以证明,ODE \(\eqref{ode-simple}\) 式(取 \(s(t)\equiv 1\) 的特殊情况)对应一族与之具有相同边缘分布的 SDE: \[ \mathrm d\mathbf x_{\pm}= \underbrace{-\dot\sigma(t)\sigma(t)\nabla_\mathbf x\log p(\mathbf x;\sigma(t))\mathrm dt}_{\text{probability flow ODE }\eqref{ode-simple}}\pm \underbrace{\underbrace{\beta(t)\sigma^2(t)\nabla_\mathbf x\log p(\mathbf x;\sigma(t))\mathrm dt}_\text{deterministic noise decay}+ \underbrace{\sqrt{2\beta(t)}\sigma(t)\mathrm d\mathbf w}_\text{noise injection}}_\text{Langevin diffusion SDE} \] 其中,\(\mathrm d\mathbf x_+\)\(\mathrm d\mathbf x_-\) 分别是正向和逆向的 SDE. 事实上,论文[2]提出的 reverse SDE \(\eqref{reverse-sde-old}\) 式其实只是上述 SDE 取 \(\beta(t)=\dot\sigma(t)/\sigma(t)\) 的一个特殊情形。上式表明,SDE 是在 ODE 的基础上添加了 Langevin diffusion 过程作为修正,从而相比 ODE 有更好的采样效果。

基于上述理论,当取 \(\sigma(t)=t,s(t)=1\) 时,作者在针对 ODE 的 Heun 采样器的基础上设计了如下针对 SDE 的采样方法:

其中 4、5、6 行在执行 Euler 步前添加一定量的噪声来模拟 Langevin dynamics 过程。这不是一个通用的 SDE 求解器,其正确性保证来源于 Langevin 步在理论上是保持边缘分布不变的,因此可以在 ODE 求解过程中引入一些 Langevin 步。不过,由于模型具有预测误差,Langevin 步本身也不是精确的,因此作者对引入的噪声做了限制,即上图中 \(\gamma_i\) 的作用。这与论文[2]的 Predictor-Corrector 采样器有着类似的思想。

Training

Network

在实际训练时,我们不一定用神经网络直接对 \(D_\theta(\mathbf x;\sigma)\) 建模,例如 DDPM 原文预测的就是噪声,而 Progressive Distillation[4]提出预测 \(\mathbf v\). 为将不同的设计统一起来,作者将 \(D_\theta(\mathbf x;\sigma)\) 建模为: \[ D_\theta(\mathbf x;\sigma)=c_\text{skip}(\sigma)\mathbf x+c_\text{out}(\sigma)F_\theta\left(c_\text{in}(\sigma)\mathbf x;c_\text{noise}(\sigma)\right) \] 其中 \(F_\theta\) 才是真正要训练的神经网络。于是根据 denoising score matching,损失函数为: \[ \mathbb E_{\sigma,\mathbf y,\mathbf n}\bigg[ \underbrace{\lambda(\sigma)c_\text{out}^2(\sigma)}_\text{weight} \Big\Vert \underbrace{F_\theta(c_\text{in}(\sigma)\cdot(\mathbf y+\mathbf n);c_\text{noise}(\sigma))}_\text{network output} -\underbrace{\textstyle\frac{1}{c_\text{out}(\sigma)}(\mathbf y-c_\text{skip}(\sigma)\cdot(\mathbf y+\mathbf n))}_\text{training target} \Big\Vert_2^2\bigg] \] 为了让网络的输入和输出在不同大小的噪声保持单位方差,同时尽可能小地放大网络的误差,作者最终选择: \[ c_\text{skip}(\sigma)=\frac{\sigma_\text{data}^2}{\sigma^2+\sigma_\text{data}^2},\quad c_\text{out}(\sigma)=\frac{\sigma\cdot\sigma_\text{data}}{\sqrt{\sigma^2+\sigma_\text{data}^2}},\quad c_\text{in}(\sigma)=\frac{1}{\sqrt{\sigma^2+\sigma_\text{data}^2}},\quad c_\text{noise}(\sigma)=\frac{1}{4}\ln(\sigma) \]

Loss weighting

为了平衡损失函数的各项,取 \(\lambda(\sigma)c_\text{out}^2(\sigma)=1\),于是: \[ \lambda(\sigma)=\frac{\sigma^2+\sigma_\text{data}^2}{(\sigma\cdot\sigma_\text{data})^2} \] 训练时还需按照 \(p_\text{train}(\sigma)\) 采样 \(\sigma\),作者选择对数正态分布: \[ \ln(\sigma)\sim\mathcal N(P_\text{mean},P_\text{std}^2) \] 其中 \(P_\text{mean}=-1.2,P_\text{std}=1.2\).

Augmentation

当在小数据集上训练时,扩散模型有可能会过拟合。为此,受到 GANs 相关文献的启发,作者在训练时采用了一系列数据增强。为了避免模型生成增强的结果,作者在训练时将增强信息作者为条件给到网络 \(F_\theta\),并在推断时将其置零。

Unified Framework

在作者的统一框架下,原来的各个经典扩散模型对应的设置如下表所示:

下面我们推导一下表中 Sampling 一块的设置。

VP Sampling

VP SDE 是 DDPM 的连续化版本,对应 \(\eqref{sde}\) 式中取: \[ f(t)=-\frac{1}{2}\beta(t),\quad g(t)=\sqrt{\beta(t)} \] 在 DDPM 中,\(\beta(t)\) 是从 \(\beta_\max=0.02\)\(\beta_\min=0.0001\) 的线性插值: \[ \beta(t)=\beta_\min+t(\beta_\max-\beta_\min),\quad t\in[0,1] \] 所以: \[ \mathrm d\mathbf x=-\frac{1}{2}\left(\beta_\min+t(\beta_\max-\beta_\min)\right)\mathbf x\mathrm dt+\sqrt{\beta_\min+t(\beta_\max-\beta_\min)}\mathrm d\mathbf w \]\(\alpha(t)\)\(\beta(t)\) 的积分: \[ \alpha(t)=\int_0^t\beta(\xi)\mathrm d\xi=\frac{1}{2}\beta_\text{d}t^2+\beta_\min t \] 其中 \(\beta_d=\beta_\max-\beta_\min\). 则有: \[ \begin{align} s(t)&=\exp\left(\int_0^tf(\xi)\mathrm d\xi\right) =\frac{1}{\sqrt{\exp\left(\int_0^t\beta(\xi)\mathrm d\xi\right)}}\\ &=\frac{1}{\sqrt{\exp(\alpha(t))}} =\frac{1}{\sqrt{\exp\left(\frac{1}{2}\beta_\text{d}t^2+\beta_\min t\right)}} \end{align} \] 类似地,有: \[ \begin{align} \sigma(t)&=\sqrt{\int_0^t\frac{g^2(\xi)}{s^2(\xi)}\mathrm d\xi} =\sqrt{\int_0^t\exp(\alpha(\xi))\beta(\xi)\mathrm d\xi}\\ &=\sqrt{\int_0^t\exp(\alpha(\xi))\dot\alpha(\xi)\mathrm d\xi}=\sqrt{\exp(\alpha(t))-\exp(\alpha(0))}\\ &=\sqrt{\exp\left(\frac{1}{2}\beta_\text{d}t^2+\beta_\min t\right)-1} \end{align} \] 又 DDPM++(DDPM 的连续时间版本)的时间步是 \([\epsilon_\text{s},1]\) 之间的均匀采样,所以: \[ t_{i<N}=1+\frac{i}{N-1}(\epsilon_\text{s}-1) \] 这就得到了表中 VP Sampling 的部分。

VE formulation

VE SDE 是 SMLD 的连续化版本,对应 \(\eqref{sde}\) 式中取: \[ f(t)=0,\quad g(t)=\sqrt{\frac{\mathrm d[\sigma^2(t)]}{\mathrm dt}}=\sqrt{2\dot\sigma(t)\sigma(t)} \] 于是: \[ s(t)=\exp\left(\int_0^tf(\xi)\mathrm d\xi\right)=1 \] 在 SMLD 中,\(\sigma(t)\) 被设置为几何级数: \[ \sigma(t)=\sigma_\min\left(\frac{\sigma_\max}{\sigma_\min}\right)^t,\quad t\in(0,1] \] 但这里 EDM 作者设置 \(\sigma(t)=\sqrt{t}\),然后将时间步写作: \[ t_{i<N}=\sigma_\max^2\left(\frac{\sigma_\min^2}{\sigma_\max^2}\right)^{\frac{i}{N-1}} \] 从而达到一样的效果。

iDDPM + DDIM

DDIM与加速采样一文中我们看到,DDIM 可以写作如下的 ODE 形式: \[ \mathrm d\mathbf x=\epsilon_\theta\left(\frac{\mathbf x(t)}{\sqrt{1+\sigma^2(t)}},t\right)\mathrm d\sigma(t) \] 用本文中的 \(D_\theta\) 替换 \(\epsilon_\theta\),再替换为 score function 表示: \[ \epsilon_\theta\left(\frac{\mathbf x(t)}{\sqrt{1+\sigma^2(t)}},t\right)=\frac{\mathbf x(t)-D_\theta(\mathbf x(t);\sigma(t))}{\sigma(t)}=-\sigma(t)\nabla_{\mathbf x(t)}\log p(\mathbf x(t);\sigma(t)) \] 因此得到 ODE: \[ \mathrm d\mathbf x=-\sigma(t)\nabla_{\mathbf x(t)}\log p(\mathbf x(t);\sigma(t))\mathrm d\sigma(t) \]\(\sigma(t)=t\),则: \[ \mathrm d\mathbf x=-t\nabla_{\mathbf x(t)}\log p(\mathbf x(t);\sigma(t))\mathrm dt \]

说实话这里没看懂作者的脑回路,感觉反而弄得更复杂了。

References

  1. Karras, Tero, Miika Aittala, Timo Aila, and Samuli Laine. Elucidating the design space of diffusion-based generative models. Advances in Neural Information Processing Systems 35 (2022): 26565-26577. ↩︎
  2. Song, Yang, Jascha Sohl-Dickstein, Diederik P. Kingma, Abhishek Kumar, Stefano Ermon, and Ben Poole. Score-Based Generative Modeling through Stochastic Differential Equations. In International Conference on Learning Representations. 2020. ↩︎
  3. Kingma, Diederik, Tim Salimans, Ben Poole, and Jonathan Ho. Variational diffusion models. Advances in neural information processing systems 34 (2021): 21696-21707. ↩︎
  4. Salimans, Tim, and Jonathan Ho. Progressive distillation for fast sampling of diffusion models. arXiv preprint arXiv:2202.00512 (2022). ↩︎
  5. Diffusion Models 基础知识总结回顾 - 董子斌的文章 - 知乎 https://zhuanlan.zhihu.com/p/682151286 ↩︎

阐明扩散模型的设计空间
https://xyfjason.github.io/blog-main/2024/02/20/阐明扩散模型的设计空间/
作者
xyfJASON
发布于
2024年2月20日
许可协议