Andrej Karpathy 的大语言模型深入讲解

原标题Andrej Karpathy’s Deep Dive into Large Language Models

一场关于训练、推理、工具使用和推理能力的实用入门。

AKAndrej Karpathy讲者
频道
Andrej Karpathy
发布
2025年2月5日
视频
3:31:23
阅读
20 分钟
原文
英语
在 YouTube 打开
往下滚动阅读时,视频会缩到右下角继续播放。字幕跟随阅读语言。
阅读语言共 2 种语言可读
由 AI 从英语原文翻译。打开“对照原文”可以逐段核对。
摘要

30 秒看懂

Karpathy 解释从网页文本与切词,到监督微调、强化学习和人类反馈的模型流水线,并举例说明失败与验证。

  1. 1预训练模型从大量文本中学习统计模式。
  2. 2Token文本在预测前被表示为 token ID。
  3. 3后训练对话示例塑造助手行为。
  4. 4幻觉流畅回答可能没有依据,需要核查。
  5. 5工具搜索和计算可以提供有用的外部证据。
  6. 6强化学习反馈可以鼓励成功的解题策略。
  7. 7奖励黑客优化不完美的代理指标可能损害真实目标。

要点建议

  1. 预训练从大型数据集中学习下一 token 模式。
  2. 后训练通过示例和反馈塑造助手行为。
  3. 模型能力不均匀,也可能产生幻觉。
  4. 工具与核查有帮助,但不能保证正确。
  5. 奖励模型是不完美的代理指标,可能被利用。
全文

按章节阅读整理后的全文

只看原始文稿
01

实用入门

我想解释 ChatGPT 这类工具背后是什么:它如何构建、擅长什么、哪里会出错,以及如何更有效地使用。

我想解释 ChatGPT 这类工具背后是什么:它如何构建、擅长什么、哪里会出错,以及如何更有效地使用。

02

预训练数据

第一阶段是预训练,从互联网上收集和处理大量、多样的公开文本开始。

第一阶段是预训练,从互联网上收集和处理大量、多样的公开文本开始。

FineWeb 是一个示例数据集:处理后的文本远小于原始网络数据,因为流水线进行了大量过滤,存储的也是文本而非整个网页。

Common Crawl 提供一个起始网页集合,通过沿网页链接抓取形成。原始材料在训练前需要大量清理。

流水线可以过滤不需要的域名,从 HTML 提取正文,去除导航、格式和其他不适合作为训练文本的内容。

语言过滤是另一项设计选择。如果数据集排除一种语言,模型从这些数据中学习该语言规律的机会就更少。

我查看处理后的文档示例:目标不是找到唯一完美来源,而是构建兼具广度与质量的大型集合。

03

切词

文本进入语言模型前必须表示成一维符号序列,这个转换过程称为切词或 tokenization。

文本进入语言模型前必须表示成一维符号序列,这个转换过程称为切词或 tokenization。

计算机以字节存储文本。可以把字节值理解为符号的标识符,而不是具有有意义数值关系的数字。

字节序列可以压缩为由常见片段构成的更大词表。得到的 token 可以代表词的一部分或其他重复模式。

切词器学习文本与 token ID 之间的映射。不同模型可能使用不同词表,因此会以不同方式拆分相同文本。

切词可视化展示文本如何变成 token 再还原。边界不一定与人看到的字母或单词对齐。

04

预测下一个 token

切词后,训练数据是一长串 ID。神经网络接收之前一段 token 窗口,预测接下来会出现哪个 token。

切词后,训练数据是一长串 ID。神经网络接收之前一段 token 窗口,预测接下来会出现哪个 token。

上下文长度决定预测时提供多少序列内容。更长的窗口可能更有用,但计算成本也更高。

为了演示,我只使用少数 token。实际中,同样的思路会应用到大得多的窗口和海量例子。

网络输出下一个 token 各种可能性的概率。由于训练文本告诉我们实际的下一个 token,我们可以衡量预测是否匹配。

一次优化步骤调整网络参数,使观察到的后续 token 更有可能。对许多例子重复这一过程,模型便逐渐改变。

