核心概念 训练原理 注意力机制 总结对比

理解 microGPT

从零开始理解 GPT 的核心原理

基于 Andrej Karpathy 的 200 行纯 Python 代码

核心概念 训练原理 注意力机制 总结对比

GPT 是什么?

你用过 ChatGPT 吧?你给它发消息,它给你回复。

GPT 的全部能力,就是猜下一个字。

比如我说:"今天天气真"

你猜下一个字是什么?你可能会说:"好"

为什么?因为你见过太多"今天天气真好"这样的句子了。

这就是 GPT 做的全部事情:根据前面的字,猜下一个字。

核心概念 训练原理 注意力机制 总结对比

生成过程:一个字一个字

GPT 是一个字一个字生成的,像打字一样。

第1步:看 "床前明月" → 预测出 "光"

第2步:看 "床前明月" → 预测出 "疑"

第3步:看 "床前明月光" → 预测出 "是"

...

每次预测完一个字,这个字就会被加到后面,然后一起作为下一次预测的输入。

就像滚雪球一样,越滚越大。

核心概念 训练原理 注意力机制 总结对比

不是每次都选概率最高的

"床前明月"后面,"光"的概率是 80%,"亮"是 10%...

GPT 不是每次都选概率最高的词

如果每次都选最常见的词:

"从前有座山,山里有座庙,庙里有个..."

→ 每次都会写"老和尚",没有任何创意!

所以 GPT 有一个"创意度"设置(温度):

核心概念 训练原理 注意力机制 总结对比

GPT 是怎么学会的?

它不是在"搜索"和"匹配",它跟你一样——

读过太多遍"床前明月光",这个规律已经"刻"在它脑子里了。

你是怎么学会的?

A:在脑子里搜索以前背过的文章?

B:读过很多书,自然而然就写出来了?

答案是 B!GPT 也是一样。

区别只是:你的"脑子"是神经元,GPT 的"脑子"是一大堆数字(参数)。

核心概念 训练原理 注意力机制 总结对比

训练:不断试错调整

训练的时候发生的事情:

给模型看 "emma" 让它猜下一个字母 猜错了
告诉它正确答案 调整内部数字 下次更可能猜对

重复几百万次,它就"学会"了。

重复 = 多练习 = 越来越准

核心概念 训练原理 注意力机制 总结对比

怎么知道往哪个方向调整?

想象你在调节淋浴的水温:

水太冷了 → 往一个方向拧一点 → 感觉水温变了没 → 决定继续拧还是往回拧

参数也是一样:

  1. 往一个方向调整一点
  2. 看结果变好了还是变差了
  3. 变好了继续,变差了往回调整
  4. 重复试错

这就是"梯度下降"的核心思想。

核心概念 训练原理 注意力机制 总结对比

代码:数据集

就像学生上课需要课本,模型学习也需要"课本"。

docs = [line.strip() for line in open('input.txt') if line.strip()]

这里的"课本"是一个文件,里面有 32033 个英文名字

emma
olivia
ava
isabella
...

模型要从这些名字中学习"名字长什么样"。

核心概念 训练原理 注意力机制 总结对比

分词器:把字母变成数字

计算机不认识字母,只认识数字。

uchars = sorted(set(''.join(docs))) # 收集所有出现过的字符

把字母变成数字:

a → 0 b → 1 c → 2 ... z → 25

这样 emma 就变成了 [4, 12, 12, 0]

还有一个特殊的 BOS(Beginning of Sequence)符号,告诉模型"新名字开始了"。

核心概念 训练原理 注意力机制 总结对比

嵌入:把数字变成向量

字母 "a" 本身只是一个符号,没有"含义"。

但如果我们用 16 个数字来表示它:

a → [0.1, -0.3, 0.5, 0.2, ...] (16个数字)

好处:如果 "a" 和 "e" 都是元音,它们的 16 个数字会有点相似

这就是嵌入(Embedding)

核心概念 训练原理 注意力机制 总结对比

位置嵌入:解决顺序问题

"ae" 和 "ea" 是两个不同的名字,字母一样,只是顺序不同

模型怎么知道 "a" 是在第 1 个位置还是第 2 个位置?

字母嵌入

告诉模型"这是什么字母"

位置嵌入

告诉模型"这个字母在第几个位置"

两个加起来,模型就知道:这是字母 "a",它在位置 0(开头)。

核心概念 训练原理 注意力机制 总结对比

注意力机制:看上下文

"注意力"就是"看上下文"的能力。

比如我说:"苹果"

你怎么知道我说的是水果,不是手机公司?

因为你看到了上下文——如果我在说"吃",那就是水果。

对 GPT 来说也是一样:

"小明喜欢吃____"

模型会"注意"到:

  • "喜欢" → 表示偏好
  • "吃" → 跟食物有关

综合预测:可能是"苹果"、"香蕉"、"火锅"...

核心概念 训练原理 注意力机制 总结对比

Q、K、V:图书馆比喻

想象你去图书馆找书:

Q (Query) 查询

你拿着纸条写着"我想找关于历史的书"

K (Key) 键

每本书的标签:历史、科学、小说...

V (Value) 值

书里面的内容

你拿 Query 去和每本书的 Key 比对,匹配度高的,就取出它的 Value。

在 GPT 里,每个字母都在"问"前面的字母:"你有我需要的信息吗?"

核心概念 训练原理 注意力机制 总结对比

模型参数

这 3 个数字定义了模型"有多大":

n_embd = 16 # 嵌入维度(每个字母用多少数字表示) n_head = 4 # 注意力头数量 n_layer = 1 # 层数

如果把这些数字变大:

GPT-4 有 上百层,参数量是万亿级别

这个项目只有 1 层,4192 个参数——所以叫 "micro"GPT。

核心概念 训练原理 注意力机制 总结对比

总结:你已经学会了什么

✓ GPT 在做什么

预测下一个词

✓ 怎么生成

一个字一个字,滚雪球

✓ 怎么学习

大量阅读 + 反复试错调整

✓ 嵌入

把字母变成数字向量

✓ 注意力

看上下文,找相关信息

✓ 训练

重复练习,调整参数

核心概念 训练原理 注意力机制 总结对比

microGPT vs ChatGPT

它们有什么相同和不同?

microGPT ChatGPT
原理 预测下一个词 预测下一个词
训练数据 3万个名字 整个互联网
参数量 4,192 约 1 万亿
运行设备 你的电脑 数千台超级计算机

核心算法完全一样,只是规模差了 2 亿倍!

核心概念 训练原理 注意力机制 总结对比

核心洞见

"麻雀虽小,五脏俱全"

microGPT 虽然参数量没有 ChatGPT 那么大,但主要原理是一样的。

从 microGPT 到 ChatGPT 的进化:

microGPT → 增大数据 → 增加参数 → 使用 GPU → nanoGPT → GPT-2 → GPT-3 → 加入人类反馈训练 → ChatGPT → GPT-4

核心算法没变,只是规模放大了亿倍!

核心概念 训练原理 注意力机制 总结对比

理解本质,去除神秘感

GPT 就是一个超级复杂的"猜下一个字"机器,
通过读海量文字,学会了什么字后面通常接什么字。

"Everything else is just efficiency."
—— Andrej Karpathy

感谢学习 🎉

按 ← → 键或空格切换幻灯片