Diffusion Models - 扩散模型

date
Oct 14, 2022
Last edited time
May 29, 2023 08:15 AM
status
Published
slug
Diffusion_Models-扩散模型
tags
DL
DDPM
summary
2022.10.15@更新了一点, 发现还是得看的 QAQ 2022.10.20@继续更新了一点 2022.10.26@添加了LDM 2023.05.06@修改了一处公式错误
type
Post
Field
Plat
常见的生成模型(Generative Models)如 GAN、VAE 和基于流 (Flow-based) 的模型。他们在生成高质量样本方面取得了巨大成功,但每个都有其自身的局限性。 GAN 因其对抗性训练性质,其训练过程难以收敛以及生成多样性欠佳。 VAE 依赖于替代损失(surrogate loss)。流模型必须使用专门的架构来构建可逆变换。
扩散模型 (Diffusion Models) 的灵感来自非平衡热力学。定义了扩散步骤的马尔可夫链,以缓慢地将随机噪声添加到数据中,然后学习逆向扩散过程以从噪声中构造所需的数据样本与 VAE 或流模型不同,扩散模型是通过固定过程学习的,并且潜在变量具有高维度(与原始数据相同)
Fig. 1. Overview of different types of generative models.
Fig. 1. Overview of different types of generative models.

1. Diffusion Models

已经提出了几种基于扩散的生成模型,其中包含类似的思想,包括

1.1 Forward diffusion process

生成扩散模型漫谈(一):DDPM = 拆楼 + 建楼
说到生成模型,VAE、GAN 可谓是 "如雷贯耳"。此外,还有一些比较小众的选择,如 flow 模型、VQ-VAE 等,也颇有人气,尤其是 VQ-VAE 及其变体 VQ-GAN,近期已经逐渐发展到 "图像的 Tokenizer" 的地位,用来直接调用 NLP 的各种预训练方法。除了这些之外,还有一个本来更小众的选择--扩散模型(Diffusion Models)--正在生成模型领域"异军突起",当前最先进的两个文本生成图像--OpenAI 的 DALL·E 2 和 Google 的 Imagen,都是基于扩散模型来完成的。 从本文开始,我们开一个新坑,逐渐介绍一下近两年关于生成扩散模型的一些进展。据说生成扩散模型以数学复杂闻名,似乎比 VAE、GAN 要难理解得多,是否真的如此?扩散模型真的做不到一个 "大白话" 的理解?让我们拭目以待。 说到扩散模型,一般的文章都会提到能量模型(Energy-based Models)、得分匹配(Score Matching)、朗之万方程(Langevin Equation)等等,简单来说,是通过得分匹配等技术来训练能量模型,然后通过郎之万方程来执行从能量模型的采样。 从理论上来讲,这是一套很成熟的方案,原则上可以实现任何连续型对象(语音、图像等)的生成和采样。但从实践角度来看,能量函数的训练是一件很艰难的事情,尤其是数据维度比较大(比如高分辨率图像)时,很难训练出完备能量函数来;另一方面,通过朗之万方程从能量模型的采样也有很大的不确定性,得到的往往是带有噪声的采样结果。所以很长时间以来,这种传统路径的扩散模型只是在比较低分辨率的图像上做实验。 如今生成扩散模型的大火,则是始于 2020 年所提出的 DDPM(Denoising Diffusion Probabilistic Model),虽然也用了 "扩散模型" 这个名字,但事实上除了采样过程的形式有一定的相似之外,DDPM 与传统基于朗之万方程采样的扩散模型可以说完全不一样,这完全是一个新的起点、新的篇章。 准确来说,DDPM 叫 "渐变模型" 更为准确一些,扩散模型这一名字反而容易造成理解上的误解,传统扩散模型的能量模型、得分匹配、朗之万方程等概念,其实跟 DDPM 及其后续变体都没什么关系。有意思的是,DDPM 的数学框架其实在 ICML2015
生成扩散模型漫谈(一):DDPM = 拆楼 + 建楼

扩散过程

给定从真实数据分布中采样的数据点 ,定义一个前向扩散过程,其中在 步中向样本添加少量高斯噪声,产生一系列噪声样本 。步长由方差表控制
随着步长 变大,数据样本 逐渐失去其可区分的特征。最终当 时, 等价于各向同性高斯分布。
Fig. 2. The Markov chain of forward (reverse) diffusion process of generating a sample by slowly adding (removing) noise.
Fig. 2. The Markov chain of forward (reverse) diffusion process of generating a sample by slowly adding (removing) noise.
通过缓慢添加(去除)噪声生成样本的马尔可夫链的正向(反向)扩散过程
  • 扩散过程可以在任意步长进行采样
    • 上述过程的一个很好的特性是,可以用重新参数化技巧在任何任意时间步长 的封闭形式下对 进行采样
      使得 以及 :
      当合并两个具有不同方差的高斯时,,新分布为 。这里合并的标准差是
