当前位置:   article > 正文

扩散模型与生成模型详解_扩散生成模型

扩散生成模型

扩散模型与其他生成模型

什么是扩散模型

扩散模型的简介

生成建模是理解自然数据分布的开创性任务之一。VAE、GAN和Flow系列模型因其实用性能而在过去几年中占据了该领域的主导地位。尽管取得了商业上的成功,但它们的理论和设计缺陷(棘手的似然计算、限制性架构、不稳定的训练动力学等)导致了一类名为“扩散概率模型”或DPM的新型生成模型的开发。

生成模型是一类可以根据某些隐含参数随机生成观察结果的模型。

近年来,扩散模型凭借其强大的生成能力成为一种新兴生成模型。如今,已经取得了巨大的成就。

除了计算机视觉、语音生成、生物信息学和自然语言处理之外,该领域还有待探索更多的应用。


扩散模型的缺点

扩散模型有其真正的缺点:生成过程缓慢,数据类型单一,可能性低,无法降维。他们导致了许多改进的工作如下:

  • 现针对扩散模型领域中存在的问题,提出了分类改进技术
  • 为了加速模型的改进,有一系列先进的技术来加速扩散模型——训练计划、无训练采样、混合建模以及评分和扩散统一。
  • 对于数据结构多样化,我们提出了在连续空间、离散空间和约束空间中应用扩散模型的改进技术。
  • 对于似然优化,我们提出了改进ELBO和最小化变分差的理论方法。
  • 在降维方面,我们提出了几种解决高维问题的技术。
  • 对于现有的模型,我们还根据具体的NFE提供了FID评分、IS和NLL的基准。

模型的简单原理与分类

扩散模型的目的是将先验数据分布转化为随机噪声,然后逐步修正变换重建一个与先验分布相同的全新样本。

扩散模型的灵感来自非平衡热力学。他们定义了一个马尔可夫扩散步骤链,以缓慢地向数据添加随机噪声,然后学习逆转扩散过程以从噪声中构建所需的数据样本。与VAE或流动模型不同,扩散模型是通过固定程序学习的,并且潜在变量具有高维数(与原始数据相同)。

在这里插入图片描述

已经提出了几种基于扩散的生成模型,包括扩散概率模型(Sohl-Dickstein等人2015),噪声条件评分网络NCSN;Yang & Ermon, 2019),以及去噪扩散概率模型DDPM;何等人,2020年)。

分为正向过程(从 X0 到 XT)和反向过程(从 XT 到 X0)或者说是重建过程。

将起始状态转化为可处理噪声的过程是正向/扩散过程。

与正向过程相反方向的过程称为反向/去噪过程。

反向过程将噪声梯度逐步采样到样本中作为起始状态。

在任何一个进程中,任何两个状态之间的交换都是由转换内核实现的。

马尔科夫链

我们都知道无穷大样本下1-6每个数字出现的概率都是1/6,但想知道每一次掷色子的结果,我们永远无法准确计算预知,我们能想到的最好办法,就是用概论来描述这个结果。


随机过程

犹如牛顿定律在力学中所扮演的进行力学分析的角色,随机过程就是在概率论中,对事物变化研究运动的方法,对不确定性下的运动进行准确的数学描述。如同力学中对速度,加速度等概念的数学定义,随机过程中也定义了两个最重要的概念:概率空间、随机变量,在此不深入聊。

牛顿力学中,是确定性过程研究一个量随时间确定的变化,而随机过程描述的是一个量随时间可能的变化。在这个过程里,每一个时刻变化的方向都是不确定的,随机过程就是由这一系列不确定的随机变量组成的每一个时刻系统的状态都由一个随机变量表述,整个过程则构成一个随机过程的实现

在这里插入图片描述


马尔科夫链的定义

知道了什么是随机过程后,我们可以试想一个最简单的随机过程,这个过程由N步组成,每一步都有两个选择(0,1),那么可能的路径就有2的N次方个,这个随机过程就要由2^N这个指数级别个数的概率来描述,我们一看指数级别!维度这么大岂不直接爆炸???

此刻,**马尔科夫过程(Markov Processes)**被推了出来:随机过程的每一步的结果与且仅与上一步有关,与其它无关。

makov过程用数学语言表述就是马尔可夫链(Markov chain)。马尔科夫链条中,随机过程的变化只取决于当下的变化而非历史,这种性质使得巨大的计算瞬时简化。


一个马尔科夫链实例

假设某人每天有三个状态:玩耍,学习,睡觉(这就是状态分布)。已知他今天在玩儿,那他明天学习、玩耍、睡觉的概率是多少?后天乃至N天后学习、玩耍、睡觉的概率是多少?

当然,想要知道N天后学习、玩耍、睡觉的概率是多少,我们需要有两个条件:

  • 一个预知条件:知道他第一天的状态(状态分布矩阵或向量,用 S 表示),

  • 一个假设:即他状态的转移都是有规律的,也就是今天学习,明天就玩儿或者睡觉或者还是继续学习的概率是确定的,简而言之,我们有预知确定的状态转移概率矩阵P

在这里插入图片描述

上面这个矩阵就是确定的转移概率矩阵P,它具有时间齐次性,换句话说,也就是转移概率矩阵P它是保持不变的,第一天到第二天的转移概率矩阵跟第二天到第三天的转移概率矩阵是一样的。

有了这个转移概率矩阵P,再加上已知的第一天的状态分布矩阵(他第一天在 玩 or 学 or 睡的概率),就可以计算出进进第N天的状态分布了(他第N天在 玩 or 学 or 睡的概率)。

现在已经拥有了测算他 n 天后,是在玩还是在学,还是在睡的所有条件了,也就是初始状态分布矩阵S和转移概率矩阵P。

假设他第一天的状态分布矩阵 S1 = [0.3, 0.4, 0.3],里面的数字分别代表第一天这天在玩的概率,学的概率,和睡的概率。

那么

第二天玩学睡的状态分布矩阵 S2 = S1 * P (俩矩阵相乘)。

第三天玩学睡的状态分布矩阵 S3 = S2 * P (只和S2有关)。

第四天玩学睡的状态分布矩阵 S4 = S3 * P (只和S3有关)。

