本文总结了 Andrej Karpathy 前不久关于 LLM 的分享 Deep Dive into LLMs like ChatGPT,用于部门内部分享,也可以理解为一个 TL;DR 版本。强烈建议观看原视频。
预训练(Pretraining)
互联网
FineWeb 是一个包含超过 12 亿个网页的数据集。
LLMs 首先爬取互联网以构建大量文本数据集。这些文本的问题在于原始数据充满噪音,有大量重复、低质量、无关紧要的文本内容。在使用这些数据训练 LLMs 之前,需要进行清洗过滤。
数据清洗后,仍然需要压缩才能适用于模型训练。
分词(Tokenization)
分词是在处理之前,模型是如何将文本分解为较小的零件(Token)的。该模型没有存储原始单词,而是将它们转换为代表重复模式的 ID。
分词为了使用尽可能短的序列来实现更高压缩率。
一种流行的技术是字节对编码(BPE)
字节对编码是一种简单的数据压缩形式,这种方法用数据中不存在的一个字节表示最常出现的连续字节数据。
好的分词数量的选择有利于模型。例如,GPT-4 使用 100,277 个 Token 数量。它完全取决于模型创建者。
Tiktokenizer 是一个可视化工具帮助理解分词效果。
神经网络训练(Neural Network Training)
分词完成后,它们会被喂给神经网络:
- 采用一组 Token 组成上下文窗口(Context Window)
- 经过模型预测得到下一个 Token
- 根据结果调整模型中的权重
- 随着训练的增加模型学会更好地预测
更长的上下文意味着模型可以有更多“记忆”,同时也会增加计算成本。
神经网络内部(Neural Network Internals)
在模型内部,数十亿个参数与输入 Token 同时计算,生成下一个 Token 的概率分布:
- 模型参数和输入变量的计算方式由复杂的数学方程定义。
- 模型体系结构旨在平衡速度,准确性和并行化。
- 可视化参考
推理(Inference)
LLMs 不会产生确定性的输出,它们是随机的。这意味着每次运行模型时,输出都会略有不同。
- 模型不仅重复了经过训练的内容,还会根据概率生成响应。
- 在某些情况下,响应将与培训数据中的某些内容完全匹配,但是大多数情况下,它会生成遵循类似模式的新事物。
这种随机性是 LLMs 有时候看起来有创造力的原因,也是它们有时会产生幻觉的原因。
例子:重现 gpt2 训练
Openai 于 2019 年发布的 GPT-2 是基于 Transformer 的早期 LLM。它具有:
- 16 亿参数
- 1024 token 上下文长度
- 通过约 1000 亿个 token 训练
- 培训成本为 40,000 美元
今天(2025/2)训练的效率已大大提高。成本也降低为数百美元:
- 更好的预训练数据提取技术:清洗后的数据集帮助模型更快训练。
- 更强的硬件和优化的软件:相同结果所需的计算较少。
Karpathy 复现相关链接: https://github.com/karpathy/llm.c/discussions/677
开放的基础模型
一些公司培训大型语言模型(LMS) ,并免费发布基本模型。基本模型本质上是一种原始的,预先训练的LM,它仍然需要微调或对齐才能实际上有用。
基础模型经过互联网规模数据的培训,这意味着它们会尝试补充原始数据,但与人类意图缺乏一致性。
模型的发布需要什么?
- 运行模型的代码(model.py)
- 模型的参数
基础模型的本质
- 这是一个 token 级别的互联网文本模拟器
- 它是随机的,每次运行时,都会得到不同内容
- 它“梦想”互联网文档
- 它还可以从记忆中逐字朗诵一些训练语料
- 模型的参数有点像互联网的的有损压缩编码
- 您已经可以通过提示来将其用于应用程序
- 例如翻译:应用程序通过构建几次提示(few-shot)并利用“上下文学习”能力。
- 例如助手:以结构化的方式提示他们。
- 但是我们可以做得更好…