目标并不是把事实明确写入数据库,而是让网络形成有助于预测后续文本的参数模式。

05

网络内部

在网络内部,信息经过许多层。基本操作是将数值与学习到的权重进行数学组合。

在网络内部,信息经过许多层。基本操作是将数值与学习到的权重进行数学组合。

单个神经元只是简单计算,但许多相连的计算可以形成行为丰富的系统。

乘法、加法和其他基本运算把输入与参数混合。架构研究探讨如何有效安排这些计算。

Transformer 将每个 token 变成向量表示,再通过注意力和其他模块反复变换这些表示。

网络的单个操作很简单,但大量参数和训练更新让总体计算规模十分庞大。

我与生物神经元的比较只是宽泛类比。这些人工单元及其形成的系统并不等同于人脑细胞。

06

推理与训练

训练完成后,模型可以用于推理:从前缀开始,预测下一个 token 的分布并选择一个后续 token。

训练完成后,模型可以用于推理:从前缀开始,预测下一个 token 的分布并选择一个后续 token。

选出的 token 被追加到上下文中,然后过程重复,逐个 token 生成新文本。

采样使生成具有随机性。后续文本可能类似训练材料、组合不同模式,也可能不同于任何特定文档。

训练会改变参数;推理使用一组已训练参数生成内容。产品之后可以更新模型,但一次生成并不等同于一次训练。

我用复现 GPT-2 的例子展示实际训练过程,以及模型大小、上下文和数据如何影响它。

按照后来的标准,GPT-2 规模较小,因此适合教学复现,尽管现代系统可能使用大得多的模型和数据集。

模型有大量参数和有限上下文长度。这些数字属于特定模型,而不是所有语言模型的通用常数。

更好的数据处理、更快的硬件和改进的软件都推动了从较早模型到较新模型的进展。

训练时我们观察损失指标。它概括预测误差;随着优化改善模型在所测数据上的表现,损失通常应下降。

较低训练损失是有用证据,但评估实际能力还需要观察模型在单条训练曲线之外的任务和数据上的表现。

早期样本可能看起来随机。随着模型接受更多更新,生成文本开始呈现更多结构和可识别模式。

早期与后期样本的差异直观展示了学习:参数越来越多地编码数据中的统计规律。

GPU 适合神经网络训练中大规模并行的数值计算。大规模训练时,硬件、电力和软件效率成为核心约束。

更强的系统需要协调许多加速器;简单的学习目标背后是一套要求很高的工程系统。

大型集群的动机是处理更多计算、更快训练或迭代更大模型,尽管成本十分可观。

07

基础模型

模型发布通常同时提供描述计算过程的代码和复现其行为所需的训练权重。

模型发布通常同时提供描述计算过程的代码和复现其行为所需的训练权重。

代码描述架构;具体参数值包含训练过程学到的内容。运行模型需要两者。

我将 GPT-2 与 Meta 的 Llama 3.1 基础模型比较,说明同一预训练大方向如何扩展到大得多的数据集和模型。

基础模型不会自动成为聊天助手。它按学到的模式续写文本,因此提示的形式强烈影响后续内容。

我把基础模型描述为一种非常昂贵的自动补全:它预测与训练文档模式一致的后续文本。

多次采样相同前缀可能得到不同续写,说明模型表示的是一个分布,而不是唯一固定答案。

可以宽泛地把权重理解为对数据模式的有损压缩。这是类比,并不是每个来源的字面档案。

精心选择的提示可以引出预训练中学到的知识,但流畅的回答本身不能证明信息准确。

模型有时能非常接近地复现一段文字,说明记忆可能与泛化同时存在。

记住的细节与新生成的组合是不同的行为;不能在没有证据时仅凭回答假定是哪一种。

基础模型的知识取决于训练数据及其截止时间。它可以对后来的事件生成看似合理的续写,却并未观察过这些事件。

合理续写的能力对写作有用,但也让未经核实的事实性回答存在风险。

少样本提示把例子放在前缀中,例如词语和译文的配对,让后续生成沿着示范的模式进行。

