【论文精读】DALL·E

摘要

       本文利用从互联网上收集的2.5亿个图像/文本对数据,训练了一个120亿参数的自回归transformer,进而得到一个可以通过自然语言/图像控制生成的高保真图像生成模型。在大多数数据集上的表现超越以往的方法。

框架

       本文的目标为通过训练一个自回归transformer,通过将文本和图像tokens自回归建模为单个数据流,进而结合图像解码器进行图像生成,整体分为两个阶段:
image

  • 第一阶段:训练一个离散变分自编码器(dVAE),其编码器会将输入图像从 256 × 256 256 × 256 256×256压缩为 32 × 32 32 × 32 32×32的图像tokens,其中每个token都会映射到 K = 8192 K = 8192 K=8192的codebook向量中。相比于直接使用像素作为图像token,这可以使后续步骤的自回归transfromer的上下文大小减少192倍,同时不会大幅降低视觉质量(如上图)。
  • 第二阶段:将256个由BPE编码的文本tokens 与 32 × 32 = 1024 32 × 32 = 1024 32×32=1024个图像tokens拼接起来,基于此训练一个自回归transformer,实现对文本和图像tokens的联合分布的建模。

       整个过程可以被看作最大化模型在图像 x x x、文本 y y y和tokens z z z上的联合似然的ELBO,通过因子分解可以将该分布建模为 p θ , ψ ( x , y , z ) = p θ ( x ∣ y , z ) p ψ ( y , z ) p_{θ,ψ}(x, y, z) = p_θ(x | y, z)p_ψ(y, z) pθ,ψ(x,y,z)=pθ(xy,z)pψ(y,z),对应的ELBO为:
ln ⁡ p θ , ψ ( x , y ) ≥ E z ∼ q ϕ ( z ∣ x ) ( ln ⁡ p θ ( x ∣ y , z ) − β D K L ( q ϕ ( y , z ∣ x ) , p ψ ( y , z ) ) ) \ln p_{θ,ψ}(x, y) \ge \mathbb{E}_{z \sim q_ϕ(z|x)}(\ln p_θ(x|y,z)-\beta D_{KL}(q_ϕ(y,z|x),p_ψ(y,z))) lnpθ,ψ(x,y)Ezqϕ(zx)(lnpθ(xy,z)βDKL(qϕ(y,zx),pψ(y,z)))

       其中, q ϕ q_ϕ qϕ表示给定图像 x x x经过dVAE编码器生成的 32 × 32 32 × 32 32×32的tokens的分布; p θ p_θ pθ表示由tokens经过dVAE解码器生成的图像的分布; p ψ p_ψ pψ表示由自回归transformer建模的文本和图像tokens的联合分布。该ELBO只适用与 β = 1 \beta = 1 β=1的情况。

Learning the Visual Codebook

       第一阶段的训练目标为最大化 ϕ ϕ ϕ θ θ θ的ELBO,即通过给定图像训练dVAE。先验 p ψ p_ψ pψ初始化为基于codebook( K = 8192 K = 8192 K=8192)向量的均匀分类分布(uniform categorical distribution); q ϕ q_ϕ qϕ初始化为在编码器输出的 32 × 32 × 8192 32 × 32×8192 32×32×8192的logits参数化的分类分布(uniform categorical)。

       由于 p ψ p_ψ pψ是一个离散分布,无法使用梯度进行优化,故此处采用gumbel-softmax松弛,用 q ϕ τ q ^τ_ ϕ qϕτ取代 q ϕ q_ϕ qϕ,当 τ → 0 τ → 0 τ0时,松弛程度会逐渐缩小,逼近原始分布。 p θ p_θ pθ的似然使用log-laplace分布评估,以避免离群值导致的生成模糊问题。

       松弛后的ELBO使用Adam和EMA优化,以下配置对训练稳定性很重要:

  • 松弛temperature和步长的具体退火方法。实验发现 τ τ τ退火到1/16时,松弛ELBO的 q ϕ τ q ^τ_ ϕ qϕτ和真实ELBO的 q ϕ q_ϕ qϕ之间的gap就会消失。
  • 在编码器的末尾和解码器的开头使用1 × 1卷积。 实验发现,通过减少松弛方法周围的卷积层的感受野大小,可以使其泛化到真实ELBO的情况。
  • 将编码器和解码器的输出激活值乘一个小的常数,可以使初始化时的训练更加训练。

       另外,KL权重增加到 β = 6.6 β = 6.6 β=6.6时,可以得到更好codebook,故而使训练结束时的重构误差更小。

