文本内容参考论文《A Survey of Large Language Models》
论文标题:A Survey of Large Language Models
论文链接:https://arxiv.org/pdf/2303.18223v10.pdf
因为这个论文内容太多了,所以我的文章分成几篇来展示!目录如下:
大模型技术发展概述 - (一)
大模型技术发展概述 - (二)
大模型技术发展概述 - (三)
大模型技术发展概述 - (四)
大模型发展技术概述
- 1.前言
- 2.大模型概述
- 2.1 大模型背景
- 2.1.1 LLMs的规模定律
- 2.1.2 LLM的新兴能力
- 2.1.3 LLM的关键技术
- 2.2 GPT系列模型的技术演变:
- 3.LLM模型配套资源
- 3.1 公开可用的模型检查点和API
- 3.2 常用的语料库
- 3.3 库资源
1.前言
语言是人类表达和沟通的重要能力,在儿童早期发展,并随着一生的成长而演变。然而,机器要想像人类一样理解和使用语言进行交流,需要强大的人工智能算法的支持。这一目标一直是长期的研究挑战。
在推动机器语言智能方面,语言建模(LM)是一种重要的技术方法之一。LM旨在建立单词序列的生成概率模型,以预测未来(或缺失)标记的概率。LM的研究已经得到广泛关注,并经历了四个主要的发展阶段。
第一个阶段是统计语言模型(SLM),它基于统计学习方法,通过建立单词预测模型来预测下一个单词。SLM在信息检索和自然语言处理等领域取得了一定的成果,但由于数据稀疏性问题,对高阶语言模型的准确估计变得困难。
第二个阶段是神经语言模型(NLM),它使用神经网络描述单词序列的概率。NLM引入了词的分布式表示概念,并通过学习单词或句子的有效特征来改进NLP任务的性能。NLM的出现对语言模型的表示学习产生了重要影响。
第三个阶段是预训练语言模型(PLM),其中包括BERT和GPT系列。这些模型通过在大规模无标签语料库上进行预训练任务,学习到通用的上下文感知的单词表示。PLM通过预训练和微调的学习范式,在多个NLP任务上取得了显著的性能提升。
第四个阶段大模型语言模型(LLM),通过增加模型规模或数据规模来提升性能。LLM展现出了惊人的能力,可以解决复杂的任务,并引发了对人工通用智能(AGI)可能性的重新思考。LLM的快速发展正在推动AI研究领域的创新。
语言建模模型 | 举例 |
---|---|
SLM | 文本分类、词性标注、句法分析 |
NLM | 自编码器、变分自编码器、生成对抗网络、降噪自编码器 |
PLM | BERT、GPT、ROBERTa、ALBERT |
LLM | GPT-3、GPT-4,ChatGPT、InstructGPT |
LLM的快速进展对AI社区产生了重大影响,并为语言处理、信息检索和计算机视觉等领域带来了新的研究方向。尽管面临一些挑战和未解决的问题,LLM有望成为构建人工通用智能的关键技术之一
本文结合论文概述的翻译和我自己的理解,写下一篇大模型技术发展概述,文章下面部分如下:
文章章节 | 内容 |
---|---|
第2节 | LLMs的背景,包括术语、设置、资源和组织概述 |
第3节 | 总结开发LLMs所需的可用资源 |
第4节 | 大模型预训练技术介绍 |
第5节 | 大模型适应性调整介绍 |
第6节 | 大模型知识利用介绍 |
第7节 | 大模型性能评估介绍 |
第8节 | 总结并讨论大模型未来 |
2.大模型概述
2.1 大模型背景
大型语言模型(LLMs)通常是指具有数千亿参数的Transformer语言模型,这些模型在大规模文本数据上进行训练。LLMs展示了强大的自然语言理解能力和通过文本生成解决复杂任务的能力。在了解LLMs的工作原理之前,
我们先介绍LLMs的基本背景,包括规模定律、新兴能力和关键技术。
2.1.1 LLMs的规模定律
LLMs的规模定律是指随着模型规模、数据规模和计算量的增加,LLMs性能的提升呈现出一定的规律性。目前,大部分LLMs都是基于Transformer架构构建的,并采用类似的预训练目标,如语言建模。研究表明,扩展LLMs可以极大地提高其模型性能。在研究中,有两个代表性的规模定律被提出。
第一个是KM规模定律,由Kaplan等人提出,它用幂律模型描述了神经语言模型性能与模型规模 ( N ) (N) (N)、数据集规模 ( D ) (D) (D)和训练计算量 ( C ) (C) (C)之间的关系。KM规模定律通过三个基本公式来描述性能与这三个因素之间的关系,即模型规模、数据集规模和训练计算量。
L
(
N
)
=
(
N
c
N
)
α
N
,
α
N
∼
0.076
,
N
c
∼
8.8
×
1
0
13
L(N) = (\frac{N_c}{N})^{\alpha_N},\alpha_N \sim 0.076,N_c \sim 8.8 \times 10^{13}
L(N)=(NNc)αN,αN∼0.076,Nc∼8.8×1013
L
(
D
)
=
(
D
c
D
)
α
D
,
α
D
∼
0.095
,
D
c
∼
5.4
×
1
0
13
L(D) = (\frac{D_c}{D})^{\alpha_D},\alpha_D \sim 0.095,D_c \sim 5.4 \times 10^{13}
L(D)=(DDc)αD,αD∼0.095,Dc∼5.4×1013
L
(
C
)
=
(
C
c
C
)
α
C
,
α
C
∼
0.050
,
C
c
∼
3.1
×
1
0
8
L(C) = (\frac{C_c}{C})^{\alpha_C},\alpha_C \sim 0.050,C_c \sim 3.1 \times 10^{8}
L(C)=(CCc)αC,αC∼0.050,Cc∼3.1×108
其中L(·)表示交叉熵损失。这三个定律是通过拟合模型在不同数据规模(22M到23B个tokens)、模型规模(768M 到15亿个非嵌入参数)和训练计算量下的性能得出的。他们表明,模型性能与这三个因素之间存在着强烈的依赖关系。
第二个是Chinchilla规模定律,由Hoffmann等人提出。他们通过更大范围模型大小(70M到16B)和数据大小(5B到500B个token)进行了严格的实验,并拟合出了另一种规模定律形式,用于指导LLMs的计算优化训练。Chinchilla规模定律通过优化损失函数,提供了模型规模和数据规模之间最佳分配的方法。
L ( N , D ) = E + A N α + B D β L(N,D)=E+\frac{A}{N^\alpha}+\frac{B}{D^\beta} L(N,D)=E+NαA+DβB
其中
E
=
1.69
E = 1.69
E=1.69,
A
=
406.4
A = 406.4
A=406.4,
B
=
410.7
B = 410.7
B=410.7,
α
=
0.34
\alpha = 0.34
α=0.34和
β
=
0.28
\beta = 0.28
β=0.28。通过在约束条件
C
≈
6
N
D
C ≈ 6ND
C≈6ND下优化损失函数
L
(
N
,
D
)
L(N,D)
L(N,D),展示了计算预算在模型规模和数据规模之间的最佳分配如下
N
o
p
t
(
C
)
=
G
(
C
6
)
a
,
D
o
p
t
(
C
)
=
G
−
1
(
C
6
)
b
N_{opt}(C)=G(\frac{C}{6})^a,D_{opt}(C)=G^{-1}(\frac{C}{6})^b
Nopt(C)=G(6C)a,Dopt(C)=G−1(6C)b
其中
a
=
α
α
+
β
a=\frac{\alpha}{\alpha+\beta}
a=α+βα,
b
=
β
α
+
β
b=\frac{\beta}{\alpha+\beta}
b=α+ββ,G是一个缩放系数,可以通过A、B、α和β计算得出。
这些规模定律的研究揭示了LLMs性能与模型规模、数据规模和计算量之间的密切关系,为进一步研究和优化LLMs提供了指导。
2.1.2 LLM的新兴能力
LLMs的新兴能力被正式定义为“在小型模型中不存在但在大型模型中出现的能力”,这是区分LLMs与之前的PLMs最显著的特征之一。当新兴能力出现时,它进一步有了一个显著的特点:当规模达到一定水平时,性能显著超出随机水平。类比而言,这种新兴模式与物理学中的相变现象有密切的联系。原则上,新兴能力可以与一些复杂任务相关联,而且更关注的是能够应用于解决各种任务的通用能力。在这里,我们简要介绍了LLMs的三种典型新兴能力和具备这种能力的代表性模型。
- 上下文学习:上下文学习(ICL:Incremental Context Learning)能力由GPT-3正式引入:假设已经为语言模型提供了自然语言指令或若干任务示范,它可以通过输入的文本单词序列来预测实例并输出,而无需额外的训练或梯度更新。在GPT系列模型中,175B的GPT-3模型在一般情况下展示了较强的上下文学习能力,而GPT-1和GPT-2模型则没有。然而,这种能力也取决于具体的下游任务。例如,对于13B的GPT-3,上下文学习能力可以在算术任务(例如3位数的加法和减法)上出现,但175B的GPT-3在波斯语问答任务上效果不佳。
- 模型微调。通过使用新的数据集在LLMs中进行微调。通过微调,LLMs可以按照有关新的数据集相关的任务指令执行新任务,从而提高了泛化能力。
- 逐步推理。对于小型语言模型,通常很难解决涉及多个推理步骤的复杂任务,例如数学问题。然而,通过链式思考(CoT)提示策略,LLMs可以通过利用提示机制来解决这类任务,该机制涉及中间推理步骤以得出最终答案。对于复杂的任务LLMs可以一步一步的推理出输出结果,就像我们在gpt上发送“继续”
2.1.3 LLM的关键技术
- 扩展:LLMs的规模越大、数据规模和训练计算量越多,模型容量越高。使用规模定律和数据扩展来更有效地分配计算资源。
- 训练:由于LLMs的巨大规模,成功训练具备能力的LLM非常具有挑战性。需要分布式训练算法和优化框架来支持大规模模型的学习。
- 能力唤起:通过设计合适的任务指令或上下文学习策略来唤起LLMs的潜在能力,使其在特定任务上表现出卓越的性能。
- 对齐微调:为了与人类价值观保持一致,需要使用对齐微调方法来确保LLMs生成的内容有益、诚实和无害。
- 工具操作:利用外部工具来弥补LLMs在某些任务上的不足,例如使用计算器进行准确计算或使用搜索引擎获取最新信息。
这些关键技术对于开发具备通用和强大学习能力的LLMs起到了重要作用。
2.2 GPT系列模型的技术演变:
GPT系列模型经历了几个阶段的技术演进。早期探索阶段包括GPT-1和GPT-2模型的开发,它们采用了生成式预训练的Transformer架构。模型规模飞跃阶段中,GPT-3模型引入了上下文学习(ICL)的概念,参数规模扩展到了175B,展现出了出色的性能和推理能力。能力提升阶段中,通过训练代码数据和与人类偏好对齐的方法,进一步提升了GPT-3模型的能力。最终,基于GPT-3模型的增强技术,推出了GPT-3.5模型和GPT-4模型,其中ChatGPT针对对话进行优化,而GPT-4在解决复杂任务和提高安全性方面具有更强的能力。
下图为近年来存在的大型语言模型(大小超过10B)的时间线。该时间线主要根据模型的技术论文发布日期(例如提交给arXiv的日期)来确定。如果没有相应的论文,将模型的日期设置为其公开发布或公告的最早时间。使用黄色标记具有公开可用的模型检查点的LLMs。由于图表空间的限制,图片只包括具有公开报告的评估结果的LLMs。
3.LLM模型配套资源
开发或再现LLMS绝非易事,考虑到技术难题和巨大的计算资源需求。一个可行的方法是从现有LLMS中学习经验,并重复使用公开可用的资源进行增量开发或实验研究。在本节中,我们简要总结了用于开发LLMS的公开可用资源,包括模型检查点和API、语料库和库资源。
模型检查点:是指在训练过程中保存模型的中间状态,以便在需要时进行加载和使用。在深度学习中,模型的训练通常需要多个迭代周期,每个周期会更新模型的参数。为了避免训练过程中的意外中断导致训练结果丢失,以及方便后续的模型评估和应用部署,可以定期保存模型的检查点。
模型检查点通常包含:模型的权重参数、优化器的状态以及其他训练相关的信息。通过保存模型检查点,可以在需要时重新加载模型,并从之前的训练状态继续进行训练或进行推断预测。这样可以节省训练时间,方便进行模型调试和优化,并允许在不同的环境中灵活使用模型。
3.1 公开可用的模型检查点和API
考虑到模型预训练的巨大成本,经过良好训练的模型检查点对于研究社区在LLMS的研究和开发中至关重要。由于参数规模是使用LLMS时需要考虑的关键因素,我们将这些公开模型分为两个规模级别(数千亿参数和数百亿参数),这有助于用户根据他们的资源预算确定合适的资源。此外,对于推断,我们可以直接使用公开的API执行任务,而无需在本地运行模型。接下来,我们介绍公开可用的模型检查点和API。
数千亿参数级别的模型
除了LLaM(最大版本包含65B参数)和NLLB(最大版本包含54.5B参数),这个类别中的大多数模型参数规模范围在10B到20B之间。此范围内的其他模型包括mT5 、PanGu-α、T0、GPT-NeoX-20B、CodeGen、UL2、Flan-T5和mT0
数百亿参数级别的模型
这个类别中只有少数几个模型被公开发布。例如,OPT、OPT-IML 、BLOOM和BLOOMZ的参数数量与GPT-3(175B版本)几乎相同,而GLM和Galactica分别拥有130B和120B个参数。其中,OPT(175B版本)的开放共享目的是让研究人员能够进行可重复的大规模研究。对于跨语言泛化的研究,BLOOM(176B版本)和BLOOMZ(176B版本)可作为基础模型,因为它们在多语言语言建模任务方面表现出色。在这些模型中,经过指令微调的OPT-IML可能是研究指令调整效果的良好候选模型。这个规模的模型通常需要数千个GPU或TPU进行训练。例如,OPT(175B版本)使用了992个A100-80GB GPU,而GLM(130B版本)使用了一个由96个NVIDIA DGX-A100(8x40G)GPU节点组成的集群。
LLMs的公共API
API提供了更方便的方式供普通用户使用LLMs,无需在本地运行模型。作为使用LLMs的代表接口,GPT系列模型的API在学术界和工业界广泛使用。OpenAI为GPT-3系列的模型提供了七个主要接口:ada、babbage、curie、davinci(GPT-3系列中最强大的版本)、text-ada-001、text-babbage-001和text-curie-001。其中,前四个接口可以在OpenAI的主机服务器上进行进一步的微调。特别地,babbage、curie和davinci分别对应着GPT-3(1B)、GPT-3(6.7B)和GPT-3(175B)模型。此外,还有两个与Codex相关的API,分别是code-cushman-001(Codex(12B)的强大多语言版本)和code-davinci-002。
另外,GPT-3.5系列包括一个基础模型code-davinci-002和三个增强版本,即text-davinci-002、text-davinci-003和gpt-3.5-turbo-0301。值得注意的是,gpt-3.5-turbo-0301是调用ChatGPT的接口。最近,OpenAI还发布了GPT-4的相应API,包括gpt-4、gpt-4-0314、gpt-4-32k和gpt-4-32k-0314。总体而言,API接口的选择取决于特定的应用场景和响应需求。详细的使用方法可以在它们的项目网站上找到。
3.2 常用的语料库
与早期的PLMs相比,LLMs由于拥有更多参数,需要更多涵盖广泛内容的训练数据。为满足这个需求,越来越多的可供研究使用的训练数据集已经发布。在本节中,将简要总结用于训练LLMs的几个常用语料库。根据其内容类型,我们将这些语料库分为六个组:图书、CommonCrawl、Reddit链接、维基百科、代码和其他。
下图为常用数据源的统计
Books
BookCorpus是先前小规模模型(例如GPT 和GPT-2 )中常用的数据集,包含超过11,000本涵盖各种主题和流派(例如小说和传记)的图书。另一个大规模图书语料库是Project Gutenberg,包括超过70,000本文学作品,包括小说、散文、诗歌、戏剧、历史、科学、哲学和其他类型的作品,这是目前最大的开源图书集合之一,用于MT-NLG和LLaMA的训练。至于GPT-3中使用的Books1和Books2,它们比BookCorpus要大得多,但迄今为止还未公开发布。
CommonCrawl
CommonCrawl是最大的开源网络爬虫数据库之一,包含PB级的数据量,已广泛用于现有LLMs的训练数据。由于整个数据集非常庞大,现有研究主要从特定时期的数据中提取网页子集。然而,由于网络数据中存在大量噪音和低质量信息,使用前需要进行数据预处理。基于CommonCrawl,已有四个经过过滤的数据集在现有研究中常用:C4、CC-Stories、CC-News和RealNews。Colossal Clean Crawled Corpus(C4)包括五个变体,即en(806G)、en.noclean(6T)、realnewslike(36G)、webtextlike(17G)和multilingual(38T)。en版本已被用于T5、LaMDA、Gopher和UL2的预训练。多语言C4,也称为mC4,在mT5中被使用。CC-Stories(31G)由CommonCrawl数据的一个子集组成,内容以故事方式呈现。然而,CC-Stories的原始来源现在不可用,因此在表2中已包含一个复制版本CC-Stories-R。此外,从CommonCrawl中提取的两个新闻语料库,即REALNEWS(120G)和CC-News(76G),也常用作预训练数据。
Reddit链接
Reddit是一种社交媒体平台,允许用户提交链接和文本帖子,并通过他人的“赞同”或“反对”进行投票。通常,被高度赞同的帖子被认为是有用的,并可用于创建高质量的数据集。WebText是一个著名的由Reddit高赞链接组成的语料库,但它不是公开可用的。作为替代,有一个易于访问的开源替代品称为OpenWebText。从Reddit提取的另一个语料库是PushShift.io,一个实时更新的数据集,包含自Reddit创建以来的历史数据。Pushshift不仅提供月度数据转储,还提供有用的实用工具,支持用户在整个数据集上进行搜索、摘要和初步调查。这使用户可以轻松收集和处理Reddit数据。
维基百科
维基百科是一个在线百科全书,包含大量高质量的文章,涵盖各种主题。这些文章大多采用解说性的写作风格(带有支持参考文献),涵盖多种语言和领域。通常,大多数LLMs(例如GPT-3、LaMDA和LLaMA)中广泛使用仅限英文的维基百科版本。维基百科有多种语言版本,因此可以在多语言环境中使用。
代码
为了收集代码数据,现有的工作主要从互联网上爬取开源许可的代码。主要的数据来源包括开源许可的公共代码仓库(例如GitHub)和与代码相关的问答平台(例如StackOverflow)。Google已经公开发布了BigQuery数据集,其中包含大量各种编程语言的开源许可代码片段,作为代表性的代码数据集。CodeGen使用了BigQuery数据集的一个子集BIGQUERY,用于训练CodeGen的多语言版本(CodeGen-Multi)。
其他
Pile是一个大规模、多样化和开源的文本数据集,包含来自多个来源的800GB数据,包括图书、网站、代码、科学论文和社交媒体平台。它由22个多样化的高质量子集构建而成。Pile数据集被广泛用于不同参数规模的模型,如GPT-J(6B)、CodeGen(16B)和Megatron-Turing NLG(530B)。此外,ROOTS由各种较小的数据集组成(总共1.61TB的文本),涵盖59种不同的语言(包括自然语言和编程语言),已用于BLOOM 的训练。
在实践中,预训练LLMs通常需要混合使用不同的数据源(参见下图),而不仅仅是一个语料库。因此,现有研究通常混合几个现成的数据集(例如C4、OpenWebText和Pile),然后进行进一步处理以获取预训练语料库。此外,为了训练适应特定应用的LLMs,还重要从相关来源(例如维基百科和BigQuery)提取数据,以丰富预训练数据中的相应信息。为了快速参考现有LLMs中使用的数据来源,我们展示了三个代表性LLMs的预训练语料库:
GPT-3(175B)在混合数据集中进行了300B标记的预训练,包括CommonCrawl、WebText2、Books1、Books2和维基百科。
PaLM(540B)使用了一个包含780B标记的预训练数据集,包括社交媒体对话、过滤的网页、图书、Github、多语言维基百科和新闻等来源。
LLaMA从各种来源提取训练数据,包括CommonCrawl、C4、Github、维基百科、图书、ArXiv和StackExchange。LLaMA(6B)和LLaMA(13B)的训练数据量为1.0T标记,LLaMA(32B)和LLaMA(65B)的训练数据量为1.4T标记。
3.3 库资源
在这部分,我们简要介绍了一系列用于开发LLMs的可用库资源。
Transformers
使用Transformer架构构建模型的开源Python库,由Hugging Face开发和维护。它具有简单和用户友好的API,便于使用和自定义各种预训练模型。作为一个功能强大的库,它拥有庞大而活跃的用户和开发者社区,定期更新和改进模型和算法。
DeepSpeed
DeepSpeed是由Microsoft开发的用于深度学习优化的库(与PyTorch兼容),已用于训练多个LLMs,如MT-NLG和BLOOM。它提供了各种用于分布式训练的优化技术支持,例如内存优化(ZeRO技术,梯度检查点)和流水线并行。
Megatron-LM
Megatron-LM是由NVIDIA开发的用于训练大规模语言模型的深度学习库。它还提供了丰富的分布式训练优化技术,包括模型和数据并行、混合精度训练和FlashAttention。这些优化技术可以大大提高训练效率和速度,实现跨GPU的高效分布式训练。
JAX
JAX是由Google开发的用于高性能机器学习算法的Python库,允许用户在具有硬件加速(例如GPU或TPU)的数组上进行计算。它能够在各种设备上进行高效计算,并支持自动微分和即时编译等特色功能。
Colossal-AI
Colossal-AI是由HPC-AI Tech开发的用于训练大规模AI模型的深度学习库。它基于PyTorch实现,并支持丰富的并行训练策略集合。此外,它还可以利用PatrickStar提出的方法对异构内存管理进行优化。最近,基于LLaMA,使用Colossal-AI开发了一个名为ColossalChat的ChatGPT样式模型,公开发布了7B和13B两个版本。
BMTrain
BMTrain是由OpenBMB开发的高效训练大规模参数模型的库,强调代码简洁性、低资源占用和高可用性。BMTrain已经将几个常见的LLMs(例如Flan-T5和GLM)纳入其ModelCenter,开发者可以直接使用这些模型。
FastMoE
FastMoE是一种专门用于MoE(混合专家)模型的训练库。它基于PyTorch开发,设计上注重效率和用户友好性。FastMoE简化了将Transformer模型转换为MoE模型的过程,并在训练过程中支持数据并行和模型并行。