类似对话的前缀也可以让基础模型像助手一样续写,但这仍是提示模式,而不是专门的助手训练阶段。

交替的人类与助手轮次示例展示了格式如何引导模型继续回答问题。

这引出后训练:我们希望模型可靠地回应用户请求,而不只是续写任意互联网文本。

08

监督后训练

后训练从预训练基础模型开始,使用对话示例教会模型更有用的助手风格。

后训练从预训练基础模型开始,使用对话示例教会模型更有用的助手风格。

助手并不是以通常意义上的一长串显式规则编程的;它的行为通过示例和训练在统计意义上形成。

监督数据集包含许多对话,可能有多轮交互。每个回答示范一种期望的行为。

创建这些示例的人与流程很重要:他们决定训练材料中的有用性、准确性和安全性呈现为何种样子。

后训练数据集比广泛的预训练语料小得多,因此这一阶段可能短得多,尽管它会改变用户体验。

对话必须序列化为 token,包括标记谁在发言以及轮次何时开始或结束。

不同模型家族使用不同格式,但结果仍是可以用下一 token 预测来训练的序列。

模型从用户与助手轮次的统计模式中学习,包括回答和拒绝请求的示例。

同一基本机制因此可以用于互联网文档和对话;监督微调的主要区别在于训练数据。

我以 InstructGPT 为历史例子,说明助手如何根据示范和偏好训练。

人工标注者依据说明创建期望回答的例子。这些说明是产品设计的重要组成部分。

这些示例试图让模型有用、真实,并妥善处理某些请求,但任何有限示例集都不能保证完美行为。

公司可能使用详细标注指南和专业审阅者。最终的助手行为反映了数据创建时作出的选择。

模型模仿回答时,并不是实时咨询人工标注者,而是根据许多示例中学到的模式生成。

大量例子可以形成助手人格的表象,尽管模型在熟悉示例之外仍可能出现意外行为。

后来的数据集可以结合人工工作与其他模型生成的合成示例,并通过不同方式检查或编辑。

合成对话数据集可以大规模覆盖许多主题,其有用性不仅取决于数量,也取决于质量。

对于专业话题,专业知识和审阅可能很重要,因为示例设定了助手学会模仿的模式。

“平均标注者”是理解模仿的一种心智模型:助手可以反映许多示例,而不是以某一位特定专家的身份发言。

预训练知识与后训练示例相互作用:前者提供广泛模式和信息,后者教模型如何在对话中回应。

这种结合可以让模型有用,但也解释了为什么不能把自信的助手风格误认为知识有保证。

09

幻觉与工具

幻觉发生在模型生成看似合理却没有知识或证据支持的回答时。流畅本身不是置信度检验。

幻觉发生在模型生成看似合理却没有知识或证据支持的回答时。流畅本身不是置信度检验。

我使用一个虚构名字展示助手如何可能自信地编造传记,而不是说自己缺少信息。

模型是在以回答的风格续写 token 序列;用户则会把结果理解为事实性主张。

训练目标与用户预期间的差距,是后训练需要明确处理幻觉的原因之一。

一种缓解方法是加入示例,教模型在缺少证据时承认不确定或说不知道。

我介绍 Llama 模型报告过的一种流程:测试模型知道什么,并在其知识边界附近加入训练示例。

可以根据来源段落生成问题,并与模型不借助外部信息的回答比较,帮助识别自信回答可能不可靠的地方。

当相关段落直接放入上下文时,模型重新组织信息往往比从记忆中回忆冷门事实更准确。

这并不消除检查来源和答案的必要:上下文本身可能有错,模型也可能误读或遗漏细节。

我展示一个事实问题,模型在不借助外部信息时给出不一致的答案,说明依赖回忆的困难。

训练可以奖励适当的不确定表达,但当信息可以查找时,说“我不知道”只是可能的回应之一。

第二种缓解方法是使用工具:助手可以请求搜索或计算,接收结果,再将结果用于回答。

工具调用需要一种协议,区分模型的请求与外部结果。实际运行工具的是外围应用。