第n天玩学睡的状态分布矩阵 Sn = Sn-1 * P (只和Sn-1有关)

可以看到:马尔可夫链就是这样一个任性的过程,**它将来的状态分布只取决于现在,跟过去无关!**这就是马尔科夫过程(Markov Processes)的体现,他每天的可能的状态集合就构成了马尔可夫链(Markov chain)。

因此马尔科夫链过程就是一个不断迭代的过程,可以通过循环来实现,记录每一步基于前一步的条件概率即可,由此最终通过连乘的方式完成最终的计算过程。

在这里插入图片描述


代码实现

Python 代码:

import numpy as np

matrix = np.matrix([[0.05, 0.75, 0.2],
                    [0.8, 0.05, 0.15],
                    [0.25, 0.5, 0.25]])
vector1 = np.matrix([[0.2, 0.6, 0.2]])

for i in range(100):
    vector1 = vector1 * matrix
    print('第{}轮'.format(i+1))
    print(vector1)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
'
运行

运行结果:

...96[[0.39781591 0.41341654 0.18876755]]97[[0.39781591 0.41341654 0.18876755]]98[[0.39781591 0.41341654 0.18876755]]99[[0.39781591 0.41341654 0.18876755]]100[[0.39781591 0.41341654 0.18876755]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

从结果可以发现,已知一天初始状态和转移矩阵往后测算,当测算到某一天开始,往后的状态概率分布就不变了,一直保持[0.39781591, 0.41341654, 0.18876755]。这会不会是巧合?


马尔科夫链的性质

收敛性:

由上面推到可以得到一个非常重要的性质:马尔可夫链模型的状态转移矩阵收敛到的稳定概率分布与初始状态概率分布无关

也就是说,在上面的那个例子中的初试状态矩阵,可以用任意的概率分布样本开始,只要马尔可夫链模型的状态转移矩阵确知,在一定规模的转换之后,我们就可以得到符合对应稳定概率分布的样本

最终达到的状态成为平稳状态 (equilibrum state)平稳分布 (stationary distribution),表示这个链的概率分布不会再随时间而改变,可以说该马尔科夫链达到了收敛。

常返性,不可约性:

在这里插入图片描述

有的马尔科夫过程中,某些状态只可能出现有限次(图中的0),称为暂态非常返性

在无限次迭代中都可能会出现的状态称为常返态(图中的1和2)。

当链中的某些状态不能到达时,称链的标记是可约的(reducible),本意是不可能在把这条链分解成可约的马尔科夫链。
在这里插入图片描述

当添加了到0点的边时,该图的任何顶点都是可达的,称为不可约链

扩散模型的工作方式

在这里插入图片描述

生成模型:理解为扩散模型的逆过程 从 XT 到 X0 的过程,是一个熵减小的过程,由原本的模糊分布生成我们想要的分布。

扩散可以理解为一个水滴滴到河流中,就会慢慢的融入到河流中,逐步摆脱自己原本的分布,融入到新的分布中,是一个熵增的过程,从有序到无限的过程。

逐步加一个噪声,最后会变成一个各项独立的高斯分布。


扩散模型真正要做的事:我们有一堆 X0 的数据(这个人的照片),然后将 XT 到 X0 的逆扩散过程搞出来(原理或公式),这样我们就能随机的去生成一个噪声分布,然后利用这个噪声分布生成我们需要的数据(这个人的新照片)。


对于图像主要包括两个过程:

  1. 固定(或预定义)的前向扩散过程 q 我们选择的,逐渐将高斯噪声添加到图像中,直到您最终得到纯噪声。
  2. 一种学习的反向去噪扩散过程pθ,其中神经网络被训练为从纯噪声开始逐渐对图像进行去噪,直到最终得到实际图像。

正向和反向过程的索引由 t 发生在一定数量的有限时间步长中 T(DDPM 作者使用T=1000T=1 0 0 0)。你从t=0 对真实图像进行采样的位置x0从您的数据分布中,前向过程在每个时间步从高斯分布中采样一些噪声 t,将添加到上一个时间步长的图像中。给定足够大 T 以及在每个时间步添加噪声的良好时间表,您最终会得到所谓的各向同性高斯分布 t=T ,通过一个渐进的过程。

在这里插入图片描述

**第一行图:**由原本的分布数据去获得一个高斯分布的过程,在这个过程中主要学习生成的步骤。

**第二行图:**由随机生成的高斯分布获得新的原本分布的过程,是上一过程的一个逆过程。

这两部都需要大量次数的迭代才能完成。

第三行图:计算这个过程产生的差异叫做漂移差

正向扩散过程 Forward diffusion process

  1. 给定初始数据分布 X0 ~ q(x),可以不断的向分布中添加高斯噪声,该噪声的标准差是以固定值 β 而确定的,均值是以固定值 β 和当前 t 时刻的数据 Xt 决定的,这个过程是一个马尔科夫链过程。

    正向过程是完全不含参数的,需要的参数都是已知的。

    我们每次加噪的高斯分布只与当前时刻的 Xt 和一个确定值 β 有关,不含可训练参数的。

    正向过程就是按照这种方式不断去迭代。

    β 在这里是一个0~1的小数但是会逐渐增长(和学习率逐渐降低相反)

在这里插入图片描述

  1. 随着 t 的不断增大,最终数据分布 XT 变成了一个各向独立的高斯分布。

在这里插入图片描述

  1. 任意时刻的 q(Xt) 的推到也可以完全基于 X0 和β来计算,而不需要做迭代,可以一步到位完成计算。

    重整化技巧:将 Xt 写成 Xt-1 和一个随机生成的正态分布的随机量。

    再将 Xt-1 重整化为 Xt-2。

在这里插入图片描述

逆扩散过程 Reverse diffusion Process

逆过程是从高斯噪声中恢复原始数据,我们可以假设它也是一个高斯分布,但是无法逐步地去拟合分布,所以需要构建一个参数分布来去做估计。逆过程仍然是一个马尔科夫链过程。

在这里插入图片描述

这里假设一个含参的条件概论符合正态分布,输入也是 Xt 和 t 有关,最后写成一系列生产链的形式。

对扩散模型的深入探索

在这里插入图片描述
在这里插入图片描述

加速扩散模型采样

通过遵循反向扩散过程的马尔可夫链从DDPM(去噪扩散概率模型)生成样品非常慢,因为T最多可以走一步或几千步。例如,从 DDPM 采样大小为 32 × 32 的 50k 图像大约需要 20 小时,但从 Nvidia 2080 Ti GPU 上的 GAN 采样不到一分钟。

一种简单的方法是运行一个快速的采样计划,方法是每⌈T/S⌉减少过程的步骤T自S步骤。新的生成采样计划是{τ1,…,τS}哪里τ 1<τ 2<⋯<τS∈[1,T]和S<T.

对于另一种方法,让我们重写qσ(xt−1|x t,x0)由所需的标准偏差进行参数化σ

中间过程的数学推导比较

在这里插入图片描述

这种模型被称为去噪扩散隐式模型(DDIM)。

DDIM具有相同的边际噪声分布,但确定性地将噪声映射回原始数据样本。


潜在扩散模型

潜在扩散模型LDM)在潜在空间而不是像素空间中运行扩散过程,使训练成本更低,推理速度更快。