通常,当样本变得更嘈杂时,可以承受更大的更新步长,所以 因此 .

Connection with stochastic gradient Langevin dynamics

Langevin dynamics 是物理学中的一个概念,用于对分子系统进行统计建模。结合随机梯度下降,stochastic gradient Langevin dynamics 可以仅使用马尔可夫更新链中的梯度 从概率密度 生成样本:
其中 为步长,当 , 等于真实概率密度
与标准 SGD 相比,stochastic gradient Langevin dynamics 将高斯噪声注入到参数更新中,以避免陷入局部最小值。

1.2 Reverse diffusion process

反向过程

如果可以反转上述过程并从 中采样,将能够从高斯噪声输入 中重新创建真实样本。值得一提的是,如果 足够小, 也将是高斯分布的。不过估计 是不可行的,因为它需要使用整个数据集,因此需要学习一个模型 来逼近这些条件概率,以便运行反向扩散过程。
Fig. 3. An example of training a diffusion model for modeling a 2D swiss roll data.
Fig. 3. An example of training a diffusion model for modeling a 2D swiss roll data.
值得注意的是,当以 为条件时,反向后验条件概率是易于处理的:
使用贝叶斯定理,则有:
其中 是一些不涉及 的函数,因此可以省略。按照标准的高斯密度函数,均值和方差可以参数化如下(回顾一下,):
可以发现, 的方差与输入与 无关,因此模型 的方差 不需要使用网络预测。
由于不错的属性,可以代表 并将其代入上式得到:
总结一下:
这与 VAE 非常相似,因此可以使用变分下限来优化负对数似然。

目标分布的似然函数

我们可以在负对数似然的基础上加上一个 KL 散度,得到这个负对数似然的上界。然后通过优化这个上界,就能够等价优化这个负对数似然。
variational lower bound 变分下限(也叫 evidence lower bound, ELBO)为了衡量两个分布 的相似程度,常用的度量标准是 Kullback-Leibler (KL) 散度。变分推理的 KL 散度为:其中 为上述的变分下限。又由 可得:因为 KL 散度总是大于等于 0,可以推导出:
使用 Jensen 不等式也很容易得到相同的结果。假设我们想最小化交叉熵作为学习目标,
Jensen 不等式: 过一个下凸函数上任意两点所作割线一定在这两点间的函数图像的上方,即:概率论版本: 是个概率测度。函数 换作实值随机变量 。在 空间上,任何函数相对于概率测度 的积分就成了期望值。这不等式就说,若 是任一凸函数,则:
为了将方程中的每个项转换为可分析计算的,可以将目标进一步重写为几个 KL 散度和熵项的组合:
由马尔可夫假设,
分别标记变分下界损失中的每个分量:
中的每个 KL 项( 除外)比较两个高斯分布,因此可以以封闭形式计算它们。 是常数,在训练期间可以忽略,因为 没有可学习的参数,而 是高斯噪声。 是使用从 派生的单独离散解码器。
时,,因此 只是 散度在 时候的特殊形式,我们只需要优化 即可。

1.3 Parameterization of for Training Loss

训练损失推导

我们需要学习一个神经网络来逼近反向扩散过程中的条件概率分布 ,通过训练 来预测 。因为 在训练时可用作输入,可以重新参数化高斯噪声项,以使其在时间步 从输入 预测
我们最小化 ,由于这两个分布都是高斯分布,因此 。由于这两个高斯分布的方差都为常数,因此 KL 散度只跟 有关。
na
那么:

Simplification

在忽略加权项的简化目标下,训练扩散模型效果更好:
最后一个简单的目标是:
其中 是一个不依赖于 的常数。
Fig. 4. The training and sampling algorithms in DDPM
Fig. 4. The training and sampling algorithms in DDPM

Connection with noise-conditioned score networks (NCSN) 需要修改

