自2020年 OpenAI 发布了包含1750亿个参数的生成式大规模预训练语言模型 GPT-3(Gen- erative Pre-trained Transformer 3)[1]以来,包括Google、Meta、百度、智源研究院等在内的公司和研究机构纷纷发布以 PaLM[2]、LaMDA[4]、T0[5]等为代表的不同的大规模语言模型(Large Language Model ,LLM ),也称大模型。
大模型在文本生成、少样本学习、零样本学习、推理任务等方面取得了非常大的进展。下表给出了截至2023年1月典型的大规模语言模型的基本情况。可以看到,从2022年开始大模型呈现爆发式的增长,各大公司和研究机构都在发布各种不同类型的大模型。图1给出了大模型的发布时间线,不同颜色的框表示不同的模型种类。
表1 典型的大规模语言模型的基本情况
图1 大模型的发布时间线[6]
ChatGPT(Chat Generative Pre-trained Transformer)自2022年11月发布起就引起了极大的关注,5天内注册用户超100万人,在系统推出仅两个月后,月活跃用户估计已达1 亿人,并与Bing深度搜索结合构建了对话式搜索新范式。ChatGPT 允许用户使用自然语言与系统交互,便可实现包括问答、分类、摘要、翻译、聊天等从理解到生成的各种任务。在很多自然语言理解的开放领域识别结果上都达到了非常好的效果,甚至在一些任务上超过了针对特定任务设计并且使用有监督数据进行训练的模型。ChatGPT的生成能力也非常优秀,针对用户提出的各种各样的问题,在大多数情况下都可以生成语言通畅、有一定逻辑并且多样化的长文本。
ChatGPT 的整个发展和技术演进过程如图2所示。图中黑体字是论文相关介绍中的名称,蓝色字是 OpenAI 的API 中的模型名称。我们可以对不同的模型有不同的侧重,与 ChatGPT 同时期推出的 text-davinci-003 版本主要包含三个阶段:第一个阶段是基础大模型训练阶段,该阶段主要完成长距离语言模型的预训练;第二个阶段是指令微调(Instruct Tuning)和代码生成训练阶段,通过使用给定的指令进行微调的方式使得模型具备完成各类任务的能力,通过代码预训练使得模型具备代码生成的能力;第三个阶段是加入更多的人工提示词,利用有监督微调并结合基于强化学习的方式,使得模型输出更贴合人类需求。
图2 ChatGPT 的整个发展和技术演进过程[7]
本节中,我们以 ChatGPT 为例,介绍大模型训练的三个基本阶段:基础大模型训练、指令微调和人类反馈。需要特别说明的是,在本书写作阶段,包括 ChatGPT 在内的绝大部分大模型的技术细节还没有完全公开,一些已经公开的研究内容和方法也仍然需要更多的时间进行验证,阅读该部分内容需要大家有独立思考和批判的精神,并结合当前的研究进行理解。
基础大模型训练
文献[1]中介绍了GPT-3模型的训练过程,包括模型架构、训练数据组成、训练过程以及评测方法。由于GPT-3并没有开放源代码,根据论文直接重现整个训练过程并不容易,因此文献[8]中介绍了根据GPT-3的描述复现的过程,并构造了开源系统OPT(Open Pre-trained Transformer Language Models)。
在模型架构方面,不论是GPT-3还是OPT所采用的模型结构都与我们在6.4.2节中介绍的 GPT-2 模型一样,采用由多层 Transformer 组成的单向语言模型,采用自回归方式从左到右对文本序列建模。但是针对不同的参数规模要求,其所使用的层数、自注意力头数、嵌入表示维度大小等具体参数各不相同。OPT给出了9种不同参数规模模型的参数细节,如表2所示。采用AdamW优化器进行优化,其参数(β1,β2)被设置为(0.9,0.95)。其他参数细节可以参考文献[8]。
表2 OPT 不同参数规模模型的参数细节[8]
在预训练语料库方面,根据文献[1]中的介绍,GPT-3的训练语料主要包括经过过滤的Common Crawl[9]、WebText 2、Books 1、Books 2 以及英文Wikipedia 等数据集中的数据。其中Common Crawl的原始数据有45TB,过滤后仅保留570GB的数据。通过子词切分方法对上述语料进行切分,大约包含5000亿个子词。为了保证模型使用更多高质量的数据进行训练,在GPT-3 训练时,根据语料来源的不同,设置不同的采样权重。在完成3000亿个子词的训练时,英文Wikipedia的语料平均训练轮数为3.4轮,而Common Crawl和Books 2仅有0.44轮和0.43轮。由于Common Crawl 数据集的过滤过程烦琐、复杂,OPT 采用了混合RoBERTa[10]、Pile[11]和PushShift.io Redit[12]的数据的方法。由于这些数据集中包含的绝大部分数据都是英文的,因此OPT 也从 Common Crawl 数据集中抽取了部分非英文数据加入训练语料中。
由于模型的参数量和所使用的数据量都非常大,普通的服务器单机无法完成训练,因此通常采用分布式架构。GPT-3和OPT 中没有对这个部分给出详细的描述。文献[1]中仅介绍了 GPT- 3训练过程全部使用 NVIDIA V100 GPU,文献[8]中介绍了 OPT 使用 992 块 NVIDIA A100 80GB GPU,采用全分片数据并行(Fully Shared Data Parallelism)[13]和 Megatron-LM 张量并行(Tensor Parallelism)[14],整体训练时间将近两个月。BLOOM[15]则公开了更多的硬件和所采用的系统架构方面的细节。该模型的训练一共用了三个半月,使用48个计算节点。每个节点包含8块NVIDIA A100 80GB GPU(总计384块GPU),并且使用4 NVLink 实现节点内部 GPU 之间的通信。节点之间通过采用4块 Omni-Path 100Gb/s网卡构建的增强八维超立方体全局拓扑网络实现通信。
BLOOM 使用 Megatron-DeepSpeed[16] 框架进行训练,其主要包含两个部分:Megatron-LM,提供张量并行能力和数据加载原语;DeepSpeed[17],提供ZeRO优化器、模型流水线和常规的分布式训练组件。通过这种方式可以实现数据、张量和流水线三维并行,如图3所示。数据并行将模型构建为多个副本,每个副本被放置在不同的设备上,并分别针对一部分数据并行进行训练,在每个训练步结束时同步副本间数据。张量并行将模型的单个层划分到不同的设备上,这样可以避免将所有的激活张量或梯度张量都放置在一块GPU上。这种方法也称为水平并行或层内模型并行。流水线并行(Pipeline Parallelism)将模型的不同层放置在多块GPU上,每块GPU仅包含部分层。这种方法也称为垂直并行。ZeRO(Zero Redundancy Optimizer)优化器[18]允许不同的进程只保存一小部分数据(训练步骤所需的参数、梯度和优化器状态)。通过上述4个步骤可以实现数百块GPU的高效并行计算。
图3 BLOOM 并行结构图[14]
基础大模型构建了长文本的建模能力,使模型具有语言生成能力,根据输入的提示词(Prompt),模型可以生成文本补全句子。有一部分研究人员认为,在语言模型建模过程中也隐含了构建包括事实性知识(Factual Knowledge)和常识知识(Commonsense)在内的世界知识(World Knowledge)。
指令微调
以 BERT 为代表的预训练语言模型需要根据任务数据进行微调(Fine-tuning),这种范式可以被应用于参数量在几百万到几亿规模的预训练语言模型中。但是针对参数量达到数十亿甚至数百亿规模的大模型,对每个任务都进行微调,计算开销和时间成本几乎都是不可接受的。因此,研究人员提出了指令微调(Instruction Finetuning)[3]方案,将大量各类任务统一为生成式自然语言理解框架,并构建训练语料进行微调。
例如,对于情感倾向分析任务,可以通过如下指令将贬义的和褒义的分类问题转换成生成式自然语言理解框架:
利用有标注数据集,再结合上述指令模板,就可以生成大量用于微调的训练数据。利用这些训练数据,就可以在一个大模型中同时训练大量不同的任务。当前的研究工作表明,这种训练方法可以使模型具有很好的任务泛化能力[19],很多没有出现在指令微调训练语料中的任务也可以很好地完成,在零样本和少样本的情况下获得非常好的任务性能。
FLAN-T5[3]混合应用Muffin[19]、T0-SF[5]、NIV2[20]以及思维链(Chain-of-thought,CoT)混合微调等任务,使用473个数据集,针对146种任务类型,构造了1836个任务。数据集包括SQuAD、MNLI、CoNLL2003等。任务类型包括阅读理解、问题生成、常识推理、对话上下文生成、完型填空、命名实体识别、文本分类等。任务是指<数据集,任务类型>的组合,比如SQuAD既可以用来构造阅读理解任务,也可以用来构造问题生成任务。Muffin、T0-SF、NIV2是之前类似研究中所构造的任务,在FLAN-T5中直接使用。CoT混合微调任务则与之不同,它通过使用之前的任务,但是在任务的指令和训练目标中添加思维链来构造新的任务,试图用于提升模型在未知任务上的推理能力。FLAN-T5构建了9个数据集用于思维链混合微调任务,包括数学推理、多跳推理、自然语言推断等。图4给出了在指令和训练目标中添加思维链的示例。
图4 在指令和训练目标中添加思维链的示例[3]
通过指令微调,大模型学习到了如何响应人类指令,并且可以根据指令直接生成合理的答案。基础大模型GPT-3在处理任务上通常仅能生成一些句子,需要后续模块根据句子内容来提取答案。由于在指令微调阶段训练了非常多的任务,大模型的任务处理能力可以被泛化到之前没有见过的任务上,这使得模型初步具备了回答人们提出的任何问题的可能。这种能力对于大模型来说至关重要,使其可以在开放领域有很好的表现。思维链以及代码生成的引入,又在一定程度上提升了大模型的推理能力。指令微调使得大模型在处理任务的能力上有了质的飞跃。
人类反馈
经过指令微调后的模型,虽然在开放领域的任务处理能力上表现优异,但是模型的输出结果通常是简单答案,这与人类的回答相差很大。因此需要进一步优化模型,使其可以生成更加贴近人类习惯的文本内容。但是,由于自然语言处理语料库中所包含的答案通常都是简短的标签,基本没有类似于人类回答的有监督数据。如果全部使用人工,对自然语言处理任务的数据集进行改造,构建类似于人工回答的训练语料,那么其规模将过于庞大,时间成本和人工成本都过于高昂。因此,OpenAI提出了使用基于人类反馈的强化学习(Reinforcement Learning from Human Feedback,RLHF)方法,从而大幅度降低了数据集构建成本,也取得了非常好的效果。
文献[21]中使用的RLHF方法,与风格续写[22]和文本摘要[23]中所使用的方法非常类似。它仍然需要收集一定数量的用户输入以及期望的系统输出。OpenAI团队针对初始数据的收集,制定了严格的标准和规范,雇佣了一个40人的团队来完成该项工作[20]。再结合通过线上API所收集到的高质量数据,一共构建了约11.28万个标注集合。基于上述标注数据和初始的大模型,整个RLHF方法包括三个基本步骤,如图5所示。
图5 整个RLHF 方法的基本步骤[21]
(1)收集初始数据,初步训练大模型。从指令集合中采样部分数据,对初始的大模型进行有监督微调。
(2)收集打分数据并训练奖励(Reward)函数。使用无标注的指令数据,收集模型的多个输出结果,评测人员根据模型的输出结果进行对比评测,确定模型输出结果的排序,并利用评分训练奖励函数,使其未来可以对模型输出的优劣进行判断。
(3)使用更多的指令数据,利用奖励函数输出得分。利用强化学习机制,根据奖励得分进一步优化大模型。
本文参考文献(滑动浏览)
向上滑动阅览
参考文献
[1] BROWN T, MANN B, RYDER N, et al. Language models are few-shot learners[J]. Advances in neural information processing systems, 2020, 33: 1877-1901.
[2] CHOWDHERY A, NARANG S, DEVLIN J, et al. PALM: scaling language modeling with pathways[J]. arXiv preprint arXiv:2204.02311, 2022.
[3] CHUNG H W, HOU L, LONGPRE S, et al. Scaling instruction-finetuned language models[J]. arXiv preprint arXiv:2210.11416, 2022.
[4] THOPPILAN R, DE FREITAS D, HALL J, et al. LaMDA: language models for dialog applications[J]. arXiv preprint arXiv:2201.08239, 2022.
[5] SANH V, WEBSON A, RAFFEL C, et al. Multitask prompted training enables zero-shot task generalization[J]. arXiv preprint arXiv:2110.08207, 2021.
[6] AMATRIAIN X. Transformer models: an introduction and catalog[J]. arXiv preprint arXiv:2302.07730, 2023.
[7] FU Y, PENG H, KHOT T. How does gpt obtain its ability? tracing emergent abilities of language models to their sources[J/OL]. Yao Fu’s Notion, 2022. https://yaofu.notion.site/How-does-GPT-Obtai n-its-Ability-Tracing-Emergent-Abilities-of-Language-Models-to-their-Sources-b9a57ac0fcf74f30a1a b9e3e36fa1dc1.
[8] ZHANG S, ROLLER S, GOYAL N, et al. OPT: open pre-trained transformer language models[J]. arXiv preprint arXiv:2205.01068, 2022.
[9] RAFFEL C, SHAZEER N, ROBERTS A, et al. Exploring the limits of transfer learning with a unified text-to-text transformer[J]. The Journal of Machine Learning Research, 2020, 21(1): 5485-5551.
[10] LIU Y, OTT M, GOYAL N, et al. RoBERTa: a robustly optimized bert pretraining approach[J]. arXiv preprint arXiv:1907.11692, 2019.
[11] GAO L, BIDERMAN S, BLACK S, et al. The pile: an 800gb dataset of diverse text for language modeling[J]. arXiv preprint arXiv:2101.00027, 2020.
[12] BAUMGARTNER J, ZANNETTOU S, KEEGAN B, et al. The pushshift reddit dataset[C]// Proceedings of the international AAAI conference on web and social media: volume 14. [S.l.: s.n.], 2020: 830-839.
[13] ARTETXE M, BHOSALE S, GOYAL N, et al. Efficient large scale language modeling with mixtures of experts[J]. arXiv preprint arXiv:2112.10684, 2021.
[14] SHOEYBI M, PATWARY M, PURI R, et al. Megatron-LM: training multi-billion parameter language models using model parallelism[J]. arXiv preprint arXiv:1909.08053, 2019.
[15] SCAO T L, FAN A, AKIKI C, et al. BLOOM: a 176b-parameter open-access multilingual language model[J]. arXiv preprint arXiv:2211.05100, 2022.
[16] SMITH S, PATWARY M, NORICK B, et al. Using deepspeed and megatron to train megatron-turing nlg 530b, a large-scale generative language model[J]. arXiv preprint arXiv:2201.11990, 2022.
[17] RASLEY J, RAJBHANDARI S, RUWASE O, et al. DeepSpeed: system optimizations enable training deep learning models with over 100 billion parameters[C]//Proceedings of the 26th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. [S.l.: s.n.], 2020: 3505-3506.
[18] RAJBHANDARI S, RASLEY J, RUWASE O, et al. ZeRo: memory optimizations toward training trillion parameter models[C]//SC20: International Conference for High Performance Computing, Networking, Storage and Analysis. [S.l.]: IEEE, 2020: 1-16.
[19] WEI J, BOSMA M, ZHAO V, et al. Finetuned language models are zero-shot learners[C]// International Conference on Learning Representations. [S.l.: s.n.], 2022.
[20] WANG Y, MISHRA S, ALIPOORMOLABASHI P, et al. Benchmarking generalization via in-context instructions on 1,600+ language tasks[J]. arXiv preprint arXiv:2204.07705, 2022.
[21] OUYANG L, WU J, JIANG X, et al. Training language models to follow instructions with human feedback[J]. arXiv preprint arXiv:2203.02155, 2022.
[22] ZIEGLER D M, STIENNON N, WU J, et al. Fine-tuning language models from human preferences[J]. arXiv preprint arXiv:1909.08593, 2019.
[23] STIENNON N, OUYANG L, WU J, et al. Learning to summarize with human feedback[J]. Advances in Neural Information Processing Systems, 2020, 33: 3008-3021.
本文分享自 博文视点Broadview 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!