带你了解大语言模型的前世今生

本文分享自华为云社区《大语言模型的前世今生》,作者: 码上开花_Lancer 。

大规模语言模型(Large Language Models,LLM),也称大规模语言模型或大型语言模型,是一种由包含数百亿以上参数的深度神经网络构建的语言模型,使用自监督学习方法通过大量无标注文本进行训练。自2018 年以来,Google、OpenAI、Meta、百度、华为等公司和研究机构都相继发布了包括BERT,GPT 等在内多种模型,并在几乎所有自然语言处理任务中都表现出色。2019 年大模型呈现爆发式的增长,特别是2022 年11 月ChatGPT(Chat Generative Pre-trained Transformer)发布后,更是引起了全世界的广泛关注。用户可以使用自然语言与系统交互,从而实现包括问答、分类、摘要、翻译、聊天等从理解到生成的各种任务。大型语言模型展现出了强大的对世界知识掌握和对语言的理解。

一、大规模语言模型基本概念

语言是人类与其他动物最重要的区别,而人类的多种智能也与此密切相关。逻辑思维以语言的形式表达,大量的知识也以文字的形式记录和传播。如今,互联网上已经拥有数万亿以上的网页资源,其中大部分信息都是以自然语言描述。因此,如果人工智能算法想要获取知识,就必须懂得如何理解人类使用的不太精确、可能有歧义、混乱的语言。语言模型(Language Model,LM)目标就是建模自然语言的概率分布。词汇表V 上的语言模型,由函数P(w1w2...wm) 表示,可以形式化地构建为词序列w1w2...wm 的概率分布,表示词序列w1w2...wm 作为一个句子出现的可能性大小。由于联合概率P(w1w2...wm) 的参数量十分巨大,直接计算P(w1w2...wm) 非常困难。按照《现代汉语词典(第七版)》包含7 万单词,句子长度按照20 个词计算,模型参数量达到7.9792×1096的天文数字。中文的书面语中超过100 个单词的句子也并不罕见,如果要将所有可能都纳入考虑,模型的复杂度还会进一步急剧增加,无法进行存储和计算。为了减少P(w1w2...wm) 模型的参数空间,可以利用句子序列通常情况下从左至右的生成过程进行分解,使用链式法则得到:

由此,w1w2...wm 的生成过程可以看作单词逐个生成的过程。首先生成w1,之后根据w1 生成w2,再根据w1 和w2 生成w3,以此类推,根据前m− 1 个单词生成最后一个单词wm。例如:对于句子“把努力变成一种习惯”的概率计算,使用上述公式可以转化为:

通过上述过程将联合概率P(w1w2...wm) 转换为了多个条件概率的乘积。但是,仅通过上述过程模型的参数空间依然没有下降,P(wm|w1w2...wm.1) 的参数空间依然是天文数字。为了解决上述问题,可以进一步假设任意单词wi 出现的概率只与过去n − 1 个词相关,即:

满足上述条件的模型被称为n 元语法或n 元文法(n-gram) 模型。其中n-gram 表示由n 个连续单词构成的单元,也被称为n 元语法单元。尽管n 元语言模型能缓解句子概率为0 的问题,但语言是由人和时代创造的,具备无穷的可
能性,再庞大的训练语料也无法覆盖所有的n-gram,而训练语料中的零频率并不代表零概率。因此,需要使用平滑技术(Smoothing)来解决这一问题,对所有可能出现的字符串都分配一个非零的概率值,从而避免零概率问题。平滑是指为了产生更合理的概率,对最大似然估计进行调整的一类方法,也称为数据平滑(Data Smoothing)。平滑处理的基本思想是提高低概率,降低高概率,使整体的概率分布趋于均匀。这类方法通常称为统计语言模型(Statistical Language models,SLM)。n 语法模型整体上来看与训练语料规模和模型的阶数有较大的关系,不同的平滑算法在不同情况下的表现有较大的差距。平滑算法虽然较好的解决了零概率问题,但是基于稀疏表示的n 元语言模型仍然有三个较为明显的缺点:(1)无法建模长度超过n 的上下文;(2)依赖人工设计规则的平滑技术;(3)当n 增大时,数据的稀疏性随之增大,模型的参数量更是指数级增加,并且模型受到数据稀疏问题的影响,其参数难以被准确的学习。此外,n 语法中单词的离散表示也忽略了词之间的相似性。

