大规模语言模型:从理论到实践(1)
1、绪论
大规模语言模型(Large Language Models,LLM)是由包含数百亿以上参数的深度神经网络构建的语言模型,采用自监督学习方法通过大量无标注文本进行训练。自2018年以来,多个公司和研究机构相继发布了多种模型,如BERT和GPT,并在自然语言处理任务中取得了显著的成果。尤其是2022年11月发布的ChatGPT,引发了广泛关注,使得用户能够通过自然语言与系统交互,完成多种任务,包括问答、分类、摘要、翻译和聊天等。本文主要介绍大规模语言模型的基本概念、发展历程和构建流程。
1.1、大规模语言模型基本概念
直接计算整个句子的联合概率是不现实的,因为涉及到的参数非常庞大。使用链式法则可以将这个复杂的计算分解为几个较小的、易于估计的条件概率。 语言是人类与动物的重要区别,许多知识以自然语言的形式记录和传播。语言模型的目标是建模自然语言的概率分布。词汇表 上的语言模型使用链式法则可表示为:
这表示词序列的生成过程为单词逐个生成。例如,对于句子“把努力变成一种习惯”,其概率计算为:
通过上述过程将联合概率转换为多个条件概率的乘积。为减少模型的参数空间,可以假设任意单词 的出现概率只与过去 个词相关:
这种模型称为 元语法或 元文法(n-gram)模型。
Q:能举例说明一下直接计算句子得联合概率和使用链式法则计算的方式的区别吗?
A:
1. 词汇表和语料库
首先,我们需要一个词汇表(vocabulary)和一个训练好的语料库。语料库中的文本数据将用于统计各个词及其组合出现的频率。
2. 频率统计
在语料库中,统计每个词的出现频率以及每对或三词组合的出现频率。例如:
计算“我”的出现次数 C(我)
计算“我 爱”的出现次数 C(我 爱)
计算“我 爱 学习”的出现次数 C(我 爱 学习)
3. 计算联合概率
通过频率统计,我们可以使用最大似然估计(MLE)来估计联合概率:
P(我 爱 学习)=C(我 爱 学习)/C(所有句子)
其中,C(所有句子)是语料库中所有句子的总数。
4. 链式法则
由于直接计算联合概率可能非常稀疏,因此通常采用链式法则将其分解为条件概率:
P(我 爱 学习)=P(我)×P(爱∣我)×P(学习∣我 爱)
这样,我们可以分别估计每个词的概率和条件概率,通常通过相似的方法进行统计。
大规模语言模型(LLM)通过分析大量无标注文本来理解和生成自然语言。然而,由于语言的复杂性和多样性,传统的 元语言模型在处理稀疏数据时存在一些挑战。具体来说:
-
零概率问题:在训练语料中,某些词组可能未出现,这会导致模型计算联合概率时出现零值。因此,平滑技术被引入,以确保每个可能的字符串都有非零的概率。
-
平滑技术:通过调整概率分布,使得低概率的词组概率提高,而高概率的词组概率降低,从而使整体分布更加均匀。这有助于减少零概率现象,使模型更为鲁棒。
-
缺点:
-
元语言模型只能建模长度不超过 的上下文。
-
依赖人工设计的平滑规则。
-
随着 的增大,数据稀疏性和模型参数量急剧增加,导致学习困难。
-
为了解决这些问题,研究者们转向基于神经网络的语言模型(NLM)。Bengio等人在2000年提出了使用前馈神经网络来估计词的条件概率,这种方法使用词向量(Word Embedding)将词映射为低维稠密向量,能更好地捕捉词之间的相似性。随着深度学习的发展,循环神经网络(RNN)、卷积神经网络(CNN)等方法也被广泛应用于语言模型。这些神经网络模型能够处理长距离依赖关系,并在一定程度上减少数据稀疏问题。
神经语言模型的训练可以基于大规模无标注文本,这使得自监督学习成为一种主流方法。受计算机视觉领域预训练的启发,自然语言处理也逐渐采用预训练模型的方法。例如,动态词向量模型ELMo、生成式预训练模型GPT和BERT等,代表了基于Transformer的预训练语言模型的最新进展。这些模型在预训练阶段学习了丰富的语言知识,然后通过微调(fine-tuning)来适应特定任务。用户只需在预训练模型上进行监督训练,而无需设计新的网络结构,从而大幅提升了性能。
在2020年,OpenAI发布了包含1750亿参数的生成式大规模预训练语言模型GPT-3(Generative Pre-trained Transformer 3),这标志着大规模语言模型时代的到来。GPT-3的庞大参数量使得在不同任务上进行微调需要消耗巨大的计算资源,这一预训练微调范式变得不再适用。
新的学习方法
为了应对这一挑战,研究人员开始探索新的方法:
-
语境学习(In-context Learning, ICL):直接利用大规模语言模型在少样本场景下进行任务,取得良好效果。
-
提示词(Prompt)学习:通过设计提示词来引导模型进行特定任务,而无需进行复杂的微调。
-
模型即服务(Model as a Service, MaaS):提供基于模型的服务,使得用户能够方便地使用大规模模型。
-
指令微调(Instruction Tuning):通过特定指令进一步优化模型在某些任务上的表现。
随着这些方法的出现,众多公司和研究机构相继发布了各自的大规模语言模型,如Google的PaLM、Meta的LaMDA、百度的T0等。
缩放法则
Kaplan等人提出了缩放法则(Scaling Laws),强调模型的性能与以下三个因素密切相关:
-
参数数量
-
数据集大小
-
计算量
研究表明,如下图所示,随着这三者的指数增加,模型的效果会线性提升。具体而言,模型的损失值会随着规模的增加而降低,这为进一步提升大模型规模提供了定量分析依据。
1.2、大规模语言模型发展历史
尽管大规模语言模型的发展历程不足五年,但其进展速度惊人。截至2023年6月,国内外已发布超过百种大模型,如下图所示,从2019年至2023年5月,比较有影响力且模型参数量超过100亿的大规模语言模型的发展可以粗略分为以下三个阶段:
-
基础模型阶段
-
能力探索阶段
-
突破发展阶段
这些阶段反映了大规模语言模型在技术、应用和研究方面的快速演变。
大规模语言模型的发展经历了基础模型的建立、能力的探索以及突破性进展,各阶段展现出不同的技术创新和应用潜力,推动了自然语言处理领域的快速发展。
典型开源大模型汇总
典型闭源大模型汇总
-
基础模型阶段(2018-2021)
- 2017年:Vaswani等人提出了Transformer架构,突破了机器翻译任务的瓶颈。
- 2018年:Google和OpenAI分别推出了BERT(1.1亿参数和3.4亿参数的BERT-Large)和GPT-1(1.17亿参数),开启预训练语言模型时代。
- 2019年:OpenAI发布了GPT-2(15亿参数),Google随后发布了T5(110亿参数)。
- 2020年:OpenAI推出了GPT-3(1750亿参数),成为当时最大规模的语言模型。
- 国内也推出了如清华大学的ERNIE、百度的ERNIE和华为的盘古-α等大规模语言模型。
- 研究集中在各种模型结构(仅编码器、编码器-解码器、仅解码器)和预训练微调。
-
能力探索阶段(2019-2022)
- 探索方法:研究人员探索如何在不进行特定任务微调的情况下,利用大规模语言模型的能力。
- 2019年:Radford等人研究了GPT-2的零样本学习能力。
- GPT-3:Brown等人提出了通过语境学习(In-Context Learning)进行少样本学习,展示了模型在多个任务上的强大能力。
- 指令微调:提出统一生成式自然语言理解框架,利用大量任务进行有监督微调,提升了模型性能。
- 2022年:Ouyang等人提出了InstructGPT,结合监督微调和强化学习,提升模型对人类指令的响应能力。
-
突破发展阶段(2022至今)
- ChatGPT发布(2022年11月):通过简单对话框,实现问题回答、文稿撰写、代码生成等多种功能,超越传统自然语言处理系统。
- GPT-4发布(2023年3月):具备多模态理解能力,在多种基准考试中表现出色,展现近乎通用人工智能的能力。
- 许多公司和研究机构相继发布类似系统,如Google的Bard、百度的文心一言、科大讯飞的星火大模型等。
- 从2022年开始,大规模语言模型呈现爆发式增长,各类模型不断涌现。
1.3、大规模语言模型构建流程
根据OpenAI联合创始人Andrej Karpathy在微软Build 2023大会上公开的信息,如下图所示,OpenAI的大规模语言模型构建流程可分为四个主要阶段:
1. 预训练(Pretraining)
在预训练阶段,模型利用大量多样化的数据,包括互联网网页、维基百科、书籍、GitHub、论文和问答网站等,构建一个包含数千亿到数万亿单词的语料库。训练过程中,使用由数千块高性能GPU和高速网络组成的超级计算机,通常需要数十天来完成深度神经网络的参数训练,从而构建基础语言模型(Base Model)。
-
建模能力:模型能够生成文本,并在接收输入提示(Prompt)后补全句子。研究人员认为,语言模型在训练中也隐含构建了事实性知识(Factual Knowledge)和常识知识(Commonsense),即世界知识(World Knowledge)。
-
计算资源:例如,GPT-3的训练总计算量达到3640PFlops,使用1000块NVIDIA A100 80G GPU,训练时间约为一个月。其他模型如OPT和BLOOM的训练也消耗了相应的计算资源和时间。
2. 有监督微调(Supervised Finetuning)
在这一阶段,利用少量高质量的数据集,包括用户输入的提示词和对应的理想输出结果进行训练。
-
例子:
-
提示词(Prompt):复旦大学有几个校区?
-
理想输出:复旦大学现有4个校区,分别是邯郸校区、新江湾校区、枫林校区和张江校区。
-
使用这些有监督数据,通过与预训练阶段相同的训练算法在基础模型上进行进一步训练,得到有监督微调模型(SFT模型)。训练后的SFT模型具备初步的指令理解能力和上下文理解能力,可以完成开放领域问题、阅读理解、翻译、生成代码等任务,具备一定的泛化能力。
-
计算需求:SFT模型训练需要的计算资源相对较少,通常使用数十块GPU,训练时间为数天。许多类似ChatGPT的模型,如Alpaca、Vicuna、MOSS等,都属于这一类型。
3. 奖励建模(Reward Modeling)
在奖励建模阶段,目标是构建一个文本质量对比模型。对于同一个提示词,SFT模型生成的多个输出结果的质量进行排序。
-
工作原理:奖励模型(RM模型)通过二分类模型来判断输入的两个输出结果的优劣。RM模型不同于基础模型和SFT模型,不能单独提供给用户使用。训练RM模型通常需要数十块GPU,耗时几天。
-
数据需求:RM模型的训练需要大规模的对比数据,标注过程需耗费大量人力,标注人员必须认真遵循规范,以确保一致性。此阶段的难点在于如何界定RM模型的泛化边界,以确保模型能够高质量地评估所有生成输出。如下图所示,给出了 InstructGPT 系统中奖励模型训练样本标注示例
4. 强化学习(Reinforcement Learning)
在强化学习阶段,利用数十万用户提供的提示词,通过之前训练的奖励模型(RM模型)评估SFT模型对用户提示的文本补全结果的质量。这一阶段的提示词数量与有监督微调阶段相似,通常在十万量级,并且不需要人工提前指定每个提示词的理想回复。
-
工作原理:通过强化学习,调整SFT模型的参数,使得最终生成的文本能够获得更高的奖励(Reward)。这一过程相较于预训练阶段所需的计算量少得多,通常只需要数十块GPU,经过几天即可完成训练。
-
效果对比:根据文献,强化学习在模型参数量相同的情况下,通常能获得比有监督微调更好的效果。然而,截止到2023年9月,关于为何强化学习能够取得更好结果的原因尚未有完整和广泛认可的解释。
-
潜在问题:Andrej Karpathy指出,强化学习也存在问题,例如它可能导致基础模型的熵降低,从而减少模型输出的多样性。经过强化学习训练后的RL模型,最终提供给用户的就是一个具备理解用户指令和上下文能力的类ChatGPT系统。
-
挑战:由于强化学习方法的稳定性较低,并且超参数众多,使得模型收敛难度增加。此外,RM模型的准确性对结果也有重要影响,因此在大规模语言模型中有效应用强化学习仍然面临诸多挑战。
这四个阶段在数据规模、算法类型和所需资源上存在显著差异,形成了一个逐步优化的模型构建流程,从基础的语言理解到复杂的任务执行能力,确保了模型在实际应用中的有效性和灵活性。
1.4、 本专栏后文内容安排
后文围绕大规模语言模型的构建和评估展开,主要涵盖三个部分:
第一部分:预训练相关内容
-
第2章:介绍大规模语言模型的基础理论,包括语言模型的定义、Transformer架构和大规模语言模型框架,以LLaMA的模型结构为例提供代码实例。
第二部分:理解与指令遵循
-
第3章和第4章:聚焦于大规模语言模型的预训练阶段,讨论分布式训练中的数据并行、流水线并行和模型并行等技术,以及Zero系列优化方法。同时,介绍预训练所需的数据分布和数据预处理方法,以Deepspeed为例展示如何进行大规模语言模型的预训练。
-
第5章和第6章:探讨如何在基础模型上利用有监督微调和强化学习方法,提升模型对指令的理解和人类回答能力。包括高效微调方法(如Lora、Delta Tuning)、有监督微调数据构造、强化学习基础及近端策略优化(PPO)。并以DeepSpeed-Chat和MOSS-RLHF为例,展示如何训练类ChatGPT系统。
第三部分:扩展应用与评价
-
后续章节:将讨论大规模语言模型的应用场景和评价方法,重点分析模型的性能和实用性。