microgpt | 微型 GPT
原标题: microgpt 中文标题: 微型 GPT:用 200 行纯 Python 揭示大语言模型的全部本质 作者: Andrej Karpathy 发表时间: 2026年2月12日 原文链接: https://karpathy.github.io/2026/02/12/microgpt/
一句话摘要
仅用 200 行无任何依赖的纯 Python 代码,Karpathy 实现了 GPT 的完整训练和推理流程——证明现代大语言模型的核心算法惊人地简洁,所有超越此核心的部分都是工程优化而非算法创新。
完整核心内容翻译
引言:十年蒸馏
microgpt 代表了 Karpathy 长达十年的努力——将大语言模型蒸馏到其最本质的组件。这个项目的目标是用最少的代码量,包含 GPT 模型训练和推理的完整算法精髓。
核心组件
1. 数据集
系统在 32,000 个人名上训练。每个名字作为一个"文档",模型学习逐字符预测后续内容。这展示了 LLM 的根本工作方式:逐 Token 补全文档——无论是生成人名还是进行对话,底层逻辑完全相同。
2. 分词器(Tokenizer)
与生产模型使用的子词分词(BPE)不同,microgpt 采用字符级编码。每个唯一字符获得一个整数 ID:a-z 为 26 个 Token,加上一个特殊的"序列开始"(BOS)Token,共 27 个。这种简化展示了分词原理,同时避免了不必要的复杂性。
3. 自动微分引擎
Value 类实现了通过反向传播的自动微分。每个运算(加法、乘法、指数运算等)记录其局部梯度。反向传递应用链式法则,计算损失相对于每个参数的变化率。
关键细节:当参数通过多条路径影响损失时,梯度累加而非覆写——正确实现了多元微积分的求导规则。
这个基于标量的实现在算法上与 PyTorch 的张量实现完全一致。
4. 模型架构
GPT 的完整结构包括:
嵌入层:Token 嵌入和位置嵌入结合,同时表达内容信息和位置信息。
注意力块:查询(Query)、键(Key)、值(Value)使 Token 能够"回看"之前的位置。多头注意力允许并行的注意力模式。KV 缓存存储之前的键和值以提高效率。
MLP 块:两层前馈网络,对每个位置进行局部计算。
残差连接:输出加回输入,使梯度能流过更深的网络。
最后一层投影到 27 个 logits(每个词汇 Token 一个)。
5. 训练循环
每次迭代:
- 选择一个文档(名字)
- 将 Token 前向传播通过模型
- 计算交叉熵损失(使用负对数概率)
- 反向传播计算梯度
- 使用 Adam 优化器更新参数
损失从约 3.3(随机猜测水平)降至约 2.37,经过 1000 步。
6. 推理/生成
生成从 BOS Token 开始。模型输出 27 个 logits,通过 softmax 转化为概率。按概率采样一个 Token,作为下一步输入,循环直到 BOS 再次出现。
温度参数控制随机性:低温度产生保守输出,高温度带来多样性。
关键技术细节
交叉熵损失:衡量预测误差——正确 Token 的负对数概率。完美预测为 0;最大惊讶度为无穷大。
Adam 优化器:为每个参数维护动量(m)和二阶矩(v)缓冲区。偏差修正补偿初始化时的零值。学习率线性衰减。
实验结果
训练后,模型生成了听起来合理的名字,如 "kamon"、"karai"、"yeran"——这些是反映训练数据中学到的模式的统计虚构物。
从理论到生产:差距清单
microgpt 与 ChatGPT 等生产系统之间的差距,Karpathy 给出了精确的对照表:
| 维度 | microgpt | 生产 LLM |
|---|---|---|
| 参数量 | 4,192 | 数千亿 |
| 训练数据 | 32K 个名字 | 数万亿互联网 Token |
| 硬件 | 纯 Python + CPU | GPU/TPU + 专用内核 |
| 分词 | 字符级 | 子词(BPE) |
| 架构 | 单层 | 100+ 层 + RoPE, GQA, MoE |
| 训练方式 | 每步一个文档 | 跨多 GPU 的批次并行 |
| 后训练 | 无 | SFT + 强化学习(RLHF/RLVR) |
尽管存在这些差距,基本算法完全相同。
FAQ 的核心洞察
模型不具备语义理解——它是"一个大的数学函数",将输入映射到概率分布。它不区分"虚构"和"真实",因为它捕获的是统计可能性而非事实真相。
这个机制解释了:
- microgpt 为什么会生成不存在的名字
- ChatGPT 为什么会自信地给出错误答案(幻觉)
两者是同一原理在不同规模上的体现。
技术要点
- 算法本质的极简性:GPT 的全部算法精髓可以用 200 行无依赖 Python 表达,证明 LLM 的核心概念是"迭代预测下一个 Token"
- 标量自动微分:通过
Value类实现的链式法则,每个运算记录局部梯度并在反向传播中累加——这是所有深度学习框架的算法核心 - 注意力机制是关键创新:Query-Key-Value 结构使 Token 能"回看"上文,KV 缓存在推理时避免重复计算
- 工程 vs 算法的清晰边界:从 4,192 参数到数千亿参数的跨越完全是工程问题——分布式计算、混合精度、专用硬件——算法本身不变
- 幻觉的根本原因:模型生成的是"统计上可能的"输出而非"事实上正确的"输出——这是 Token 预测范式的内在特性,不是可以简单修复的 bug
深度解读
microgpt 是 Karpathy 教育事业的集大成之作。从 2015 年的 char-rnn(RNN 不合理有效性文章中的实验),到 2022 年的 nanoGPT,到 2023 年的 micrograd 视频系列,再到 2026 年的 microgpt——这是一条持续十年的"蒸馏"之路,每一步都在追求更极致的简洁。
文章最深刻的贡献在于划定了"算法"与"工程"的精确边界。在当今 AI 产业中,围绕大模型训练有无数神秘化的叙事——需要多少 GPU、多少数据、多复杂的基础设施。microgpt 用 200 行代码说清楚了:核心算法就是这么简单。ChatGPT 与 microgpt 之间的距离不是智慧的距离,而是规模和工程优化的距离。
这对 AI 教育有深远影响。传统的深度学习课程往往从线性代数和概率论开始,层层推进到复杂的架构。microgpt 提供了一条替代路径:从一个可运行的完整实现出发,然后逐步理解为什么每一个组件是必要的。这是一种"自顶向下"的教学法,与 Karpathy 在 CS231n 中的"自底向上"方法形成互补。
关于幻觉的解释特别值得关注。Karpathy 明确指出:幻觉不是 bug,而是 Token 预测范式的内在特性。模型不区分"真实的名字"和"虚构的名字"——它只知道什么是"统计上可能的"。这个洞察在 2026 年对 AI 安全和可信 AI 的讨论中具有根本性的重要性。
延伸思考
200 行代码的教育价值:如果一个高中生能读懂这 200 行代码,他/她就理解了 ChatGPT 的核心算法。这是否意味着 AI 素养教育应该从代码实现而非概念讲解开始?
工程壁垒作为护城河:如果算法如此简单,那么 OpenAI、Anthropic 等公司的竞争壁垒完全在于工程和规模。这种壁垒是可持续的吗?随着开源社区(如 Llama)的追赶,"规模护城河"能维持多久?
Token 预测的局限性:microgpt 清楚地展示了 Token 预测范式的本质和局限。是否存在一种超越"预测下一个 Token"的学习范式?强化学习(RLVR)是否代表了这种超越的开始?
Karpathy 的教育遗产:从 CS231n 到 YouTube 到 microgpt,Karpathy 可能是 AI 领域最有影响力的教育者。他的"蒸馏复杂性"方法论——将庞大的系统简化到可理解的本质——是否本身就是一种值得研究的认知方法?