从零开始理解 GPT 的核心原理
基于 Andrej Karpathy 的 200 行纯 Python 代码
你用过 ChatGPT 吧?你给它发消息,它给你回复。
GPT 的全部能力,就是猜下一个字。
比如我说:"今天天气真"
你猜下一个字是什么?你可能会说:"好"
为什么?因为你见过太多"今天天气真好"这样的句子了。
这就是 GPT 做的全部事情:根据前面的字,猜下一个字。
GPT 是一个字一个字生成的,像打字一样。
第1步:看 "床前明月" → 预测出 "光"
第2步:看 "床前明月光" → 预测出 "疑"
第3步:看 "床前明月光疑" → 预测出 "是"
...
每次预测完一个字,这个字就会被加到后面,然后一起作为下一次预测的输入。
就像滚雪球一样,越滚越大。
"床前明月"后面,"光"的概率是 80%,"亮"是 10%...
GPT 不是每次都选概率最高的词。
如果每次都选最常见的词:
"从前有座山,山里有座庙,庙里有个..."
→ 每次都会写"老和尚",没有任何创意!
所以 GPT 有一个"创意度"设置(温度):
它不是在"搜索"和"匹配",它跟你一样——
读过太多遍"床前明月光",这个规律已经"刻"在它脑子里了。
你是怎么学会的?
A:在脑子里搜索以前背过的文章?
B:读过很多书,自然而然就写出来了?
答案是 B!GPT 也是一样。
区别只是:你的"脑子"是神经元,GPT 的"脑子"是一大堆数字(参数)。
训练的时候发生的事情:
重复几百万次,它就"学会"了。
重复 = 多练习 = 越来越准
想象你在调节淋浴的水温:
水太冷了 → 往一个方向拧一点 → 感觉水温变了没 → 决定继续拧还是往回拧
参数也是一样:
这就是"梯度下降"的核心思想。
就像学生上课需要课本,模型学习也需要"课本"。
这里的"课本"是一个文件,里面有 32033 个英文名字:
emma
olivia
ava
isabella
...
模型要从这些名字中学习"名字长什么样"。
计算机不认识字母,只认识数字。
把字母变成数字:
这样 emma 就变成了 [4, 12, 12, 0]
还有一个特殊的 BOS(Beginning of Sequence)符号,告诉模型"新名字开始了"。
字母 "a" 本身只是一个符号,没有"含义"。
但如果我们用 16 个数字来表示它:
好处:如果 "a" 和 "e" 都是元音,它们的 16 个数字会有点相似。
这就是嵌入(Embedding):
"ae" 和 "ea" 是两个不同的名字,字母一样,只是顺序不同。
模型怎么知道 "a" 是在第 1 个位置还是第 2 个位置?
告诉模型"这是什么字母"
告诉模型"这个字母在第几个位置"
两个加起来,模型就知道:这是字母 "a",它在位置 0(开头)。
"注意力"就是"看上下文"的能力。
比如我说:"苹果"
你怎么知道我说的是水果,不是手机公司?
因为你看到了上下文——如果我在说"吃",那就是水果。
对 GPT 来说也是一样:
"小明喜欢吃____"
模型会"注意"到:
综合预测:可能是"苹果"、"香蕉"、"火锅"...
想象你去图书馆找书:
你拿着纸条写着"我想找关于历史的书"
每本书的标签:历史、科学、小说...
书里面的内容
你拿 Query 去和每本书的 Key 比对,匹配度高的,就取出它的 Value。
在 GPT 里,每个字母都在"问"前面的字母:"你有我需要的信息吗?"
这 3 个数字定义了模型"有多大":
如果把这些数字变大:
GPT-4 有 上百层,参数量是万亿级别。
这个项目只有 1 层,4192 个参数——所以叫 "micro"GPT。
预测下一个词
一个字一个字,滚雪球
大量阅读 + 反复试错调整
把字母变成数字向量
看上下文,找相关信息
重复练习,调整参数
它们有什么相同和不同?
| 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
感谢学习 🎉