只有200行代码。
没有PyTorch,没有TensorFlow,甚至连numpy都没用。
Andrej Karpathy,AI圈顶流大神,一个人坐在电脑前,用最纯粹的Python,手写了一个GPT。
名字很朴素,叫 microgpt。
这是GPT的“裸奔”版。
它剥离了所有现代工业界的工程噪音,把大模型最核心的算法骨架,赤裸裸地展示在你面前。
大道至简
如果你习惯了动辄几十GB的模型文件,microgpt的配置单简直寒酸得像个笑话。
它只有 4192个参数。
作为对比,GPT-2有15亿参数,GPT-4更是传言有万亿级别。Karpathy用的数据集也不是整个互联网,而是一个包含32000个美国名字的文本文件。
任务很简单:让模型学会起名字。
这听起来像过家家?别急。Karpathy这么做,是为了证明一件事:
GPT的本质,不是魔法,而是一个极其巨大的数学函数。
在这个脚本里,没有那些让你头晕的框架封装。你自己定义数据结构,自己写前向传播,自己手推反向传播。
"The model is a big math function that maps input tokens to a probability distribution over the next token."(模型就是一个巨大的数学函数,把输入token映射到下一个token的概率分布。)
当你看到那个名为 Value 的类,用几十行代码实现了自动求导,你突然会意识到:哦,原来所谓的“神经网络学习”,就是微积分里的链式法则,在那儿不停地乘数字。
手搓“大脑”,每一行都是真相
有意思的是Karpathy处理“Tokenizer”的方式。
现在的大模型都在用复杂的分词器,把词拆成子词。Karpathy直接返璞归真:字符级。
a-z,26个字母,再加上一个特殊的开始符号。词表大小只有27。
模型看到的不是“Emma”这个词,而是 e, m, m, a 这一串数字ID。
这就像教一个小学生识字,不给他讲词组,只给他看字母。模型必须自己从这些零散的字母中,摸索出名字的规律——
比如通常以辅音开头,很少有三个辅音连在一起。
整个架构依然是经典的Transformer:多头注意力机制、前馈神经网络(MLP)、层归一化。
虽然代码只有几百行,但该有的都有。
在PyTorch里,**Autograd(自动求导)**只需要敲一行 loss.backward()。
但在microgpt里,Karpathy强迫你看清这背后的逻辑:每个数值节点都记得它是怎么算出来的,当你告诉它“结果不对,要改”时,它会顺着计算图往回走,告诉每个参数“你该变大一点还是变小一点”。
幻觉不是Bug,是Feature
训练过程快得惊人。
在MacBook上,大概一分钟就跑完了。Loss(损失函数)从3.3降到了2.37左右。
这意味着模型从“瞎猜”变成了“懂点规律”。
接下来是见证奇迹(或者说“幻觉”)的时刻。模型开始生成新名字了:
kamon
ann
karai
jaire
vialan
...
看着这些名字,你会有一种奇怪的感觉。它们听起来像真名,甚至挺洋气,但你在现实生活里可能根本没见过叫“Karia”或者“Jaire”的人。
这就是Karpathy想说的重点:幻觉。
很多人把大模型“一本正经胡说八道”当成一种缺陷。但在microgpt里,你可以清晰地看到,这就是模型的工作原理。
"The model generates tokens by sampling from a probability distribution. It has no concept of truth."(模型通过概率分布采样生成token。它没有真理的概念。)
模型根本不知道“Karia”是不是一个真名,它只知道根据概率分布,k-a-r-i-a这几个字母连在一起,“看起来很像那么回事”。
ChatGPT编造事实,和microgpt编造名字,本质上是一回事。它们都在做统计意义上的合理补全。
这一点,我个人觉得,是理解大模型最关键的一把钥匙。
现代LLM的“反向工程”
当然,Karpathy没忘了解释,从这200行代码到ChatGPT,中间还隔着什么。
差距主要在“工程化”上。
数据: microgpt用的是3万个名字,GPT-4用的是万亿级别的互联网文本。
算力: microgpt在笔记本上跑一分钟,GPT-4需要几千张GPU跑几个月。
优化: microgpt用的是最基础的Adam优化器,而现代LLM在精度控制、分布式训练、学习率调度上已经卷出了天际。
还有一点,ChatGPT之所以能聊天,是因为经过了SFT(监督微调) 和 RLHF(人类反馈强化学习)。
简单说,microgpt生下来只会“续写”,它是个文档补全机器。想让它变成聊天机器人,你得把对话格式包装成文档,硬塞给它。
这就是为什么你跟ChatGPT聊天时,感觉它像个智者;而看microgpt生成名字时,感觉它像个统计学机器。
因为本质上,它们确实就是统计学机器。
代码即诗歌
文章发出后,评论区炸了。
有人把代码移植到了Rust,有人用它来生成韩语名字,甚至有人把它做成了可视化网页。
一位开发者评论得很好:
"This guy is so amazing! ... Reading math only just confuses me, together with the code it makes it so clear! It feels like a lifetime achievement for me."(这家伙太神了!光看数学公式我只觉得困惑,配合代码一切都清晰了!这感觉像是我人生的成就时刻。)
在这个AI被包装成黑盒、被神话成“硅基生命”的时代,Karpathy的microgpt像是一把手术刀。
他切开了那些令人眼花缭乱的包装纸,把核心算法放在了手术台上。
不管你是AI从业者,还是仅仅对ChatGPT感到好奇的普通人,我都强烈建议你去读一下这段代码。
不需要读懂每一行,哪怕只是看看那个 backward() 函数,看看它是怎么一步步把误差传回去的。
你会发现,并没有什么“灵魂”在代码里闪烁,只有基本的数学逻辑。
**然鹅,**所谓的智能,竟然真的可以从这么简单的规则中涌现出来。
你说,这算不算一种浪漫?
参考链接:
http://karpathy.github.io/2026/02/12/microgpt/