持续创作,加快生长!这是我参加「日新方案 10 月更文挑战」的第22天,点击查看活动概况


本文翻译自:The recent rise of diffusion-based models | Maciej Domagaa (maciejdomagala.github.io)

作者博客:Maciej Domagaa | ML, DL, Data Science. (maciejdomagala.github.io)


简介

在过去的一年半里,每个搞生成模型的人都绝对像活在梦里相同,在过去的几个月里面,文本到图画(text-to-image)生成的论文层出不穷,新作业一个接一个,一篇比一篇更。咱们能够看到交际媒体上迅速出现很多的运用人工智能模型生成的图片。比方这只金毛猎犬一脸丧了吧唧地在竞选途中答复扎手的问题,或许这颗大脑乘坐火箭前往外太空。

【翻译】最近兴起的扩散模型

Sources: openai.com/dall-e-2/ and imagen.research.google/

前一个是用openAI 的 DALLE-2生成的,后一个是用的谷歌的Imagen。

在这篇文章中,咱们将总结一下解决文本到图画生成问题的这一段简短的历史,然后带大家了解一下关于分散模型的最新进展。为啥要讲分散模型,因为方才看到的那些图都是运用分散模型生成的,分散模型在是现在最新的SOTA中很重要的一个内容。

【翻译】最近兴起的扩散模型
Short timeline of image generation and text-to-image solutions. Source: Maciej Domagaa


这一切都是从DALLE开始的

在2020年,OpenAl团队发布了GPT-3模型——一个在无所不能的巨型言语模型,它能够进行机器翻译、文本生成、语义分析等,该模型当时被认为是言语模型的SOTA,而DALLE能够认为是Transformer在核算机视觉范畴的运用。

先看一下DALLE是什么:

自回归办法

作者提出了一种优雅的两阶段办法:

  • 练习离散的VAE模型将图画紧缩为图画token,

  • 将编码的文本片段与图画token连接起来,练习自回归的Transformer学习文本和图画的联合散布。

终究练习用的数据集是从互联网上取得的2.5亿个文本-图画对。

CLIP

在推理进程中,模型能够直接输出一个batch的生成图画,那咱们怎么评价生成的哪个图画最好呢?在DALLE发布的一起,OpenAI团队提出了一个打通图画和文本的模型CLIP,CLIP供给了一种将文本片段与其图画表明配对的办法。先抛开一切的技能完成方面不谈,仅看练习进程的话,练习这类模型的主意是很简略的:对一些文本片段进行编码,拿一些图片进行编码,就这样对四亿个图片-文本对进行编码。练习的时候运用对比练习的办法进行练习。

【翻译】最近兴起的扩散模型

Visualisation of CLIP contrastive pre-training, source: arxiv.org/abs/2103.00…

这种映射能够让咱们评价:在考虑到输入文本的状况下哪个生成的图画是最匹配的。DALLE引起了AI范畴内外人士的广泛重视。从此爆火,取得了众多重视,取得广泛评论。可是即便如此,它也只是在这儿被提及一下,因为此后出现出了更多新奇的东西。


All you need is diffusion

Sohl-Dickstein等人提出了图画生成的新思路——分散模型。

【翻译】最近兴起的扩散模型

Generative models, source: lilianweng.github.io/posts/2021-…

分散模型是受到非平衡热力学的启示发生的,它背后充满了风趣的数学概念。咱们能够看到这儿有咱们熟悉的编码器-解码器(encoder-decoder)结构的概念,但其基本思想与咱们在传统的变分自编码器中(variational autoencoders)观察到的略有不同。为了了解这个模型的基础,咱们需求讲一下正向和反向分散进程。

前向图画分散进程

这一进程能够了解为咱们逐步给图片加高斯噪声,直到它变得完全无法辨认。这一进程在随机意义上是固定的:增加噪声这一进程能够被认为是连续分散进程的马尔可夫链。为了略微理清这些难明的措辞,咱们能够用一些公式来简练地描述这一进程。