DL花书阅读笔记-直面配分函数
配分函数是未归一化概率所有状态的积分(对于连续变量)或求和(对于离散变量): 通过最大似然学习无向模型特别困难的原因在于配分函数依赖于参数。对数似然相对于参数的梯度具有一项对应于配分函数的梯度: 这是机器学习中非常著名的正相(positive phase)和负相(negative phase)的分解。 其中, 对于大多数感兴趣的无向模型而言,负相计算是困难的。没有潜变量或潜变量之间很少相互作用的模型通常会有一个易于计算的正相。 该等式是使用各种蒙特卡罗方法近似最大化(具有难计算配分函数模型的)似然的基础。 对比散度(CD) 对比散度(CD,或者是具有 k 个 Gibbs 步骤的 CD-k)算法在每个步骤中初始化马尔可夫链为采样自数据分布中的样本 (Hinton, 2000, 2010). 初始时,数据分布并不接近模型分布,因此负相不是非常准确。幸运的是,正相仍然可以准确地增加数据的模型概率。进行正相阶段一段时间之后,模型分布会更接近于数据分布,并且负相开始变得准确。 缺点 它不能抑制远离真实训练样本的高概率区域。这些区域在模型上具有高概率,但是在数据生成区域上具有低概率,被称为虚假模态(spurious modes)。 CD并不直接有助于训练更深的模型。这是因为在给定可见单元样本的情况下,很难获得隐藏单元的样本。由于隐藏单元不包括在数据中,所以使用训练点初始化无法解决这个问题。即使我们使用数据初始化可见单元,我们仍然需要磨合在给定这些可见单元的隐藏单元条件分布上采样的马尔可夫链。 对模型进行采样可以得到所有的单元样本 , 但是从数据中我们只有一部分 可见, 那么另一部分 称为隐藏样本.
DL花书阅读笔记-直面配分函数
Song&Ermon(2019)提出了一种基于分数 (scored-based) 的生成建模方法,其中样本通过 Langevin 动力学采样,使用分数匹配估计的数据分布梯度。每个样本 的密度概率分数被定义为其梯度 。分数网络 被训练来估计它,
为了使其在深度学习环境下可扩展到高维数据,他们提议使用去噪分数匹配(Vincent,2011)或切片分数匹配(使用随机投影;Song等人,2019)。去噪分数匹配给数据 添加了一个预先指定的小噪声,并估计 与分数匹配。
回想一下,朗之万动力学可以在一个迭代过程中仅使用分数 从概率密度分布中采样数据点。
然而,根据流形假设,大多数数据预计集中在低维流形中,即使观察到的数据可能看起来只是任意高维。由于数据点无法覆盖整个空间,因此对分数估计产生了负面影响。在数据密度低的区域,分数估计不太可靠。添加一个小的高斯噪声使扰动的数据分布覆盖整个空间 后,分数估计器网络的训练变得更加稳定。Song & Ermon (2019)通过用不同级别的噪声扰动数据来改进它,并训练一个噪声条件评分网络来共同估计所有扰动数据在不同噪声级别下的分数。
增加噪声水平的步骤类似于前向扩散过程。如果我们使用扩散过程的标记,得分近似 . 给定一个高斯分布 ,我们可以将其密度函数的对数的导数写为 其中, . 回想一下 因此
 

Improved Denoising Diffusion Models

Parameterization of

在 DDPM 中,扩散模型的方差被设置为关于步长 线性增加的常数,从 。与 之间的归一化图像像素值相比,它们的值相对较小。DDPM 扩散模型显示了高质量的样本,但仍然无法像其他生成模型那样实现具有竞争力的模型对数似然。
Nichol & Dhariwal (2021) 提出了几种改进技术来帮助扩散模型获得更低的 NLL。其中一项改进是使用基于余弦的方差调度。调度函数的选择可以是任意的,只要它在训练过程的中间提供接近线性的下降以及在 附近相对变化不大。
其中的偏置 是为了防止 在接近 时过小。
Fig. 5. Comparison of linear and cosine-based scheduling of  during training.
Fig. 5. Comparison of linear and cosine-based scheduling of  during training.

Parameterization of reverse process variance

Ho et al. (2020) 选择将反向过程的方差 固定为常数,而不是使它们可学习或设置 ,其中 不是学习的,而是设置为 。因为他们发现学习对角方差 会导致训练不稳定和采样质量下降。 Nichol & Dhariwal (2021) 提出学习 作为 的插值,首先通过模型预测一个加权向量 ,然后得到:
然而,简化的目标函数 不依赖于 。为了训练这个参数,他们构建了一个混合目标函数,其中 很小,并且在 项中的 上停止梯度传播,使得 仅指导 的学习。他们观察到 可能由于梯度噪声而难以优化,因此他们建议使用具有重要采样的滑动时间平均的
Fig. 6. Comparison of negative log-likelihood of improved DDPM with other likelihood-based generative models. NLL is reported in the unit of bits/dim.
Fig. 6. Comparison of negative log-likelihood of improved DDPM with other likelihood-based generative models. NLL is reported in the unit of bits/dim.