它的动机是观察到图像的大多数位都有助于感知细节,并且在积极压缩后语义和概念组合仍然存在。

LDM 通过生成建模学习松散地分解感知压缩和语义压缩,首先使用自动编码器修剪像素级冗余,然后在学习的潜在基础上通过扩散过程操作/生成语义概念。

下图为压缩率和失真之间的权衡图,说明了两阶段压缩 - 感知和语义比较

在这里插入图片描述

在这里插入图片描述

  • KL-reg:对学习潜伏的标准正态分布的一个小KL惩罚,类似于VAE(变分自动编码器)。
  • VQ-reg:在解码器中使用矢量量化层,如VQVAE(VAE的一种,暂不介绍),但量化层被解码器吸收。

扩散和去噪过程发生在潜在载体上z去噪模型是一个时间条件U-Net,通过交叉注意力机制进行增强,以处理用于图像生成的灵活调节信息(例如.class标签,语义图,图像的模糊变体)。该设计相当于将不同模态的融合表示融合到具有交叉注意力机制的模型中。每种类型的调节信息都与特定于域的编码器配对τθ投影条件输入y到可以映射到交叉注意力组件的中间表示,τ θ(y)∈RM×dτ

下图为潜在扩散模型的基本框架:
在这里插入图片描述


扩大生成分辨率和质量

为了生成高分辨率的高质量图像,Ho 等人 (2021)建议在更高的分辨率下使用多个扩散模型管道

流水线模型之间的噪声调理增强对于最终图像质量至关重要,即将强大的数据增强应用于调理输入z每个超分辨率模型Pθ(X|z),调节噪声有助于减少管道设置中的复合误差。U-net是用于高分辨率图像生成的扩散建模中模型架构的常见选择。

下图为分辨率不断提高的多个扩散模型的级联管道:

在这里插入图片描述

他们发现最有效的噪声是在低分辨率下应用高斯噪声,在高分辨率下应用高斯模糊。此外,他们还探索了两种需要对训练过程进行小幅修改的调理增强形式。请注意,条件反射噪声仅适用于训练,不适用于推理。

  • 截短条件增强在步骤早期停止扩散过程T>0对于低分辨率。
  • 非截断条件增强运行完整的低分辨率反向过程,直到步骤 0,但随后通过Zt∼q(xt|x0)然后喂养腐败的人ZTs进入超分辨率模型。

两阶段扩散模型unCLIP(Ramesh 等人,2022年)大量利用 CLIP 文本编码器生成高质量的文本引导图像。给定一个预训练的 CLIP 模型c以及扩散模型的配对训练数据,(x,y)哪里x是一个图像和y是对应的标题,我们可以计算CLIP文本和图像嵌入,CT(y)和Ci(x)分别。unCLIP 并行学习两个模型:

  • 先前的模型P(ci|y):输出剪辑图像嵌入CI给定文本y.
  • 解码器P(x|Ci,[y]):生成图像x给定的剪辑图像嵌入CI以及可选的原始文本y.

这两个模型支持条件生成,因为

在这里插入图片描述

unCLIP 遵循两个阶段的图像生成过程:

  1. 给定文本y,首先使用 CLIP 模型生成文本嵌入CT(y),使用 CLIP 潜在空间可以通过文本进行零镜头图像处理。
  2. 扩散或自回归先验P(ci|y)处理此 CLIP 文本嵌入以先构建图像,然后构建扩散解码器P(x|Ci,[y])生成一个图像,以先验为条件。该解码器还可以生成以图像输入为条件的图像变体,保留其样式和语义。

生成模型代表成果 DALL·E2:The architecture of unCLIP 经典的生成图像:柯基吹小号:

在这里插入图片描述

生成模型的类型

  1. 生成对抗网络:GAN提供了一种智能解决方案,用于将数据生成(无监督学习问题)建模为监督问题。鉴别器模型学习区分真实数据和生成器模型产生的假样本。两个模型在玩最小最大值游戏时进行训练。
  2. **变分自动编码器:**VAE通过最大化证据下限(ELBO)来明确优化数据的对数似然。
  3. **基于流的生成模型:**基于流的生成模型由一系列可逆转换构建。与其他两个模型不同,该模型显式学习数据分布p(x)因此,损失函数只是负对数似然。

在这里插入图片描述

生成对抗网络 GAN

GAN的介绍

GAN在许多生成任务中显示出很好的结果,可以复制现实世界的丰富内容,如图像,人类语言和音乐。

它受到博弈论的启发:两个模型,一个生成器和一个评分器(critic),在相互竞争的同时使彼此变得更强大。然而,训练GAN模型是相当具有挑战性的,因为人们面临着训练不稳定或无法收敛等问题。


GAN的模型组成

GAN由两个模型组成:

  • 鉴别器D:估计给定样本来自真实数据集的概率。它充当评论家,并经过优化以区分假样品和真实样本
  • 生成器G:输出给定噪声变量输入的合成样本z(z带来潜在的产出多样性)。它被训练来捕获真实的数据分布,以便其生成样本可以尽可能真实,或者换句话说,可以欺骗鉴别器提供高概率

