翻译: 深入分析LLMs like ChatGPT 一
大家好,我想做这个视频已经有一段时间了。这是一个全面但面向普通观众的介绍,介绍像ChatGPT这样的大型语言模型。我希望通过这个视频让大家对这种工具的工作原理有一些概念性的理解。
首先,我们来谈谈你在这个文本框里输入内容并点击回车后背后的运作机制。我们应该输入什么?这些生成出来的词又是怎么回事?它是如何工作的?你到底是在和什么交流?
我们将从构建像ChatGPT这样的东西开始讲起,在这个过程中,我会提到一些这些工具在认知心理学方面的影响。
预训练数据(互联网)
预训练阶段是整个过程的第一步。预训练阶段的第一步是从互联网下载和处理数据。为了让大家对这个有个直观的感受,我推荐大家看看这个网址。有一家公司叫Hugging Face,他们收集、整理并创建了一个名为FineWeb的数据集。他们在这个博客文章里详细介绍了FineWeb数据集的构建过程。像OpenAI、Anthropic和Google等主要的LLM提供商内部也有类似的数据集。
我们试图从互联网上获取大量高质量的文本,这些文本来源公开可用,并且我们希望文档的种类非常丰富,因为我们希望模型能包含大量的知识。实现这个目标其实很复杂,需要多个步骤。比如FineWeb数据集最终大概是44TB的磁盘空间。虽然互联网非常大,但我们处理的是文本,并且经过了严格的筛选。
Common Crawl是一个从2007年开始就一直在抓取互联网的组织。截至2024年,他们索引了27亿个网页。他们有很多爬虫在互联网上抓取数据,从一些种子网页开始,顺着链接不断抓取并索引信息。Common Crawl的数据很原始,需要经过很多处理步骤,比如URL过滤,去除恶意网站、垃圾网站等;文本提取,把HTML代码转化为纯文本;语言过滤,比如FineWeb会用语言分类器筛选出英语占比超过65%的网页;还有去重和去除个人身份信息等操作。
标记化(Tokenization)
在把文本输入神经网络之前,我们需要决定如何表示这些文本并将其输入。我们的技术要求文本是一维符号序列,并且符号数量有限。我们先把文本转化为UTF - 8编码的原始比特,然后通过字节对编码算法等方式将文本转化为有限的符号序列。比如GPT - 4使用了大约10万个可能的符号。
神经网络的输入输出
我们把文本序列用标记器转化为标记序列后,就进入神经网络训练阶段。我们希望模型学习标记在序列中的统计关系。我们会从数据中选取一定长度的标记窗口,预测下一个标记。开始时神经网络是随机初始化的,我们会根据预测结果和真实标签调整网络参数,让正确答案的概率更高。
神经网络内部
神经网络的输入是变长标记序列,输出是对下一个标记的预测概率。这些参数就像DJ调音台上的旋钮,通过调整参数来优化模型的预测结果。现代神经网络有数十亿个参数,训练过程就是不断调整这些参数使其与训练数据的统计模式相匹配。
推理(Inference)
推理阶段是从模型中生成新数据。我们从一些起始标记开始,根据模型的概率分布采样下一个标记,不断重复这个过程。由于采样和随机性的存在,生成的结果具有一定的随机性,可能与训练数据不完全相同。
GPT - 2:训练和推理
GPT - 2是OpenAI发布的第二代Transformer神经网络,有16亿个参数,最大上下文长度为1242个标记,训练了约1000亿个标记。我曾尝试复现GPT - 2,训练成本在2019年估计约为40000美元,现在可以做得更好且成本更低。
Llama 3.1基础模型推理
我们还可以使用一些大科技公司训练好的模型。比如Llama 3,它是Meta发布的450亿参数模型,训练了15万亿个标记。Meta还发布了Instruct版本,使其成为一个助手模型。我们可以与基础模型交互,但它还不是完整的助手,只是一个标记自动补全工具,并且结果是随机的。虽然它能提供一些知识,但这些知识是模糊、概率性的,而且可能存在幻觉。不过,通过巧妙的提示设计,基础模型也可以在一些实际应用中发挥作用,比如构建翻译应用等。甚至可以通过特定的提示结构让基础模型扮演助手的角色。
最后,我们来回顾一下从预训练到后训练的过程。我们希望训练像ChatGPT这样的LLM助手,预训练阶段主要是获取互联网文档,将其分割成标记,然后用神经网络预测标记序列。
参考
https://www.youtube.com/live/7xTGNNLPyMI