初学者指南:从零开始构建自己的大型语言模型
新手指南:构建大型语言模型的起点
简介
无论是在Twitter还是Linkedin上,我每天都会遇到关于大型语言模型(LLMs)的帖子。也许我曾经想知道为什么有如此多的研究和开发专门用于这些引人入胜的模型。从ChatGPT到BARD、Falcon和无数其他模型,它们的名字在脑海中盘旋,让我渴望揭开它们真正的本质。这些模型是如何创建的?如何构建大型语言模型?它们如何具备回答你提出的几乎任何问题的能力?这些激动人心的问题一直在我脑海中挥之不去,激发了我的好奇心。这种无法满足的好奇心点燃了我内心的火焰,推动我头脑飞速地投入到LLMs的领域中。
请跟随我一起进行一段令人激动的旅程,我们将讨论LLMs的现状。我们将一起揭开它们发展背后的秘密,理解它们的非凡能力,并阐明它们如何改变了语言处理的世界。
学习目标
- 了解LLMs及其目前的最新技术。
- 理解不同的LLMs以及从零开始训练这些LLMs的方法。
- 探索训练和评估LLMs的最佳实践。
系好安全带,让我们开始掌握LLMs的旅程吧。
大型语言模型的简史
大型语言模型的历史可以追溯到20世纪60年代。1967年,麻省理工学院的一位教授构建了第一个自然语言处理程序Eliza,用于理解自然语言。它使用模式匹配和替换技术来理解和与人类交互。后来,在1970年,麻省理工学院团队构建了另一个自然语言处理程序SHRDLU,用于理解和与人类交互。
1988年,引入了循环神经网络(RNN)架构,用于捕捉文本数据中的序列信息。在21世纪初,使用RNN进行自然语言处理的研究广泛开展。基于RNN的语言模型一直是最先进的架构。但是RNN只能处理较短的句子,对于较长的句子效果不佳。因此,2013年引入了长短期记忆网络(LSTM)。在此期间,LSTM应用方面取得了巨大的发展。与此同时,注意力机制的研究也开始进行。
LSTM存在两个主要问题。LSTM在处理真正长的句子时效果有限。LSTM模型的训练无法并行化,导致训练时间较长。
2017年,通过论文《Attention Is All You Need》,在自然语言处理研究中取得了突破性进展。这篇论文彻底改变了自然语言处理的格局。研究人员引入了称为Transformer的新架构,以克服LSTM存在的挑战。Transformer是第一个包含大量参数的大型语言模型。Transformer成为了LLMs的最先进模型。即使在今天,LLMs的发展仍受到Transformer的影响。
在接下来的五年里,有大量的研究致力于构建比Transformer更好的LLMs。LLMs的规模随着时间的推移呈指数级增长。实验证明,增加LLMs和数据集的规模可以提高LLMs的知识。因此,随着参数规模和训练数据集的增加,诸如BERT、GPT及其变种GPT-2、GPT-3、GPT 3.5和XLNet的LLMs相继问世。
2022年,自然语言处理领域又有了一次突破,发布了名为ChatGPT的对话优化型LLM,它能够回答你想要的任何问题。几个月后,Google推出了BARD作为ChatGPT的竞争对手。
在过去的一年里,已经开发出了数百个大型语言模型。你可以在这里获取开源LLMs列表以及它们的性能排名。迄今为止,最先进的LLM是Falcon 40B Instruct。
什么是大型语言模型?
简单来说,大型语言模型是基于大规模数据集训练的深度学习模型,用于理解人类语言。其核心目标是准确地学习和理解人类语言。大型语言模型使得机器能够像人类一样解释语言。
大型语言模型学习语言中的模式和单词之间的关系。例如,它理解语言的句法和语义结构,如语法、词语的顺序和词语和短语的意思。它获得了把握整个语言本身的能力。
但是,语言模型和大型语言模型之间到底有什么区别呢?
语言模型和大型语言模型都学习和理解人类语言,但主要区别在于这些模型的开发方式。
语言模型通常是使用HMM或基于概率的模型开发的统计模型,而大型语言模型是使用数十亿个参数,在非常庞大的数据集上进行训练的深度学习模型。
但是,为什么我们需要大型语言模型呢?
为什么需要大型语言模型?
这个问题的答案很简单。大型语言模型是任务无关的模型。简单来说,这些模型有能力解决任何任务。例如,ChatGPT就是一个典型的例子。每次你询问ChatGPT的时候,它都能让你惊叹。
而且,关于这些大型语言模型的另一个惊人特点是,你不需要像对待其他预训练模型那样对模型进行微调。你只需提示模型,它会为你完成工作。因此,大型语言模型能够即时解决你正在处理的任何问题。而且,它只是一个模型,可以解决你所有的问题和任务。因此,这些模型被称为NLP中的基础模型。
不同类型的大型语言模型
大型语言模型可以根据其任务大致分为两类:
- 文本继续
- 对话优化
文本继续
这些大型语言模型被训练用于预测输入文本中的下一个单词序列,它们的任务是继续文本。
例如,给定文本“How are you”,这些大型语言模型可能会完成句子,“How are you doing?”或“How are you? I am fine.”
属于这一类别的大型语言模型有Transformers、BERT、XLNet、GPT及其变体如GPT-2、GPT-3、GPT-4等。
现在,这些大型语言模型的问题在于,它们更擅长完成文本而不是回答问题。有时候,我们期望得到的是答案,而不仅仅是文本的继续。
正如前面所讨论的,给定“How are you?”作为输入,大型语言模型试图用“doing?”或“I am fine.”来继续文本。回应可以是其中之一:继续文本或回答。这正是为什么引入了对话优化的大型语言模型的原因。
2. 对话优化
这些大型语言模型会回答问题,而不仅仅是继续文本。给定输入“How are you?”,这些大型语言模型可能会回答“我很好。”,而不是只继续句子。
对话优化的大型语言模型包括InstructGPT、ChatGPT、BARD、Falcon-40B-instruct等。
现在,我们将看到从零开始训练大型语言模型所面临的挑战。
训练大型语言模型的挑战是什么?
从零开始训练大型语言模型非常具有挑战性,主要有两个因素:基础设施和成本。
基础设施
大型语言模型是在至少1000 GB大小的大型文本语料库上训练的。用于训练这些数据集的模型非常庞大,包含数十亿个参数。为了在大型文本语料库上训练这样大的模型,我们需要建立一个支持多个GPU的基础设施/硬件。你能猜到在单个GPU上训练包含1750亿个参数的GPT-3模型需要多长时间吗?
在单个NVIDIA Tesla V100 GPU上训练GPT-3需要355年。
这清楚地表明,在单个GPU上训练大型语言模型根本不可能。它需要使用成千上万个GPU进行分布式和并行计算。
只是为了让你了解一下,下面是用于训练流行大型语言模型的硬件:
- Falcon-40B的训练使用了384个A100 40GB GPU,采用了3D并行策略(TP=8,PP=4,DP=12),结合了ZeRO。
- 研究人员计算出OpenAI可能只需要34天就可以在1024个A100 GPU上训练GPT-3。
- PaLM(540B,Google):总共使用了6144个TPU v4芯片。
成本
从上面可以明显看出,为了从头开始训练LLMs,GPU基础设施是非常必要的。建立这样规模的基础设施是非常昂贵的。公司和研究机构投资数百万美元来建立它并从头开始训练LLMs。
据估计,从头开始训练GPT-3的成本约为460万美元
平均而言,7B参数模型从头开始训练的成本大约为25000美元。
现在,我们将看到如何从头开始训练LLMs
如何从头开始训练LLMs?
LLMs的训练过程因您想要构建的LLM类型而异,无论是继续文本还是对话优化。LLMs的性能主要取决于两个因素:数据集和模型架构。这两者是LLMs性能的关键驱动因素。
让我们现在讨论训练LLMs所涉及的不同步骤。
1. 继续文本
继续文本的LLMs的训练过程被称为预训练LLMs。这些LLMs通过自监督学习训练,以预测文本中的下一个单词。我们将准确地看到从头开始训练LLMs所涉及的不同步骤。
a. 数据集收集
训练LLMs的第一步是收集大规模的文本数据集。数据集在LLMs的性能中起着最重要的作用。最近,OpenChat是最新的对话优化大型语言模型,受到LLaMA-13B的启发。它在Vicuna GPT-4评估中实现了ChatGPT分数的105.7%。您知道其成功背后的原因吗?这是高质量的数据。它只经过了约6K的微调。
训练数据是通过从互联网、网站、社交媒体平台、学术来源等进行爬取而创建的。确保训练数据尽可能多样化。
最近的研究表明,增加训练数据集的多样性可以提高大规模语言模型的跨领域知识和下游泛化能力
它说了什么?让我解释一下。
您可能遇到过“ChatGPT在JEE考试中失败”或“ChatGPT未能通过UPSC考试”等标题。可能的原因是什么?原因是它缺乏必要的智能水平。这在很大程度上取决于用于训练的数据集。因此,对多样化数据集的需求不断上升,因为高质量的跨领域数据集对模型在不同任务上的泛化有直接影响。
用高质量的数据发掘LLMs的潜力!
以前,Common Crawl是训练LLMs的首选数据集。Common Crawl包含自2008年以来的原始网页数据,提取的元数据和文本提取。数据集的大小以拍字节计算(1拍字节=1e6 GB)。已经证明,使用这个数据集训练的大型语言模型取得了有效的结果,但在其他任务上无法很好地泛化。因此,从22个多样化的高质量数据集创建了一个名为Pile的新数据集。它是现有数据源和范围为825 GB的新数据集的组合。最近,以RefinedWeb数据集的名义发布了Common Crawl的改进版本。为了保持竞争优势,用于GPT-3和GPT-4的数据集没有开源。
b. 数据集预处理
下一步是对数据集进行预处理和清洗。由于数据集是从多个网页和不同来源抓取的,数据集可能包含各种细微差别。我们必须消除这些差异,并为模型训练准备一个高质量的数据集。
具体的预处理步骤实际上取决于您使用的数据集。一些常见的预处理步骤包括删除HTML代码,修正拼写错误,消除有害/有偏见的数据,将表情符号转换为它们的文本等效形式,以及数据去重。在训练LLMs时,数据去重是最重要的预处理步骤之一。数据去重是指从训练语料库中删除重复内容的过程。
很明显,训练数据可能包含重复或几乎相同的句子,因为它是从各种数据源收集而来的。我们需要进行数据去重,有两个主要原因:它可以帮助模型避免反复记忆相同的数据。它可以帮助我们更好地评估LLM,因为训练和测试数据包含非重复信息。如果包含重复信息,很有可能在测试集中输出的结果已经在训练集中见过。因此,报告的数字可能不准确。您可以在此处阅读更多关于数据去重技术的信息。
c. 数据集准备
下一步是为训练模型创建输入和输出对。在预训练阶段,LLM被训练以预测文本中的下一个标记。因此,根据此创建输入和输出对。
例如,让我们以一个简单的语料库为例-
- 示例1:我是一个DHS聊天机器人。
- 示例2:DHS代表DataHack Summit。
- 示例3:我可以为您提供关于DHS的信息。
对于示例1,我们可以根据以下方式创建输入-输出对-
类似地,对于示例2,以下是一组输入和输出对-
每个输入和输出对都被传递给模型进行训练。现在,下一步是什么?让我们定义模型架构。
d. 模型架构
下一步是定义模型架构并训练LLM。
到目前为止,已经开发出了大量的LLM。您可以在此处概览不同的LLM。研究人员在构建LLM时遵循标准流程。大多数研究人员从现有的大型语言模型架构(如GPT-3)开始,同时使用模型的实际超参数。然后调整模型架构和超参数,以得到最先进的模型架构。
例如,Falcon是一种最先进的LLM。它在开源LLM排行榜上排名第一。Falcon受到GPT-3架构的启发,并进行了一些调整。
e. 超参数搜索
超参数调整在时间和成本方面都非常昂贵。想象一下为10亿参数模型运行这个实验。这是不可行的,对吧?因此,理想的方法是使用当前研究工作的超参数,例如,在使用相应架构时使用GPT-3的超参数,然后在小规模上找到最佳超参数,然后将其插值到最终模型中。
实验可能涉及以下任何或全部内容:权重初始化、位置嵌入、优化器、激活函数、学习率、权重衰减、损失函数、序列长度、层数、注意力头数、参数数量、稠密层与稀疏层、批量大小和丢弃率。
接下来让我们讨论流行超参数的最佳实践-
ChatGPT是一种针对对话优化的LLM。ChatGPT的训练方法与上述步骤类似。只是它还包括一个额外的步骤,称为RLHF,除了预训练和监督微调。
但最近有一篇名为LIMA: Less Is for More Alignment的论文。它揭示了首先根本不需要RLHF。您只需要在大量数据上进行预训练,并在少至1000个数据的高质量数据上进行监督微调。
到目前为止,OpenChat是最新的对话优化大型语言模型,受LLaMA-13B启发。它在Vicuna GPT-4评估中达到了ChatGPT得分的105.7%。它仅使用了6,000个高质量数据进行微调。
如何评估LLMs?
LLM的评估不能是主观的。它必须是一个逻辑过程,以评估LLM的性能。
对于分类或回归问题,我们有真实的标签和预测的标签,然后将它们进行比较,以了解模型的表现如何。我们会看混淆矩阵,对吗?但是对于大型语言模型呢?它们只是生成文本。
评估LLM有两种方法:内在方法和外在方法。
内在方法
传统的语言模型使用内在方法进行评估,如困惑度、每字符比特数等。这些指标衡量模型在语言方面的性能,即模型能够多好地预测下一个词。
外在方法
随着LLM的进展,外在方法被认为是评估它们性能的首选方法。评估LLM的推荐方法是看它们在不同任务(如问题解决、推理、数学、计算机科学以及MIT、JEE等竞争考试)上的表现如何。
EleutherAI发布了一个名为Language Model Evaluation Harness的框架,用于比较和评估LLM的性能。Hugging Face将该评估框架与社区开发的开源LLM集成在一起。
所提出的框架在4个不同的数据集上评估LLM。最终得分是每个数据集得分的综合。
- AI2 Reasoning Challenge:一个为小学生设计的科学问题集合。
- HellaSwag:一个挑战最先进模型进行常识推理的测试,对人类来说相对容易(准确率约为95%)。
- MMLU:一个全面评估文本模型多任务准确性的测试。它包括57个不同的任务,涵盖基本数学、美国历史、计算机科学、法律等学科。
- TruthfulQA:一个专门创建的测试,用于评估模型生成准确答案的倾向,并避免重复在网络上常见的虚假信息。
还阅读:关于大型语言模型(LLM)的10个令人兴奋的项目
结束语
希望现在你已经准备好构建自己的大型语言模型了!
有什么想法?在下方评论。