AliceMind大规模预训练实践及AIGC在ModelScope中的应用

人工智能
随着 ChatGPT 的火出圈,AIGC 开始受到广泛的关注。数据量,硬件成本,预训练范式等多方因素的发展造就了 ChatGPT 亮眼的成果。本次由阿里达摩院为大家分享文本及多模态生成在过去几年的成果。

一、AIGC 背景介绍

图片

AIGC 的成功开始于 OpenAI 提出的 GPT-3。之前没有预训练的生成模型效果和现在有差距,即使用监督学习 + fine-tune 的方式可以在某些 task 得到不错的效果,但是它的泛化能力比较差,因此当时的 AIGC 并没有被大家关注。所以当 OpenAI 提出的 GPT-3 可以根据 Prompt 提示词或者 instruction 指令去生成代码以及各种各样的文本时,大家才开始更多去关注和探索 AIGC 方向。另外,除了文本生成以外,DALL-E 和 DALL-E2 在图片生成方面的进展也是推动 AIGC 发展的重要因素。

图片

二、AliceMind 纯文本生成大小模型协同

1、AI 文本生成的三个阶段

本次分享主要关注文本生成,下面回顾一下文本生成发展的过程。

​最早的生成是 Encoder-Decoder 架构,没有预训练,只是做一些任务上的 fine-tune 工作,当时效果比较差。随着 GPT-1 预训练的提出才开始有不错的效果,之后 BART 和 T5 这两个模型提出之后发现,用一个生成模型可以做很多 task,而且这些 task 其实效果都可以比较好。比如 T5 可以把各种不同的 NLP 任务都转化成生成的方式。AliceMind 在 20 年的时候自研了一个 PALM(Pre-training an Autoencoding & Autoregressive Language Model)的生成预训练模型,后面会介绍。

第二阶段的发展从大规模 Language Model 开始。大家发现 GPT-3 有很强的 few-shot 生成和泛化能力,所以也开始广泛地去做一些大规模的预训练。包括我们自研中文 PLUG 模型、M6、以及 Google 提出的 PaLM(Pathways Language Model,注意如果忽略大小写和上面的模型缩写都是 PALM,这俩模型全称不一样,不是一回事),这几个都是大规模预训练模型。相比于 GPT-3,后面的模型更偏重于 Prompt,instruct 的生成。我们的 PLUG 也是基于 Prompt,区别在于它是 Encoder-Ddecoder 架构,这个架构和 Decoder-only 不一样的地方在于,它会更偏理解类的一些生成任务。Google 的PaLM,走的是推理的路线,更能体现模型的智能。

第三阶段想要解决的问题是,无监督的大规模预训练模型在指令方面生成效果比较差。因为它是通过无监督训练 Language Model 任务去训练得到的,所以更多偏向续写的模型。当用户有一些指令输入进来,让模型去做什么事,模型会根据用户输入的最后一个词做续写,而不是按照指令去回复问题或者回复指令。所以 OpenAI 在 2022 年一月份的时候提出了 Instruct GPT。

Instruct GPT 通过人工标注的指令和 Label 数据训练,使得模型可以按照指令去生成这个数据,比如我要模型帮我用某种语言写一个算法。论文中写到用了 13K Prompt,在无监督训练得到的 GPT-3 基础上去做 Supervise 的 fine-tune。这样模型获得了对指令的理解能力。同时它因为经过了大量无监督训练,指令还可以泛化到更多相似的指令。这就是现在 ChatGPT 能在很多场景上都有不错效果的原因。之后的进一步升级是利用人工标注数据的答案质量高低,再用 Reinforcement Learning 去学习排序,这样可以提升模型生成的句子。​

2、AliceMind 文本生成模型的发展

​接下来主要介绍 AliceMind 在文本生成大模型上的一些探索。AliceMind 整体是个预训练模型体系,它包含了很多预训练模型,今天主要介绍其中的三个。

第一个是生成式预训练模型 PALM,第二个是我们自研的超大规模中文预训练的 PLUG,以及我们基于 GPT-3 架构在中文大量无监督数据上去训练的一个中文 GPT-3。以上是纯文本的大模型,还有一个是在图像多模态上的大模型 mPLUG,它做的是图文场景、多模态场景的文本生成。​

图片