Learning the Prior

       第二阶段在固定 ϕ ϕ ϕ θ θ θ的情况下,最大化关于 ψ ψ ψ的ELBO,学习文本和图像token的联合先验分布。其中, p ψ p_ψ pψ是一个120亿参数的稀疏transformer。

       具体,给定一个文本/图像对,首先通过对小写文本进行BPE编码(词汇表大小为16384)得到最多256个文本token ,并对dVAE编码器输出的logits进行argmax采样codebook得到1024个图像token,此处没有添加gumbel噪声。最后,拼接这些文本和图像token作为单个数据流进行自回归建模。

       本文限制文本标题的最大长度为256,每个文本位置都会学习一个特殊的“padding” token,当对应位置没有文本token时使用此token。得到文本和图像token的交叉熵损失后,将文本交叉熵损失乘以1/8,图像交叉熵损失乘以7/8,以对loss归一化,本阶段也使用EMA和Adam进行优化。

Data Collection

       本文从互联网上收集了2.5亿个文本/图像对,创建了一个与JFT-300M相似规模的数据集。该数据集包括一部分Conceptual Captions和YFCC100M的经过滤的子集。

Mixed-Precision Training

       为了节省GPU内存并增加吞吐量,模型的大多数参数、Adam矩阵和模型激活值都以FP16存储,并使用了activation checkpointing技术。

       在训练过程中发现,随着模型变得更深更广,resblocks的激活梯度会单调减少,较深层的resblocks的激活梯度可能小于FP16的最小值,其会被四舍五入为0,这种现象称为下溢(underflow)。实验发现消除下溢可以使训练更加稳定。
image
       故对于模型中每个的resblock,通过执行“gradient scale”可以解决下溢问题,如上图。

Distributed Optimization

image
       DELL-E有120亿参数,以FP16精度存储时会消耗约24GB内存,这超过单张NVIDIA V100 GPU的16GB内存,故使用参数分片。如上图。
image
       本文的实现中,每台机器上的每个GPU都独立地计算其参数分片梯度的低秩因子,而不依赖于其相邻的GPU。一旦计算出低秩因子,每台机器都会将其error buffer设置为其八个GPU上未压缩的参数梯度的平均值(通过reduce-scatter获得)与通过解压缩低秩因子得到的梯度之间的残差(两者偏差)。

       对于一个模型训练集群,其机器之间的带宽远低于同一机器上不同GPU之间的带宽,故机器之间梯度平均操作(all-reduce)成为训练期间的主要速度瓶颈,通过引入PowerSGD压缩梯度,可以大大降低这种成本。 PowerSGD会将未压缩的参数梯度的通信操替换为基于其低秩因子的两个更小的通信操作。给定压缩rank r r r和transformer激活尺寸 d m o d e l d_{model} dmodel,其压缩率为 1 − 5 r / ( 8 d m o d e l ) 1 − 5r/(8d_{model}) 15r/(8dmodel)。如上表显示,无论模型大或小,该方法可以实现约85%的压缩率。

Sample Generation

image
       对于从transformer中生成的一系列图像,本文采用预训练CLIP对生成图像与文本标题的匹配程度来分配分数并排序。如上图显示了给定生成的N张图像,并从中选择的top-k图像。除非另有说明,用于定性和定量结果的所有样本都是在不降低temperature的情况下获得的,并使用N = 512重新排序。

实验

Quantitative Results

image
       上图定性比较了DALL-E和AttnGAN、DM-GAN和DF-GAN的生成。
image
       上图为人类验证实验。给定一个文本标题,相比DF-GAN,DALL-E的生成在93%的情况下与文本标题更好地匹配,而获得更多的人类投票。在90%的情况下,也因为更真实而获得了大多数人类投票。
image
       上图(a上)为在MS-COCO数据集上验证的定量结果,DALL-E与之前最佳方法只差2个点的FID分数。由于DALL-E的训练数据中包含一个YFCC100M的过滤子集,其中包含MS-COCO验证集中大约21%的图像,故为了隔离这种影响,另外分别计算了验证集有这些图像(实线)和没有这些图像(虚线)的FID信息,结果没有明显变化。

       用dVAE编码器的token训练transformer,可以使模型学习更多的图像低频信息,使图像在视觉上更真实。,但这也不利于模型学习产生高频细节。为了验证模型的高频建模能力,本实验对验证图像和模型生成的样本应用了不同半径的高斯滤波器,并计算对应IS值。结果如上图(a下),随着模糊半径的增加,DALL-E和其他方法之间的差距越拉越大,当模糊半径大于等于2时,DALL-E取得了最佳结果。

       DALL-E在CUB数据集上的表现比较差,如上图(b),和之前的主要方法有近40点FID的差距。经过检测发现,训练数据集中包含12%的CUB数据,但去除这些数据后模型表现仍旧不佳。故推测zero-shot DALL-E不太可能在CUB等专业分布的数据集上获得优势。

       上图(c)显示了当用于CLIP重排序的样本增加时,DALL-E的FID有了明显改进。