因此,基于分布式表示和神经网络的语言模型逐渐成为了研究热点。Bengio 等人在2000 年提出了使用前馈神经网络对P(wi|wi−n+1...wi−1) 进行估计的语言模型。词的独热编码被映射为一个低维稠密的实数向量,称为词向量(Word Embedding)。此后,循环神经网络、卷积神经网络、端到端记忆网络等神经网络方法都成功应用于语言模型建模。相较于n 元语言模型,神经网络方法可以在一定程度上避免数据稀疏问题,有些模型还可以避免对历史长度的限制,从而更好的建模长距离依赖关系。这类方法通常称为神经语言模型(Neural Language Models,NLM)。深度神经网络需要采用有监督方法,使用标注数据进行训练,因此,语言模型的训练过程也不可避免需要构造训练语料。但是由于训练目标可以通过无标注文本直接获得,从而使得模型的训练仅需要大规模无标注文本即可语言模型也成为了典型的自监督学习(Self-supervised Learning)任务。互联网的发展,使得大规模文本非常容易获取,因此训练超大规模的基于神经网络的语言模型也成为了可能。受到计算机视觉领域采用ImageNet对模型进行一次预训练,使得模型可以通过海量图像充分学习如何提取特征,然后再根据任务目标进行模型精调的范式影响,自然语言处理领域基于预训练语言模型的方法也逐渐成为主流。以ELMo 为代表的动态词向量模型开启了语言模型预训练的大门,此后以GPT和BERT 为代表的基于Transformer 模型的大规模预训练语言模型的出现,使得自然语言处理全面进入了预训练微调范式新时代。将预训练模型应用于下游任务时,不需要了解太多的任务细节,不需要设计特定的神经网络结构,只需要“微调”预训练模型,即使用具体任务的标注数据在预训练语言模型上进行监督训练,就可以取得显著的性能提升。这类方法通常称为预训练语言模型(Pre-trained Language Models,PLM)。2020 年Open AI 发布了包含1750 亿参数的生成式大规模预训练语言模型GPT-3(GenerativePre-trained Transformer 3)。开启了大规模语言模型的时代。由于大规模语言模型的参数量巨大,如果在不同任务上都进行微调需要消耗大量的计算资源,因此预训练微调范式不再适用于大规模语言模型。但是研究人员发现,通过语境学习(Incontext Learning,ICL)等方法,直接使用大规模语言模型就可以在很多任务的少样本场景下取得了很好的效果。此后,研究人员们提出了面向大规模语言模型的提示词(Prompt)学习方法、模型即服务范式(Model as a Service,MaaS)、指令微调(Instruction Tuning)等方法,在不同任务上都取得了很好的效果。与此同时,Google、Meta、百度、华为等公司和研究机构都纷纷发布了包括PaLM、LaMDA、T0等为代表的不同大型语言模型。

2022 年底ChatGPT 的出现,将大规模语言模型的能力进行了充分的展现,也引发了大规模语言模型研究的热潮。Kaplan 等人在文献中提出了缩放法则(Scaling Laws),指出模型的性能依赖于模型的规模,包括:参数数量、数据集大小和计算量,模型的效果会随着三者的指数增加而线性提高。如图1.1所示,模型的损失(Loss)值随着模型规模的指数增大而线性降低。这意味着模型的能力是可以根据这三个变量估计的,提高模型参数量,扩大数据集规模都可以使得模型的性能可预测地提高。这为继续提升大模型的规模给出了定量分析依据。