首先介绍纯文本的这几个模型。对比一下前面介绍过的大小模型,它们各自适用于文本生成哪些场景。

​小模型更偏向资源有限,同时又有一些数据集,而且要求精度和 RT 比较高的一些下游场景。这也可以用预训练生成小模型,比如 GPT-1,BART 以及 T5,还有我们的 PALM 模型。这些都是参数规模比较小一些的模型,比如这几个模型的 base、large 规模分别为 1 亿、3 亿参数。

大模型主要是适用于多生成任务场景。比如我有很多生成任务,但同时我又没有数据,或者只有很少量数据的情况下,我可以用大模型的一些 few-shot 的泛化能力去实现很多能力。比如现在大模型其实有很多通用能力,比如小说续写、诗词生成,对联生成,还有 QA 问答这些。相比于小模型 fine-tune 之后的效果肯定会差一些,但是可以兼容更多场景。​

图片

这里看一下文本生成任务里面几种重要的形式。

图片


AliceMind 走了一条先做小模型,取得成果再迁移到大模型,最后再从文本迁移到多模态这样的道路。下面先从 20 年提出的小模型 PALM 讲起。

(1)PALM

当时的生成预训练模型,在预训练任务上都是更偏生成类的,比如 GPT 是 Language Model,把所有的文本去预测下一个词。BART是把输入端去做一些 mask,再 decoder 去做一些还原。

我们认为有一类生成类任务,比如文本摘要,有输入序列长,输出序列短的特点,这种场景很依赖 encoder 的理解能力。motivation 是看到 EMNLP 上有一篇 paper ,把 BERT encoder 直接拿过来,再加一个随机 decoder,fine-tune 训练摘要任务,都得可以得到很好的效果,这说明了 encoder 的重要性。所以我们在做 PALM 的时候结合了自编码和自回归的预训练。

① 自回归类似于 Language Model 这种去做生成,只不过我们这里会把一个 document 随机从中间切开,切成两部分,一部分输入到 encoder 里面,让 decoder 去预测后半部分。

② 自编码预训练就是在 encoder 侧加一个任务,让模型去提升模型的理解能力。encoder 任务我们采用的是 maskLM,类似于 BERT 的,经过验证有效的方式去做 mask,直接在 encoder 去做预测。

联合自编码自回归的预训练它既有 encoder 的理解能力,同时 decoder 也有很好的生成能力。

图片

下面来看实验的结果。从右侧的表可以看出,把自编码和自回归任务单独去掉之后,模型的效果都会下降一个点。另外还对比了几个生成预训练模型在大部分数据集上都有提升。

图片

​PALM 2.0 在 1.0 版本上主要是针对中文场景的升级,我们发现通过多阶段多任务渐进式预训练可以进一步提升模型效果。采用课程学习(curriculum learning)的思想,从易到难的学习思路。因为之前的词编码这种词级别的 mask,对于生成有点太简单了。所以我们这里采用了一个 text infilling,同时也对句子做一些 Shuffle。类似于 BART 的这种方式,只不过它会 mask 更多的词,同时也会把句子打断,这样会使模型生成起来难度更高。相当于从最简单的这种 maskLM 任务到中间第二阶段 text infilling任务。第三阶段是延续 PALM 1.0 的自回归任务。

我们对比了模型在预训练过程中的这几个任务的 Accuracy,从 Accuracy 指标的结果可以看出,这几个任务确实是从易到难的。第一个任务,我们训练过程中 Accuracy 可以达到 90% 多。第二阶段 text infilling & Shuffle 任务,可以达到 80% 的结果。第三阶段模型最多能够达到 40% 以上。毕竟是一个开放性的生成任务,即使人去写也是比较难的。​

图片

下面看一下多阶段渐进式预训练的实验结果。开始的词级别的 mask 作为 Baseline,在此之上加入 text Infilling 对片段 mask 之后,可以看到比较显著的提升。第三阶段再加入自回归生成之后,模型除了在 ADGEN 数据以外,都有进一步的提升。ADGEN 数据集效果下降是一个比较有趣的现象,原因可能是因为预训练的任务,如果和下游任务贴合,就会得到不错的效果。这时候如果进一步进行三阶段训练,效果反而会下降。

图片

PALM 2.0 在几个中文数据集上面的实验效果,base/large 均高于其他的 SOTA 模型。

图片