这两个模型在训练过程中相互竞争:生成器G极力欺骗鉴别者,而批评者模特D正在努力不被骗。两种模型之间这种有趣的零和博弈激励双方改进其功能。

在这里插入图片描述

  • 一方面,我们要确保鉴别器D对真实数据的决策通过最大化是准确的Ex∼pr(x)[logD(x)]。同时,给定一个假样本G(z), z∼pz(z),判别器预期输出一个概率,D(G(z)),通过最大化接近零Ez∼pz(z)[log(1−D(G(z)))]。

  • 另一方面,发电机经过训练以增加D为假例子产生高概率,从而最小化Ez∼pz(z)[log(1−D(G(z)))]。

符号意义
Pz噪声输入上的数据分布z
Pg生成器在数据上的分布x
Pr真实样本上的数据分布x

GAN参数优化与损失函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tPdcKngE-1677906324018)(11.jpg)]

我们采用的损失函数

在这里插入图片描述

最优化方式 当两者兼而有之时G和D处于最佳值,我们有pg=pr和D∗(x)=1/2损失函数变为:

在这里插入图片描述

本质上,GAN的损失函数量化了生成数据分布之间的相似性页g和真实的样本分布PR当鉴别器是最优的时,通过JS背离。最好的G∗复制真实数据分布导致最小L(G∗,D∗)=−2log2这与上面的等式一致。

GAN的其他变体:在不同的上下文中有许多GAN的变体,或者为不同的任务而设计。例如,对于半监督学习,一个想法是更新鉴别器以输出真实的类标签,1,…,K−1,以及一个假类标签K.生成器模型旨在欺骗鉴别器输出小于K。


GAN中存在的问题

尽管GAN在逼真的图像生成方面取得了巨大的成功,但培训并不容易,但众所周知,该过程缓慢且不稳定。

  • 难以实现纳什均衡(Hard to achieve Nash equilibrium):同时训练两个模型,以找到两人非合作博弈纳什均衡。但是,每个模型都会独立更新其成本,而不考虑游戏中的其他玩家。同时更新两个模型的梯度不能保证收敛

在这里插入图片描述

在这里插入图片描述

  • 低尺寸支撑(Low dimensional supports):许多真实数据集的维度,由PR,只是显得人为地高。已经发现它们集中在低维流形中。这实际上是流形学习的基本假设。想想现实世界的图像,一旦主题或包含的对象被固定下来,图像就有很多限制要遵循,即狗应该有两只耳朵和一条尾巴,摩天大楼应该有一个笔直而高大的身体等。这些限制使图像远离具有高维自由形式的可能性。

    Pg也位于低维流形中。每当发生器被要求在给定小尺寸(例如 100)的情况下获得更大的图像(如 64x64)时,噪声可变输入z,这4096像素上的颜色分布已经由100维小随机数向量定义,几乎无法填满整个高维空间。

在这里插入图片描述

  • 渐变消失问题(Vanishing gradient): 当鉴别器完美时,我们保证D(x)=1,∀x∈pr和D(x)=0,∀x∈Pg因此损失函数L降至零,我们最终没有梯度来更新学习迭代期间的损失。
    因此GAN面临着两难的境地:

    • 如果鉴别器行为不佳,则生成器没有准确的反馈,损失函数无法代表现实。
    • 如果鉴别器做得很好,损失函数的梯度会下降到接近零,学习变得非常慢甚至卡住。
  • 模式折叠(Mode collapse): 在训练期间,生成器可能会折叠到始终产生相同输出的设置。这是 GAN 的常见故障情况,通常称为模式崩溃。尽管生成器可能能够欺骗相应的鉴别器,但它无法学习表示复杂的真实世界数据分布,并且被困在一个种类极低的小空间中。

在这里插入图片描述

从自动编码器到Beta-VAE

自动编码器的发明是为了使用中间有一个狭窄瓶颈层的神经网络模型来重建高维数据(对于变分自动编码器来说可能不是这样)。一个很好的副产品是降维:瓶颈层捕获压缩的潜在编码。这种低维表示可以用作各种应用(即搜索)中的嵌入向量,帮助数据压缩,或揭示底层数据生成因素。


自动编码器介绍

自动编码器是一种神经网络,旨在以无监督的方式学习恒等函数,以重建原始输入,同时压缩过程中的数据,从而发现更有效和压缩的表示。 它由两个网络组成:

  • 编码器网络:将原来的高维输入转换为潜在的低维码。输入大小大于输出大小。
  • 解码器网络:解码器网络从代码中恢复数据,可能具有越来越大的输出层。

在这里插入图片描述

编码器网络本质上实现了降维,就像我们使用主成分分析 (PCA) 或矩阵分解 (MF) 一样。此外,自动编码器针对代码中的数据重建进行了显式优化。一个好的中间表示不仅可以捕获潜在变量,而且有利于完整的解压过程。

该模型包含编码器功能g(.)参数化者φ和解码器功能f(.)参数化者θ。

为输入学习的低维代码x在瓶颈层是z=gφ(x),重建的输入为x′=fθ(gφ(x))。

**参数(θ,φ)**一起学习以输出与原始输入相同的重建数据样本,x≈fθ(gφ(x)),或者换句话说,学习恒等函数。有多种指标可以量化两个向量之间的差异,例如激活函数为sigmoid时的交叉熵,或像MSE损失这样简单:

在这里插入图片描述


自动降噪编码器

由于自动编码器学习了恒等函数,因此当网络参数多于数据点数量时,我们面临着“过拟合”的风险。

为了避免过度拟合并提高鲁棒性,去噪自动编码器(Vincent et al. 2008)提出了对基本自动编码器的修改。通过以随机方式向输入向量添加噪声或屏蔽输入向量的某些值,输入被部分损坏,x∼MD(x|x),然后训练模型以恢复原始输入(注意:不是损坏的输入)。

在这里插入图片描述

这种设计的动机是,即使视图被部分遮挡或损坏,人类也可以轻松识别物体或场景。为了“修复”部分损坏的输入,去噪自动编码器必须发现并捕获输入维度之间的关系,以便推断缺失的部分。