假定咱们图画数据集的开始散布为q(x0)q(x_0),咱们能够从这个散布中采样一张图x0x_0,咱们要执行一个链式的分散进程x0→x1→x2→…→xTx_0 → x_1→ x_2→ …→ x_T,每一步都将咱们采样到的图片逐步加噪破坏掉。

怎么给它加噪声?咱们需求预界说一个噪声表{t}t=1T\{\beta_t\}^T_{t=1},其间t∈(0,1)\beta_t \in (0,1)。这样咱们就能够将前向进程界说为:

xt∣xt−1)=N(1−xxt−1,tI)x_t | x_{t-1}) = \mathcal N (\sqrt{1-\beta_x} x_{t-1},\beta_t \mathbf I)
  • 时间步增加(T→∞T → \infty)终究的散布q(xT)q(x_T)非常挨近球形高斯散布,之后你从噪声中采样就会非常便利。

  • 用高斯核噪声还有另外一个优点:

    你不需求一步一步核算潜变量,因为会用到参数重整化技巧,所以能够一步到位核算任意时间步tt的分散成果:

    q(xt∣x0)=N(tx0,(1−t)I)=tx0+1−t⋅q\left({x}_t \mid {x}_0\right)=\mathcal{N}\left(\sqrt{\bar{\alpha}_t} {x}_0,\left(1-\bar{\alpha}_t\right) \mathbf{I}\right)=\sqrt{\bar{\alpha}_t} {x}_0+\sqrt{1-\bar{\alpha}_t} \cdot \epsilon

    其间t:=1−t,t:=∏k=0tk\alpha_t:=1-\beta_t, \bar{\alpha}_t:=\prod_{k=0}^t \alpha_k∼N(0,I)\epsilon \sim \mathcal{N}(0, \mathbf{I}). \epsilon是一个高斯噪声,这个公式对分散模型的练习很重要。

反向重建进程

咱们现已界说好了前向进程,那会有人问,然后嘞?为什么咱们不能直接界说一个反向进程q(xt−1∣xt)q(x_{t-1}|x_t)直接从噪声回溯到原图? 首先,这个从概念上便是错的,因为咱们想要一个神经网络学会怎么解决问题,所以咱们不能给它供给解决方案。 其次,想要从噪声样本回到初始的散布q(x0)q(x_0),咱们有必要核算一切可能从噪声中发生x0x_0的办法的边际概率,包括一切的潜变量。这意味着要核算∫q(x0:T)dx1:T\int q(x_{0:T})dx_{1:T},可是这样玩意儿是算不出来的。所以咱们要去近似它。

所以反向进程的中心思想是找一个牢靠的解决方案,搞一个可学习的神经网络,近似这个反向分散进程。完成这一进程便是要去估量每一步去噪的均值和方差。 p(xt−1∣xt)=N((xt,t),(xt,t))p_\theta\left({x}_{t-1} \mid {x}_t\right)=\mathcal{N}\left(\mu_\theta\left({x}_t, t\right), \Sigma_\theta\left({x}_t, t\right)\right) (xt,t)\mu_\theta\left({x}_t, t\right)能够用神经网络学出来,(xt,t)\Sigma_\theta\left({x}_t, t\right)能够固定为与噪声调度相关的某个常数,比方tI_t \mathbf I

【翻译】最近兴起的扩散模型

Forward and reverse diffusion processes, source: [14]

用神经网络估量(xt,t)\mu_\theta\left({x}_t, t\right)是能够的,可是谷歌大脑那个人想出了另一个不同的练习办法 :练习一个神经网络(xt,t)\epsilon_\theta\left({x}_t, t\right) 直接经过前边的公式 q(xt∣x0)q\left({x}_t \mid {x}_0\right)去学习噪声\epsilon

【翻译】最近兴起的扩散模型

