首页 › programming › 手写一遍GPT,大模型再无魔法

为什么选这条两小时的“常青神课”

2026年的今天,让 AI 写代码已是家常便饭,但大多数人对“大模型”三个字的理解,仍然停留在新闻标题层面。它到底是个什么东西?为什么喂它文本它就能“学会说话”?这些问题,绝大多数人答不上来。

今天要深读的这条视频,是编程领域公认的入坑第一课:Andrej Karpathy 的 Let's build GPT: from scratch, in code, spelled out。Karpathy 是 OpenAI 创始成员、前特斯拉 AI 总监,也是技术圈公认最强的 AI 教学者之一。这条视频发布于 2023 年 2 月,时长约 2 小时,属于他的 Neural Networks: Zero to Hero 系列,播放量达数百万级,至今仍是无数程序员转行 AI 的敲门砖。它不是本周新片,而是一条常年霸榜的常青课——选它,是因为在这个分类里,它就是绕不开的那一课。

它解决的问题非常具体:从空文件开始,不用任何框架魔法,用纯 PyTorch 把一个能生成“莎士比亚风格”文本的 GPT 亲手写出来。 两个小时看完,你会明白一个残酷又解脱的事实——大模型的原理,一页纸就能讲完;难的从来不是原理,是规模。

视频背景卡片

项目 内容
视频标题 Let's build GPT: from scratch, in code, spelled out.
频道 Andrej Karpathy(OpenAI 创始成员、前特斯拉 AI 总监)
所属系列 Neural Networks: Zero to Hero
时长 约 2 小时
播放量 数百万级(频道长视频中的头部作品)
发布时间 2023 年 2 月
核心主题 从空文件手写一个 GPT,逐行讲透 Transformer

核心内容拆解

1. 先造一个“最蠢的模型”,把「模型」祛魅

Karpathy 的第一步不是讲理论,而是造一个 bigram 模型:只看前一个字符、猜下一个字符的“统计表”。训练数据是 tiny Shakespeare 语料——约 1MB、100 万字符的莎士比亚全集,全部不同字符只有 65 个。于是这个“模型”就是一张 65×65 的概率表,每个格子记录“字符 A 后面出现字符 B”的频率。

这个起点看似寒酸,实则是全片最重要的教学设计:让初学者在第一分钟就看到完整的训练循环——算预测、算 loss、反向传播、更新参数,一个不少,只是参数少得可怜。他顺手给了一个锚点:65 个字符乱猜,理论 loss 是 -ln(1/65)≈4.17;bigram 训练后能压到 2.5 左右。我的延伸分析是,这一步把“模型”这个词彻底祛魅了:所谓模型,无非是“一堆参数 + 一个让预测逐步逼近事实的训练循环”,剩下的都是程度问题。

2. 大语言模型只干一件事:猜下一个字

有了 bigram,接下来只回答一个问题:怎么让它变聪明?Karpathy 给出的答案朴实到让人愣住——不需要更聪明的逻辑,只需要更长的“前文”。把“只看前 1 个字符”改成“看前 N 个字符”,让每个位置都根据全部上文来预测下一个字符,这就是语言模型的全部。数学上就是条件概率的链式分解:一句话的概率,拆成一连串“给定前文、下一个字的条件概率”相乘。生成文本,就是反复采样“下一个字”,再把结果接回输入,循环往复。

视频原话大意是:这就是所谓的 autoregressive(自回归)模型,它的行为和你在 ChatGPT 里打字时逐 token 吐字的体验完全一致。我的延伸是:从这条 1MB 语料上的字符级模型,到 GPT-4,原理完全同构,差距只在三处——tokenizer 从 65 个字符换成几万量级的子词、训练数据从 1MB 换成上万亿 token、参数从一张表换成千亿矩阵。看懂这一节,你就看懂了“大”模型里那个“大”字。

3. 两行数学撑起全场:softmax 与交叉熵