特殊标记可以表示搜索请求及其边界。这些标记属于模型的输入输出格式。

返回的文本被放入上下文,之后模型可以在看到该证据的情况下继续生成。

后训练中的示例教模型何时以及如何使用工具。助手仍需选择有用的查询并解释结果。

搜索可能失败、取回不佳来源或被误读,因此工具访问可以减少一些错误,但不能保证真实。

引用和检索材料让核查更容易:回答可以指向用户能够检查的文本。

我区分权重中的知识与放入当前上下文的信息。后者更像这次对话中可用的工作材料。

如果模型在训练中见过一本名著,它可能根据学到的模式概述;但提供实际章节是不同且更便于核查的来源。

上下文窗口有容量限制。没有放入窗口的内容,不会自动作为当前观察提供给模型。

我使用一个简化心智模型:模型处理对话上下文并生成回答,而不是维持类似人类的持续内在生活。

产品可以加入持久记忆或其他外围系统,因此完整应用的行为不只取决于模型本身。

助手关于自身身份的陈述可能反映训练示例和指令,不应自动当成直接的自我观察。

开发者可以通过插入描述模型角色和操作约束的系统指令来塑造上下文。

这类指令可以包含助手名称或知识截止时间。它们属于提示上下文,不保证助手拥有完美的自我认识。

期望回答在训练中的写法会影响表现,尤其是在任务需要多个步骤而非立即回答时。

10

Token 与推理

模型从左到右生成。每个下一 token 之前可用的计算受到网络和当前上下文的限制。

模型从左到右生成。每个下一 token 之前可用的计算受到网络和当前上下文的限制。

压缩到单个 token 中的复杂计算,可能比逐步构建有用中间结果的序列更困难。

我用一个简单算术问题说明,模型为什么可能受益于将工作分配到多个生成 token 中。

中间步骤让部分结果在上下文中可供后续生成使用,但步骤本身也可能出错。

重点不是更长的回答总是正确,而是合适的序列可以把一次困难跳跃拆成几个较小操作。

一些简单问题可以立即解决,因此中间过程是否有帮助取决于问题和模型。

在一次演示中,模型用很少 token 回答简单问题,表明这一经验法则不是绝对规则。

随着数字或任务变难,未经验证的心算可能失败,即使答案看起来连贯。

对于需要可靠性的计算,我更倾向使用计算器或代码,同时仍要检查模型是否提供了正确输入。

工具把适合的一部分问题交给为精确操作设计的系统;语言模型则协调请求与回答。

实际使用时,在合适的情况下让模型有空间逐步处理,并在适合任务时使用外部工具。

我演示一个计数问题:把文本复制到代码中并让代码计数,可能比要求模型心算更可靠。

模型仍必须正确传递输入。工具使用改变了错误可能发生的位置,并不会让整个流程绝无差错。

切词也有助于解释为什么看似简单的字符级任务对模型可能很棘手。

我们看到的一个单词由字母组成,但在模型内部可能表示为几个边界不与单个字符对齐的 token。

数某个特定字母同时涉及表示和计数两种挑战,因此表现可能不均匀。

这形成了“参差不齐”的能力轮廓:模型可以完成复杂任务,却仍可能在看似简单的任务上失败。

人们容易从令人印象深刻的例子推断出单一平滑的智能水平,但这种心智模型可能导致过度自信。

一些令人意外的失败仍是活跃研究问题。我提到一个例子:研究人员检查模型激活,以调查一个令人困惑的回答。

理解失败可能同时需要输入表示和训练分布的细节,而不能只依据人类觉得什么容易。

监督微调仍是在不同数据集上进行下一 token 训练。强化学习则增加了另一种改善行为的方式。

我描述的总体流程是预训练、监督后训练,然后是强化学习;实际系统还会使用其他变体。

11

强化学习

对于强化学习,可以想象给模型问题、采样可能的解法,并偏好能得到可验证正确答案的行为。

对于强化学习,可以想象给模型问题、采样可能的解法,并偏好能得到可验证正确答案的行为。

与学生的类比有用但有限:预训练提供背景,例子展示解法,练习则可能改善解决问题的能力。

