1.Model Definition 模型定义
像ChatGPT这样的大语言模型(LLMs)正风靡当今科技界。在维基百科上,大语言模型的定义是:
A large language model (LLM) is a language model notable for its ability to
achieve general-purpose language understanding and generation. LLMs acquire
these abilities by learning statistical relationships from text documents
during a computationally intensive self-supervised and semi-supervised
training process. LLMs are artificial neural networks following a transformer
architecture.
大型语言模型(LLM)是一种因其具备通用语言理解与生成能力而引人注目的语言模型。大型语言模型在计算密集型的自监督和半监督训练过程中,通过学习文本文档中的统计关系来获得这些能力。大型语言模型是采用Transformer架构的人工神经网络。
换句话说:大语言模型是在海量文本数据集上进行训练的,这些数据集包括书籍、网站或用户生成的内容等。它们能够以自然的方式续写初始提示,生成新文本。
大语言模型本质上是一种具有大量参数的神经网络。大致来说,参数越多,模型性能越好。因此我们经常听到关于模型规模的说法,这指的就是参数数量。例如,GPT-3有1750亿个参数,而GPT-4有超过1万亿个参数。
**但模型究竟是什么样子的呢? **
模型只是一个文件
一个语言模型只是一个二进制文件:
(来自安德烈·卡帕西(Andrej Karpathy)的从零构建GPT模型)
在上面的图片中,参数文件是Meta的Llama-2-70b模型,其大小为140GB,包含700亿个参数(以数字格式表示)。run.c文件是推理程序,用于对模型进行查询。 训练这些超大型模型成本非常高昂。训练一个像GPT-3这样的模型需要花费数百万美元。
截至目前,最出色的模型已不再是单一模型,而是几种模型的组合。每个模型都在特定领域进行训练或微调,并在推理过程中协同工作,以实现最佳性能。
但别担心,我们的目标是理解和学习大语言模型的基础知识。幸运的是,我们仍然可以在个人电脑上训练一个模型(参数要少得多)。很快,我们将在 “让我们一起编写大语言模型” 这部分内容中,逐步深入并一起编写代码。
Model Inference 模型推理
当模型训练完成并准备就绪后,用户使用一个问题来查询该模型,问题文本会被传入那个140GB的文件,并逐字进行处理,然后返回最相关的文本作为结果输出。 这里所说的“最相关”,意思是模型将返回最有可能成为输入文本下一个字符的文本。 例如:
Input: "I like to eat"
Output: "apple"
apple 作为下一个字符返回,因为根据模型所训练的大量数据集,“apple” 是 “I like to eat” 最有可能的下一个字符。
还记得我们上面提到的书籍、网站吗?基于我们提供的数据片段,你可以这样想:
“I like to eat apple是模型多次学习过的一句非常常见的句子。”
“I like to eat banana”也是一个常见的句子,但没有上面那个句子常见。
因此在训练过程中,模型是这样判定的:
记录到在“我喜欢吃”之后出现“苹果”的概率为0.375
记录到在“我喜欢吃”之后出现“香蕉”的概率为0.146
... 其他字符概率 ...
因此,这些概率会形成概率集,并保存在参数模型文件中。(在机器学习领域,概率通常被称为权重。) 所以基本上,大语言模型(LLM)是一个概率数据库,它为任何给定字符及其相关上下文字符分配概率分布。
这在以前听起来是不可能的。但自2017年论文《Attention is all you need》发表以来,Transformer架构的引入使得通过在非常大的数据集上训练神经网络来实现这种上下文理解成为可能。
在大语言模型出现之前,神经网络的机器训练确实局限于使用相对较小的数据集,并且对上下文的理解能力极为有限。这意味着早期的模型无法像人类一样理解文本。
这篇论文首次发表时,其初衷是用于训练语言翻译目的的模型。然而,OpenAI的团队发现,Transformer架构是字符预测的关键解决方案。一旦在整个互联网数据上进行训练,该模型就有可能理解任何文本的上下文,并像人类一样连贯地完成任何句子。
以下是一个展示模型训练过程内部情况的示意图:
当然,我们第一次看到它时并不理解,但别担心,我们很快会在接下来的主题中详细讲解。
在深入探讨编程方面和数学细节之前,我们先来了解该模型具体的运行概念和过程。