对于具有高冗余的高维输入(如图像),模型可能依赖于从许多输入维度的组合中收集的证据来恢复去噪版本,而不是过度拟合一个维度。这为学习健壮的潜在表示奠定了良好的基础。

噪声由随机映射控制MD(x~|x),并且它不是特定于特定类型的损坏过程(即屏蔽噪声、高斯噪声、盐胡椒噪声等)。

在这里插入图片描述


稀疏自动编码器

稀疏自动编码器对隐藏单元激活应用“稀疏”约束,以避免过度拟合并提高鲁棒性。它强制模型同时只激活少量隐藏单元,或者换句话说,一个隐藏神经元应该在大部分时间被激活。

回想一下,常见的激活函数包括 sigmoid、tanh、relu、leaky relu 等。当值接近 1 时激活神经元,当值接近 0 时停用神经元。

假设有SL神经元在l-th 隐藏层和激活函数j-该层中的神经元标记为aj(l)(.), j=1,…,sl.该神经元的激活分数ρ^j预计人数不多ρ,称为稀疏性参数

常见的配置是ρ=0.05.

在这里插入图片描述

此约束是通过在损失函数中添加惩罚项来实现的。KL-分歧D吉隆坡测量两个伯努利分布之间的差异,其中一个具有平均值ρ另一个有平均值ρ^j(l).超参数β控制我们要对稀疏性损失应用的惩罚强度。

在这里插入图片描述


VAE:变分自动编码器

变分自动编码器VAE的缩写,其思想实际上与上述所有自动编码器模型不太相似,而是深深植根于变分贝叶斯和图形模型的方法。

我们不是将输入映射到固定向量,而是将其映射到分布中。让我们将此分布标记为Pθ,参数化为θ.数据输入之间的关系x和潜在编码向量z可以完全定义:

  • 事先Pθ(z)
  • 可能性Pθ(X|z)
  • 后面的Pθ(z|x)

假设我们知道真实参数θ∗对于此分布。为了生成看起来像真实数据点的样本x(i),我们遵循以下步骤:

  1. 首先,示例 aZ(i)来自先前的分布Pθ∗(z)
  2. 然后是一个值x(i)由条件分布生成pθ∗( x|z=z(i) )

最佳参数θ∗是最大化生成真实数据样本概率的那个:

在这里插入图片描述

通常,我们使用对数概率将 RHS 上的乘积转换为总和:

在这里插入图片描述

现在让我们更新公式以更好地演示数据生成过程,以便涉及编码向量:

在这里插入图片描述

不幸的是,计算起来并不容易Pθ(x(i))这样,因为检查所有可能的值是非常昂贵的z并总结它们。为了缩小值空间以促进更快的搜索,我们想引入一个新的近似函数来输出给定输入的可能代码x, Qφ(Z|x),参数化为φ。

在这里插入图片描述

现在这个结构看起来很像一个自动编码器

  • 条件概率Pθ(X|z)定义一个生成模型,类似于解码器fθ(x|z)上面介绍过。Pθ(X|z)也称为概率解码器。
  • 近似函数Qφ(Z|x)是概率编码器,扮演着类似克φ(Z|x)以上。
    在这里插入图片描述

Beta-VAE

如果推断出每个变量的潜在表示z只对一个单一的生成因子敏感,对其他因子相对不变,我们会说这种表示是解开或分解的。解开表示通常带来的一个好处是良好的可解释性易于泛化到各种任务

例如,在人脸照片上训练的模型可能会在单独的维度上捕获柔和、肤色、头发颜色、头发长度、情感、是否戴眼镜和许多其他相对独立的因素。这种解开的表示非常有利于面部图像的生成。

β-VAE是对变分自动编码器的改进,特别强调发现解开的潜在因素。遵循VAE中的相同激励,我们希望最大化生成真实数据的概率,同时保持真实分布估计后验分布之间的距离较小(例如,在一个小常数下)。δ:

在这里插入图片描述

我们可以将其重写为带有拉格朗日乘数的拉格朗日量β在KKT 条件下。上述只有一个不等式约束的优化问题等价于最大化以下方程F(θ,φ,β):

在这里插入图片描述

的损失函数β-VAE定义为:

在这里插入图片描述

其中拉格朗日乘数β被视为超参数。

自从否定贝塔(φ,β)是拉格朗日量的下界F(θ, φ,β),最小化损失等价于最大化拉格朗日量,因此适用于我们的初始优化问题。

  • β=1,它与VAE相同。
  • β>1,对潜在瓶颈施加了更强的约束,限制了z。对于一些有条件独立的生成因子,将它们解开是最有效的表示。
  • 更高的β鼓励更有效的潜在编码,并进一步鼓励解缠,可能会在重建质量和解缠程度之间进行权衡。

Burgess等人(2017)讨论了β-VAE深入借鉴了信息瓶颈理论,并进一步提出了对β-VAE更好地控制编码表示能力。

基于流的生成模型

GAN和VAE都没有明确学习真实数据的概率密度函数,p(x)(其中x∈D) — 因为这真的很难!

以具有潜在变量的生成模型为例,p(x)=∫p(x|z)p(z)dz几乎无法计算,因为很难遍历潜在代码的所有可能值z。

基于流量的深度生成模型归一化流量的帮助下克服了这个难题,归一化流量是一种用于密度估计的强大统计工具。一个很好的估计p(x)可以有效地完成许多下游任务:对未观察到但现实的新数据点进行采样(数据生成),预测未来事件的稀有性(密度估计),推断潜在变量,填写不完整的数据样本等。


规范流化

能够进行良好的密度估计在许多机器学习问题中都有直接应用,但这非常困难。例如,由于我们需要在深度学习模型中运行向后传播,因此嵌入式概率分布(即后验p(z|x)) 预计足够简单,可以轻松有效地计算导数。这就是为什么高斯分布经常用于潜在变量生成模型,尽管大多数现实世界的分布比高斯分布复杂得多。

这里有一个归一化流(NF)模型,用于更好,更强大的分布近似。归一化流通过应用一系列可逆变换函数将简单分布转换为复杂分布。通过一连串的变换,我们根据变量的变化定理反复用新变量替换变量,最终得到最终目标变量的概率分布。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

