Transformer 入门:从 RNN 到 GPT 生成,6 个问题全部手算

简介: 本课程以“问题驱动”讲解Transformer:从RNN梯度消失出发,用极简数字例子手算Self-Attention、Causal Mask、多头机制与KV Cache,6个核心问题层层递进,拒绝死记公式。配套开源(MIT)且免登录可读。

想弄懂 Transformer 和 Self-Attention,很多教程先讲架构图和公式,读完能复述,但合上页面推不出来。这篇换个顺序:先抛一个问题,用一个最小的数字例子算一遍,再看为什么会需要下一个机制。内容来自我做的一套 34 课大模型课程的第 1 课,一共 6 个问题,从 RNN 的问题一路走到 GPT 逐字生成。

问题 1:RNN 为什么记不住远处的词?

RNN 一个词接一个词地读。反向传播时,梯度要沿着时间步一路传回去,每传一步都要乘一个系数。假设这个系数是 0.9:

传了几步 梯度还剩
1 0.9
10 0.9¹⁰ ≈ 0.35
50 0.9⁵⁰ ≈ 0.005

50 步以后只剩 0.5%,句首的词对训练几乎没有影响。另外它必须等前一个词算完才能算下一个,没法并行。所以我们需要一种方式,让每个词能直接看到任何其他词,而且一次算完。

问题 2:Self-Attention 怎么让相隔很远的词直接比对?

用一个只有两个词的句子"我吃",每个词先变成 Q、K、V 三个向量(可以理解成:Q 是"我在找什么",K 是"我能提供什么",V 是"选中我就给你的内容")。数值是为了演示取的:

词 Q K V
我 [0.6, 0.2] [0.4, 0.7] [0.8, 0.3]
吃 [0.3, 0.9] [0.1, 0.5] [0.6, 0.2]

"我"去看"我"和"吃",分数是 Q 和 K 的点积:

  • Q我·K我 = 0.6×0.4 + 0.2×0.7 = 0.38
  • Q我·K吃 = 0.6×0.1 + 0.2×0.5 = 0.16

再除以 √d_k(这里 d_k=2,√2≈1.41)得到 0.27 和 0.11,过 softmax 变成权重 [0.54, 0.46],最后用权重对 V 加权求和:

0.54×[0.8, 0.3] + 0.46×[0.6, 0.2] ≈ [0.71, 0.25]

这个新向量同时带上了"我"和"吃"的信息。一次矩阵运算就能把所有词对比完,不再一步步传。

问题 3:生成时不能看后面的词,限制加在哪?

加在上一步算出的分数矩阵上。句子"我爱你",正常情况下"我"能看到后面的"爱"和"你",训练时等于偷看答案。做法是把"列号大于行号"的格子换成负无穷,再过 softmax:

我 爱 你
我 1.0 0 0
爱 0.40 0.60 0
你 0.25 0.30 0.45

为什么是负无穷而不是 0?填 0 的话,softmax 后第一行会变成 [0.45, 0.27, 0.27],被遮住的词仍然分到了权重。只有 e^(-∞)=0 才是真正的"完全忽略"。

问题 4:同一个 Transformer,为什么分出 BERT 和 GPT?

区别在于要不要挡住未来:不挡的是 BERT(双向,做完形填空),必须挡的是 GPT(单向,逐字接龙)。训练方式不同,每次"教"到的位置数也不同。以 40 个 token 的句子为例:

  • BERT 只遮 15% 的词来预测:40 × 0.15 = 6 个位置
  • GPT 除第一个词外每个位置都在预测下一个词:40 − 1 = 39 个位置

BERT 训练时永远有左右两边的上下文,所以让它"只看左边猜右边"是它没学过的事。这不是能力问题,是训练方式的问题。

问题 5:多开几个注意力头,多看到了什么?

按原论文的设置,d_model=512,8 个头,每个头分到 512/8=64 维,各自算完再拼回 512 维,总计算量和单头差不多。好处是每个头可以专注一种关系。比如"苹果很甜,我昨天买了三斤"里,"苹果"同时和"甜"(属性)、"买"(动作)、"斤"(数量)有关。单头只有一个权重分布,三种关系互相稀释;多头里不同的头可以分别把 55%、62%、72% 的注意力给对应的词(这组权重是课程里为了演示设的)。