练习进程就变成了:

  1. 从散布q(x0)q(x_0)中采样一张图片x0x_0

  2. 从分散进程U({1,2,…,T})U(\{1,2,…,T\})中采样时间步tt

  3. 为其增加从规范正态散布中采样的噪声\epsilon

  4. 估量噪声(xt,t)=(tx0+1−t⋅,t)\epsilon_\theta\left(\mathbf{x}_t, t\right)=\epsilon_\theta\left(\sqrt{\bar{\alpha}_t} \mathbf{x}_0+\sqrt{1-\bar{\alpha}_t} \cdot \epsilon, t\right)

  5. 梯度下降核算loss∇∥−(xt,t)∥2\nabla_\theta\left\|\epsilon-\epsilon_\theta\left(\mathbf{x}_t, t\right)\right\|^2

丢失能够表明为: Ldiffusion=Et,x0,[∥−(xt,t)∥2]L_{\text {diffusion }}=\mathbb{E}_{t, \mathbf{x}_0, \epsilon}\left[\left\|\epsilon-\epsilon_\theta\left(\mathbf{x}_t, t\right)\right\|^2\right]

一切的公式、参数重整化、推导都触及很多的数学知识,假如想持续深化了解,现在有一些很好的资源,比方

  • What are Diffusion Models? | Lil’Log (lilianweng.github.io)

  • Diffusion Models as a kind of VAE | Angus Turner

  • Ayan Das An introduction to Diffusion Probabilistic Models

能够去这些大佬的博客看一下。

引导分散 Guidance

上边咱们讲了为什么分散模型能够拿来生成图画。一旦模型(xt,t)\epsilon_\theta\left({x}_t,t\right)被练习出来,咱们能够运用它将噪声xtx_t重建回x0x_0,因为从球状高斯散布采样噪声很简略的,这样咱们就能够取得无限的图画变化。

咱们还能够在练习进程中经过向网络输入额定的信息来辅导图画的生成。假定图画是有标签的,那么类别标签yy的信息能够被送入一个类条件分散模型(xt,t∣y)\epsilon_\theta\left({x}_t, t|y\right)中。 怎么给练习进程引入辅导?

榜首种办法是练习一个独自的模型作为噪声图画分类器,在去噪的每一步中都去查看图画是否在向正确的方向上去噪,在梯度下降的进程中将自己的丢失函数组合到分散模型的整体丢失中。

Ho等人还提出另一个主意,便是不必练习额定的分类器状况下也能把类别信息传递给模型。便是在练习类条件分散模型(xt,t∣y)\epsilon_\theta\left({x}_t, t|y\right)的进程中,有时候不给它实践的类别信息yy而是传入一个空值\phi替代类别信息。这样模型就能学会在有和没有辅导的状况下进行分散。在推理进程中模型进行两次猜测,一次是给定类的标签信息,一次是不给定标签信息。经过操控引导参数s⩾1s \geqslant 1,模型终究的成果会靠近(xt,t∣y)\epsilon_\theta\left({x}_t, t \mid y\right),远离(xt,t∣)\epsilon_\theta\left({x}_t, t \mid \phi\right)

(xt,t∣y)=(xt,t∣)+s⋅((xt,t∣y)−(xt,t∣))\hat{\epsilon}_\theta\left({x}_t, t \mid y\right)=\epsilon_\theta\left({x}_t, t \mid \phi \right)+s \cdot\left(\epsilon_\theta\left({x}_t, t \mid y\right)-\epsilon_\theta\left({x}_t, t \mid \phi\right)\right)

这种无分类器辅导,只运用分散模型自己的了解的状况会发生更好的成果。

更具体能够看这儿:Guidance,让分散模型的指标更能打 – ()

运用GLIDE用文本引导分散模型

虽然在本文评论的一切论文中,描述GLIDE体系结构的论文重视是最少的,但能够说这个作业提出了有新意度最风趣的主意。便是这个作业结合了分散模型。