PALM 2.0 模型以及预训练的 backbone 都已经上传到 ModelScope 社区中,可以获取到 modelcard 以及 checkpoint。

图片

下面介绍下游和训练场景的应用。下游场景以前面介绍的摘要任务为例,只需要写几行代码调用 Pipeline 即可直接做摘要任务的预测。

图片

训练场景中,用户只需构造自己的数据集,配置超参就可以做训练了,也可以更换其中的模型和 backbone。另外训练过程中会对常用的评价指标进行自动评估,最后保存最好的 checkpoint 模型。之后调用 Pipeline 即可对训练好的模型做 inference。如果没有 GPU 机器,也可以用我们提供的一些免费时长,使用在线 notebook 体验。

(2)中文 GPT-3

图片

上面讲的主要是针对小模型,对预训练的 backbone 做 fine-tune,下面讲两个大模型,中文 GPT 和我们自研的 PLUG。中文 GPT 延续了英文 GPT Decoder-only 的架构,数据方面用的更多的是中文的无监督语料。因为没有 Instruct GPT 那么多的标注数据,所以模型的泛化能力差一些。在推理上我们基于 allSpark 做了一些优化,13B 模型生成128 个 tokens 只需要 1 秒。考虑到不同开发者的硬件条件不同,我们目前开放了 6 种不同大小的模型,大家可以根据自己的机器条件选择。

图片

我们也提供了在线体验版本供大家测试。诗词生成场景,模型可以预测诗词的下半句。小说续写场景,模型可以根据小说的前半部分续写。代码生成场景,可以根据用户要求的功能以及编程语言生成相应的代码。

图片

下面展示一个 GPT-3 的训练体验样例。原本的模型不支持诗词生成(生成的结果并不是一句五个字),对模型使用 Pipeline 重新训练之后就可以生成诗词了。

(3)PLUG​

图片

PLUG 中文大模型延续的是 PALM 的思路,结合 NLU 和 NLG 的任务,得到一个理解和生成同时做的模型。NLU 任务是我们自研的 StructBERT 模型,在 BERT的基础上引入三分类以及对词级别打乱。NLG 是 PALM 的自编码自回归结合。训练分为两个阶段,第一阶段是 StructBERT 的思路,把模型大小提升。第二阶段延续 PALM 的思路,用 encoder 做初始化,加上 decoder 之后做生成的训练。这样可以得到一个 Encoder-Decoder 统一理解生成模型。做理解相关任务,比如分类/预测时,只需要把 encoder 部分拿出来,沿用 BERT 的方法。做生成相关任务时,再使用全部的 Encoder-Decoder 架构。这里也做了一些推理加速的工作,和中文 GPT 是相同的技术,获得了 10x 加速的效果。

图片

PLUG 模型在 GLUE 榜单上测试,理解和生成任务都取得了很好的效果。

图片

270 亿参数的 PLUG 模型已经在 ModelScope 上开放,大家可以按照流程申请获取下载链接,然后使用 Pipeline 做部署推理。

图片

三、多模态统一生成预训练模型 mPLUG

下面介绍多模态场景的工作,主要是针对输入图+文,输出文字的情况。

图片

​多模态相关主要的任务有两种。一个是 VQA,输入图片和针对图片的问题,模型预测答案。另一个是 COCO Caption,输入图片,模型预测图片的描述。

我们提出了多模态统一生成的预训练模型 mPLUG,主要解决的是多模态融合时,视觉特征序列过长导致的低效性和信息淹没问题。Vit 结构的问题是,在切 patch 的过程中,如果切的比较小且图片分辨率高,切下来序列就会很长,序列长会带来训练低效的问题。另外在和文本模态融合的过程中,如果图片数据过长,会淹没一部分文本的信息。​

图片

mPLUG 结构的底层还是先分别对文本和图片做编码,之后用对比学习把两个维度的特征拉到同一空间,再传入我们提出的 skip-connection 网络。之前的 co-attention 或者图文拼接的方式会存在信息淹没问题,我们的核心点在于只做非对称的 attention,即只将视觉特征 cross 到文本侧。因为训练速度慢主要在视觉,这样可以极大提升模型训练速度。但是如果只采用这种方式,因为文本序列比较短,会带来视觉信息的丢失。所以我们在 skip-connection 网络里面,先通过一个多层的非对称的 co-attention 网络,之后把视觉信息拼接进来,然后再过一层的 connected attention。这样既可以保证视觉信息不丢失,同时防止文本信息被视觉信息淹没。

