作者介绍:段楠,微软亚洲研究院自然语言计算组高级研究经理,中国科学技术大学兼职博导,天津大学兼职教授,主要从事自然语言处理、编程语言处理、多模态人工智能、机器推理等研究,多次担任NLP/AI/ML相关国际会议评测主席、高级领域主席和领域主席,发表学术论文100余篇。
本文根据段楠老师在「澜舟NLP分享会」上的演讲整理。文内梳理了视觉语言预训练近期工作,并分享了微软亚洲研究院在视觉语言预训练模型和视觉合成方面的研究。
背景
近三年来,基于 Transformer 和自监督预训练的语言模型取得了非常瞩目的成绩。这些模型通过自回归、降噪自编码器、对比学习等自监督学习任务,能够从海量的单语或者多语语料中学习到语言的通用表示,然后通过微调等方式适配到各种各样的下游任务上去,例如问答、文本生成、机器翻译等。
与此同时,随着视觉领域 VQVAE、一些聚类算法等的发展,以及语音领域上一些离散化方法的发展,我们实际上可以将视觉数据和语音数据也转换成类似语言序列的离散符号的序列表示。由于这种底层数据表示的一致性,多模态任务的建模方法也非常快速地趋同,这也是多模态能够成为人工智能领域一个非常前沿的研究的原因。
在这样的背景下,本文将深入介绍微软亚洲研究院最近在两个多模态相关的工作,一个是视觉语言预训练模型,另一个是视觉合成方面的研究。
视觉语言预训练
相关工作梳理
图 1
首先回顾下视觉语言预训练的一些相关工作,如图 1 所示
首先,对视觉内容的离散化是第一步,一般有三种常见的离散化方式:
- pixel input: 以像素为单位将图像转换为序列
- object input: 先从图像中抽取若干对象(object)以及对应的特征,然后将其转换为序列,这是 Faster RCNN 所采用的方式。
- patch input: 以图像块为单位将图像转换为序列
然后,对序列化后的视觉内容进行编码,常用的方式有:
- 卷积神经网络:属于比较早期的方式,比如 MSRA 之前提出的 ResNet。
- 基于区域的卷积神经网络:将图像中的对象抽取出来作为整体的表示,例如 Faster RCNN 等。
- 视觉 Transformer: 使用 Transformer 对图像进行编码,例如 MSRA 的 BEiT, Swin, VideoSwin 等。
接着,进行两个模态的信息融合与交互:
- 点积:例如 CLIP 等,将编码后的视觉和语言表示通过点积计算相似度等,这是最简单的一种 V-L 交互方式。
- 使用 Transformer 进行交互:将视觉、语言表示输入到 Transformer 中,使用 Transformer 的自注意力等模块进行跨模态交互。早期视觉-语言预训练技术常采用这种方式。
- 混合专家(Mixture-of-Experts, MoE):MoE 最开始主要用于大模型的稀疏化,这里用于多模态场景,例如 MSRA 的 VLMo 主要的思想是:通过切换特定输入下的不同的专家(experts),专门进行视觉或者语言的表示。这样既保证了单模态下的一些性质,又保证了模型能够用到多模态任务上面。
![图片](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1c5fb9b4578e40eb8c3ec14add716e42~tplv-k3u1fbpfcp-zoom-1.image)
代码语言:txt复制图2
- 带有桥塔结构的 Transformer : 如图 2 所示,实际上,无论语言的编码器还是视觉的编码器,都是分很多层次的,不同层次的表征蕴含着不同层次和不同角度的一些信息和内容。因此,我们的动机就是:除了在最后一层进行信息的融合,在很多中间层也需要一些模态之间的信息交互,这种融合的形式能够更好的适配下游任务。
最后,定义训练目标:
- 保留单模态训练目标:例如 masked language modeling、masked image modeling、masked region modeling 等。
- 匹配:文本-图像匹配或者文本-视频匹配。
- 对比学习
通过这种方式预训练优化整个模型的参数,让模型学习 VL 任务的一种底层的数据表征,可以通过微调很好地适配到下游任务里面去。
桥塔架构(Bridge-Tower Architecture)
这是 MSRA 最近提出的一个新的视觉-语言预训练模型,论文已经公开:https://arxiv.org/abs/2206.08657
Bridge-Tower 模型主要的动机就是:不仅仅在最后一层才去做交互,在编码的中间层,也需要进行跨模态的交互。
图3
模型的结构如图 3 所示,输入为文本以及图像的序列。在模型的前 6 层,仍然采取单独编码的方式,即视觉编码和语言编码分别采取各自独立的 Transformer 编码器,得到各自前六层的中间表示。但是从第 7 层开始到第 12 层,除了语言或者视觉各自的自注意力模块,还新增了一个用于跨模态交互的模块。
以第 7 层为例,我们首先将第 7 层的隐状态(hidden states)输入到 Bridge Layer 里面,然后,一方面通过自注意力(self attention)编码模态特定的表示,另一方面,再通过交叉注意力(cross attention)融合对面模态的表示。最后,将交叉融合后的信息经过前馈神经网络后,传到下一层 Bridge 当中去。这样,就建立了两个模态编码器中间表示之间的交互。
可以看到,实际上这个模型的结构非常简单,和之前“文本编码器 视觉编码器 → 跨模态融合编码器”的方式相比,它的参数量是没有任何变化的,唯一的变化就是:Bridge-Tower 模型将跨模态的交互从最顶层降低到了顶部的若干层。这也是该模型最大的一个贡献点。
图4
我们还发现,如图 4 所示,不同的 Bridge 当中,实际上直接相加就是最为有效的方式。另外,我们也对 Bridge 的位置及数量进行了一系列消融实验,我们发现,将 Bridge 加到顶部的 6 层就是最优的一个配置。
在训练目标上,因为我们旨在探索这种早期融合机制的有效性,因此没有过多地进行预训练任务上的设计,摒弃掉了其他一切可能带来性能增益的机制。例如,在预训练时,我们就采取了两个最为简单的任务:masked language modeling (MLM) 和 文本-图像匹配(二分类)(ITM)。
另外,我们预训练所使用的数据集也是非常小的,即标准的 COCO、VG、CC、SBU,总共大约 4 万张图片。
图5
如图 5,我们在 base (12 层) 和 large (24 层)两种设置下进行了 VQA 2.0 (视觉问答)的实验,然后与市面上能够看到的绝大多数视觉语言预训练模型做了一些比较,可以看到,我们的数据量是最少的,但是取得了非常好的一个效果。
更多的思考
由于时间关系,我们没有进行更多的实验,但值得一提的是,这种双塔的模型实际上是适配非常多的多模态任务的。例如在搜索引擎里面,查询(query)和文档(document)的匹配,为了保证效率,也是通过双塔的方式去做的。因此,对于单模态文本的这类匹配任务,也可以通过这种早期融合(early fusion)机制得到性能上的提升,这个是我们后续要去做一些验证的。
另外,我们也做了很多代码相关的工作。上述技术也可以用于文本到代码的检索或者代码到文本的一些相关工作。这也是我们后续可以尝试的点。
图6
而且,如上面的实验结果(图 6)所示,这种桥塔结构的一个很好的性质是:仍然保留了自身单模态编码器的前向传播过程而不受干扰,因为目前的这种架构并没有一个回馈机制,即把 Bridge 的信息返回到单模态自身的表示里面。所以我们非常好地发现,通过了多模态任务预训练之后,不管是视觉单模态任务,还是语言单模态任务,性能的下降都是非常低的。而且在预训练的过程中,我们没有去刻意保留原有单模态性能,仍然做到了这一点。
所以基于这样的现象,我们反复思考一个问题:这是不是一种非常好的能够同时去训练单模态和多模态的一个机制? 也就是说,在未来如果我们把单模态的这种预训练任务也再次加回到我们这种桥塔结构里面去,是不是会让单模态的信息也能去借鉴多模态信息来达到真正意义上的“通过多模态数据和单模态数据增强单模态的预训练模型”。
这其实是一个非常重要也本质的问题,因为大家都证明“大数据对于单模态的预训练任务是非常有效的”。实际上这种不同模态的数据之间,在很多角度或者很多层,是可以有相互连接的。那么我们是不是可以通过这种机制利用其它模态的数据增强某个模态的性能呢? 我觉得这是非常值得探索的问题,即关于多模态和单模态之间相关关系相互促进的方向。
视觉合成
相关工作梳理
图 7
这里我们总结了一些比较典型的视觉合成的工作,如图 7,比如 OpenAI 的 DALL·E 和 DALL·E 2,Google 最近的 Imagen 和 Parti 等。在我们过去一年多的时间里,我们做了一个名为女娲(NUWA)的模型,它的发布要早于 DALL·E 2、Imagen 和 Parti. 这个模型主要是对 DALL·E 进行了一个改进。另外,我们最近还做了一个新的模型,叫女娲-infinity。这个模型解决的问题是:之前的模型在生成视觉内容的大小上是有限的,因此女娲-infinity 突破了这一限制,可以支持变长的视觉内容的生成,包括把图片生成为任意指定大小和分辨率的图像,以及支持视频的生成等。
这里先回顾下视觉合成的两类典型的工作:
1. 基于自回归 (autoregressive)
图8
如图 8 所示,这种方法实际上是基于视觉内容离散化的机制,比如 VQVAE 或者 VQGAN 等 。 这些模型本质上仍然是预训练模型,不同的是,这些模型针对视觉内容比如图片,首先通过一个 VQGAN 或者 VQVAE 的编码器,将其转换成一个离散符号的序列,序列中每一个视觉 token 对应着一个特定的 patch。 我们虽然不知道这些 token 是否像语言的 word 一样有一个具体的形式,但是我们可以想象说,这些 token 就是对应 patch 的一种语义表示。
之后,对于解码器,给定编码后的离散视觉 token 序列,我们重构 (reconstruct) 原来的图像。所以本质上,这类模型仍然是一种预训练模型,经过这种预训练之后,我们就能够得到能将视觉内容离散化的一个编码器和对应的解码器,这个解码器可以将离散的视觉 token 转化为可视的图像内容。
这种方法的典型工作包括:DALL·E 的第一代,女娲的第一代,以及 Google 最近提出的 Parti 等。 这些模型的方式非常简单,就是给定一个文本输入,首先用一个文本的编码器将其编码,然后就像 encoder-decoder 框架一样,用解码器生成这个输入序列对应的一个视觉 token 序列,这种生成的过程是自左向右的,因此成为自回归。之后,给定生成的视觉 token 序列后,再通过一个 VQGAN 的解码器将其还原为一张图片。
最后,无论是 DALL·E 2,还是 Parti、Imagen 等,在生成一个分辨率较小的图像的基础上,再通过一个超分辨率 (super-resolution) 模型将小图像转换为高分辨率的大图像。但是,这个大图的大小也是固定的,比如 1024*1024,这是最近若干模型的一个通用的大小。
2. 基于扩散模型 (diffusion model)
图9
如图 9 所示,扩散模型的基本思想是:可以通过自身构造数据来训练模型。这包含了正向和反向的两个过程。正向过程就是:给定一张图片,通过不断地加高斯噪声,如果噪声足够多的话,就能够将其转换为高斯分布下的随机噪声分布的图像。反向过程就是:从生成的噪声开始,不断地降噪 (denoise),不断地去除当前迭代轮次 (iteration) 里面的噪声,比如从 到 再到 直到还原输入的原始图片。
DALL·E 2 和 Imagen 都是基于扩散模型的,给定一个输入的文本,先用文本编码器编码文本,得到文本的编码向量,然后直接输入到扩散模型的反向过程里面,通过多次迭代来生成最终想要的输出的图片。 当然,在 DALL·E 2 里面,它还通过一个先验模型 (prior model) 将其进一步转换成一个图像嵌入 (image embedding)。这一步转换的主要目的是保证输出图像的多样性。最后,同样地,生成小图之后,通过超分辨率模型将其转换成 1024*1024 的大图。
NUWA
图 10
我们的女娲模型实际上是一年前的工作,最近才被 ECCV 2022 正式录用。所以当初在做该模型的时候,市面上只有 DALL·E 一个工作,因此我们主要和其进行对比。
如图 10 所示,我们的主要动机是为了解决视频生成的问题,所以我们引入了一些稀疏的注意力机制。因为视频是由多帧组成的,是一个变长的机制,如果想要输出的视频序列很长的时候,计算复杂度就会变得非常高,无论是在训练还是在推断(inference). 所以我们希望通过稀疏注意力机制解决这种计算复杂度高的问题。
图 11
如图 11 所示,我们的女娲第一代模型做了 8 种不同类型的任务。主要的创新点是,最近的一些其他模型在分辨率上主要针对 256256 转换成 10241024 进行设计,不支持视频,但是我们的女娲模型可以同时支持图片和视频的生成。
最近,我们还研发了女娲-infinity 模型,这个工作同样是生成高清的图片,并且可以额外生成对应的视频。最主要的特色是,这个工作支持变长的生成。 该工作也是基于自回归进行的,但是我们引入了一个记忆的机制,以及动态的机制,使得我们能够在不影响计算复杂度的前提下,仍然支持超大规模的图像和视频的生成。之后 MSRA 会对其进行统一的宣传,这里不再介绍更多的细节。
未来方向
图12
未来我们会在以下3 个方向继续探索:
1. 从计算效率出发,建立高效的视觉-语言预训练模型以及视觉合成模型;
2. 从语言模型增强出发,使用视觉知识增强语言模型,或者使用语言知识增强视觉模型;
3. 从落地角度出发,使用视觉合成预训练模型开发下一代应用生态,例如用于设计的 AI,视觉广告,AR/VR, 卡通/电影生成,游戏等等。
其实我们在和微软的产品组进行讨论的时候也经常遇到一个轻量化的问题,虽然不一定是希望模型变得更小,但是我们希望能够让模型变得更快,其实这和轻量化也是密切相关的。因此,未来我们会在小模型,在稀疏机制、并行生成算法等方向上做出进一步的改进。