问题 6:解码时什么被重复计算了?

GPT 生成"我爱吃苹果"要一步步来:输入 [BOS] 得到"我",输入 [BOS, 我] 得到"爱"……直到预测出结束符 EOS。每一步都要把前面所有词的 K 和 V 重新算一遍:

  • 5 步里,不缓存的话累计 (1+2+3+4+5)=15 次,缓存之后只要 5 次,省 67%
  • 序列拉长到 100 步,省 98%

这就是 KV Cache:把算过的 K 和 V 存下来复用。注意这里只数了 K/V 投影,注意力打分本身每一步仍要和全部旧词比,所以整体计算量省得没这么多。

小结

问题 机制 一句话
RNN 记不住远处 梯度连乘衰减 0.9⁵⁰ ≈ 0.005
怎么直接比对 Self-Attention Q·K → 缩放 → softmax → 加权 V
不能偷看未来 Causal Mask 填负无穷,不是 0
BERT 与 GPT 训练目标不同 遮 15% 对比逐字预测
多头 每头专注一种关系 512 = 8 × 64
重复计算 KV Cache 15 次变 5 次

参考与说明

  • Self-Attention 与 Transformer:Vaswani 等,Attention Is All You Need,2017,https://arxiv.org/abs/1706.03762
  • BERT:Devlin 等,2018,https://arxiv.org/abs/1810.04805
  • GPT-3:Brown 等,2020,https://arxiv.org/abs/2005.14165
  • 文中数字(梯度衰减、注意力分数与加权、mask 后的 softmax、监督位置数、KV 投影次数)我都用代码独立复算过。带"为了演示取的"的数值是示意值,不是真实模型的输出。
  • 说明:这套课程由 AI 在我设计的规则下生成,再经过脚本检查和独立审查;审查时发现过不少问题,已写在仓库 README 里。如果你发现错误,欢迎在仓库提 Issue,写清位置,我会逐条核实。

继续学

完整课程有 34 课,从 Transformer 一路讲到训练与推理工程、Agent。每张卡片后面还有 AI 助教,可以接着追问(每人每天有次数限制)。

相关文章
|
6天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
2914 22
|
1天前
|
云安全 人工智能 安全
|
6天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
|
7天前
|
iOS开发 Docker MacOS
【2026实测】Docker Desktop下载、安装、汉化、配置教程(附官网安装包)
Docker Desktop 是 Docker 官方推出的桌面容器管理工具,集成引擎、CLI、图形界面与 Kubernetes,支持 Win/macOS/Linux。2026 最新版 4.88.1 强化 ARM 原生运行、镜像加速及资源可视化,附中文汉化与国内镜像配置指南。
1281 5
|
云安全 安全 网络安全
|
7天前
|
安全 算法 定位技术
《高性价比人生指南》完整原版:普通人用最少的资源,过好这一生的底层逻辑~How To Live Better
📖《高性价比人生指南》是一份基于实证、拒绝焦虑的生存手册,倡导以“人生时薪”为视角,重新计算时间、金钱与精力的成本与收益。它不承诺逆袭,只教人算清账:省下的钱若耗掉时间便亏;买体验比买物品更值;睡眠是最高杠杆的健康投资;关系贵在情绪价值而非表面热络;学习重在改变行为而非自我安慰。核心理念:用低成本、高回报的微小行动,换取长期的选择权——不是成为谁,而是掌控自己人生的主动权。
|
19天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
3399 52
|
12天前
|
人工智能 JSON Linux
【保姆级】ComfyUI部署教程(下载+安装+配置+工作流,2026最新)
ComfyUI 是一款开源节点式AI生成工具,支持图像、视频、音频及3D内容创作。通过拖拽连线组合模型加载、提示词、采样等节点,构建可复用、易修改的工作流,兼容SD1.5、SDXL、Flux、Qwen Image等主流模型。