以上就是图片和文本信息融合的 encoder,之后再加上 decoder 做生成的预训练。这就是我们整体的架构了。这种架构的优势在,一方面通过这种模块化多流的 Transformer 结构,可以统一理解和生成。同时它又可以灵活地拆拔不同模块进行微调。比如做图文检索任务,可以不要 decoder,只把 vision 和 text encoder 拆出来做向量检索,也可以用 ITM 图文匹配 Score。如果是 caption 任务,则不需要 text encoder,只需要 vision encoder 直接 cross 到 decoder 做图片描述的生成。如果做开放域的视觉问答,则全部的模块都会用到。

图片

​在 VQA 任务中,只用了 1400 万数据就超过了很多用更多数据的模型。在 caption 任务中,我们通过模型的 fine-tune 和加 theta 的优化可以达到很好的效果。图文检索中我们用向量和 ITM 的两个 Score 得到了很好的效果。

在训练时间方面,skip-connection 相比于之前的几种方式会减少一些。非对称 attention 节省的时间更多,但是效果差一些。效果差的原因是,如果只是视觉信息 cross 到文本,文本信息序列太短,不足以承载整个视觉和文本的表示。​

图片

展示几个 VQA 在开放域上的样例。

图片

mPLUG 模型同样放在 ModelScope上。

图片

图片

图片

同样也有快速体验和调用,以及针对用户个性化场景的训练优化。

四、总结

图片


图片

五、问答环节

Q1:中文 GPT-3 代码生成是怎么做的,用的什么数据?

A1:第一阶段预训练数据的 common crawl 中包含一些代码数据。第二阶段还专门加了一些代码数据,另外做了一些 Prompt 整理,优化和标注。

Q2:PLUG 2 万亿是 Dense 的吗?

A2:不是。开始想尝试 Dense,但是训练难度大,所以其实是 MOE 的模型。我们也做一些测试,它在性能上等价于百亿千亿这种级别。

Q3:中文 GPT-3 开源了吗?

A3:开源在 ModelScope 社区了。

Q4:海量数据做预训练,如何加速?

A4:和 NVIDIA 做了一些合作,使用 Megatron 框架做了一些算子,并行上的优化。

Q5:训练用了多少资源?

A5:base/large 级别的模型,用了 8 卡 A100 的机器训练了 4-5 天完成的。1.3B/2.7B,用 32 卡的 A100 训练一两周的时间。更大的模型,比如 13B/30B 要上百卡级别,接近一个月时间训练。

Q6:一个是 GPT-3,用于理解类下游任务效果不好?

A6:Decoder-only 结构,不是双向理解。构建 Prompt 的方式去生成,不如用 encoder 的方式效果好。

Q7:中文 GPT 和 ChatGPT 的区别?

A7:中文 GPT 的架构和 GPT3,ChatGPT 差不多。差别主要在训练数据上,ChatGPT 使用了有 Label 的 instruction 数据集,效果确实好一些。

今天的分享就到这里,谢谢大家。

责任编辑:姜华 来源: DataFunTalk
相关推荐

2023-05-26 08:39:44

深度学习Alluxio

2021-11-15 10:00:22

模型人工智能NLP

2023-04-04 07:32:35

TorchRec模型训练

2018-10-31 14:31:56

UCloud虚拟网络灰度发布

2020-06-10 10:00:53

Serverless数据处理函数

2020-11-18 10:29:07

模型人工智能开源

2017-01-11 15:54:53

SDN网络数据中心中国移动

2023-06-12 07:50:45

2021-04-22 13:38:21

前端开发技术

2021-10-18 11:54:46

2017-06-27 15:35:02

机器学习Spark微博应用

2024-04-26 09:38:36

2020-10-19 19:37:18

区块链李鸣数字

2023-07-10 07:42:38

2023-06-28 08:23:41

搜索语义模型

2024-05-27 07:21:43

2013-03-22 14:44:52

大规模分布式系统飞天开放平台

2023-11-27 13:51:00

模型训练

2024-01-30 07:56:57

2021-12-02 13:43:42

达摩院AliceMind人工智能
点赞
收藏

51CTO技术栈公众号