LLM 运作原理可视化教程
交互式学习资源:基于 Karpathy 经典讲座,用可视化方式讲解 LLM 内部工作机制。
交互式学习资源:基于 Karpathy 经典讲座,用可视化方式讲解 LLM 内部工作机制。
一份完整指南,带你了解 ChatGPT 这类大型语言模型是如何构建出来的——从原始互联网文本,到能够与你对话的助手。内容基于 Andrej Karpathy 的技术深度讲解。
文中采用的是 2024 年前沿模型的代表性数据——具体数字会随着每次新版本发布而变化。重点在于理解规模,而不是追求数字的绝对精确。
第一步,是收集海量文本。Common Crawl 等组织从 2007 年起便开始抓取 Web,到 2024 年已索引 27 亿个页面。随后,这些原始数据会经过过滤,形成 FineWeb 这样的高质量数据集。
目标是获得数量庞大、质量高且内容多样的文档。经过严格过滤后,最终会得到大约 44 TB 的数据——相当于约 10 块消费级硬盘所能容纳的文本——总计约 15 万亿个 token。
点击任意阶段,查看更多详细信息。
神经网络无法直接处理原始文本——它们需要数字。解决方案是 tokenization:将文本拆分成“token”(子词片段),并为每个 token 分配一个 ID。
GPT-4 的词表包含 100,277 个 token,通过 Byte Pair Encoding(BPE)算法构建。BPE 从单个字节(256 个符号)开始,然后反复合并出现频率最高的相邻符号对——在扩充词表的同时压缩序列长度。
Transformer 神经网络在初始化时拥有随机参数——数十亿个“旋钮”。训练过程会不断调节这些旋钮,使网络越来越擅长预测任意序列中的下一个 token。
每个训练步骤都是:采样一个 token 窗口 → 输入网络 → 将预测结果与实际的下一个 token 对比 → 朝正确方向轻微调整所有参数。如此重复数十亿次。
loss 是衡量预测误差的单一数值。随着模型逐渐学会人类语言的统计规律,loss 会稳定下降。
选择一个训练阶段,查看该阶段的模型输出质量。
训练完成后,网络会以自回归方式生成文本:输入一段 token 序列 → 得到涵盖全部 10 万个候选 token 的下一个 token 概率分布 → 从中采样一个 → 将其追加到序列末尾 → 重复这一过程。
这个过程具有随机性——同一个 prompt 每次都可能生成不同的输出,因为我们实际上是在抛一枚带有偏向性的硬币。概率更高的 token 更有可能被选中,但并不保证一定会被选中。
Temperature 控制随机程度。较低的 temperature(0.1)→ 模型总是选择概率最高的 token。较高的 temperature(2.0)→ 近乎均匀分布的混乱输出。0.7~1.0 通常是兼顾连贯性与创造力的理想区间。
观察模型如何选择下一个词。每个柱条都表示一个候选 token 的概率。
预训练完成后,你会得到一个 base model——一台复杂的自动补全引擎。它还不是助手,不会回答问题,只会根据自己在互联网上看到的内容,继续生成 token 序列。
给它一句 Wikipedia 中的话,它可能会凭记忆续写完整。问它“What is 2+2?”,它可能会生成一页数学教材、测验答案,或者突然扯到别的话题——具体取决于训练数据中哪种内容在统计上更常见。
base model 的知识存储在其 4050 亿个参数中——这是对互联网的一种有损压缩,就像一个只能近似还原信息、无法完美保存信息的 zip 文件。
base model 是一个 token 模拟器。要把它变成有帮助的助手,还需要进行 post-training——这一阶段的成本低得多,但同样至关重要。模型正是在这里学会如何进行对话。
人类标注员按照详细的标注说明创建理想对话数据集:乐于助人、诚实可靠、不会造成伤害。随后,模型会在这些对话上进行训练——不是从头开始,而是在新数据上继续调整预训练得到的权重。
现代 SFT 数据集(例如 UltraChat)包含数百万段对话——其中大部分是由 LLM 生成的合成数据,并经过人工审核。模型通过模仿来学习:它会采用数据中所呈现的理想助手人格。
每段对话都必须被编码成一个扁平的 token 序列。特殊 token 用于标记其结构:
随后,RLHF 会进一步优化助手的行为:
人类评分员会对模型生成的多个回答进行排序。reward model 通过这些数据学习预测人类偏好。之后,语言模型会通过强化学习进行训练,以生成能够从 reward model 获得高分的回答。
要理解 LLM 为什么会表现出这些行为,需要从其“心理机制”出发思考——这些特性源于模型接受训练,以统计方式模仿人类文本,并在此过程中涌现出来。
LLM 存在知识截止时间,同时 context window 也有容量限制。RAG 的解决方式是:把你的文档嵌入 vector store;在收到查询时,检索语义最相关的文本块;再把它们注入 context。这样便能让模型的预测分布偏向有依据、及时更新的事实,而不是训练数据中记忆下来的内容。
每份文档都会通过 embedding model 转换成一个稠密向量(约 1,536 个数字)。在这个高维空间中,语义相似的文本会落在彼此邻近的位置——不需要进行关键词匹配。
用户的问题也会通过同样的方式进行 embedding。Cosine similarity 会找出距离最近的文档向量,也就是与查询在语义上最相关的文本块,通常选取排名最靠前的 2~5 个。
在 LLM 看到问题之前,检索出的文本块会被添加到 prompt 前面。模型会基于注入的事实生成回答,而不是依赖从训练数据中记住的内容——这能显著减少模型在知识密集型任务中的 hallucination。
让 LLM 变得强大的那些特性——遵循指令、补全模式、根据 context 采取行动——同样也创造了新的攻击面。在这种全新的计算范式中,攻击与防御之间的猫鼠游戏已经展开。
从原始 Web 抓取数据,到你实际交互的 ChatGPT:整个过程横跨两个主要阶段,需要数月的算力投入,并涉及数十亿个参数。
LLM 不只是聊天机器人——它是一个正在形成的操作系统中的内核进程。它通过自然语言协调内存、计算资源和工具。
Disk = Internet / Files——按需浏览,或通过 RAG 检索
RAM = Context Window——容量有限的工作内存;模型会将信息换入和换出
CPU = GPU Inference——生成每个 token 时执行的 forward pass
System 2 Thinking——用时间换取准确率;“花 30 分钟思考,不要着急”
Self-Improvement——AlphaGo 式的问题:一旦存在 reward signal,LLM 能否超越人类水平的答案?
Customization——由面向狭窄任务的专业 LLM 专家组成的应用商店
Multimodality——将文本、图像、音频和视频统一到一个模型中
本文基于 Andrej Karpathy 的“Intro to Large Language Models”演讲制作——所有事实、数据和论述框架都可以追溯至该来源。交互式可视化在 AI 辅助下完成。最重要的结论是:生成的每个词都是一次概率采样——相当于在 10 万个候选项之间抛出一枚带有偏向性的硬币,并将这一过程重复数十亿次。
本文发布到 Hacker News 后,引发了关于其是否由 LLM 生成的激烈争论。这个观察很合理——实现过程确实使用了 AI 辅助。但内容并不属于 AI:本指南中的每项论断、每个数字和每种论述框架都直接来自 Karpathy 的演讲,而不是模型对 LLM 产生的 hallucination。
HN 讨论 · GitHub · 完整演讲文字稿 · HN 更新说明 · LLM council 报告 · v1(原始版本)· 第二部分:如何使用 LLM →