image
       上图显示了DALL-E在CUB数据集中不同文本标题下的生成示例。

Qualitative Findings

image
       通过验证发现DALL-E有不以最初预期的方式进行泛化的能力。当给出文本标题“a tapir made of accordion… ”,该模型似乎画了一个以手风琴为身 体的貘(上图a)。这表明,其发展出一种基本的能力,可以在较高的抽象层次上组合概念。

       DALL-E似乎也能进行组合泛化,例如在渲染如“an illustration of a baby hedgehog in a christmas sweater walking a dog”这样的句子(上图b、c)。

       在有限的可靠性程度上,还发现该模型能够由自然语言控制图像到图像的翻译。当模型被赋予标题“the exact same cat on the top as a sketch at the bottom”时,其能够在底部画一个类似的猫的草图(上图d)。 这也适用于其他几种类型的转换,包括图像操作(例如改变图像的颜色、将其转换为灰度或翻转图像)和样式转换(例如在贺卡、邮票或手机壳上画猫)。一些只涉及改变动物颜色的转换,表明DALL-E能够执行基本的对象分割。

Appendix

Details for Discrete VAE

Architecture

       dVAE编码器和解码器都为具有bottleneck-style resblocks的ResNets。编码器的第一层卷积核尺寸为 7 × 7 7 × 7 7×7,编码器的最后一层卷积核尺寸为 1 × 1 1×1 1×1(输出尺寸为 32 × 32 × 8192 32 × 32 × 8192 32×32×8192,用作图像token的分类分布的logits)。解码器的第一层卷积和最后一层卷积核尺寸都为 1 × 1 1×1 1×1。编码器使用最大池化下采样,解码器使用最近邻上采样。

Training

image
       dVAE在与transformer相同的数据集上进行训练,使用上图中给出的数据增强代码。以下量在训练过程中使用余弦退火进行衰减:

  • KL权重 β β β在前5000次迭代中从0增加到6.6
  • 松弛 τ τ τ在前150000次迭代中从1退火到1/16
  • 在1200000迭代中,step size从 1 ⋅ 1 0 − 4 1\cdot10^{−4} 1104退火到 1.25 ⋅ 1 0 − 6 1.25 \cdot 10^{−6} 1.25106

       使用 β 1 = 0.9 , β 2 = 0.999 , ϵ = 1 0 − 8 β_1 = 0.9, β_2 = 0.999, ϵ = 10^{−8} β1=0.9,β2=0.999,ϵ=108的AdamW和 1 0 − 4 10^{−4} 104的weight decay和 0.999 0.999 0.999的EMA优化模型。该模型在64个16 GB NVIDIA V100 gpu上使用混合精度训练,每个gpu的batch size为8,总batch size为512,总共3000000次。

Details for Transformer

Architecture

image
       本文第二阶段模型是一个仅解码器的稀疏transformer,其输入tokens embedding格式如上图。其包括64个注意力层,每个层使用62个注意力头,每个头的维度大小为64。
image
       该模型使用三种稀疏注意力mask,如上图。给定自注意力层的索引 i i i i ∈ [ 1 , 63 ] i ∈ [1, 63] i[1,63]),如果 i − 2 m o d 4 = 0 i − 2\ mod \ 4 = 0 i2 mod 4=0,则使用列注意力mask(c),否则使用行注意力mask,例如,前四个自注意力层分别使用row、column、row、row。卷积注意力mask(d)仅用于最后的自注意力层。

Training