随机变量遍历的路径Zi=fi(Zi−1)是由连续分布形成的流动和全链πi称为规范化流

方程中的计算需要变换函数fi应满足两个属性:

  1. 它很容易逆转。
  2. 它的雅可比行列式很容易计算。

规则化流模型

通过在我们的工具箱中规范化流,输入数据的确切对数似然对数p(x)变得易于处理。

因此,基于流的生成模型的训练标准只是训练数据集上的负对数似然(NLL)D:

在这里插入图片描述

最具有代表性的:RealNVP(实值非卷保存)模型通过堆叠一系列可逆双射变换函数来实现归一化流。

在每个双射中f:x↦y,称为仿射耦合层,输入尺寸分为两部分:

  • 第一个d尺寸保持不变;
  • 第二部分,D+1自D尺寸,进行仿射变换(“缩放和移位”),并且缩放和移位参数都是第一个函数d尺寸。

在这里插入图片描述

现在,让我们检查此转换是否满足流转换的两个基本属性。

条件1:“它很容易逆转,而且相当简单。

条件2:它的雅可比行列式很容易计算,不难得到雅可比矩阵和这种变换的决定因素。雅可比矩阵是一个较低的三角矩阵,行列式只是对角线上项的乘积。

在这里插入图片描述

到目前为止,仿射耦合层看起来非常适合构建归一化流:)

甚至更好,因为(i)计算f−1不需要计算逆数s或t(ii)计算雅可比行列式不涉及计算雅可比行列式s或t,这些函数可以是任意复杂的;即两者兼而有之s和t可以通过深度神经网络建模。

在一个仿射耦合层中,某些尺寸(通道)保持不变。为了确保所有输入都有机会被更改,模型反转了每层中的顺序,以便不同的组件保持不变。遵循这种交替模式,在一个转换层中保持相同的单元集总是在下一个转换层中被修改。发现批量归一化有助于训练具有非常深的耦合层堆栈的模型。

此外,RealNVP可以在多尺度架构中工作,为大型输入构建更有效的模型。多尺度架构将多个“采样”操作应用于普通仿射层,包括空间棋盘图案遮罩、挤压操作和通道屏蔽。

另外两种规则化流模型是 NICEglow,本质上是在RealNVP上做了改进。


自回归流模型

自回归约束是一种对顺序数据进行建模的方法,x=[x1,…,xD]:每个输出仅取决于过去观察到的数据,而不依赖于未来的数据。换句话说,观察的概率十一条件为x1,…,xi−1这些条件概率的乘积给了我们观察完整序列的概率:

在这里插入图片描述

如何对条件密度进行建模由您选择。它可以是单变量高斯,其平均值和标准差计算为x1:i−1,或具有x1:i−1作为输入。

如果归一化流中的流变换被框定为自回归模型(向量变量中的每个维度都以先前的维度为条件),这就是自回归流

几个经典的自回归模型(MADE,PixelRNN,WaveNet,MAF和IAF)。


MADE 分布估计的掩蔽自动编码器

MADE(用于分布估计的掩蔽自动编码器)是一种专门设计的架构,用于有效地在自动编码器中强制执行自回归属性。当使用自动编码器预测条件概率时,而不是向自动编码器提供不同观察窗口的输入D时,MADE 通过乘以二进制掩码矩阵来消除某些隐藏单元的贡献,以便每个输入维度仅在一次传递中从给定顺序中的先前维度重建。

例如,在多层全连接神经网络中,我们有L带有权重矩阵的隐藏层W1,…,WL和带有权重矩阵的输出层V.输出x具有每个维度xi=p(xi|x1:i−1).

在没有任何掩码的情况下,通过层的计算如下所示:

在这里插入图片描述

其基本结构是一个前馈神经网络:MADE=自动编码器+灰度01矩阵

自动编码器的计算公式为:

在这里插入图片描述

灰度01矩阵的计算公式为:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


PixelRNN 图像的深度生成模型

PixelRNN是图像的深度生成模型,图像一次生成一个像素,每个新像素都以以前见过的像素为条件进行采样。

基本功能可以理解为从原有图像中提起像素点进行学习后生成新的像素点补全图像或使得图像更完整。

如一个大小的图像n×n, x={x1,…,xn2},模型开始从左上角、从左到右、从上到下生成像素。

在这里插入图片描述

每个像素都从原有图像的概率分布条件中采样:在同一行中时,像素位于其上方或左侧

这种上下文的定义看起来非常随意,因为视觉注意力如何关注图像更加灵活。不知何故,具有如此强大假设的生成模型神奇地起作用了。

一种可以捕获整个上下文的实现是对角线 BiLSTM

  • 首先,通过将输入特征映射的每一行相对于前一行偏移一个位置来应用倾斜操作,以便可以并行化每一行的计算。
  • 然后相对于当前像素和左侧像素计算 LSTM 状态。

在这里插入图片描述

对角线 BiLSTM 层能够处理无限上下文字段,但由于状态之间的顺序依赖关系,计算成本很高。

更快的实现使用多个卷积层而不进行池化来定义有界上下文框。

卷积内核被屏蔽,因此看不到未来的上下文,类似于MADE这个卷积版本称为PixelCNN。

具有掩码卷积的 PixelCNN,由掩码张量和卷积核的元素乘积构建,然后再应用它。

在这里插入图片描述


WaveNet 波网

WaveNet与PixelCNN非常相似,但应用于1-D音频信号。WaveNet由一堆因果卷积组成,这是一种旨在尊重排序的卷积操作:特定时间戳的预测只能消耗过去观察到的数据,不依赖于未来。

在PixelCNN中,因果卷积由掩蔽卷积核实现。WaveNet 中的因果卷积只是将输出按多个时间戳移动到未来,以便输出与最后一个输入元素对齐。

卷积层的一大缺点是感受野的大小非常有限。输出几乎不能依赖于数百或数千个时间步前的输入,这可能是对长序列建模的关键要求。

因此,WaveNet采用膨胀卷积,其中内核应用于输入的更大感受野中均匀分布的样本子集。

下图为WaveNet 模型的可视化,其中包含一堆(顶部)因果卷积层和(底部)扩张卷积层。

在这里插入图片描述

在这里插入图片描述