图1.1 大规模语言模型的缩放法则(Scaling Laws)

二、大规模语言模型发展历程

大规模语言模型的发展历程虽然只有短短不到五年的时间,但是发展速度相当惊人,截止2023年6 月,国内外有超过百种大模型相继发布。中国人民大学赵鑫教授团队在文献按照时间线给出2019 年至2023 年5 月比较有影响力并且模型参数量超过100 亿的大规模语言模型,如图2.1 所示。大规模语言模型的发展可以粗略的分为如下三个阶段:基础模型、能力探索、突破发展。

基础模型阶段主要集中于2018 年至2021 年,2017 年Vaswani 等人提出了Transformer[ 架构,在机器翻译任务上取得了突破性进展。2018 年Google 和Open AI 分别提出了BERT[1] 和GPT-1 模型,开启了预训练语言模型时代。BERT-Base 版本参数量为1.1 亿,BERT-Large 的参数量为3.4 亿,GPT-1 的参数量1.17 亿。这在当时,相比其它深度神经网络的参数量已经是有数量级上提升。2019 年Open AI 又发布了GPT-2,其参数量达到了15 亿。此后,Google 也发布了参数规模为110 亿的T5 模型。2020 年Open AI 进一步将语言模型参数量扩展到1750 亿,发布了GPT-3。此后,国内也相继推出了一系列的大规模语言模型,包括清华大学ERNIE(THU)、百度ERNIE(Baidu)、华为盘古-α 等。这个阶段研究主要集中语言模型本身,包括仅编码器(Encoder Only)、编码器-解码器(Encoder-Decoder)、仅解码器(Decoder Only)等各种类型的模型结构都有相应的研究。模型大小与BERT 相类似的算法,通常采用预训练微调范式,针对不同下游任务进行微调。但是模型参数量在10 亿以上时,由于微调的计算量很高,这类模型的影响力在当时相较BERT 类模型有不小的差距。

图2.1 大规模语言模型发展时间线

能力探索阶段集中于2019 年至2022 年,由于大规模语言模型很难针对特定任务进行微调,研究人员们开始探索在不针对单一任务进行微调的情况下如何能够发挥大规模语言模型的能力。2019 年Radford 等人 就使用GPT-2 模型研究了大规模语言模型在零样本情况下的任务处理能力。在此基础上,Brown 等人在GPT-3模型上研究了通过语境学习(In-Context Learning)进行少样本学习的方法。将不同任务的少量有标注的实例拼接到待分析的样本之前输入语言模型,用语言模型根据实例理解任务并给出正确结果。在包括TriviaQA、WebQS、CoQA 等评测集合都展示出了非常强的能力,在有些任务中甚至超过了此前的有监督方法。上述方法不需要修改语言模型的参数,模型在处理不同任务时无需花费的大量计算资源进行模型微调。但是仅依赖基于语言模型本身,其性能在很多任务上仍然很难达到有监督学习效果,因此研究人员们提出了指令微调(Instruction Tuning)方案,将大量各类型任务,统一为生成式自然语言理解框架,并构造训练语料进行微调。

突破发展阶段以2022 年11 月ChatGPT 的发布为起点。ChatGPT 通过一个简单的对话框,利用一个大规模语言模型就可以实现问题回答、文稿撰写、代码生成、数学解题等过去自然语言处理系统需要大量小模型订制开发才能分别实现的能力。它在开放领域问答、各类自然语言生成式任务以及对话上文理解上所展现出来的能力远超大多数人的想象。2023 年3 月GPT-4 发布,相较于ChatGPT 又有了非常明显的进步,并具备了多模态理解能力。GPT-4 在多种基准考试测试上的得分高于88% 的应试者,包括美国律师资格考试(Uniform Bar Exam)、法学院入学考试(Law School Admission Test)、学术能力评估(Scholastic Assessment Test,SAT)等。它展现了近乎“通用人工智能(AGI)”的能力。各大公司和研究机构也相继发布了此类系统,包括Google 推出的Bard、百度的文心一言、科大讯飞的星火大模型、智谱ChatGLM、复旦大学MOSS 等。表1.1 给出了截止2023 年6 月典型开源和未开源大规模语言模型的基本情况。可以看到从2022 年开始大模型呈现爆发式的增长,各大公司和研究机构都在发布各种不同类型的大模型。

三、 大规模语言模型构建流程

根据OpenAI 联合创始人Andrej Karpathy 在微软Build 2023 大会上所公开的信息,OpenAI 所使用的大规模语言模型构建流程如图2.2所示。主要包含四个阶段:预训练、有监督微调、奖励建模、强化学习。这四个阶段都需要不同规模数据集合、不同类型的算法,产出不同类型的模型,所需要的资源也有非常大的差别。

图2.2 OpenAI 使用的大规模语言模型构建流程

预训练Pretraining)阶段需要利用海量的训练数据,包括互联网网页、维基百科、书籍、GitHub、论文、问答网站等,构建包含数千亿甚至数万亿单词的具有多样性的内容。利用由数千块高性能GPU 和高速网络组成超级计算机,花费数十天完成深度神经网络参数训练,构建基础语言模型(Base Model)。基础大模型构建了长文本的建模能力,使得模型具有语言生成能力,根据输入的提示词(Prompt),模型可以生成文本补全句子。也有部分研究人员认为,语言模型建模过程中也隐含的构建了包括事实性知识(Factual Knowledge)和常识知识(Commonsense)在内的世界知识(World Knowledge)。根据他们的文献介绍,GPT-3 完成一次训练的总计算量是3640PFlops,按照NVIDIA A100 80G 和平均利用率达到50% 计算,需要花费近一个月时间使用1000 块GPU 完成。