咱们现已知道分散模型是怎么作业的,咱们能够用它们来生成图画。咱们现在想答复的两个问题是:

  1. 怎么运用文本信息来辅导分散模型?

  2. 咱们怎样才能保证模型的质量满足好呢?

结构挑选

模型能够概括为由三个部分组成:

  1. 一个根据U-Net的模型负责分散学习的图画部分

  2. 根据transformer的模型负责从文本片段取得embedding

  3. 一个上采样分散模型来进步输出图画的分辨率

前两者一起作业,以创立文本引导的图画输出,而最终一个用于放大图画,一起坚持质量。

中心结构便是一个经典的U-Net,由上采样和下采样卷积组成。其间还包括一个注意力层,便于和文本处理衔接。这部分拥有约23亿个参数,数据集和DALLE相同。

用于做辅导的文本被编码到token中,然受输入到根据Transformer的模型中,这部分是12亿个参数,由24个宽度为2048的残差块构建而成。Transformer的输出有两个办法:

  1. 最终的token embedding 作为分类embedding yy传给条件分散模型 (xt,t∣y)\epsilon_\theta\left({x}_t, t \mid y\right)

  2. 最终一层输出的token embedding加到上边U-Net的每一层attention中

很明显,为了确保模型收到满足的文本相关信息以生成准确的图画,咱们投入了很多的精力。该模型以文本片段embedding为条件,编码后的文本与注意力上下文相连接,在练习期间,运用类条件分散模型(xt,t∣y)\epsilon_\theta\left({x}_t, t \mid y\right)。 最终一部分,作者运用分散模型,运用ImageNet的上采样器进步图画的分辨率。

【翻译】最近兴起的扩散模型

GLIDE interpretation of ‘a corgi in a field’, source: arxiv.org/abs/2112.10…

GLIDE集合了近年来开展的一些新成果,并为文本引导图画生成的概念带来了新思路。考虑到和DALLE模型根据不同的结构,能够说GLIDE的宣布标志着根据分散模型的文本到图画生成时代的到来

DALLE 2

OpenAI团队似乎没有休息,因为在4月份,他们用DALLE 2在互联网上又掀起了一场风暴。它借鉴了两个长辈的元素:

  • 严重依靠CLIP

  • 解决方案的很大一部分参考了GLIDE架构。

DALL-E 2有两个首要的底层组件,称为prior和图片解码器,二者组合在一起时能够发生图画输出。整个机制被命名为unCLIP,听这个名字想必了解CLIP的人就要现已能能到这部分做了什么作业了。

【翻译】最近兴起的扩散模型

Visualization of DALLE 2 two-stage mechanism. Source: Zero-Shot Text-to-Image Generation

prior模型

榜首部分的意图是将caption(一个文本片段)转换为文本嵌入(如“柯基演奏喷火的小号”)。这部分用的是一个冻结的CLIP模型。

在文本嵌入之后便是一个风趣的部分了,咱们现在需求取得一个图画嵌入,相似于经过CLIP模型取得的图画嵌入。咱们希望它还能封装来自文本嵌入的一切重要信息,因为它将经过分散生成图画。那你想问这不就和CLIP的作用相同吗? 假如咱们想给输入的短语找到一个对应的图画嵌入,咱们能够直接去查看在CLIP编码空间中与咱们的文本嵌入挨近的内容就行了。为什么还要这么麻烦搞一个prior?

DALLE 2的一位作者宣布了一篇很好的解说性的文章,说了一下为什么不能用这个决方案,以及为什么需求搞一个prior出来:

“An infinite number of images could be consistent with a given caption, so the outputs of the two encoders will not perfectly coincide. Hence, a separate prior model is needed to “translate” the text embedding into an image embedding that could plausibly match it”

作者大致意思是:关于同一个caption,可能会有无数的图片与之对应,因而CLIP两个编码器输出的内容并不是完全一致的,因而在这儿需求一个独自的prior模型将文本嵌入“翻译”为可能与之相匹配的图画嵌入。