image
       对于训练transformer的训练,在使用dVAE编码器编码图像之前,首先对图像进行如上图代码所示的数据增强。在用BPE编码文本标题时,还应用了10%的BPE dropout。该模型使用逐resblock缩放和梯度压缩进行训练,总压缩rank为896(每个GPU的参数分片使用112的压缩rank)。

       使用 β 1 = 0.9 , β 2 = 0.96 , ϵ = 1 0 − 8 β_1 = 0.9, β_2 = 0.96, ϵ = 10^{−8} β1=0.9,β2=0.96,ϵ=108的AdamW与和 4.5 ⋅ 1 0 − 2 4.5 \cdot 10^{−2} 4.5102的weight decay和0.99的EMA优化参数。在应用Adam更新前,会使用阈值为4的norm对解压后的梯度进行裁剪,梯度裁剪仅在训练开始的预热阶段运行。为了节省内存,大部分Adam矩阵以FP16格式存储,其中运行平均值为1-6-9格式(即1位用于符号,6位用于指数,9位用于尾数),运行方差为0-6-10格式,在更新参数或动量之前,会将运行方差裁剪为5。其次,还会异步地将模型参数从GPU复制到CPU(每25次更新复制一次),以获得更稳定的更新。

       该模型在1024个16 GB NVIDIA V100 gpu和总batch size为1024的设置下训练模型,总共进行了430000更新。step size在前5000次迭代中,线性退火到 4.5 ⋅ 1 0 − 4 4.5 · 10^{−4} 4.5104,并在每次训练损失趋于稳定时将step size减半,训练周期内,总共减半了5次,比初始步长小32倍的最终步长结束训练。

Details for Human Evaluation Experiments

image
       对于人类验证实验,本文使每个模型对每个文本标题生成一个示例图像,并给定文本和示例图像让人类给出比较结果,实验提交给了亚马逊的Mechanical Turk,每组生成都由五名不同的人类回答。工作人员被要求比较两张图像并选择答案:(1)哪张图像最真实,(2)哪张图像最匹配文本标题。提供给人类的实验设置如上图。

Zero-Shot Image-to-Image Translation

image
       上图显示了DALL-E的zero-shot图像到图像转换的示例。

reference

Ramesh, A. , Pavlov, M. , Goh, G. , Gray, S. , Voss, C. , & Radford, A. , et al. (2021). Zero-shot text-to-image generation.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java+SSM+mysql 开放式实验管理系统78512-计算机毕业设计项目选题推荐(免费领源码)

摘 要 我国高校开放式实验管理普遍存在实验设备使用率较低、管理制度不完善,实验设备共享程度不高等诸多问题。要在更大范围推行开放式实验管理,就必须在开放式实验教学管理流程中,通过引入信息化管理加大信息技术在其中的应用,才能真正发挥这种教学模式的开放性优势。 本系统…

文生视频:Sora模型报告总结

作为世界模拟器的视频生成模型 我们探索视频数据生成模型的大规模训练。具体来说,我们在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。我们利用对视频和图像潜在代码的时空补丁进行操作的变压器架构。我们最大的模型 Sora 能够生成一分钟…

小苯的数组切分 ---- 牛客月赛

题目描述 qionghuaqionghuaqionghua 给了小苯一个长度为 n 的数组 a&#xff0c;希望小苯将数组 aaa 分为恰好非空的三段。即&#xff1a;[1,l−1],[l,r],[r1,n]这三段&#xff0c;其中 1< l≤r<n。接着&#xff1a; ∙ 第一段的所有数字做 ⊕&#xff08;按位异或&…

【C语言相关问题】C语言中关于大小写字母转换的问题

大家好&#xff0c;这里是争做图书馆扫地僧的小白。非常感谢各位的支持&#xff0c;也期待着您的关注。 目前博主有着C语言、C、linux以及数据结构的专栏&#xff0c;内容正在逐步的更新。 希望对各位朋友有所帮助同时也期望可以得到各位的支持&#xff0c;有任何问题欢迎私信与…

每日OJ题_算法_递归④力扣24. 两两交换链表中的节点

目录 ④力扣24. 两两交换链表中的节点 解析代码 ④力扣24. 两两交换链表中的节点 24. 两两交换链表中的节点 难度 中等 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即…

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(2)项目开发周期

我们来学习项目开发的周期。 再次声明&#xff0c;本文来自腾讯AI课的学习笔记&#xff0c;图片和文字&#xff0c;仅用于大家学习&#xff0c;想了解更多知识&#xff0c;请访问腾讯云相关章节。如果争议&#xff0c;请联系作者。 今天&#xff0c;我们来学习AI项目的周期。 主…

17-k8s控制器资源-job控制

job控制器&#xff1a;就是一次性任务的pod控制器&#xff0c;pod完成作业后不会重启&#xff0c;其重启策略是&#xff1a;Never 1&#xff0c;job控制器案例描述 启动一个pod&#xff0c;执行完成一个事件&#xff0c;然后pod关闭&#xff1b; 事件&#xff1a;计算π的值&a…

AI大模型学习笔记之五:监督学习--数据如何驱动决策

监督学习&#xff0c;又称为监督式机器学习&#xff0c;是机器学习和人工智能领域的一个重要分支。 其基本原理是利用带有标签的数据集来训练算法&#xff0c;以实现精确分类数据或预测结果的目标。 在监督学习中&#xff0c;通过将数据输入模型&#xff0c;并不断调整数据权…