全片真正用到的数学,其实只有两个组件。第一个是 softmax:把网络输出的任意一组分数(logits)变成总和为 1 的概率分布,指数化保证非负、归一化保证可解释。第二个是交叉熵(负对数似然):真实答案是字符 c,你的模型给 c 的概率是 p,loss 就是 -ln(p)。猜对且自信,loss 趋近 0;猜对但犹豫,loss 也罚你。Karpathy 特别提醒了工程细节——指数容易数值爆炸,softmax 前要先减去最大值,这个 trick 今天所有训练代码里都还在用。

这节给我的启发是:深度学习真正的骨架小得惊人。不是不考数学,而是只考这两条,其余全是工程。很多人被“AI 数学很难”劝退,其实卡住他们的从来不是这两个公式,而是没人带他们把公式和代码对上号——这条视频干的就是这件事,每个公式出现的同时,对应的 PyTorch 函数就敲在屏幕上。

4. 全片最妙一段:从「加权平均」里长出 attention

这是我认为全片含金量最高的一段,Karpathy 用了一种教科书里罕见的推导路径。他先不写 attention 公式,而是写一个朴素事实:每个 token 想要“知道自己前文的信息”,最简单的办法是对前文做加权平均。他用矩阵乘法实现这件事——一个下三角 mask 保证第 i 个位置只能平均前 i 个 token,再套一层 softmax 让权重归一。这时代的权重是固定的、不可学习的,模型笨得像块木头。

接下来才是点睛之笔:把“权重是多少”这件事,交给两个可学习的向量决定。每个 token 发射一个 query(我在找什么)和一个 key(我有什么),两者点积越强,注意力权重越大;再用一个 value(我的实际内容)参与加权平均。这就是 Q、K、V 三件套的由来——不是天上掉下来的公式,而是“可学习的加权平均”的自然延伸。他随后补上两个工程细节:点积要除以 √head_size,否则维度一大方差爆炸、softmax 饱和成 one-hot;因果 mask 必须保留,“不许偷看未来”是 decoder 的纪律。

5. 一块 Block = 开会 + 独处

attention 只负责“token 之间通信”,Karpathy 引用原论文的结构,把它和另外几块积木拼成一个完整的 Block。多头注意力(multi-head):并行跑多组 Q、K、V,每组在独立的子空间里“开会”——有的头盯语法、有的头盯指代,最后把结论拼接投影回来。前馈网络(feed-forward):一个两层 MLP,中间隐层先升维 4 倍再压回来,注意它是逐 token 独立计算的,不跨位置通信——所以他的总结很精辟:attention 是 token 之间开会,MLP 是每个 token 回工位独自消化。

然后是三个稳定性组件:残差连接(引用何恺明 2015 年的 ResNet,给梯度留一条高速公路,网络再深也能训得动)、LayerNorm(把每个 token 的向量拉回稳定区间)、Dropout(训练时随机失活,防止在这 1MB 小语料上背书)。他还有一个容易被忽略的工程细节:残差分支末端的投影层初始化成接近零,让训练开始时残差流“干净”——这些细节论文里一笔带过,代码里全是学问。

6. 一千万参数的迷你 GPT,长什么样

最后组装:n_embd=384、6 层 Block、6 头注意力、上下文长度 256、约一千万参数量级的小 GPT。训练在笔记本上就能跑(他在视频里提到,同样的配置放到 8 张 A100 的云端机器上大约一刻钟训完)。loss 从最初的 4.17 一路压到 1.5 上下,然后是全片最有仪式感的一幕——模型开始吐“莎士比亚”:拼写、换行、对话格式有模有样,内容完全是胡说八道。