在此基础上,作者经过实验证明了prior在整个网络中的重要性。证明了运用prior出来的图画嵌入+文本信息的作用要优于仅运用文本信息或许运用CLIP的文本嵌入

【翻译】最近兴起的扩散模型

Samples generated conditioned on: caption, text embedding and image embedding. Source: Zero-Shot Text-to-Image Generation

作者为了验证prior的作用别离测试了两类模型:自回归模型和分散模型。这篇文章咱们只讲分散模型部分的prior,因为它的表现比自回归模型好很多(究竟这篇文章便是说分散模型的,将自回归干什么),特别是从数学核算的角度来看。关于先验的练习,挑选了仅解码器的Transformer模型。它经过运用几个输入序列进行练习:

  • 编码的文本,

  • CLIP文本嵌入,

  • 分散时间步嵌入,

  • 噪声图画嵌入,

以输出一个嵌入ziz_i的无噪声图画为方针,与Ho等人在前几节中提出的练习办法不同,直接猜测无噪声图画嵌入比猜测噪声更适合。记住前面关于导向模型中分散丢失的公式。

Ldiffusion=Et,x0,[∥−(xt,t∣y)∥2]L_{\text {diffusion }}=\mathbb{E}_{t, \mathbf{x}_{0, \epsilon}}\left[\left\|\epsilon-\epsilon_\theta\left(\mathbf{x}_t, t \mid y\right)\right\|^2\right]

将前半部分分散的loss改为:

Lprior:diffusion=Et[∥zi−f(zit,t∣y)∥2]L_{\text {prior:diffusion }}=\mathbb{E}_t\left[\left\|z_i-f_\theta\left(z_i^t, t \mid y\right)\right\|^2\right]

其间ff_\theta是prior模型,zitz_i^t是带噪图画嵌入,tt是时间步,yy是用于模型引导的文本信息(caption)。

解码器

咱们现已讲了unCLIP的前半部分(prior模型),prior便是一个能够将文本中的一切重要信息封装到相似CLIP的图画嵌入中的模型。现在咱们想运用前边取得的这个图画嵌入生成一个实践的图画作为输出。这便是unCLIP名字的因由:咱们要用图画embedding取得对应的图画,这能够看做是CLIP模型图画编码器的反向进程。

俗话说得好啊,一个分散模型后边该跟着另一个分散模型了!

第二个分散模型便是咱们刚刚说的GLIDE模型,也不全是,是对GLIDE略微改了一下子。首要的一点更改是将CLIP生成的图画嵌入加入到原始的GLIDE的文本编码器中。究竟prior规划出来的意图便是为了给图画解码器供给信息的。至于Guidance技巧,DALLE 2这儿用的和GLIDE相同classifier-free Guidance办法,。将 10% 的CLIP embeddings 设置为 \phi,将50%的文本caption信息设置为\phi

另一个和GLIDE相同的是先生成一个小图然后运用上采样进步像素。把输出丢进分散模型里面,生成一个6464的小图,和GLIDE不同的是这儿用了两个上采样。榜首次是将像素进步到256256,第2次是将像素进步到10241024。

Imagen

谷歌大脑也不甘落后,在DALLE2之后不到两个月后,他们也展示了自己的劳动成果——Imagen。

【翻译】最近兴起的扩散模型

Overview of Imagen architecture. Source: Zero-Shot Text-to-Image Generation

Imagen的从结构上看起来出奇的简略。运用一个预练习好的文本模型生成嵌入,用于分散进程生成图片。然后经过一个进步分辨率的超分辨率分散模型来进步生成图片的分辨率,这一点和DALLE 2中是相同的。立异点散布在模型的不同当地,有的是在模型上,有的是在练习进程上。与前边的几个作业比较,它做出了一些立异。鉴于前边咱们都说了好几个模型了,咱们现在能够经过比较一下Imagen和前面作业的不同来解说这个模型:

运用预练习模型,而不是自己去练习Transformer

