MicroGPT:200 行 Python 里,藏着大语言模型真正不可省略的部分

2026 年 2 月,Andrej Karpathy 发布了 MicroGPT:一个大约 200 行、除了 Python 标准库之外没有依赖的单文件程序。它能读取名字数据集,训练一个类似 GPT-2 的小模型,再生成训练集中没有出现过的新名字。

这篇文章很快成为 Hacker News 当季热度最高的技术文章之一。它吸引人的地方不是又做出了一个更强模型,而是做了相反的事:把模型压缩到无法继续简化,让我们看清哪些部分才是 GPT 真正不可省略的骨架。

一个 GPT 到底需要哪些零件

MicroGPT 的两百行代码包含了一条完整链路:

  1. 一组由名字构成的训练文档;
  2. 把字符转换成整数的 tokenizer;
  3. 从标量运算实现的自动微分引擎;
  4. token embedding、位置 embedding、因果自注意力和 MLP;
  5. 计算下一个 token 概率的交叉熵损失;
  6. 反向传播与 Adam 优化器;
  7. 从模型分布中逐个采样 token 的推理循环。

今天使用 PyTorch 时,loss.backward() 只是一行代码。MicroGPT 却让每个数值记住自己由哪些数值计算而来,并在反向拓扑顺序中应用链式法则,把损失的梯度传回每一个参数。

当这些细节被框架隐藏后,我们很容易把“调用训练 API”和“理解训练”混为一谈。MicroGPT 的价值,就是让抽象重新变得可见。

模型学习的不是答案,而是下一个符号

示例使用最简单的字符级 tokenizer:26 个小写字母各自对应一个整数,再增加一个表示文档开始和结束的特殊 token。

训练时,模型看到前面的字符,预测下一个字符。例如读到 emm,它需要提高下一个字符为 a 的概率。每次预测产生损失,反向传播再微调参数。大量名字重复这个过程后,参数逐渐吸收字符组合的统计规律。

生成阶段仍然做同一件事:给定已经生成的 token,计算下一个 token 的概率,按分布采样,然后把新 token 放回输入。对模型而言,回答问题、续写文章与生成名字,本质上都是对文档进行概率续写。

这也解释了“幻觉”为何不是偶然附加的 bug。模型的基本任务本来就是生成统计上合理的后续,而不是查询一个天然保证真实的事实库。

自注意力解决了什么

在生成当前位置时,模型需要判断前面哪些 token 更有用。自注意力为每个位置构造 query、key 和 value,通过 query 与历史 key 的匹配程度计算权重,再对 value 加权汇总。

因果遮罩保证当前位置只能看到过去,不能偷看训练答案。多头注意力则允许不同的头学习不同关系。经过注意力和 MLP 的多层变换,最后一层状态被映射到词表,得到下一个 token 的概率。

公式听起来复杂,落进 MicroGPT 后却只是循环、乘加、softmax 和梯度传播。这种“能慢慢跑,但每一步都看得见”的实现,对理解算法比追求速度更有价值。

“其他一切只是效率”该怎样理解

Karpathy 在原文中说,文件已经包含全部算法内容,“其他一切只是效率”。这句话很有冲击力,但不能误解为生产大模型也只有两百行工作。

真实系统还需要高效 tokenizer、张量计算、GPU 内核、混合精度、分布式训练、检查点、数据清洗、容错、评测、安全对齐与在线服务。这些不一定改变 GPT 的基本算法,却决定它能否从几千个参数扩展到数十亿参数,能否稳定服务真实用户。

算法骨架可以很小,工程系统依然可以极其复杂。区分两者的好处,是排查问题时知道应该问哪一层:模型结构不对、数据不对,还是并行与服务实现不对。

我的理解:先亲手造一个慢的,再理解快的

学习一个复杂系统时,直接进入成熟框架很容易被 API、配置和硬件细节淹没。一个没有依赖、性能很差但逻辑完整的实现,反而能建立稳定的心智模型。

数据库可以从手写一个 B+ 树开始,编译器可以从解释简单表达式开始,大模型也可以从 MicroGPT 开始。亲眼看见数据怎样变成 token、损失怎样产生、梯度怎样更新参数,之后再使用高级框架,就不再只是在记调用方式。

MicroGPT 还给快速膨胀的 AI 行业一种难得的克制:理解技术不一定要追逐最大的模型。有时,把系统缩小到一张屏幕能读完,才更接近它真正的本质。

参考资料

本文是 2026 年 8 月整理断更期时写下的回顾,发布日期按事件所处阶段归档。

文章目录
  1. 1. 一个 GPT 到底需要哪些零件
  2. 2. 模型学习的不是答案,而是下一个符号
  3. 3. 自注意力解决了什么
  4. 4. “其他一切只是效率”该怎样理解
  5. 5. 我的理解:先亲手造一个慢的,再理解快的
  6. 6. 参考资料
|