WaveNet使用门控激活单元作为非线性层,因为它在建模一维音频数据方面比ReLU工作得更好。剩余连接在门控激活后应用。

扩散模型的应用

在这里插入图片描述


DALL·E 扩散的起源

2020 年,OpenAl 团队发布了 GPT-3 模型——一个多模态的全能语言模型,能够进行机器翻译、文本生成、语义分析等。该模型迅速被认为是语言建模解决方案的佼佼者,而DALL·E可以看作是变压器功能在计算机视觉领域的自然扩展。

下图为CLIP对比预训练的可视化方法:

在这里插入图片描述

DALL·E使用的是自回归方法并提出了一个优雅的两阶段方法:

  • 训练离散VAE模型,将图像压缩为图像令牌,
  • 将编码的文本片段与图像标记连接起来,并训练自回归转换器以学习文本和图像的联合分布。

最终版本是在从互联网上获得的2.5亿个文本图像对上进行训练的。

在推理过程中,模型能够输出整批生成的图像。但是我们如何估计哪些图像是最好的呢?

DALL·E的OpenAI团队提出了一种名为CLIP的图像和文本链接解决方案。

简而言之,CLIP 提供了一种将文本片段与其图像表示配对的可靠方法。撇开所有技术方面不谈,训练这种类型的模型的想法相当简单 - 获取文本片段并对其进行编码,获取图像并对其进行编码。对很多例子(4亿个(图像、文本)对)这样做,并以对比的方式训练模型。

其实 DALL·E 并不属于扩散模型的应用,其本质上就是一种多功能的变压器而已。

但是确实扩散模型的重要前身之一。


使用 GLIDE 进行文本引导扩散

尽管描述GLIDE架构的论文在这篇文章讨论的所有出版物中得到的宣传最少,但它可以说是最新颖和有趣的想法。它很好地结合了扩散模型中的所有概念。当前要处理的两个问题是:

  • 我们如何使用文本信息来指导扩散模型?
  • 我们如何确保模型的质量足够好?

GLIDE的架构可以归结为三个主要组成部分

  1. 一个基于UNet的模型,负责扩散学习的视觉部分,
  2. 一个基于转换器的模型,负责从一段文本创建文本嵌入,
  3. 上采样扩散模型用于提高输出图像分辨率。

前两个协同工作以创建文本引导的图像输出,而最后一个用于在保持质量的同时放大图像。

该模型的核心是著名的UNet架构,用于Dhariwal和Nichol的扩散该模型就像其早期版本一样,将残差层与下采样和上采样卷积堆叠在一起。它还由注意力层组成,这对于同时进行文本处理至关重要。作者提出的模型有大约23亿个参数,并在与DALL·E相同的数据集上进行训练。

用于指导的文本以标记编码并馈送到转换器模型中。GLIDE中使用的模型大约有12亿个参数,由24个宽度为2048的残余块构建而成。变压器的输出有两个用途:

  • 最终的嵌入令牌用作类嵌入yy在εθ(xt,t∣y)εθ(x t,t∣y),
  • 令牌嵌入的最后一层将添加到模型的每个注意力层。

很明显,为了确保模型接收足够的与文本相关的上下文,以便生成准确的图像,我们投入了大量的精力。该模型以文本片段嵌入为条件,编码文本与注意力上下文连接,在训练期间,使用无分类器指导。

至于最后一个组件,开发者使用扩散模型使用ImageNet上采样器从低分辨率图像到高分辨率图像。

在这里插入图片描述

上图为GLIDE对“田野里的柯基”的扩散结果。

GLIDE融合了近年来发展的一些显着成就,并为文本引导图像生成的概念提供了新的视角。鉴于DALL·E模型基于不同的结构,可以说GLIDE的出版代表了基于扩散的文本到图像生成时代的曙光


DALL·E2 更先进的先验器和解码器

DALL·E2主要采用了前两个前身的元素:它严重依赖CLIP,但解决方案的很大一部分围绕着GLIDE架构。DALL·E2 有两个主要的底层组件,称为先验器解码器,它们在堆叠在一起时能够产生图像输出。整个机制被命名为unCLIP

下图为“柯基吹火焰小号”的扩散模型,由 unCLIP 生成:

在这里插入图片描述

在文本嵌入之后是有趣的部分 - 我们现在想要获得一个图像嵌入,类似于通过 CLIP 模型获得的图像嵌入。我们希望它封装来自文本嵌入的所有重要信息,因为它将用于通过扩散生成图像。好吧,这不正是CLIP的用途吗?如果我们想为输入短语找到相应的图像嵌入,我们可以查看与 CLIP 编码空间中的文本嵌入接近的内容。《达尔·E 2 很好地解释了为什么该解决方案失败以及为什么需要先验 - “无限数量的图像可能与给定的标题一致,因此两个编码器的输出不会完全重合。因此,需要一个单独的先前模型来将文本嵌入“翻译”为可以合理匹配的图像嵌入”。

最重要的是,作者实证地检查了先验在网络中的重要性。传递由先前和文本生成的图像嵌入远远优于仅使用带有 CLIP 文本嵌入的标题或标题的生成。

作者测试了先验的两个模型类:自回归模型和扩散模型。这篇文章将只涵盖扩散之前,因为它被认为比自回归表现更好,特别是从计算的角度来看。对于先前的训练,选择了仅解码器的转换器模型。它是通过使用几个输入的序列来训练的:

  • 编码文本,
  • 剪辑文本嵌入,
  • 扩散时间步的嵌入,
  • 噪声图像嵌入,

我们介绍了unCLIP的前一部分,该部分旨在生成一个模型,该模型能够将文本中的所有重要信息封装到类似CLIP的图像嵌入中。现在,我们要使用该图像嵌入来生成实际的视觉输出。这是名称unCLIP自行展开的时候 - 我们正在从图像嵌入到图像,与训练CLIP图像编码器时发生的情况相反。

俗话说:“在一个扩散模型之后,是时候使用另一个扩散模型了!我们已经知道的这个 - 它是 GLIDE,尽管略有修改。只是轻微的,因为唯一的主要变化是将额外的 CLIP 图像嵌入(由先前生成)添加到原版 GLIDE 文本编码器中。毕竟,这正是先验训练的目的——为解码器提供信息。引导的使用方式与常规 GLIDE 相同。为了改进它,CLIP 嵌入设置为∅在 10% 的情况下和文本标题y在 50% 的情况下。

