返回博客2025年2月5日

笔记 - Deep dive into LLMs like ChatGPT with Andrej Karpathy

AILLMs

笔记 - Deep dive into LLMs with Andrej Karpathy

我刚刚花了几个小时在 Andrej Karpathy 的最新视频 Deep dive into LLMs like ChatGPT 中。

Andrej Karpathy 是一位斯洛伐克裔加拿大计算机科学家,曾担任特斯拉公司的人工智能和自动驾驶视觉总监。他是 OpenAI 的联合创始人,曾在那里工作,专注于深度学习和计算机视觉领域。,该视频中,他为大众,以大家能听懂的方式,深入介绍了大语言模型(LLMs)的内部运作原理。强烈推荐对 LLM 感兴趣的朋友观看。

在观看视频之前,我把大语言模型当作魔法:输入随机文本,按回车,得到结果,但它们是如何工作的呢?看完 Andrej 的视频后,我意识到 LLMs 与我想象的很不同,但同时又非常容易理解。在这篇文章中,我总结了从视频中学到的内容。

以下是我整理的笔记:

1. 聊天机器人的构建模块:从互联网到模型

Andrej 首先描绘了类似 ChatGPT 的 LLMs 实际是如何构建的。这是一个多阶段的过程,就像建造房子一样,而不是简单地变魔术。

第一阶段:预训练 - 消化互联网(并清理混乱)

这个阶段是让 LLM 吸收尽可能多的知识。但这并不像简单地把互联网dump到计算机那么简单。

数据获取(自助餐开放!)

LLMs 需要在海量文本数据上训练。包括维基百科、新闻文章、博客文章、代码库等——越多越好(在一定程度上)。像 Common Crawl 这样自 2007 年以来一直在索引网络的数据源非常重要。

数据清理(关键的"准备"阶段)

这是事情变得有趣的地方。原始互联网数据非常混乱。我们需要过滤大量垃圾数据。这包括:

  • URL 过滤:将恶意网站、垃圾邮件和其他不良内容列入黑名单。
  • 文本提取:网页使用 HTML、CSS 和其他标记语言编码。目标是提取纯文本内容,去除所有格式和导航元素。想想看:模型需要"阅读"文字,而不是网站的设计。
  • 语言过滤:大多数 LLMs 主要关注英语。Andrej 提到 FineWeb 数据集过滤了至少包含 65% 英语内容的页面。这突出了一个关键的设计选择:公司可以根据目标受众和目标优先考虑不同的语言。多语言能力是一个有意识的决定,而不是理所当然的。
  • 去重:消除重复信息,这样模型就不会对重复信息产生偏见。
  • PII 移除(保护隐私): 过滤掉个人身份信息(PII),如地址、社会安全号码和电话号码,这对保护隐私至关重要。
  • 分词(分解): 清理后的文本被分解成"词符"。把这些看作语言的原子——短字符序列。Andrej 强调 GPT-4 使用超过 100,000 个这样的独特符号!这不是关于单个字母,而是关于常见的序列,如整个单词、标点符号,甚至单词的部分。Andrej 推荐使用 Ticktokenizer 来探索分词过程。
  • 数据规模: 数据清理和分词的结果可能高达 40 TB!然后,你会得到一个最多 15 万亿个词符的序列。

第二阶段:神经网络训练 - 建模词符关系

好的,我们现在有了这个巨大的词符堆。接下来呢?这个阶段是 LLM 实际学习"说话"的地方。

  • 统计建模:LLM 不是"理解"文本,而是寻找统计关系。它本质上是在学习一个词符接着另一个词符出现的概率。它采用滑动窗口,在窗口长度内取一些词符,并根据它之前看到的数据集,尝试预测正确的下一个词符。模型通过训练预测序列中的下一个词,开始反映数据中存在的世界。
  • 神经网络 - 数学表达式:LLM 的核心是一个复杂的神经网络。但 Andrej 解释:把它想象成一个巨大的数学表达式。输入是词符序列,输出是下一个词符应该是什么的概率。最初,这个表达式的"旋钮"(参数/权重)是随机设置的,所以模型会输出胡言乱语。
  • Transformer 架构:根据 Andrej 的说法,使用的最先进的工业级神经网络架构称为 Transformer。它具有特殊的结构,包括嵌入层、多层感知器(MLP)块和注意力块。
  • 参数或权重:现代神经网络有数十亿个这样的参数。一开始,这些参数是完全随机设置的。换句话说,就是旋钮,通过简单的数学表达式让模型做出预测。训练过程微调这些参数(那些"旋钮"),使 LLM 能够越来越有信心地"说话"。
  • 机器如何学习 - 最小化损失:一个非常高计算量的过程,其中权重被迭代更新,使得输出概率与输入文本更加一致。目标是最小化"损失",即 LLM 的预测与正确词符之间的差异。每一行都是对神经网络的一次更新,改变神经网络的权重,使其更好地预测序列中的下一个词符。Andrej 指出,在这个过程中,损失通常从一开始就会改善。
  • 为什么转换需要这么多算力: 上述所有步骤都需要大量计算资源。神经网络中使用的主要计算架构称为 GPU - 图形处理单元 - 因为它们在应用需要并行计算的矩阵变换方面非常有效。

第三阶段:推理 - 把所有内容组合在一起

随着这些权重的校准,神经网络现在有了"个性",知道说什么,知道使用什么词。它只需要不断重复这些词来形成所需的输出。