Denoising Diffusion Implicit Models

重写反向扩散的条件分布

我们发现,DDPM 的目标函数的训练过程只依赖于边缘分布 ,而反向过程的每一步只依赖于 。既然最终的推导结果与 (我们假设的马克可夫性质)无关,那么我们可以直接将 从推导中去掉,这样反向过程也就不需要通过马尔可夫链来进行生成了。
我们的目标函数是从分布 得来,我们使用了贝叶斯公式来写出这个分布的形式,并且在这个过程中我们已知分布 。所以在 DDIM 中我们直接将推理分布定义为:
我们假设:
为了不重新训练模型,我们不能改变 ,于是我们可以列出
Mark
Mean
Sample
其中 ,并且由于正太分布的叠加性,可以发现 。对比 的两个采样形式,我们发现只需要满足两个方程:
这样就有了两个方程,三个未知数。那么我们可以将 作为可变参数,解出后可得到分布
也可以直接如下推得 以上只利用了分布 的表示形式。
然后我们可以按照和 DDPM 的一样的方式去推导优化目标,最终也会得到同样的 (虽然VLB的系数不同,论文3.2部分也证明了这个结论)。 论文也给出了一个前向过程是非马尔可夫链的示例,如下图所示,这里前向过程是,由于生成 不仅依赖 ,而且依赖 ,所以是一个非马尔可夫链:
notion image

Speed up Diffusion Model Sampling

通过反向扩散过程的马尔可夫链从 DDPM 生成样本非常慢,因为 可能高达几千步。 例如,从 DDPM 中采样 50k 大小为 32 × 32 的图像大约需要 20 小时,但从 Nvidia 2080 Ti GPU 上的 GAN 中采样不到一分钟。
与DDPM一样,DDIM 这里也是用神经网络 来预测噪音,那么根据 的形式,在生成阶段,我们可以用如下公式来从 生成
这里将生成过程分成三个部分:一是由预测的 来产生的,二是由指向 的部分,三是随机噪音(这里 是与 无关的噪音)。论文将 近一步定义为:
这里考虑两种情况,一是 ,此时 ,此时生成过程就和DDPM一样了。另外一种情况是 ,这个时候生成过程就没有随机噪音了,是一个确定性的过程,论文将这种情况下的模型称为DDIMdenoising diffusion implicit model),一旦最初的随机噪音 确定了,那么DDIM的样本生成就变成了确定的过程。
上面我们终于得到了DDIM模型,那么我们现在来看如何来加速生成过程。虽然DDIM和DDPM的训练过程一样,但是我们前面已经说了,DDIM并没有明确前向过程,这意味着我们可以定义一个更短的步数的前向过程。具体地,这里我们从原始的序列 采样一个长度为 的子序列 ,我们将 的前向过程定义为一个马尔卡夫链,并且它们满足:。下图展示了一个具体的示例:
notion image
那么生成过程也可以用这个子序列的反向马尔卡夫链来替代,由于 可以设置比原来的步数 要小,那么就可以加速生成过程。这里的生成过程变成:
或者写成采样的形式:
虽然在实验中所有模型都以 的扩散步骤进行训练,但他们观察到,当 较小时,DDIM()可以产生最佳质量的样本,而 DDPM()在 较小时的表现要差得多。当我们有能力运行完整的反向马尔可夫扩散步骤 () 时,DDPM 的性能确实更好。使用 DDIM,可以将扩散模型训练到任意数量的前向步骤,但只能从生成过程中的步骤子集进行采样。
Fig. 7. FID scores on CIFAR10 and CelebA datasets by diffusion models of different settings, including DDIM () and DDPM ().
Fig. 7. FID scores on CIFAR10 and CelebA datasets by diffusion models of different settings, including DDIM () and DDPM ().
相较于 DDPM:
  1. DDIM 使用更少的步骤生成更高质量的样本。
  1. 由于生成过程是确定性的,因此具有“一致性”属性,这意味着以相同潜在变量为条件的多个样本应该具有相似的高级特征。
  1. 由于一致性,DDIM 可以在潜在变量中进行语义上有意义的插值。