表1.1 典型开源大规模语言模型汇总

表1.2 典型闭源大规模语言模型汇总

有监督微调(Supervised Finetuning),也称为指令微调(Instruction Tuning),利用少量高质量数据集合,包含用户输入的提示词(Prompt)和对应的理想输出结果。用户输入包括问题、闲聊对话、任务指令等多种形式和任务。

例如:提示词(Prompt):复旦大学有几个校区?

理想输出:复旦大学现有4 个校区,分别是邯郸校区、新江湾校区、枫林校区和张江校区。其中邯郸校区是复旦大学的主校区,邯郸校区与新江湾校区都位于杨浦区,枫林校区位于徐汇区,张江校区位于浦东新区。

利用这些有监督数据,使用与预训练阶段相同的语言模型训练算法,在基础语言模型基础上再进行训练,从而得到有监督微调模型(SFT 模型)。经过训练的SFT 模型具备了初步的指令理解能力和上下文理解能力,能够完成开放领域问题、阅读理解、翻译、生成代码等能力,也具备了一定的对未知任务的泛化能力。由于有监督微调阶段的所需的训练语料数量较少,SFT 模型的训练过程并不需要消耗非常大量的计算。根据模型的大小和训练数据量,通常需要数十块GPU,花费数天时间完成训练。SFT 模型具备了初步的任务完成能力,可以开放给用户使用,很多类ChatGPT的模型都属于该类型,包括:Alpaca、Vicuna、MOSS、ChatGLM-6B 等。很多这类模型效果也非常好,甚至在一些评测中达到了ChatGPT 的90% 的效果。当前的一些研究表明有监督微调阶段数据选择对SFT 模型效果有非常大的影响,因此如何构造少量并且高质量的训练数据是本阶段有监督微调阶段的研究重点。