2. 深入理解分词

在神经网络中,文本应该被转换为神经网络能够理解的形式。

UTF-8 编码

你可以将数据集中的所有文本编码为bit(0和1)并传递给模型。这样可以得到对应特定文本的原始位,但模型效率不高,因为序列长度在我们的神经网络中变得非常有限且宝贵。你不想要只有两个符号(零和一)的极长序列。

字节对编码

这就是魔法发生的地方。我们想要在词汇表大小和最终序列长度之间进行权衡,方法是考虑一些连续的bit(通常是 8 位)并将它们分组为新的字节。但为了让它变得更复杂,我们还想要对一些连续的字节进行分组,以创建一个具有 ID 的更大符号,并使用这个新符号重写每个字节以缩短长度。这个从文本到唯一 ID 的过程就是分词。

GPT-4

Andrej 提到 GPT-4 使用了 100,277 个符号的词汇表,这些不仅仅是字母,而是字母序列,所以它将文本视为这些符号的一维序列。重要的是要把这些看作唯一的 ID,而不是数字,总的来说,LLMs 看到的是这些词符,而不是人类的词。

3. 深入理解神经网络训练

大语言模型究竟是如何理解的?那个"黑盒"里面到底发生了什么?

神经网络内部

正如 Andrej 提到的,神经网络将输入作为词符序列。神经网络的架构是由一些固定的参数集合参数化的,比如 85,000 个参数,它是一种将输入转换为输出的方式。然后这个序列通过数学表达式与神经网络的权重混合,输出每个词符成为正确词符的概率。

训练神经网络

这些训练过程基于上下文窗口更新神经网络,例如前四个词符,以预测序列中的下一个词符。它更新神经网络,使真实的下一个词符的概率变得略高,推动神经网络对序列中正确的词符给出更高的概率。然后,为了训练神经网络并改善预测,重要的是我们要尝试调整每个单独的词符,并调整使该词符的概率变得略高。

一个例子

想象在现代网络中有一个带有数万亿项的巨大表达式,但总的来说它们并不可怕。这些表达式将输入与网络的参数混合在一起。

4. 监督式微调 - 学习如何有帮助

上述过程称为预训练。这就像给 LLM 一个通识教育,让它接触广泛的知识。但它得到的只是"互联网的重组",即下一个词符仅仅是统计上最可能的,而不是因为有意回答用户。这就是后训练的用武之地。

人类输入 - 示例编程

这是 LLMs 开始学习个性的地方。在获得通用知识之后,我们希望让那个人以你想要的方式阅读和说话,比如变得有帮助和知识渊博。核心概念是让人类来标注它们。也就是说,人类会想出一个提示,并想出一个理想的 LLM 模型,然后模型将尝试遵循。

标注过程

但是人类如何标注信息呢?数据标注员需要按照特定方式行事,所以数据标注员本身会收到关于如何训练 LLM 行为和说话的指示。正如 Andrej 在视频中显示的,人类应该遵循的一些一般准则是:有帮助、诚实和无害。

最终的语言模型

也就是说,我们试图训练它,使得在提示后,神经网络不会吐出随机互联网数据的重组,而是人类标注员在那种情况下会做的事情。训练之后,我们可以将 LLMs 视为人类标注员的模拟。

5. 强化学习 - 揭示模型的内部思维!

一个问题有许多解决方案。强化学习试图奖励导致正确结果的解决方案。特别是,Andrej 提到这可以改进神经网络的主要原因是,它们通过观察神经网络权重中的结构来学习,使正确的解决方案比以前出现得更频繁。这在不可验证的领域特别有价值,那里的问题不是数学和代码。

奖励模型:强化学习使用一个称为奖励模型(RM - Reward Model)的数学模型,该模型试图以类似人类的方式近似和评分输出。在强化学习中,不是使用人类数据来训练神经网络,而是输出将由这个奖励模型评分。这个奖励模型不是要取代人类专家,相反,LLM 试图遵循奖励模型的指示,所以它们需要被很好地校准以获得理想的结果,因为这已经是 DeepMind 的 AlphaGo 程序中使用的技术。

6. 多模态模型和测试时训练

Andrej 还谈到了一些未来趋势:

  • 多模态性: LLMs 将学会原生地"看"(图像)和"听"(音频),而不仅仅是处理文本。它们需要添加词符词汇表并更新神经网络以适应这些新模态。不是看单词序列中的位和词符,而是必须查看图像或声音中发现的模式来理解该数据的结构。
  • 测试时训练:在现实生活中,人们可以进行实时训练。Andrej 指出,当前的 LLMs 一旦部署,就无法从它们进行的对话和在测试时学到的东西中学习。这就是为什么这可能是一个令人激动的可能性!

主要收获:

  • LLMs 很复杂,但从本质上讲,它们被设计用来识别文本模式和预测输出,而不是去理解。
  • 模型并不完美或必然正确,所以它们应该被用作工具,可以用于灵感启发和问题的初稿。 盲目信任这些 AI 预言很诱人,但 Andrej 强调:始终要验证,始终要仔细审查。
  • 技术在快速发展,所以要记住持续更新。

如果你一直对这些 AI 魔法是如何运作的感到好奇,Andrej Karpathy 的视频是一个很好的起点!

准备开始了吗?

先简单说明目标,我会给出最合适的沟通方式。