这个结果比“成功”更有教育意义。Karpathy 顺势讲了 scale 路线:GPT-2(2019 年,词表 5 万量级,上下文 1024)到 GPT-3(2020 年,1750 亿参数,训练数据约 3000 亿 token),架构几乎没变,变的是数据、算力和上下文长度。我的延伸判断是:看完这一节你会彻底明白,“大”模型的大是结果,不是原理。原理在这两小时里已经讲完了;剩下的一切,都是把这一页纸的原理放大一万倍的工程史。

知识结构图:一个 GPT 的诞生流水线

flowchart TD
    A["莎士比亚语料<br/>约100万字符"] --> B["字符级tokenizer<br/>65个字符换成编号"]
    B --> C["查表变向量<br/>再加位置信息"]
    C --> D["自注意力<br/>token之间传纸条"]
    D --> E["前馈网络<br/>每个token独立消化"]
    E --> F["残差加归一化<br/>梯度的高速公路"]
    F --> G["一个Block完成<br/>同样的Block堆六层"]
    G --> H["线性输出层<br/>算下一个字符的概率"]
    H --> I["交叉熵对比答案<br/>得到loss"]
    I --> J["反向传播<br/>更新一千万个参数"]

实战启示

动手路线:这条视频最好的打开方式不是看,是跟着敲。推荐路径:先看同系列的 micrograd 一集(百来行代码手写反向传播,约 2 小时),再跟本视频敲一遍,最后去 nanoGPT 仓库看他把这套代码工业化的版本。硬件门槛比想象中低——视频里的小配置,一台普通笔记本就能训练。

用 AI 时的三个顿悟:其一,你抱怨的“上下文窗口”,就是视频里的 block_size——AI 忘事不是 bug,是架构边界。其二,“幻觉”是采样的副产品:模型只负责让下一个 token 的概率最大化,它从头到尾没有“事实”这个概念,理解这一点才知道为什么 RAG 和检索增强是刚需。其三,调 temperature 本质上是在改 softmax 的陡峭度——调低=保守,调高=放飞,你在 UI 上拧的那个旋钮,对应的就是视频里那两行代码。

职场硬通货:能把 Q、K、V 和 multi-head 讲清楚,是算法岗和后端岗面试的通用加分项;因果 mask 这个设计更是绝佳范本——它展示了“工程约束(不许偷看未来)如何进入数学结构(下三角矩阵)”,这种思路在任何系统设计里都用得上。

方法论彩蛋:Karpathy 的教学策略——“先写最蠢的能跑的版本,再一步步升级”——本身就是值得抄走的工程与学习哲学。任何领域,先造出你的 bigram。

延伸学习路径

  1. micrograd(同系列前一集)——100 行代码手写反向传播,本视频的前置课,同一个入口:karpathy.ai/zero-to-hero.html
  2. 论文《Attention Is All You Need》(arXiv:1706.03762)——看完视频再读原文,你会发现每个公式都似曾相识
  3. karpathy/nanoGPT(GitHub)——本视频代码的工业化版本,含复现 GPT-2 的完整脚本,是这个领域最著名的教学仓库之一
  4. The Illustrated Transformer(Jay Alammar)——图解版 Transformer,代码看累了对着图回顾,效率极高
  5. 《Let's build the GPT Tokenizer》(同频道后续视频)——本视频故意跳过的 tokenizer,BPE 算法完整实现,看完你对“AI 为什么数不清草莓里有几个 r”会有根本性理解

一句话总结

大模型没有魔法——它只是“猜下一个字”这件小事,被放大了一万倍;而理解它最好的方式,就是花两个小时,亲手把那个最小的版本写一遍。

参考来源

  1. Let's build GPT: from scratch, in code, spelled out. — 本文分析的核心视频(Andrej Karpathy,2023)
  2. Neural Networks: Zero to Hero 课程主页 — 视频所属系列完整目录
  3. karpathy/nanoGPT — 视频代码的工业化版本
  4. Attention Is All You Need — Transformer 原始论文(Vaswani et al., 2017)
  5. The Illustrated Transformer — Transformer 图解经典

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入