Conditioned Generation

在对有条件信息的图像(如ImageNet数据集)进行生成式模型训练时,通常是以类标签或一段描述性文本为条件生成样本。

Classifier Guided Diffusion

为了明确地将类别信息纳入扩散过程,Dhariwal & Nichol (2021)在噪声图像 上训练了一个分类器 ,并使用梯度 通过改变噪声预测来引导扩散采样过程向条件信息 (例如目标类别标签)发展。
回顾一下 ,我们可以把联合分布 的得分函数写成如下。
因此,分类器指导的预测器 将采取以下形式:
为了控制分类器指导的强度,我们可以在 delta 部分增加一个权重 :
由此产生的消融扩散模型(ADM)和带有额外分类器指导的模型(ADM-G)能够取得比SOTA生成模型(如BigGAN)更好的结果。
notion image
此外,Dhariwal和Nichol(2021)对U-Net架构进行了一些修改,显示出比GAN的扩散模型更好的性能。架构的修改包括更大的模型深度/宽度、更多的注意力头、多分辨率注意力、用于上/下采样的BigGAN残余块、残余连接重新缩放 以及自适应组归一化(AdaGN)。

Semantic Guidance Diffusion

我们可以把分类器替换成其它任意的判别器,也即更换引导条件,从而实现利用不同的语义信息来指导扩散模型的去噪过程。比如说,我们可以实现 text-guidance 和 image-guidance 等。
实质上就是把 classifier guidance 的条件推广,表达为:
表示就是新的引导条件,这里展示的是分类的,其实也可以换成相似度之类的分数指标。具体可以有以下的例子:图像引导、文本引导、图像+文本引导。
notion image
 

Classifier-Free Guidance

在没有独立分类器 的情况下,仍然可以通过纳入条件性扩散模型和非条件性扩散模型的分数来运行条件性扩散步骤(Ho & Salimans, 2021),即使用有条件以及无条件的样本输入扩散模型来引导训练
让无条件去噪扩散模型 通过分数估计器 进行参数化,条件模型 通过 进行参数化。这两个模型可以通过一个神经网络来学习。准确地说,条件扩散模型 是在成对的数据 上训练的,其中条件信息 被周期性地随机丢弃,以便模型也知道如何无条件地生成图像,即
隐性分类器的梯度可以用条件性和非条件性分数估计器来表示。一旦插入分类器引导的修正分数,该分数就不包含对单独分类器的依赖性。由
给定一个高斯分布 ,我们可以将其密度函数的对数的导数写为 其中, . 回想一下 因此
那么,由 Classifier Guided Diffusion 中的噪声预测:
带入得:
其中,
或者在 GLIDE 中写为的: ,其中
他们的实验表明,无分类器引导可以在FID(区分合成和生成的图像)和IS(质量和多样性)之间实现良好的平衡。
导向扩散模型GLIDE(Nichol, Dhariwal & Ramesh, et al. 2022)探索了两种引导策略,即CLIP引导和无分类器引导,发现后者更受欢迎。他们假设,这是因为CLIP引导利用了具有对抗性的例子向CLIP模型,而不是优化更好的匹配图像生成。
notion image
notion image

Latent diffusion model

diffusion model的生成过程是从尺寸与目标尺寸相同的2D正态分布噪声空间中进行采样,所以整个过程中的特征尺寸大小与最终结果相同,所以特征空间是像素级别的,所以计算量是比较大的,如果可以对该空间进行降维,并且保持高频信息不变,那么就可以大大地减小计算量,并且保持生成的质量不发生变化。
本文提出的正是将diffusion model中递归生成过程中每一步的生成结果从像素空间压缩为AE的隐特征空间,较直观如下图所示:
notion image
 
 
notion image
 
感知压缩过程依赖于 VAE。编码器 用于将输入图像 压缩为更小的 Latent Vector ,其中下采样率 。然后解码器 从 Latent Vector 中重建图像,
扩散和去噪过程发生在 Lantent Vecor 上。去噪模型是一个 U-Net,这篇文章增加了交叉注意机制,以处理图像生成的条件信息(例如类标签、语义图、图像的模糊变体)。该设计相当于将不同模态的表示融合到具有交叉注意机制的模型中。每种类型的条件信息都使用特定编码器 进行编码,
训练目标的公式变化不大:
VAE 部分可以预先训练。

参考资料

 

© Lazurite 2021 - 2024