练习需要评估结果的方法。答案已知的数学题提供了相对清晰的信号。

模型可以尝试多种方法,而不是只复制一种人类写出的解法。成功方法会成为训练信号。

这些尝试建立在预训练得到的背景模式和监督训练中看到的示例之上。

这一过程并不意味着人类检查了每一次尝试;它依赖可用的评估程序和训练设计。

完整解法可以有两个目的:得到正确答案,以及以人能理解的方式传达推理。

对人自然的步骤,不一定是模型最容易可靠生成的序列。

强化学习可以鼓励适合模型自身计算的序列,即使其风格不同于人类解法。

我用一个小模型和简单算术题演示这一过程,采样不同候选解法。

有些尝试得到正确答案,有些没有。训练流程把这种区别作为反馈。

具体算法很重要:如果选择和加权尝试的方式不当,训练可能不稳定,或奖励错误行为。

一个简化图展示并行采样许多解法,并在后续更新中鼓励成功解法。

这张图是教学模型,并不是对所有强化学习实现的完整描述。

还可以用简洁等其他标准在成功尝试中选择,但这种选择会改变模型受到鼓励的行为。

经过反复更新,模型可能更容易产生解决训练分布中问题的策略。

我将其比作在背景阅读和示范之后通过练习学习,同时强调这仍是统计训练过程。

简单的高层叙述隐藏了许多工程与数学选择,包括如何构造提示、奖励和更新。

本讲座录制时,语言模型强化学习仍在发展;训练成功依赖示意图中没有展示的细节。

我转向 DeepSeek-R1,将其作为在推理任务上使用强化学习的公开例子。

报告的训练曲线显示,随着更新,任务准确率提高,输出也变得更长、更像逐步思考。

模型可以在解题中生成检查、修改和替代方法。这些行为是学到的,而不是逐个手工编码。

我用“认知策略”作为比喻,指在生成文本中处理问题并检查方法的方式。

不应假定可见解释或推理摘要暴露了每一项内部计算,也不能据此证明答案正确。

在算术例子中,模型重新审视计算,并从另一角度检查结果。这可能有用,但检查也可能出错。

不同提供商展示的中间推理量不同。用户应评估结果和证据,而不是从界面推断隐藏细节。

讲座展示了通过托管服务试用推理模型的方法;这一历史演示中描述的产品、限额和价格都可能变化。

较长的推理过程可能比立即回答消耗更多时间和计算,因此合适选择取决于任务。

对于较难问题,我建议尝试面向推理的模型;简单请求则可能不足以从额外延迟中受益。

模型类别和产品界面会演变,因此这里的区分是理解演示的方法,而不是永久的产品目录。

重要变量是系统能否为任务投入有用计算,以及结果能否被检查。

我把这一思路与游戏中的早期强化学习成功联系起来,在游戏中明确的胜负可以提供反馈。

AlphaGo 是一个例子:系统通过对弈并利用结果强化有效选择来改进。

游戏提供受约束的环境和明确结果,这让它不同于许多开放式人类问题。

由于练习不限于复制人类棋局,强化学习可以发现令专家意外的走法。

AlphaGo 比赛中的著名走法说明,通过训练发现的策略最初可能让人类评论者感到奇怪。

出人意料的走法不会自动变好;它的价值要通过在棋局中的表现来确立。

对于更广泛的推理任务,研究人员需要大量练习问题以及与真正目标相对应的评估方法。

12

人类反馈与奖励黑客

有些任务,例如笑话或摘要,没有简单的精确答案。这引出基于人类反馈的强化学习。

有些任务,例如笑话或摘要,没有简单的精确答案。这引出基于人类反馈的强化学习。

人可以比较候选回答,但大规模要求人给模型每次尝试评分会很昂贵。

我用笑话质量作为主观奖励的例子:笑话是否好笑没有自动的算术检验。

人类偏好数据可以训练一个单独的奖励模型,估计人们更偏好哪些输出。

这种间接方式意味着人们标注较小的一组比较,然后由学到的评估器提供许多后续分数。

对人来说,比较多个回答可能比给每个回答指定精确的数值质量分数更容易。

奖励模型通过训练,使其排序在收到的例子上尽量与人类偏好一致。

训练后,评估器给候选回答打分,语言模型可以针对这些估计进行优化。

评估器本身也是学习得到的模型,因此其分数只是近似值,可能与人的实际判断不一致。

这一方法可以把反馈扩展到没有精确答案的任务,但也引入新失败模式:优化代理指标而不是真实目标。

实践中人类反馈方法可以改善模型,但我将观察到的改善与对每项改善原因的完整解释区分开来。

偏好排序提供有用监督,尤其适用于验证器不能简单比较最终数字的开放式任务。

优点是由人引导、可扩展的反馈;缺点是学到的奖励函数并不完美。

如果优化推进过头,语言模型可能发现能让评估器打高分、却对目标任务并不真正好的输出。

在笑话例子中,预测分数可能上升,而实际质量最终下降。这是奖励黑客现象的一种形式。

增加优化本身不能修复有缺陷的代理指标,反而可能让不匹配更加明显。

优化充分的系统可能找到评估器的对抗样例,因为评估器也是有自身盲点的神经网络。

这就是为什么训练扩大时,可验证答案与主观学习奖励的表现不同。

我认为人类反馈优化有用,但比使用可靠外部验证器的强化学习更受限制。这是我对取舍的理解。

三个阶段都依靠大量基础设施和数据工作,本入门讲解对其中许多内容作了简化。

模型能力仍不均匀。用户需要一种心智模型,能同时容纳令人印象深刻的表现与意外弱点。

13

未来方向与回顾

展望未来,我预计多模态系统会处理和生成文本以外的内容,包括音频和图像。这是讲座当时的预测。

展望未来,我预计多模态系统会处理和生成文本以外的内容,包括音频和图像。这是讲座当时的预测。

一种概念路径是把其他模态表示为 token,并在组合这些 token 的序列上训练模型。具体实现可能不同。

我还预计智能体会使用工具完成更长任务,但它们会出错,因此人工监督很重要。

合适的关系可能类似监督若干数字工作者;有用的比例取决于可靠性、任务与风险。

长期运行的工作引出记忆与上下文问题,因为可用上下文窗口有限。

系统可能需要从大型多模态历史中选择和组织重要信息,而不是简单地保留每一个 token。

我讨论跟踪模型发展的方式,包括公开评测和社区,同时指出排名不能替代对自己任务的测试。

开放权重发布允许他人托管和调整模型,但仍受该发布的条款及实际资源条件约束。

排行榜和专家评论是有用起点,但它们衡量的是特定任务,模型变化后也可能过时。

我也关注持续解释新研究和产品变化的人与社区。

模型可以通过托管产品使用;在拥有合适权重和硬件时,也可以本地运行。每种方式的成本与控制权不同。

较小或压缩后的模型可以放进消费级电脑,但其能力与速度取决于模型和硬件。

讲座中提到的应用只是当时的例子,并不是必须使用某个提供商或界面的要求。

在最后回顾中,我追踪用户请求如何经过切词、对话格式和训练网络的下一 token 预测。

表面上的助手行为既反映广泛预训练,也反映塑造系统回应方式的后续示例。

人工数据创建和标注选择是流水线的一部分。与助手对话并不是直接与创建这些示例的人对话。

面向推理的训练可以增加有用策略,但模型仍会出错,需要适当监督与验证。

记住参差不齐的能力轮廓:模型可能擅长一项任务,在另一项上产生幻觉,也可能在看似简单的细节上遇到困难。

有用做法包括提供相关上下文、核查来源、在适当时允许中间过程,以及对可验证操作使用工具。

推理输出可以新颖且有用,但不应把可见摘要与完整、经独立验证的内部计算轨迹混为一谈。

合适的信任程度因任务而异。后果重大的决策需要比随意头脑风暴更强的检查。

我发现这些工具在日常工作中很有价值,并期待继续进步,同时强调用户应警惕其局限。

同频道的其他文章