和OpenAI的作业比较,这一点能够认为是中心立异点。在GLIDE中,一切与文本嵌入有关的东西,用的都是一个新的,专门练习好的Transformer模型;可是在Imagen中作者用的是一个预练习的好的T5-XXL模型。这样做是考虑到之前的模型是仅关于图片的caption进行练习的,可是运用T5-XXL,它是现已预练习好的不需求再微调的模型,而且含有更为丰厚的上下文信息,所以能够发生更有价值的嵌入。

让底层神经网络更有效

用于进步分辨率的超分辨率分散模型, 把原来普通的U-net换成了Efficient U-net神经网络作为其模型的骨干。Efficient U-net比以前的版别更节约内存,更简略,收敛速度也更快。这些改善首要是由残差块和网络内部值的额定缩放带来的。假如你想深化了解这一部分能够去看一下Zero-Shot Text-to-Image Generation。

运用条件增强来增强图画的保真度

因为这个模型是由一系列分散模型组成的,因而在模型相关联的区域进行增强是有必要的。Ho等人提出了一种称为条件反射增强的解决方案。简略地说,这相当于在将低分辨率图画输入超分辨率模型之前,对其运用各种数据增强技能,如高斯含糊。


对低FID得分和高图画保真度(如动态阈值)改善还有一些很重要的办法,这些在Zero-Shot Text-to-Image Generation也中有具体解说。

【翻译】最近兴起的扩散模型

Some of Imagen generations with captions. Source: Zero-Shot Text-to-Image Generation

作用怎么样?

截止本文写作时间停止,就文本到图画的生成而言,谷歌的Imagen被认为是最先进的。但这到底是为什么呢?咱们怎么评价模型并彼此比较?

Imagen的作者挑选了两种评价办法:

  • 一种是现在公认的文本到图画生成的指标,即在COCO验证数据集上核算FID score。作者说Imagen显示出最先进的功能,因为其zero-shot生成图画的FID优于其他模型,乃至超过那些专门在COCO数据集上练习的模型。

【翻译】最近兴起的扩散模型

Comparison of several models. Source: [7]

  • 另一个更风趣的的评价手段是Imagen作者提出的新的评价指标DrawBench用来评价比较不同的文本到图画生成的模型。便是一组全面而且很有挑战性的文本提示(prompt),包括11个类别200个文本提示。评价进程是用275个没有成见的评分人员完成的,每一类别25个人。把这些文本提示丢给不同的模型让它们生成图画,不是选出最优生成成果,是生成啥就拿啥。然后把生成的图画给评分人员,问他们两个问题。

    1. 你觉得哪组图片生成质量更高?

    2. 哪组图片和文本阐明更贴合?

    这两个问题能清晰表达出一个好的文本到图画生成模型的两个最重要的特征:发生的图画的质量(保真度)和它到底能不能很好得反映输入的文本提示(对齐)。

    评分者只能说A模型更好、B模型更好或许两个相同。可是最终只能有一个模型是胜者。还有一个风趣的事情,在这个评价指标上GLIDE的作用比DALLE 2要好。

    【翻译】最近兴起的扩散模型

    Imagen vs other models. Source: Zero-Shot Text-to-Image Generation

该论文的很大一部分都是在比较Imagen和GLIDE、DALLE 2生成的图画,更多的能够去看附录。

未完待续

像以前的开展状况相同,随着新体系结构取得认可,很多风趣的作业出现出来。因为开展速度快,咱们不可能follow每一个作业。除了原始的生成才能之外,模型还有许多风趣的特性需求发现,例如图画修正、风格转换和图画编辑等等。

除了对生成性模型的新时代感到振奋之外,咱们还要知道分散模型结构中还存在一些缺点,例如与以前的模型比较,采样速度较慢等问题。咱们也要在这些方向上不断进行改善。

【翻译】最近兴起的扩散模型

Models comparison. Source:Improving Diffusion Models as an Alternative To GANs, Part 1