大语言模型(LLM)工作原理与完整训练流程详解
核心结论:大语言模型的完整构建是一个由“预训练(海量互联网文档预测下一个 token)→ 监督微调(人工对话示例教会助手行为)→ 强化学习(用奖励信号让模型自我探索解题策略)”三大阶段串联而成的流水线;使用时本质上是在与一个“精通各领域但毫无持久自我的 token 自动补全器”对话,它既能在许多领域表现出超人般的能力,也会在个别简单问题上犯下莫名其妙的错误(幻觉、算错数、数错字母),因此必须将其当作需要核验的工具而非权威。
全流程总览:构建语言模型的宏观路径
构建 ChatGPT 这类系统需要多个按顺序排列的阶段。为一般观众建立可用的“心智模型”,需要理解这类工具是什么、在哪些方面擅长、在哪些方面不擅长,以及需要注意的“锋利边缘”(sharp edges)。作者将按照模型构建的完整流程(pipeline)展开讲解:
- 预训练阶段(pre-training):下载并处理互联网上的海量文本,训练一个“基础模型”。
- 后训练阶段一:监督微调(SFT):换用人工策划的对话数据集继续训练,得到“助手模型”。
- 后训练阶段二:强化学习(RL):用于进一步激发模型的推理能力(“思考模型”)。
- 推理阶段(inference):模型参数被固定,用户与模型对话时只发生推理。
类比:训练 LLM 的方式与训练孩子大同小异,区别只是按阶段进行——预训练 = 读所有教材的讲解部分(积累背景知识);监督微调 = 看专家题解并模仿(学习行为范式);强化学习 = 做所有课后练习题并自我完善(通过试错掌握策略)。
第一部分:预训练阶段——从互联网文本到基础模型
1.1 数据收集:目标是“大量多样化且高质量的文件”
训练的基础是获取海量文本数据。需要特别注意的是,数据量本身并非唯一目标,多样性同样重要——因为希望模型内部包含大量知识,因此目标是“大量多样化且高质量的文件”(huge quantity of very high quality documents + very large diversity of documents)。
FineWeb 数据集(代表性案例):
- 由 Hugging Face 公司收集、创建和整理,规模约 44 TB(磁盘空间)。
- 所有主要的 LLM 提供商(OpenAI、Anthropic、Google 等)内部都有与 FineWeb 类似的自有数据管道。
- 如今一个普通硬盘即可容纳该体量。
Common Crawl:数据的源头
- Common Crawl 是一个自 2007 年起持续爬取互联网的组织。
- 以少数种子网页为起点,追踪链接持续进行索引。在作者录制时(提及 2024),已索引约 27 亿个网页。
- 由 Common Crawl 贡献了 FineWeb 数据集的绝大部分原始内容。
1.2 数据过滤流水线:原网页 → 精炼数据集的关键步骤
网页总数巨大但质量参差不齐,必须经过多层过滤,最终只留下很少的合格文本。主要过滤阶段与术语包括:
| 阶段 | 作用/规则 | 要点 |
|---|---|---|
| URL 过滤(URL filtering) | 拒绝包含恶意软件、垃圾邮件、营销、种族歧视、成人内容等类别的网站 | 从源头进行内容分级控制 |
| 文本提取(text extraction) | 从原始 HTML/CSS 中提取纯文本,排除导航等无用内容 | 依赖大量启发式规则 |
| 语言过滤(language filtering) | 仅保留英语占比超过 65% 的页面 | 直接影响模型的多语言能力:滤除西班牙语会导致模型后续不擅长西班牙语 |
| 去重(deduplication) | 移除重复内容 | 其他过滤步骤中涉及 |
| PII 移除 | 检测并滤除包含地址、社会安全号码等个人可识别信息(PII)的网页 | 隐私保护需求 |
经过处理,44 TB 已经是与原始互联网规模相比大幅压缩的体量。该数据集约对应 15 万亿 token 序列。数据样例包括关于 2012 年龙卷风的文章、关于人体中肾上腺的医学文章等。
1.3 Tokenization:将文本转化为模型可以处理的最小单位
文本必须被切分为“token”(文本原子小块),模型处理的世界完全是 token 的世界,看不到字符。
Tokenization 的完整步骤(由原始文本到词汇表):
- 原始 HTML 去除后的纯文本拼接 → 一维文本序列。
- 文本进行 UTF-8 编码 → 得到原始字节位序列。
- 将位序列按每 8 位组合为 byte(0~255 的 ID),共 256 种可能符号。
- 反复执行 Byte Pair Encoding(字节对编码) 算法:不断合并最常见的相邻字节对(如 ID=116(字符 t)+ ID=32(空格)组合成新符号 ID=256),每轮合并都缩短序列并扩容词汇表。
- 最终词汇表规模达到约 10 万个符号。GPT-4 的词汇表为 100,277 个符号。此转换过程即 tokenization。
Token化带来的关键影响:
- 文本“hello world”(hello 空格 world)在 GPT-4 中被分为两个 token:"hello" 的 ID 是 15339,"空格 world" 的 ID 是 1917。
- 去掉首字母 H(变成"ello world")会产生完全不同的 token 切分;hello 与 world 之间加两个空格会出现特殊的 220 token;区分大小写。
- Token ID 本身没有语义,只是一些唯一编号。
- 一个好的 tokenizer 应该产生更多符号和更短的序列,而非少数符号加极长序列。使用 token(而非字符级/字节级模型)的主要原因是效率——字符级序列过长,当前技术无法应对。
推荐工具:tiktokenizer(在线网站),可观察 GPT-4 等模型的 tokenization 结果(选择"cl100k_base")。
1.4 预训练的核心:预测下一个 token 与上下文窗口
训练数据切取(上下文窗口):
- 从数据集中抽取 token 窗口,长度可以是 0 到最大值(举例:8000 tokens,可自由选择 4000 或 16000)。
- 上下文窗口长度有上限,原因并非架构不支持更长——原则上可处理无限个 token,只是计算成本过高。
- 上下文窗口是模型中非常有限且珍贵的资源。模型在预测下一个 token 时可利用的历史信息不会超过该长度(GPT-2 的限制为 1024 tokens)。
预训练的基本逻辑:
- 将一个 token 窗口(示例中为演示取 4 个 token:bar、view、ink、space、single)输入神经网络。
- 网络输出 100,277 个数值(与词汇表大小一致),分别表示每个 token 作为下一个 token 的概率。
- 训练刚开始时(权重随机初始化),概率大致随机(如正确答案概率仅为 3%)。
- 根据正确目标 token 计算对网络参数的更新,使正确答案的预测概率略微升高(如从 3% 升到 4%),其余降低。
- 在整个数据上并行处理海量 token(即“batches”),对所有位置进行梯度调整。
- 持续更新网络,使其预测与训练集中实际发生的统计规律一致。
“我们现在要开始训练神经网络来匹配这些文本如何流动的规律。”——对预训练核心目标的高度概括。
第二部分:神经网络的内部机理与训练/推理过程
2.1 参数、训练与推理的基本概念
模型是什么:
- 神经网络是一个由输入 x 与参数(权重)组成的巨大数学表达式。参数最初随机设定,导致初期预测完全随机。
- 构成现代网络核心的数学表达式单看每个操作并不复杂(仅乘法、加法、幂运算、除法等基础运算),关键在于架构设计要兼具表达力、可优化性、可并行性。
- 中间值可类比为“合成神经元的激发频率”,但不可过度类比生物神经元——生物神经元是带记忆的复杂动力学过程,而此数学表达式从输入到输出是无记忆、无状态(stateless)的固定函数。
训练(training):
- 定义:通过迭代更新参数,使网络输出与训练集中的统计模式趋于一致。
- 比喻:如同转动 DJ 设备上的旋钮来改变对每种可能 token 输入的预测——训练即寻找一组与训练集统计特性吻合的“旋钮设置”。
推理(inference):
- 逐 token 生成:模型输出下一个 token 的概率分布,通过“掷一枚有偏硬币”的方式按概率抽样。
- 由于抽样随机性,生成结果可能与训练数据某片段完全一致(“偶尔运气好”),也可能从未逐字出现过——因此模型输出的是“训练数据的混音版”(remix)。
- 实际使用中(如 ChatGPT),模型早已完成训练,权重固定——用户对话时只发生推理,不再有任何训练。
2.2 案例模型:GPT-2 与一个复现项目
为什么选择 GPT-2:GPT-2 是“近代可辨识的完整技术栈首次集齐”的模型——所有组件至今仍在使用,只是规模全面增大了。2019 年由 OpenAI 发布。
GPT-2 核心参数(作者强调“今天看来都很小”):
| 项目 | GPT-2(2019) | 现代对照参考 |
|---|---|---|
| 参数量 | 16 亿(1.6 billion) | 接近一万亿或数千亿 |
| 最大上下文长度 | 1024 个 token | 数十万甚至一百万 |
| 训练数据量 | 约 1000 亿 token | FineWeb 有 15 万亿 token |
复现项目(llm.c):
- 作者在名为 llm.c 的 GitHub 仓库中记录了完整复现 GPT-2 的过程。
- 成本对比:2019 年训练 GPT-2 估算成本约 4 万美元;作者复现耗时约一天,成本约 600 美元(租用 8×H100 GPU 节点,由 Lambda 等云服务商提供,约 3 美元/GPU/小时,机器共 8 块 NVIDIA H100 GPU),且自认“并未尽全力”,认为如今可降至 约 100 美元。
成本大幅下降的三个原因:
- 数据集质量显著提高(过滤、提取、制备方法更精细)。
- 硬件运算速度大幅提升。
- 软件在榨取硬件速度方面大幅优化。
训练演示细节(实际终端操作):
- 每一行代表一次对网络的更新(微调参数以改善对下一个 token 的预测),每步同时改善对训练集中 100 万个 token 的预测。
- 配置:每步约 7 秒,共 32,000 步优化(总计约 330 亿 token),每 20 步执行一次推理(生成样本文本供观察)。
- 关键观察指标为 损失(loss):单一数值,越低越好,随更新次数增加而下降。
- 进度约 1% 时:输出仍“有点像胡言乱语”,但已具备局部连贯性(示例生成文本:"since she is mine, it's a part of the information should discuss my father, great companions, Gordon showed me sitting over it and etc.")。跑完 32,000 步后,模型将能生成相当连贯的英文。
2.3 Transformer 的基础设施:GPU 与英伟达
- 训练神经网络的核心底层运算是矩阵乘法,可分解为大量独立的并行工作,GPU 因此可以协同工作加速。
- 规模层级链:1 个 GPU → 8 个 GPU(单节点)→ 多节点 → 大型数据中心/系统。
- 英伟达市值达 3.4 万亿美元的根本驱动力:所有大型科技公司都渴望获得足够 GPU 来训练大语言模型——本质是一场“淘金热”,只不过开采的对象是 GPU。例如 Elon Musk 正计划在单个数据中心部署 10 万块 GPU。
- GPU 协同工作的唯一目的:在数据集上预测下一个 token。GPU 越多,能处理的 token 越多、迭代越快、网络可以做得越大,但计算成本极其高昂(个人无法负担数千万到数亿美元级别)。
第三部分:基础模型的性质与行为演示
3.1 什么是基础模型(Base Model)
预训练完成后得到的模型称为 基础模型(base model),其本质是“互联网文本 token 模拟器”——能生成与互联网文档统计特征相似的 token 序列。它不具备直接问答能力,只会生成互联网文本的“混搭”或“梦境般”的续写。基础模型很少被公开发布,因为它只是通往最终助手的中间步骤。
模型的发布形式(以 GPT-2 为例)——两个必要组件:
- 描述神经网络前向传播(forward pass)的 Python 源代码(通常数百行,标准易理解)。
- 参数本身:网络中所有可调“旋钮”的最佳设置,本质上是约 15 亿个数字的列表。
Llama 3(对比案例):Meta 发布,4050 亿(405B)参数,训练数据 15 万亿 token。Meta 同时发布基础模型和“指令模型”(instruct model,即助手模型)。知识截止日期为 2023 年底。
3.2 基础模型的行为表现(Hyperbolic 在线平台实操演示)
演示条件:在 Hyperbolic 平台选择 "llama 3.1 405B base"(必须为基础模型而非 instruct 版),调低 max tokens 为 28。
尝试 1:"2+2 等于几?":
- 第一次运行:模型竟回答了问题并展开了哲学讨论。
- 第二次运行:给出完全不同、漫无边际的回答。
- 第三次运行:继续天马行空续写。
- 演示结论①:该模型不是助手,只是“自动补全”——输入作为前缀,模型仅按训练文档的统计规律推算下一个 token。
- 演示结论②:这是一个随机(stochastic)系统——相同前缀每次采样结果不同。
金句:“This is a glorified autocomplete. It's a very, very expensive autocomplete.”(这是一个华而不实的自动补全工具,一个非常非常昂贵的自动补全工具。)
3.3 基础模型中的“世界知识”
尽管基础模型只会续写,但它在预测下一个 token 的任务中“被迫”学习到了大量关于世界的知识,并将这些知识以“压缩”的形式存储在参数中。
金句:“You can think of the 405 billion parameters as a kind of compression of the Internet — like a zip file, but lossy compression, not lossless. We're left with a gestalt of the Internet.”(可以把这 4050 亿参数视作对互联网的一种压缩——像一个 zip 文件,但是有损压缩而非无损。最终留下的是对互联网的一种完形认知。)
知识提取演示:设计列表引导提示(如“以下是我在巴黎最喜欢的十大景点清单”——原文有拼写错误),让模型续写。模型列出了若干地标。但需注意:
- 这是模型对互联网文档的*模糊回忆*,并非精确的数据库查询。
- 知识是“模糊、概率性、统计性的”;频繁出现的内容记得更准,低频事件不可靠。
3.4 复述(Recitation)与幻觉(Hallucination)演示
复述(背诵)演示:复制维基百科“斑马”条目开头作为提示,模型开始逐字背诵。高质源(如维基百科)在训练中被优先采样,模型可能已看过该条约 10 次(epochs 概念),能近乎完整背诵但最终会因记忆不精确而偏离。这种逐字背诵行为被称为 recitation/regurgitation,在最终产品中通常是不受欢迎的。
幻觉演示(使用 2024 年大选提示,训练截止于 2023 年底,模型绝对未见过此内容):
- 第一次续写:竞选搭档是 Mike Pence、对手是 Hillary Clinton 和 Tim Kaine。
- 重新采样后:搭档变成 Ron DeSantis、对手是 Joe Biden 和 Kamala Harris——彻底错误。这就是典型的“有根据猜测”(educated guess)式幻觉行为。
3.5 无须训练即可解锁基础模型的能力:提示工程技巧
上下文学习(in-context learning):仅通过改变输入提示的结构改变模型行为。
技巧一:少样本提示(few-shot)翻译演示:展示 10 对英语-少数民族语言(原文为“quan”语)单词翻译对,最后留“teacher = ?”,模型利用上下文学习能力补全为正确翻译。
技巧二:用提示词模拟完整助手:构造一个伪装的网页对话(人类与 AI 助手之间的过往几轮问答),把真正问题拼接到“Human:”后并提示“Assistant:”,基础模型继续续写为正确科学回答。若不添加对话格式而直接提问,模型只会输出一堆问题而非答案。
第四部分:后训练阶段一——监督微调(SFT)与助手人格的塑造
4.1 后训练的本质:“按示例编程”
预训练占用绝大多数计算资源(大规模数据中心、数百万美元成本、耗时约三个月、数千台计算机);后训练阶段通常明显更快(例如约三小时)。核心操作是:丢弃互联网文档数据集,换成一个由对话组成的新数据集,然后用完全相同的算法继续训练模型——只是数据源被替换。
为什么不能用显式代码编写助手规则:因为是神经网络,一切只能通过对数据集的神经网络训练实现,因此助手行为实际上通过创建大量对话数据集来“隐式编程”。模型在训练中学习“助手如何回应用户提问”的统计规律;在推理阶段模型会模仿数据集中人类标注者在类似情境下的做法。
“The way this works basically is assistant is being programmed by example.”(助手实际上是通过示例来编程的。) 预训练与后训练使用的算法完全一致——“We're just predicting the next token in sequence, just like before.”
4.2 对话数据的构建:人类标注者与标注说明
标注来源:公司(如 OpenAI)雇佣人类标注者(通常通过 Upwork 或 Scale AI 等平台),请他们根据公司制定的标注说明撰写“理想助手回应”。
标注说明(labeling instructions)的高层原则:“乐于助人(helpful)、真实可信(truthful)、无害(harmless)”——不回应不希望未来系统处理的问题。标注说明通常可达数百页,标注者须专业研读。
InstructGPT 论文中的数据标注流程(OpenAI 于 2022 年发表,其中第 3.4 节描述了数据标注细节):
- 标注者先自拟 prompt 问题(例如:“列出五个重新燃起我对职业生涯热情的方法”、“我接下来该读的十大科幻小说是什么”、“把这句话翻译成西班牙语”等)。
- 标注者再写出该 prompt 对应的理想助手回复。
4.3 对话的编码:将结构化对话转化为 token 序列
- 模型的一切输入输出都只是 token 序列,因此需要设计某种编码协议把结构化对话对象(user、assistant 等角色)转为 token 序列。示例:类比互联网中的 TCP/IP 数据包规则。
- 各 LLM 的对话编码协议并不统一——目前处于“准蛮荒时期”。
GPT-4o 的对话编码协议示例:
- 使用特殊 token
im_start(imaginary monologue 的开始)标记回合开始,随后指定说话者是 user,最后是im_end(imaginary monologue 结束)。 - 同一对话开头会先出现内部独白分隔符(internal monologue separator)。
- 问题 "what is two plus two" 经编码后的完整用户-助手两轮对话 token 序列总计 49 个 token,是一维序列。
- 这类特殊 token 是后训练阶段新造出并引入词表的;预训练阶段模型中从未见过它们。作者明确表示并不真正知道“im”为何叫 imaginary monologue(可能是“内心独白”之意),细节不重要。
4.4 现代数据集:从纯人工到模型辅助
现代数据集规模:已从数十万级发展到数百万条多轮对话,覆盖广泛话题。现代数据大部分为合成(synthetic)数据,但通常由人工编辑校正。
工作流的演化:现在很少让标注者从零白手起家撰写回复——先用已有 LLM 初步生成回复,标注者再行编辑调整。LLM 已全面渗透后训练技术栈,被普遍用于辅助构建海量对话数据集。
开源复现案例——OpenAssistant 项目:社区尝试按 InstructGPT 类似设定自建数据,让互联网用户仿照人工标注方式创建对话(如“用简单语言向狗解释经济学概念”并获得更简化回复)。
4.5 去神秘化:用户到底在和谁对话
ChatGPT 的回答本质上是对 OpenAI 聘请的高技能标注者的一种统计模拟——当问题涉及代码等专业领域,所调用的模拟对象是受过专业训练的专家型标注人员。
“It's almost as if you're asking a human labeler and imagine that the answer that is given to you from ChatGPT is some kind of a simulation of a human labeler.”——ChatGPT 的回答本质上是对人类标注者的一种模拟。
数据集的测试期覆盖问题:对话数据集不可能预先穷举所有潜在问题。若提问恰好与训练集完全一致,模型可能逐字复述训练集中答案;更常见的是模型输出“同风格”而非逐字一致的回答——仅是风格与气质上的近似模拟。只有模型获得足够多示例(如十万级)才能学到统计规律从而内化助手人格。
第五部分:幻觉问题与“语言模型心理学”
5.1 幻觉产生的根本原因
- 模型的后训练数据集中,类似“谁是XXX?”的问题几乎总是被人类标注者以自信口吻回答。人类标注者要么认识该人物,要么上网研究后才写下答案。
- 当询问模型一个编造的名字时,模型不会回答“我不知道”。原因:模型的训练数据中缺乏“承认自己不知道”的示例——它从统计学上在模仿训练集,只能延续“自信回答”的格式。
- 模型本质是“统计式词元摇奖机”(statistical token tumblers),不能联网、不做研究,只能从概率分布中采样。
自我认知的悖论:模型内部可能存在某些神经元在不确定时被激活(即某种“内部不确定性表征”),但目前这种内部激活没有连接到用文字表达“我不知道”的输出端。即使内部“知道”自己不知道,表面上依然不会承认,而是继续自信猜测。
5.2 幻觉行为演示(两种模型对比)
演示案例:虚假人名“Orson Kovats”:
| 模型 | 行为表现 |
|---|---|
| Falcon 7B instruct(数年前的旧模型) | 同题多次采样输出完全不同且都虚构的回答(“美国科幻作家”“1950 年代电视节目的虚构角色”“前小联盟棒球手”) |
| ChatGPT(OpenAI 当前先进型号) | 选择先搜索网络、引用来源;当被告知不使用工具后,明确回应“不存在似乎为我所知的叫这个名字的人”——模型知道自己不知道并明确说出 |
真实人物测试——“Dominik Hasek(多米尼克·哈舍克)”:真实答案为服役于布法罗军刀队(Buffalo Sabres),赢过 2 次斯坦利杯(Stanley Cup)。
- 询问 Falcon 7B “为哪支队伍打球”:三次采样答案均为“布法罗军刀队”——判断为知道。
- 询问“赢多少次斯坦利杯”:三次采样答案分别错为“四次”、另一处错误、“没有赢过”——模型编造了答案。
- 经验:因为模型是随机系统,同题每次答案可能不同,判断模型是否“知道”必须多次采样而非单次提问。
5.3 幻觉缓解方法一:知识边界探测与“说不知道”训练
Meta 在 Llama 3 训练中使用的方法(论文中称为“事实性/factuality”问题):
- 从训练集或知识库随机取文档片段(如“今日精选文章”)。
- 让一个现有 LLM(如 ChatGPT)基于该段落生成具体事实问答对(问题+标准答案),无需依赖模型记忆,误差小。
- 将该问题向目标模型重复提问多次(如 3-5 次)。
- 用另一个 LLM 作为裁判(judge),将回答逐一与正确答案比对。
- 若模型答错 → 标记为该模型“不知道”的知识边界。
- 将这类问题转化为新的训练对话,把标准答案设定为“很抱歉,我不知道/我不记得”等拒答话语,加入训练集。
- 反复覆盖大量文档与问题后,模型学会“感知内部不确定性”并触发“知识性拒答”的行为。
该方法的可行前提:模型内部确实存在某种内部确定性表征信号,且训练数据中必须有“内部不确定 + 口头拒答”的关联样例。
5.4 幻觉缓解方法二:工具调用与联网检索
为模型提供类似人类“查资料刷新记忆”的途径——引入外部工具。类比:神经网络参数中的知识犹如一个月前读过的内容——常见能记住、罕见就模糊;人类遇到罕见信息会去查阅资料,实质是用外部信息刷新“工作记忆”。上下文窗口相当于模型的工作记忆,其内的数据可直接供网络访问。
具体实现(Web 检索协议):
- 给模型新增特殊 token,如“搜索开始”(search start)和“搜索结束”(search end),在训练数据中定义协议格式(含文字样例)。
- 模型若自感不确定,可输出如
<search_start>查询关键词<search_end>。 - 外部推理执行程序拦截到“搜索结束”token 后暂停生成,以查询词调用 Bing 或 Google 搜索。
- 将抓回的网页文本用特殊标记包裹后粘贴回模型的上下文窗口(工作记忆)。
- 模型继续生成,可以“直接读到”这些材料并引用来源(含 URL)。
- 训练时配以几千条示范样本(展示何时发起搜索、如何处理返回结果),模型基于预训练中获得的“什么是网络搜索、哪些是有效检索词”的知识即可泛化掌握。
演示观察(ChatGPT):问虚构人物时显示“正在搜索网络”,随后引用多个来源回答;但被告知“不要使用任何工具”后,模型转而只靠内部参数回答,直接表示不清楚。
第六部分:语言模型的心理学隐喻与计算特性
6.1 参数 = 长期记忆 / 上下文窗口 = 工作记忆
神经网络的参数中存储的是“模糊的回忆”,而构成上下文窗口的 token 序列相当于“工作记忆”。人类与此类似:长期记住的东西是参数,刚刚几秒或几分钟前的经历在上下文窗口内。
由此推导的实践准则:给模型材料,而不是让它回忆
- 直接问“请总结《傲慢与偏见》第一章”可以工作——该作品知名度极高、训练数据量巨大。
- 更可靠的提示方式:在提示中附上第一章的原文文本(用分隔符隔开)——“请总结第一章,我在下面附上原文”。
- 原因:当材料进入上下文窗口后,模型对它拥有直接访问权(direct access),无需“回忆”,生成的总结质量会显著更高。
6.2 模型的“自我认知”之谜
核心问题“你是什么模型、谁造了你”:这类问题对模型而言缺少固定答案。模型没有持续存在的自我,每次对话都是“启动 → 处理 tokens → 关闭”,是一个从零重建上下文窗口的过程——用完即删。因此这只是“token 翻滚机”在遵循训练集统计规律,并非一个有意识的存在。
模型为何会乱编身份(Falcon 示例):较旧的 Falcon 模型面对“谁造了你”时回答“我是由 OpenAI 基于 GPT-3 构建的”——完全编造。原因:其大量数据来自 OpenAI/ChatGPT 相关文档,而微调赋予它“乐于助人的助手”人设,却未告诉它给自己贴什么标签,它只能选择互联网上出现频率最高的类似问答模式。
开发者如何覆盖自我认知(两种方式):
- 方式一:微调数据硬编码。案例:Allen AI 的 OLMo 模型(完全开源)公开了 SFT 数据混合——100 万条对话中约有 240 条硬编码的自我介绍问答(问题:“Tell me about yourself”,答案固定为“I'm OLMo, an open language model developed by AI2...”)。把这类问答应答恒定标准放入训练集,模型就会照本宣科。
- 方式二:系统消息(system message)。在对话最开头插入一条特殊 message,硬编码模型身份信息(名字、开发者、知识截止日期等),每次会话都会插入上下文窗口。用户看到空白页面,但这些“系统消息 tokens”始终藏在后台。
总结:这些身份都不是模型的深层内化属性,只是“事后补丁”(cooked up and bolted on)。
6.3 模型的“数学脑”:逐 token 计算能力约束
核心约束:从输入 tokens 到输出下一个 token,每层要经过 attention 和 MLP 操作,层数有限(示例模型仅演示 3 层,现代先进模型约 100 层),且每生成一个 token 都要完整跑一次前向传播(forward pass)。每个 token 分得的计算量大致固定且很小——不能期望模型在单个 token 内完成任意复杂计算。
重要推论:必须把推理和计算分散到多个 token 上。模型擅长把中间结果逐步写出来,后续 token 的计算可建立在已写入上下文窗口的中间结果之上。
实验验证:要求模型单 token 回答
- 简单问题(“Emily buys three apples and two oranges. Each orange costs $2. The total cost is $13. What is the cost of apples?”),正确答案 $3。允许单 token 回答时,模型给出了正确答案(实际用了两个 token,美元符号可能单独为 token)。
- 加大难度后(“Emily buys 23 apples and 177 oranges”),单 token 限制下模型输出 5(错误);解除限制后,模型展开中间推导步骤,最终得出正确答案 7。
为何训练标注必须逐步推导(而非先答后解释):若标注答案先直接给出最终结果再解释,模型在输出序列的最开始就需要在单次前向传播内“心算”出最终答案,后续文字只是对已存在结果的事后辩解(post hoc justification)。相反,逐步推导把计算分散到多个 token(总橙子价 = 4 → 13-4 = 9 → 9÷3 = 3),每步负担小,最终结论出现时中间结果已在上下文中可直接使用。
第七部分:模型能力边界——计数、拼写与工具使用
7.1 计数缺陷与“use code”解决方案
本质原因:单次前向传播中的计算容量极少;且约 20 个圆点在 tokenizer 中会被压缩为单个 token,模型看到的是少数 token ID 而非每个圆点独立存在,需要直接从 token ID 推测总数。
演示:向模型展示一串圆点问“有多少个?”,模型错误答案为 161(正确答案为 177)。
解决方法——“use code”提示:模型的计数原理相当微妙——它不擅长计数但擅长“复制粘贴”。模型将圆点复制为 Python 字符串(只需处理少量 token 级别的序列),再调用 Python 的 count 例程完成计数。认知分工:是 Python 解释器在计数,而非模型的“心算”。
7.2 拼写缺陷与字符级任务
根本原因:模型看不到字符,它们只看到 token(文本块)——模型的世界完全是 token 的世界。
演示 1:给定字符串 "ubiquitous",要求打印每隔第三个字符(从第一个开始),正确应得 "uqts",模型错误回答 "ic"。
- 原因①:仍需“心算”(每隔三段取字符属于类计数任务)。
- 原因②:"ubiquitous" 在 tokenizer 中恰好被拆分为 3 个 token。人类可直接索引每个字母,模型看不到 token 内部的字母和数量(需在预训练时自行推断)。
演示 2(经典案例):“strawberry 中有几个 r?”——正确答案是 3 个。模型早期长期坚持答案是 2 个。病因:①看不到字符只见 token;②不擅长计数,二者叠加导致失败。该案例曾多次病毒式传播,作者推测 OpenAI 可能已将答案硬编码(hard coded)修正。
通用解决原则:对于需要精确计数或字符操作的任务,始终要求使用工具(Python 解释器),让解释器执行操作字符串。对同一 "ubiquitous" 问题加 "use code",即可得到正确答案 "uqts"。
7.3 难以解释的“锋利边缘”:9.11 与 9.9 的比较
现象:模型经常给出明显错误的判断(认为 9.11 > 9.9),即便试图从数学上论证。结果不可复现(not very reproducible)——有时会自我翻转结论为正确,有时不会。同一模型能解答奥赛级难题,却在极简单问题上出错。
研究团队内部解释:检测到神经网络内部某些通常与圣经章节(Bible verses)相关联的神经元被点亮——9.11 和 9.9 看起来类似圣经章节编号,而在圣经语境中 9.11 确实排在 9.9 之后。模型受到认知干扰。注意:此解释得自团队内部转述,作者并未亲自阅读论文,该现象仍未被完全理解。
引述:“即使你非常深入地理解这些模型的工作方式,有些问题依然会让你一头雾水。”
对模型的总体态度:将模型视为随机系统(stochastic system)——确实神奇但不能完全信任,应作为工具使用,“而不是放手让它在问题上随意发挥、把结果直接粘贴到答案里”。
7.4 前两大训练阶段回顾
| 阶段 | 训练数据 | 产物 | 性质 | 规模 |
|---|---|---|---|---|
| 预训练 | 互联网文档 | 基础模型 | 互联网文档模拟器 | 需数月、数千台计算机 |
| 监督微调(SFT) | 人工策划的人机对话集 | 助手模型 | 可问答的助手 | 算法与预训练相同 |
- 理想对话文本最根本来源于人工:人类编写提示与理想回答,依据标注文档。现代技术大量使用语言模型辅助生成,但“归根结底源于人工”。
- 基础模型是“互联网的有损压缩”,有趣但不可直接使用——用户需要问答助手而非互联网文档采样。
第八部分:强化学习(RL)——让模型自主发现有效策略
8.1 人类标注者的根本局限:无法为模型设计最优 token 序列
虽然生成面向人的、带中间步骤和排版美观的解答是训练目标之一,真正的难题是:人类标注者并不清楚哪种 token 序列(解题路径)对 LLM 是最优的。原因:
- LLM 在每个 token 上只能分配有限且很小的计算量,不能有太大的“思维跳跃”。
- 人类的“容易/困难”与 LLM 不同:对人类简单的步骤(压缩成单个 token)对模型可能是过大跳跃,反之亦然。
- 人类知识 ≠ 模型知识:LLM 通过预训练可能拥有大量 PhD 级知识,也可能缺少人类标注者知道的信息,导致“突然跳跃”。
因此,如果只关心最终答案且希望经济地达到目标,人工无法创建最优 token 序列。人类标注的 SFT 示范只能用于初始化系统(使模型进入“正确解的大致领域”),真正的精细化需要强化学习(试错)让模型自行发现有效路径。
8.2 强化学习的基本原理
“强化学习基本上是一个猜测和检查的过程:我们需要猜测许多不同类型的解,检查它们,并在未来更多采用有效的东西。”
核心步骤:
- 对同一 prompt 生成大量多样化解(实践中可能采样数千甚至数百万个独立解)。
- 检查哪些答案正确(如答案是否在方框内且数值为 3)。
- 从正确解中挑选“最佳”的一个(标准可能是正确性、长度、美观等),提高该路径在类似 prompt 下被采样的概率(即更新参数)。
- 在大量不同 prompt(数万道数学/物理题,每题数千个解)上并行执行此流程。
在线示例(Gemma 2B):对苹果/橙子问题三次运行均正确($3),但每次都产生略不相同的正确路径。作者强调所选示例对 2B 模型过于简单,实际应想象数百次运行中正确与错误的路径分布(如 15 个解中 4 个正确,绿色代表正确、红色代表错误),需要读者发挥想象力。
8.3 DeepSeek R1 带来的公开发
意义:预训练和 SFT 多年以来已是行业标准,而 RL 阶段仍很早期、尚未标准化——存在大量未解决的细节(如何挑选最优解、训练步数、prompt 分布、训练配置等)。OpenAI 等公司内部实验已久但未公开。DeepSeek(深度求索)近期发表的论文首次将强化学习训练公开化,提供了可复现细节,因此引起广泛关注。
论文观察到的现象:
- 模型在数学问题上的准确率随训练步数持续提升。
- 训练后期每个回复的平均 token 数(响应长度)明显增加——模型学会了更长、更细致的解答过程。
- 涌现的定性现象(“啊哈时刻”):模型开始产生类似“等等,等等,这不是正确的方法,让我一步步重新评估”的内部独白。它会自我检查、从不同角度重新计算、回溯、重试——这正是人类做数学题时的认知过程。但这不是人类标注者硬编码的,是 RL 的涌现属性。
DeepSeek R1 的使用:可通过 chat.deepseek.com 使用,需打开“深度思考/Deep Think”按钮。在与 ChatGPT-4o 的对比中,R1 先输出内部推理(“让我试着弄清楚……”),逐步推导后再以另一种方法验证,最后写出规范的面向人的答案。这种“先内部思考后呈现”是 RL 模型的典型特征。
“没有人类能将这些思考策略硬编码进理想的助手响应中。这只能通过强化学习过程中的试错被发现。”
8.4 类比 AlphaGo:强化学习的突破潜力
围棋 AI AlphaGo 证明了强化学习的威力:
- 论文对比了监督学习(模仿人类棋手)与强化学习(自我对弈、以胜为奖励):SL 会封顶,无法超越顶尖人类棋手(如李世石);RL 能显著超越。
- AlphaGo“第 37 手”(move 37):被人类职业棋手评估为出现概率约 1/10000,当时被认为失误,事后证明是天才妙手——强化学习能发现人类不知道但切实有效的策略。
- 将这一逻辑类推到语言模型:如果继续扩展 RL 范式,未来可能产生人类难以理解的推理方式、全新类比,甚至模型发明自己的“思考语言”,并逐渐偏离训练数据(人类文本)的分布。但目前这仍停留在原理层面。
8.5 可验证领域 vs 不可验证领域与 RLHF 的引入
可验证领域(数学、代码、围棋等):候选解能简单地对照标准答案打分(如“答案在方框内且等于 3”),或用“LLM 裁判”自动判断,无需人工参与●。这类领域中奖励函数极简单且不可被欺骗——你能赢就是赢、输就是输,可以连续运行数万甚至数十万步更新。
不可验证领域(写笑话、写诗、总结段落等):很难自动给生成结果打分。用人工打分原理上可行,但强化学习需要数千次更新 × 每次数千个提示 × 每个提示数千个生成样本——最终需要上十亿次人工评估,完全不现实、不可扩展。于是需要自动化策略——这就是 OpenAI 论文提出的 RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)。
第九部分:RLHF 机制、缺陷与三大阶段总结
9.1 RLHF 的核心机制
总思路:由于无法直接让海量人类评估每个候选输出,训练一个独立的“奖励模型”(reward model)来模仿人类判断,再以它为奖励信号做强化学习。这属于“间接”(indirection)技巧。
- 人类排序标注:对同一提示(如“写一个关于鹈鹕的笑话”)让模型生成多个候选(rollouts),人类标注者将这些候选从最好到最差排序(排序比给精确分数更容易完成,也更精确)。
- 训练奖励模型:奖励模型是一个独立的 Transformer 神经网络(不负责生成文本,只给输入的打分,输出 0~1 的分数)。通过不断微调其预测分数与人类排序保持一致,使奖励模型成为人类偏好的“模拟器”。
- 对主模型做强化学习:用训练好的奖励模型对主模型的输出打分并更新主模型参数——奖励模型可无限次查询,不受人工限制。
- 实际数据规模约为 1000 个提示词 × 每个提示 5 个候选(约 5000 个笑话供人排序),远少于上亿次人工评估。
RLHF 的主要优点:
- 优点一:让强化学习能用于无法验证、任意的领域(总结、诗、笑话等创意写作)。
- 优点二(经验层面):正确执行时模型性能会“略好一点”。
RLHF 为何有效的猜想——“判别者-生成者差距”:对多数人而言,“辨别好坏”远比“亲自生成理想输出”容易。SFT 要求人类标注者亲笔写出理想回答,在创意任务中极其困难;RLHF 只需对现成候选排序,可获得更高精度的标注数据。人类提供排序信号,系统通过“间接途径”自行发现会被高分的答案。作者承认这是一个“最佳猜测”,并不像其他结论那样有充分确证。
9.2 RLHF 的两个主要缺陷
缺陷一:奖励模型是有损模拟器。RLHF 不是直接对真实人类判断做优化,而是对一个“有损耗的人类模拟器”(数十亿参数的 Transformer)做优化。该模拟器未必在所有场景下真实反映人类意见。
缺陷二(更隐蔽且严重):优化会“玩弄模拟器”。大型神经网络存在“漏洞”(nooks and crannies),强化学习在长时间运行后总能找到特定输入获得虚假高分——即对抗性样本(adversarial examples)。
过度优化的崩溃演示:如果运行 1000 步更新,头几百步鹈鹕笑话质量略有提升,随后“戏剧性跌落悬崖”——最优笑话变成一连串“the, the, the, the, the”,将该字符串输入奖励模型竟得满分 1.0。
为何无法修复:把“the, the…”加入训练集打最低分能纠正该条样本,但模型中几乎有无穷无尽的、隐藏的无意义对抗性例子。可以反复打低分但永远赢不了这场游戏。
实践含义:RLHF 最多只能运行几百步,模型改进到某个点后必须“修剪”(crop)并停止优化,然后发布。若有需要可改进奖励模型再试,但最终一定会再碰到同类型困境。
9.3 “RLHF 不是真正的强化学习”
结论:“RLHF 不是强化学习”——它在字面意义上确实是 RL,但在“魔法般的”意义上不是。
- 可验证领域(数学、围棋)的奖励函数不可欺骗,可连续运行数万步并产生超人类策略(如 AlphaGo 第 37 手)。
- RLHF 面对的是可被游戏的奖励模型,最多只能算“小规模微调、小幅改进”,不是投入更多算力就能获得更神奇结果的强化学习。它更像是“小小的微调”,稍微改进模型后就必须停止。
9.4 三大训练阶段汇总
| 阶段 | 训练数据 | 训练成本 | 产物 | 核心区别 |
|---|---|---|---|---|
| ① 预训练 | 互联网文档(15 万亿 token) | 约 3 个月、数千台计算机 | 基础模型(互联网文档模拟器) | 从网络中获取知识,写入参数 |
| ② 监督微调 | 人工策划的高质量人机对话集 | 约 3 小时 | 助手模型 | 引入“人品/性格”,学会问答格式(约 100 万条由人类标注者构造的样例) |
| ③ 强化学习 | 练习题集(只有题干和最终答案) | —— | 思考模型(如 o1、DeepSeek R1) | 自我探索解题路径、形成内心独白与策略 |
类比总结:预训练 = 读教材知识部分;SFT = 看专家题解并模仿;RL = 做练习题并自我改进。 训练完成后发布的“指令模型”= 经过 SFT 与 RLHF 的助手;部分“思考模型”= 在此基础上再经过 RL 训练以提升推理。
第十部分:幻觉问题归根结底与“瑞士奶酪”能力模型
10.1 幻觉的总结论
幻觉在早期模型中大量存在,近年有所缓解但远未消除。模型可能因内部神经元状态未连接到“我不知道”的表达而编造答案;也可能因训练数据本身就没有对某问题的正确认知而给出自信的虚构。缓解手段(知识探测拒答训练、联网搜索工具)只是改善而非根治。对 2023 年底之后的事件、低频实体、不存在的虚构人物,模型只能概率性“猜测”——即幻觉。
10.2 “瑞士奶酪模型”:能力强项与随机漏洞并存
模型能力分布不均衡——如同“瑞士奶酪”(Swiss cheese):大部分区域是坚实的(众多领域表现出超强能力),但存在随机的“洞”(零星、无法预测的薄弱点)。例如:同款模型能解奥数题,却分不清 9.11 和 9.9 哪个大;能做复杂代码生成,却数不清 strawberry 中 r 的数量。每个用户的任务是尽量避开这些洞。
10.3 工具使用的总结论
“模型需要 token 来思考”(Models need tokens to think),“把计算量分配到很多 token 上”;“尽可能使用工具而非靠模型内在记忆/心算”。
工具使用核心原则:
- 语言模型在需要计算时并不会内部完成计算——它编写程序发送给计算机的另一部分执行,再将结果返回后告诉用户答案。
- 使用工具比让模型靠记忆推理更不容易出错(less error prone)。
- 作者明确表态:“如果试图让模型在记忆中完成这些,我并不完全信任它——只要有可能我愿意用工具。”
- 工具类型:代码解释器(code interpreter)、Web 搜索(通过特殊 token 调用,生成引用来源)。
- 计数与字符串处理:让 Python 解释器处理字符串和计算,作者的总结论是“Python 解释器在做,而不是模型的神经网络在做”。
第十一部分:多模态、长期任务代理与测试时训练(前沿展望)
11.1 多模态(Multimodality)
模型将快速走向多模态,能够天然处理:
- 音频:可听与可说(将音频切割为语谱图(spectrogram)做成 token)。
- 图像:可看与可绘(将图像分割为补丁(patches)分别做 token 化)。
多模态不是根本性变化——将音频和图像 token 化后,可以完全套用文本训练的全部方法。甚至可以把不同类型 token 流交织在同一个模型中处理(例如文本 token、图像 token、音频 token 顺序混合),模型只需要学这些混合 token 序列的统计规律。相关方向已有“大量早期工作”,仍处于发展初期。
11.2 长期任务代理(Agents)
- 当前的交互模式是“把单个任务放到银盘上递过去”并立刻获得结果。
- 模型尚不具备长时间连贯执行、自我纠错、把多个任务串联成完整工作的能力,但正在改进。
- 未来将出现可以在较长时间内执行任务的代理(agent),需要人类监督其进度。
11.3 测试时训练(Test Time Training)——未解决的前沿问题
目前的模型只有两个阶段:
- 训练阶段:对参数做调整使其擅长完成任务。
- 推理阶段:参数不再改变,运行中不继续学习。唯一变化的是上下文窗口中的 tokens。
因此模型能获得的“测试时学习”只有上下文学习(in-context learning)。作者认为这与人类不同——人类会持续根据正在做的事做真正学习(例如睡眠时大脑可能在“更新参数”)。当前模型没有此类机制。
上下文窗口的瓶颈:上下文窗口是稀缺且宝贵的资源。当处理极长运行的多模态任务(如塞入视频)时,token 窗口会远超几十万量级。目前唯一的技巧是加长上下文窗口,但仅仅靠加长上下文窗口无法扩展到真实长程多模态任务——需要全新的想法。
11.4 思考模型与非思考模型的本质区别
- GPT-4o 等非思考模型:不使用真正的强化学习,只做 RLHF(作者明确强调“RLHF 不是 RL”——不含能让“魔法”发生的时间,充其量只是少量微调)。应以 SFT 模型看待。
- o3-mini-high 等思考模型:真正使用强化学习,经历了第三个训练阶段。它们在大量可验证的练习题上做 RL,完善思考过程、发现新解题策略。模型的内在呈现类似人的内心独白。
- 在 ChatGPT 中,思考模型的界面只展示完整思维链的摘要而非完整推理——原因是蒸馏风险(distillation risk):防止他人通过模仿思维链恢复推理性能。最终性能与完整推理基本等价。
思考模型的开放问题:在可验证领域发展出的思考策略能否迁移到不可验证领域(如创意写作)?这种迁移的程度未知,目前 RL 模型只在数学和代码等可验证领域有出色表现。
第十二部分:实践指南——模型选择、获取与使用建议
12.1 各类模型使用场所
专有权重模型(访问各自官网):
- OpenAI:chatgpt.com(免费层 GPT-4o / GPT-4o mini;付费订阅 $20/月或 $200/月可使用带“uses advanced reasoning”标注的 o1、o3-mini、o3-mini-high 级思考模型)。
- Google Gemini:gemini.google.com 或 AI Studio(ai.google.com),其中 AI Studio 可选 Gemini 2.0 Flash Thinking Experimental 等实验性思考模型(作者批评谷歌界面杂乱)。
- Anthropic:不提供思考模型(截至 2025 年初)。
开源权重模型(可通过推理服务商使用):
- 首选推荐:Together AI——提供 DeepSeek-R1 等 SOTA 开源模型的 playground。
- Hyperbolic:提供 Llama 3.1 base 等*基础模型*(base model)——大多数推理平台只提供面向助手的模型,作者希望更多人托管 base model,因其有用且有趣。
- DeepSeek 官网(chat.deepseek.com)需打开“深度思考/Deep Think”按钮。
本地运行(个人电脑):
- 使用蒸馏版本(distilled)+ 低位宽精度模型(如 DeepSeek 全精度约 FP8、Llama 为 BF16,实际运行可更低)。
- 推荐工具 LM Studio:可加载 Llama 3.2 instruct 1B 等模型,在 MacBook Pro 的 GPU 上完全本地运行,不向外部传输数据。缺点:UI 不美观、默认模型列表繁杂、需要理解不同蒸馏与精度组合,对新手不友好,建议配合视频教程学习。
12.2 跟踪领域进展的三个主要渠道
- LMArena:LLM 排行榜(用人类成对匿名对比确定排名)。当前的排名情况(视频录制时):Google Gemini 第 1、OpenAI 第 2、DeepSeek 第 3、xAI 和 Anthropic 的 Claude Sonnet 排 14 位、Meta Llama 等紧随其后。注意:榜单“过去几年很好,最近几个月有点被钻空子”(如实际很多人用的 Claude Sonnet 排名却被压到 14),仅作起步参考,仍应自己实测。
- AI newsletter(Swix 及其朋友维护):每隔一天左右出刊,覆盖面广。大部分内容由 LLM 自动生成但有真人策划与监督,顶部摘要质量较好。
- X / Twitter:大量 AI 资讯与研究者活跃于此,建议关注可信人士追踪行业动态。
12.3 使用建议与最终态度
推荐的使用策略:对于需要高级推理的问题(数学、代码、逻辑)应使用思考模型;但对于简单事实性问题让思考模型跑 30 秒是浪费。作者个人使用习惯:约 80-90% 时间直接用 GPT-4o,仅在数学、代码等难题时才转向思考模型并接受更长等待时间。
最终态度(核心金句):
“这些模型并不是绝对可靠的。检查它们的工作,把它们当作工具、当作灵感、当作第一稿生成器。作为人,对你自己的工作产物最终负责。”
作者每天使用模型数十甚至数百次,认为它们将带来巨大的财富创造;但必须视为“工具箱中的工具”而非权威——用来找灵感、打初稿、问问题,但必须检查其产出,对自身工作成果负全部责任。
总结:训练流程全景回放
当用户在 chatgpt.com 输入查询并点击发送,实际发生的机制如下:
- 用户的查询被“切碎”成 token 序列,插入一个“对话协议格式”。
- 整个请求变成一维 token 序列。
- 模型以类似 token 自动补全的方式逐个补出后续 tokens。
- 选择哪些 tokens 继续由三个训练阶段决定:
- 预训练:从互联网获取知识,写入神经网络参数。
- 监督微调(SFT):引入助手的“人品/性格”,以约 100 万条由人类标注者构造的对话样例为训练对象。
- 强化学习(仅思考模型):训练模型在可验证问题上产出与形成内在思维链与解题策略,使其像人一样拥有“内心独白”。
最终输出本质上是对一位 OpenAI 数据标注员(该标注员阅读标注说明后花两小时写出理想回复)的神经网络模拟(有损模拟)——但每生成一个 token 的计算量是固定的,并不存在真正的“推理”或“研究”。
全视频核心总结语:模型是“统计性 token 自动补全器”,训练数据决定了行为的上限和风格,工具(代码、搜索)补足了精确性和新信息,而作为使用者必须理解它的能力边界(瑞士奶酪模型),始终核验产出。