软件工程师,为什么不喜欢关电脑

概述 你是否注意到&#xff0c;软件工程师们似乎从不关电脑&#xff0c;也不喜欢关电脑&#xff1f;别以为他们是电脑“上瘾”&#xff0c;或是沉迷于电脑&#xff0c;这一现象背后蕴含着多种实际原因。 1、代码保存与恢复。 在编写代码过程中&#xff0c;遇到问题时可能会暂时…

【JavaScript】面试手写题精讲之数组(下)

引入 这章主要讲的是数组的排序篇&#xff0c;我们知道面试的时候&#xff0c;数组的排序是经常出现的题目。所以这块还是有必要进行一下讲解的。笔者观察了下前端这块的常用算法排序题&#xff0c;大概可以分为如下 冒泡排–> 稳定排序插入排序–> 稳定排序选择排序–…

Swing程序设计(10)列表框,文本框,文本域,密码框

文章目录 前言一、列表框二、文本框&#xff08;域&#xff09; 1.文本框2.文本域三、密码框总结 前言 该篇文章简单介绍了Java中Swing组件里的列表框、文本框、密码框。 一、列表框 列表框&#xff08;JList&#xff09;相比下拉框&#xff0c;自身只是在窗体上占据固定的大小…

【探索Linux】—— 强大的命令行工具 P.22(POSIX信号量)

阅读导航 引言一、POSIX信号量的基本概念二、信号量的相关操作1 . 初始化信号量sem_init ( )&#xff08;1&#xff09;原型&#xff08;2&#xff09;参数&#xff08;3&#xff09;返回值&#xff08;4&#xff09;示例代码 2 . 等待信号量&#xff08;1&#xff09;sem_wait…

高程 | 类与对象(c++)

文章目录 &#x1f4da;面向对象程序设计的基本特点&#x1f407;抽象——概括问题&#xff0c;抽出公共性质并加以描述。&#x1f407;封装——将抽象所得数据和行为相结合&#xff0c;形成一个有机的整体&#xff0c;形成“类”。&#x1f407;继承——在原有类特性的基础上&…

Python爬虫学习

1.1搭建爬虫程序开发环境 爬取未来七天天气预报 from bs4 import BeautifulSoup from bs4 import UnicodeDammit import urllib.request url"http://www.weather.com.cn/weather/101120901.shtml" try:headers{"User-Agent":"Mozilla/5.0 (Windows …

51_蓝桥杯_蜂鸣器与继电器

一 电路 二 蜂鸣器与继电器工作原理 2.1蜂鸣器与继电器 2.2 十六进制与二进制 二进制 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F 2.3非门 二 代码 …

Java Lambda表达式:简化编程,提高效率

Java Lambda表达式&#xff1a;简化编程&#xff0c;提高效率 1. 使用Lambda表达式进行集合遍历1.1 未使用Lambda表达式&#xff1a;1.2 使用Lambda表达式&#xff1a; 2. 使用Lambda表达式进行排序2.1 未使用Lambda表达式&#xff1a;2.2 使用Lambda表达式&#xff1a; 3. 使用…

精通C语言:打造高效便捷的通讯录管理系统

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C语言项目 贝蒂的主页&#xff1a;Betty‘s blog 引言 在我们大致学习完C语言之后&#xff0c;我们就可以利用目前所学的知识去…

HCIA-HarmonyOS设备开发认证V2.0-内核扩展组件

目录 一、CPU 占用率1.1、CPU 占用率基本概念1.2、CPU 占用率运行机制1.3、CPU 占用率开发流程 二、动态加载2.1、 动态加载基本概念2.2、动态加载运行机制 坚持就有收获 一、CPU 占用率 1.1、CPU 占用率基本概念 CPU&#xff08;中央处理器&#xff0c;Central Processing U…

第三节作业:基于 InternLM 和 LangChain 搭建你的知识库

参考文档&#xff1a;https://github.com/InternLM/tutorial/tree/main/langchain 基础作业&#xff1a;复现课程知识库助手搭建过程 (截图) 1.环境配置 2.知识库搭建 &#xff08;1&#xff09;数据收集 收集由上海人工智能实验室开源的一系列大模型工具开源仓库作为语料库来…

单html页面使用Vue3和Element-Plus

快速入门&#xff08;直接整案例&#xff0c;看显示效果&#xff09; 使用CDN方式引入Vue3使用CDN方式引入Element-Plus的样式文件和组件库 案例1&#xff08;按钮&#xff0c;表格&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta …