OpenAI的大神AndrejKarpathy前几天在他的YouTube频道讲了一堂课,系统的介绍了大语言模型,内容深入浅出,非常赞,抽空将它翻译成了双语。
以下是第一部分
Intro:LargeLanguageModel(LLM)talk
大家好。最近,我进行了一场关于大语言模型的30分钟入门讲座。遗憾的是,这次讲座没有被录制下来,但许多人在讲座后找到我,他们告诉我非常喜欢那次讲座。因此,我决定重新录制并上传到YouTube,那么,让我们开始吧,为大家带来“忙碌人士的大语言模型入门”系列,主讲人Scott。好的,那我们开始吧。
LLMInference
首先,什么是大语言模型(LargeLanguageModel)呢?其实,一个大语言模型就是由两个文件组成的。在这个假设的目录中会有两个文件。
以Llama270B模型为例,这是一个由MetaAI发布的大语言模型。这是Llama系列语言模型的第二代,也是该系列中参数最多的模型,达到了700亿。LAMA2系列包括了多个不同规模的模型,70亿,130亿,340亿,700亿是最大的一个。
在这种情况下,Llama270B模型实际上就是你电脑上的两个文件:一个是存储参数的文件,另一个是运行这些参数的代码。这些参数是神经网络(即语言模型)的权重或参数。我们稍后会详细解释。因为这是一个拥有700亿参数的模型,每个参数占用两个字节,因此参数文件的大小为140GB,之所以是两个字节,是因为这是float16类型的数据。
除了这些参数,还有一大堆神经网络的参数。你还需要一些能运行神经网络的代码,这些代码被包含在我们所说的运行文件中。这个运行文件可以是C语言或Python,或任何其他编程语言编写的。它可以用任何语言编写,但C语言是一种非常简单的语言,只是举个例子。只需大约500行C语言代码,无需任何其他依赖,就能构建起神经网络架构,并且主要依靠一些参数来运行模型。所以只需要这两个文件。
你只需带上这两个文件和你的MacBook,就拥有了一个完整的工具包。你不需要连接互联网或其他任何设备。你可以拿着这两个文件,编译你的C语言代码。你将得到一个可针对参数运行并与语言模型交互的二进制文件。
比如,你可以让它写一首关于ScaleAI公司的诗,语言模型就会开始生成文本。在这种情况下,它会按照指示为你创作一首关于ScaleAI的诗。之所以选用ScaleAI作为例子,你会在整个演讲中看到,是因为我最初在ScaleAI举办的活动上介绍过这个话题,所以演讲中会多次提到它,以便内容更具体。这就是我们如何运行模型的方式。只需要两个文件和一台MacBook。
我在这里稍微有点作弊,因为这并不是在运行一个有700亿参数的模型,而是在运行一个有70亿参数的模型。一个有700亿参数的模型运行速度大约会慢10倍。但我想给你们展示一下文本生成的过程,让你们了解它是什么样子。所以运行模型并不需要很多东西。这是一个非常小的程序包,但是当我们需要获取那些参数时,计算的复杂性就真正显现出来了。
那么,这些参数从何而来,我们如何获得它们?因为无论run.c文件中的内容是什么,神经网络的架构和前向传播都是算法上明确且公开的。
第二部分:
**LLMTraining
但真正的关键在于这些参数,我们如何得到它们?所以,为了获得模型参数,所谓的模型训练过程比我之前展示的模型推断要复杂得多。模型推断只是在MacBook上运行模型。而模型训练则是一个计算上极为复杂的过程。简单来说,我们所做的可以被理解为对大量互联网内容的压缩。
你需要大约6,000个GPU,并且需要运行大约12天才能得到一个Llama27B,整个过程大约需要花费200万美元。这个过程基本上就是将这大量的文本压缩成你可以想象的一种zip文件。我在早些时候的幻灯片中向你展示的这些参数,可以被理解为互联网的zip文件。例如,在这种情况下,最终生成的是140GB的参数。大致来说,这里的压缩比率达到了大约100倍。
但这种压缩与zip文件不同,因为zip文件是无损压缩,而这里是有损压缩。我们只是大致获取了我们训练文本的概念,而不是在这些参数中保留了文本的完整副本。所以,可以把它理解为一种有损压缩方式。另外需要指出的是,按照目前最先进技术的标准,这些数据其实只是入门级别的。如果考虑到像ChatGPT、Claude或Bard这样的顶尖神经网络,这些数字可能需要增加十倍甚至更多。
这意味着在实际操作中,我们需要将这些数字大幅上调。这也解释了为什么如今这些神经网络的训练成本高达数千万甚至数亿美元,它们需要庞大的计算集群和大量数据集,而且在获取参数的过程中需要付出巨大努力。一旦获得了这些参数,实际运行神经网络的计算成本就相对较低了。
那么,这个神经网络到底在做什么呢?正如我之前提到的那些参数,神经网络的主要任务其实是预测文本序列中的下一个词。你可以这样理解:当你输入一连串词语,比如"catsatona",这些词就会被送入神经网络。神经网络中分布着的这些参数,就是完成这一任务的关键。通过神经元的相互连接和激发,来预测下一个单词。
你可以这么理解这个过程:输入一段文本后,神经网络会预测下一个词是什么。举个例子,在"catsatona"这四个
词的上下文中,神经网络可能会预测下一个词是“mat”,并且给出了97%的高概率。这就是神经网络要解决的核心问题。从数学上可以证明,预测与数据压缩之间存在密切联系。这也是为什么我会说,这种神经网络训练在某种意义上是一种数据压缩:因为如果你能够非常准确地预测下一个词,你就可以利用这个能力来压缩数据集。
所以,这其实是一个专注于预测下一个词的神经网络。你输入一些词,它就会告诉你接下来的词是什么。这种训练的结果之所以显得有些神奇,是因为尽管下一个词预测看似是一个简单的任务,但实际上它是一个非常强大的目标。因为这个目标迫使神经网络在其参数中学习到大量关于世界的信息。
我举个例子,我在准备这个演讲时随机找了一个网页。这个页面是从维基百科的主页抓取的,讲的是RuthHandler的故事。所以,想象一下你是神经网络,你需要根据给定的词来预测下一个词。在这个例子中,我用红色标出了一些信息量很大的词。例如,如果你的目标是预测下一个词,那么你的参数必须要学习很多这样的知识。你得知道RuthHandler是谁,她何时出生,何时去世,她是谁,她的成就等等。在这个预测下一个词的任务中,你实际上学到了大量关于世界的知识,所有这些知识都被压缩到权重和参数中。
**LLMDreams
那么,我们如何实际使用这些神经网络呢?当我们训练好它们后,我演示了模型推断是个非常简单的过程。我们基本上是生成下一个词,我们从模型中采样,选择一个词,然后我们继续将其反馈进去并得到下一个词,然后继续这样反馈。我们可以重复这个过程,让这个网络仿佛在“梦游”互联网文档。打个比方,如果我们只是运行神经网络,或者说进行推理,我们会得到类似于在网络上浏览的梦境体验。
但我们永远不能百分之百确定它生成的内容是幻觉、错误的回答,还是正确的回答。所以,它的一部分内容可能是记忆中的,而另一部分则不是,我们无法精确区分。但大多数情况下,这就像是它在梦游或在做关于互联网文本的梦,源于它的数据分布。这种能力使得神经网络能够生成各种文本,从代码到商品描述再到百科全书条目,但它也意味着生成的内容需要谨慎验证和审查,以确保准确性和可信度。这就是模型训练和模型推断的关键过程,它们共同构建了人工智能模型的能力和潜力。
第三部分:
**Howdotheywork
好了,让我们换个话题,来看看这个神经网络是怎么运作的?它是如何完成下一个词预测任务的?它内部的运作机制是什么?这里的情况稍微复杂一些。如果我们放大神经网络的简化图,这有点像是神经网络的示意图。这就是我们称之为Transformer的神经网络架构,这是它的一个示意图。现在,这个神经网络的一个显著特点是,我们对其架构有着完整的理解。我们清楚地知道在它的各个阶段会发生哪些数学运算。
我们大致理解,它们构建并维护了某种知识库,但这个数据库却非常奇特、不完美且怪异。最近有一个广为流传的例子,我们称之为“反转诅咒”。比如,如果你和目前最先进的语言模型GPT-4(ChatGPT的一部分)对话,你问,谁是汤姆·克鲁斯的母亲?它会告诉你是玛丽·李·菲弗,这是正确的。但如果你问,谁是玛丽·菲弗的儿子,它会告诉你它不知道。这种知识很古怪,它似乎是单向的。这些信息并不是简单存储后就能从各种角度获取,你必须从某个特定的角度去提问。
这真是既奇怪又令人困惑。归根结底,我们实际上并不真正了解其工作原理,只能大致判断它是否有效,以及有效的可能性有多大。简而言之,可以将大语言模型(LLM)视为难以完全解读的产物。它们与你可能在工程学科中建造的任何其他东西都不相似。它们不像汽车,我们了解汽车的每一个部件。
它们是这些来自长期优化过程的神经网络。我们目前并不完全理解它们是如何工作的,尽管有一个叫做可解释性或机械可解释性的领域,正在尝试研究并理解这些神经网络的每一个部分。目前,我们可以在一定程度上做到这一点,但还未能全面实现。现在,我们主要将它们视为基于经验的产品。我们可以给它们输入一些数据,然后测量输出结果。我们基本上可以测量它们的行为表现。我们可以观察它们在许多不同情况下生成的文本。因此,我认为这需要
相应的复杂评估来处理这些模型,因为它们主要是基于经验的。
**FinetuningintoanAssistant
现在,让我们来看看我们如何实际获得一个助手模型。到目前为止,我们只谈论了这些互联网文档生成器,对吧?这是训练的第一阶段,我们称之为预训练。我们现在正在进入训练的第二阶段,我们称之为微调。这一阶段我们会获得所谓的助手模型。因为我们实际上不仅仅需要文档生成器,文档生成器对许多任务帮助不大。我们希望能向某个系统提问,并让它根据这些问题生成答案。所以我们真正需要的是一个助手模型。
接着,有一个助手角色,同样由人来填写理想的回复应当是什么。理想的回复,以及如何定义它,以及它应该是什么样子,都是根据我们为这些参与者提供的标注文档来确定的。像OpenAI或Anthropic这样的公司的工程师会制定这些标注文档。现在,预训练阶段主要处理大量的文本,但这些文本可能质量不高,因为它们都是从互联网上获取的,有数十甚至数百TB的文本,而且并非所有的都是高质量的。但在第二阶段,我们更看重质量而非数量。所以我们可能只有很少的文档,比如10万份,但这些文档都是对话形式,并且都是非常高质量的,由专业人士基于标注指南创建的。
所以我们现在更换数据集,转而在这些问答形式的文档上进行训练。这个过程被称为微调。完成这些步骤后,我们就能得到所谓的助手型模型。这个助手模型现在遵循它新训练文档的形式。举个例子,如果你问它一个问题,比如:“你能帮我查一下这段代码吗?似乎有个bug。请打印helloworld。”即使这个问题并不是训练集的一部分,模型在微调后理解它应该以一个有用的助手的风格回答这类问题。它会这样做。它会再次逐字采样,从左到右,从上到下,所有这些词都是对这个问题的回复。
第四部分:
**Summarysofar
构建像ChatGPT这样的模型包括两个主要阶段:预训练和微调。预训练阶段需要从互联网上搜集大量文本资料,使用GPU集群进行处理。这些高性能计算机的成本非常昂贵,通常需要几百万美元的投入。完成后,就得到了基础模型。由于这个过程计算量巨大且成本高昂,公司通常一年或几个月才会做一次。微调阶段相对便宜,需要编写标注指南和雇佣人员进行帮助。例如,可以通过ScaleAI等公司进行文档标注。这个阶段需要收集约100,000个高质量的问答回应样本,成本要低得多,可能只需一天就能完成。接下来是进行大量的评估工作,部署模型,并监控和收集任何不当行为。对于每个不当行为,都需要修复并返回第一步重复这个过程。修复方法通常是找到错误回应的对话,然后用正确的回应替换。由于微调成本较低,可以每周或每天进行迭代,许多公司在微调阶段而非预训练阶段会更频繁地进行迭代。
Meta发布的Llama2系列包括基础模型和助手模型。基础模型无法直接使用,因为它们无法直接对问题回复正确的答案,而助手模型则可以直接进行问答。Meta已经完成了极其昂贵的预训练阶段,提供了基础模型,允许用户基于这些结果进行自己的微调。此外,还有一个你可以选择进行的第三阶段微调,即人类反馈强化学习(RLHF),主要通过使用比较标签来提升额外性能。在OpenAI,这个过程被称为人类反馈强化学习(RLHF),这其实是一个可选的第三阶段,它能在大语言模型中提升额外性能,主要是通过使用比较标签。例如,OpenAI的InstructGPT项目就是这样的一个例子。
**Appendix:Comparisons,Labelingdocs,RLHF,Syntheticdata,Leaderboard
在第二阶段提到了“和/或对比标注”。对于人类标注员而言,比起自己撰写答案,比较候选答案通常更为简单。例如,对于一个要求写关于回形针的俳句的问题,给标注员提供助手模型生成的候选俳句,让他们挑选出更佳的一首,比自己创作要容易得多。这也是为什么在很多情况下,进行比较比创作来得容易。此外,还有一个第三阶段的微调过程,可以利用这些比较结果来进一步优化模型。在OpenAI,这个过程被称为人类反馈强化学习(RLHF),是通过使用比较标签来提升模型性能的可选第三阶段。
关于标注文档,尽管可能会长达几十甚至上百页且颇具复杂性,但其核心是要求参与者保持有帮助、真实和无害。随着大语言模型能力的提升,人机协作在创建这些标签中的作用日益增强。例如,可以让模型先生成答案样本,然后由人工挑选
部分形成最优答案,或者让模型帮助检查工作。
在市面上领先的大语言模型排行榜上,例如加州大学伯克利分校管理的ChatbotMarina,使用ELO评分对不同的模型进行排名。ELO分数的计算方式与国际象棋类似,基于模型间的对比胜率。顶部的是专有模型,如OpenAI的GPT系列和Antropic的Claude系列,这些模型表现最佳但无法获取其权重,只能通过网络界面访问。其次是公开权重的模型,例如Meta的Llama2系列和法国Mistral系列的Zephyr7BBeta。总体上,封闭模型的表现更好,但无法进行微调或下载,只能通过网络界面使用。然后是所有的开源模型和整个开源生态系统,它们的性能相对较差,但可能已经满足某些应用需求。目前,开源生态系统正在努力提升性能,试图追赶专有生态系统。
第五部分:
好的,现在我要转换话题,我们将讨论语言模型,它们是如何改进的,以及这些改进将带我们走向何方。首先要理解的关于大语言模型的重要概念是“规模化法则”。事实证明,这些大语言模型在预测下一个词的准确性方面的表现是一个非常平滑、规律性强,并且只有两个变量的预测函数。一个变量是N,即网络中的参数数量;另一个变量是D,即你用来训练的文本量。只要有了这两个数据,我们就能非常准确地预测你在下一词预测任务上能达到的准确度。令人惊奇的是,这些趋势看起来并没有出现停滞或达到极限的迹象。这意味着,如果你在更多文本上训练更大规模的模型,我们可以非常自信地预期下一词预测的表现将会提升。
**ToolUse(Browser,Calculator,Interpreter,DALL-E)**
假设你和我遇到同样的问题,你可能会选择上网搜索,对吧?ChatGPT做的正是这样的事情。它能够发出特定的词汇,我们可以通过这些词汇观察它是如何尝试进行搜索的。在这种情况下,我们可以拿着这个查询去Bing搜索,查看搜索结果。就像你我在浏览搜索结果一样,我们可以把搜索到的文本反馈给语言模型,让它基于这些文本生成回答。这个过程非常类似于我们使用浏览器进行研究的方式。然后,它会将这些信息整理成以下形式,并以此方式进行回应。
与ChatGPT交流就像与人交谈一样自然。现在我们看着这张图表,想要进行更多的分析。比如,我们现在想在这个图表上加一条线性趋势线,并尝试推算ScaleAI到2025年底的估值。再比如,在图表上标出今天的日期,并基于趋势线来估算今天和2025年底的估值。ChatGPT完成了所有编码工作,虽然这些代码没有展示出来,但它提供了详细的分析结果。在图表的底部,我们可以看到日期和估值的推算结果。根据这个趋势线的拟合结果,今天ScaleAI的估值大约是1500亿美元。而到了2025年底,这个公司预计会成长为价值高达2万亿美元的科技巨头。所以,祝贺ScaleAI团队。但这只是ChatGPT擅长的分析类型之一。我想通过这个例子展示的核心点是,语言模型在工具使用方面的能力以及它们的发展趋势。它们的功能不再局限于在大脑中处理信息和选择词汇。如今,它们开始利用各种工具和现有的计算基础设施,将一切紧密联系并用词汇交织在一起,如果这有意义的话。