另一件没有改变的事情是在图像生成后进行上采样的想法。输出被扔到其他基于扩散的模型中。这次使用了两个上采样模型(而不是原始GLIDE中的一个),一个将图像从64x64拍摄到256x256,另一个进一步将分辨率提高到1024x1024。


Google Brain Imagen 最先进的图像扩散模型

Imagen架构的结构异常简单:

预训练的文本模型用于创建扩散到图像中的嵌入。接下来,通过超分辨率扩散模型提高分辨率,我们已经从DALL·E2的许多新颖性分散在架构的不同部分,一些在模型本身,一些在训练过程中。与其他解决方案相比,它们共同提供了轻微的升级。鉴于已经提供的大部分知识,我们可以通过与前面描述的模型的差异来解释这个模型:

在这里插入图片描述

1.使用预训练的转换器,而不是从头开始训练它。

与OpenAI的工作相比,这被视为核心改进。对于有关文本嵌入的所有内容,GLIDE作者使用了一种新的,经过专门训练的转换器模型。Imagen的作者使用了预训练的冷冻T5-XXL模型这个想法是,与仅在图像标题上训练的模型相比,该模型在语言处理方面具有更多的上下文,因此能够产生更有价值的嵌入,而无需对其进行额外微调。

2.使底层神经网络更高效。

一个名为高效U-net的神经网络的升级版本被用作超分辨率扩散模型的骨干。据说它比以前的版本更节省内存,更简单,并且收敛速度也更快。这些变化主要是在残差块中引入的,并通过网络内部值的额外缩放来引入。

3.使用调理增强来增强图像保真度。

由于该解决方案可以被视为一系列扩散模型,因此需要就模型链接区域的增强进行争论。Ho等人提出了一种称为条件增强的解决方案。简单来说,它相当于在将低分辨率图像输入超分辨率模型之前,将各种数据增强技术(例如高斯模糊)应用于低分辨率图像。

结论 摘自Denoising Diffusion Probabilistic Model

我们使用扩散模型展示了高质量的图像样本,并且我们发现了扩散模型和变分推理之间的联系,用于训练马尔可夫链、去噪得分匹配和退火朗之万动力学(以及扩展的基于能量的模型)、自回归模型和渐进有损压缩。由于扩散模型似乎对图像数据有很好的归纳偏差,我们期待着研究它们在其他数据形式中的效用,以及在其他类型的生成模型和机器学习系统中的组件。

我们在扩散模型上的工作与在其他类型的深度生成模型上的现有工作具有类似的范围,例如提高GANs、流、自回归模型等样本质量的工作。我们的论文代表了在使扩散模型成为这一技术家族中普遍有用的工具方面取得的进展,因此它可能会放大生成模型已经(和将会)对更广泛的世界的任何影响。

不幸的是,有许多众所周知的恶意使用生成模型。样本生成技术可以被用来为政治目的制作高调人物的假图像和视频。虽然在软件工具出现之前很久就有人手工创建了假图像,但像我们这样的生成模型让这个过程变得更容易。幸运的是,cnn生成的图像目前有一些细微的缺陷,可以进行检测,但生成模型的改进可能会使检测变得更加困难。生成模型还反映了它们所训练的数据集中的偏差。由于许多大型数据集都是由自动化系统从互联网上收集的,因此很难去除这些偏差,尤其是在图像没有标签的情况下。如果在这些数据集上训练的生成模型样本在整个互联网上激增,那么这些偏见只会进一步加强。

率扩散模型的骨干。据说它比以前的版本更节省内存,更简单,并且收敛速度也更快。这些变化主要是在残差块中引入的,并通过网络内部值的额外缩放来引入。

3.使用调理增强来增强图像保真度。

由于该解决方案可以被视为一系列扩散模型,因此需要就模型链接区域的增强进行争论。Ho等人提出了一种称为条件增强的解决方案。简单来说,它相当于在将低分辨率图像输入超分辨率模型之前,将各种数据增强技术(例如高斯模糊)应用于低分辨率图像。

结论 摘自Denoising Diffusion Probabilistic Model

我们使用扩散模型展示了高质量的图像样本,并且我们发现了扩散模型和变分推理之间的联系,用于训练马尔可夫链、去噪得分匹配和退火朗之万动力学(以及扩展的基于能量的模型)、自回归模型和渐进有损压缩。由于扩散模型似乎对图像数据有很好的归纳偏差,我们期待着研究它们在其他数据形式中的效用,以及在其他类型的生成模型和机器学习系统中的组件。

我们在扩散模型上的工作与在其他类型的深度生成模型上的现有工作具有类似的范围,例如提高GANs、流、自回归模型等样本质量的工作。我们的论文代表了在使扩散模型成为这一技术家族中普遍有用的工具方面取得的进展,因此它可能会放大生成模型已经(和将会)对更广泛的世界的任何影响。

不幸的是,有许多众所周知的恶意使用生成模型。样本生成技术可以被用来为政治目的制作高调人物的假图像和视频。虽然在软件工具出现之前很久就有人手工创建了假图像,但像我们这样的生成模型让这个过程变得更容易。幸运的是,cnn生成的图像目前有一些细微的缺陷,可以进行检测,但生成模型的改进可能会使检测变得更加困难。生成模型还反映了它们所训练的数据集中的偏差。由于许多大型数据集都是由自动化系统从互联网上收集的,因此很难去除这些偏差,尤其是在图像没有标签的情况下。如果在这些数据集上训练的生成模型样本在整个互联网上激增,那么这些偏见只会进一步加强。

另一方面,扩散模型可能对数据压缩有用,随着数据变得更高分辨率和全球互联网流量的增加,这对于确保互联网对广泛受众的可访问性可能至关重要。我们的工作可能有助于在未标记的原始数据上进行大量下游任务的表示学习,从图像分类到强化学习,扩散模型也可能在艺术、摄影和音乐中的创造性应用中变得可行。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/787783
推荐阅读
相关标签
  

闽ICP备14008679号