目标是构建一个文本质量对比模型,对于同一个提示词,SFT模型给出的多个不同输出结果的质量进行排序。奖励模型(RM 模型)可以通过二分类模型,对输入的两个结果之间的优劣进行判断。RM 模型与基础语言模型和SFT 模型不同,RM 模型本身并不能单独提供给用户使用。奖励模型的训练通常和SFT 模型一样,使用数十块GPU,通过几天时间完成训练。由于RM 模型的准确率对于强化学习阶段的效果有着至关重要的影响,因此对于该模型的训练通常需要大规模的训练数据。Andrej Karpathy 在报告中指出,该部分需要百万量级的对比数据标注,而且其中很多标注需要花费非常长的时间才能完成。图2.3给出了InstructGPT 系统中奖励模型训练样本标注示例。可以看到,示例中文本表达都较为流畅,标注其质量排序需要制定非常详细的规范,标注人员也需要非常认真的对标规范内容进行标注,需要消耗大量的人力,同时如何保持众包标注人员之间的一致性,也是奖励建模阶段需要解决的难点问题之一。此外奖励模型的泛化能力边界也在本阶段需要重点研究的另一个问题。如果RM 模型的目标是针对所有提示词系统所生成输出都能够高质量的进行判断,该问题所面临的难度在某种程度上与文本生成等价,因此如何限定RM 模型应用的泛化边界也是本阶段难点问题。

图2.3 InstructGPT 系统中奖励模型训练样本标注示例

强化学习Reinforcement Learning)阶段根据数十万用户给出的提示词,利用在前一阶段训练的RM 模型,给出SFT 模型对用户提示词补全结果的质量评估,并与语言模型建模目标综合得到更好的效果。该阶段所使用的提示词数量与有监督微调阶段类似,数量在十万量级,并且不需要人工提前给出该提示词所对应的理想回复。使用强化学习,在SFT 模型基础上调整参数,使得最终生成的文本可以获得更高的奖励(Reward)。该阶段所需要的计算量相较预训练阶段也少很多,通常也仅需要数十块GPU,经过数天时间的即可完成训练。文献[给出了强化学习和有监督微调的对比,在模型参数量相同的情况下,强化学习可以得到相较于有监督微调好得多的效果。关于为什么强化学习相比有监督微调可以得到更好结果的问题,截止到2023 年9 月也还没有完整和得到普遍共识的解释。此外,Andrej Karpathy 也指出强化学习也并不是没有问题的,它会使得基础模型的熵降低,从而减少了模型输出的多样性。在经过强化学习方法训练完成后的RL 模型,就是最终提供给用户使用具有理解用户指令和上下文的类ChatGPT 系统。由于强化学习方法稳定性不高,并且超参数众多,使得模型收敛难度大,再叠加RM 模型的准确率问题,使得在大规模语言模型如何能够有效应用强化学习非常困难。

大语言模型研究进展之快,让在自然语言处理领域开展了近三十年工作的我们也难以适从。其研究之火爆程度令人咋舌,自然语言处理领域重要国际会议EMNLP,2022年语言模型相关论文投稿占比只有不到5%。然而,2023 年语言模型相关投稿则超过了EMNLP 整体投稿的20%。如何能够兼顾大语言模型的基础理论,又能够在快速发展的各种研究中选择最具有代表性的工作介绍给大家,是写作中面临的最大挑战之一,受限于我们的认知水平和所从事的研究工作的局限,对其中一些任务和工作的细节理解可能存在不少错误,也恳请专家、读者批评指正!

点击关注,第一时间了解华为云新鲜技术~

OpenAI 面向所有用户免费开放 ChatGPT Voice 程序员篡改 ETC 余额,一年私吞 260 余万元 Spring Boot 3.2.0 正式发布 谷歌员工离职后抨击大老板,曾深度参与 Flutter 项目、制定 HTML 相关标准 微软 Copilot Web AI 将于12月1日正式上线,支持中文 微软开源 Terminal Chat Rust Web 框架 Rocket 发布 v0.5:支持异步、SSE、WebSockets 等 Redis 之父用纯 C 语言代码实现 Telegram Bot 框架 假如你是开源项目维护者,遇到这种回复能忍到哪步? PHP 8.3 GA
{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/4526289/blog/10278002