从这里开始

语言模型只做一件事:预测下一个词元

仅此而已

Transformer 是什么?

本站使用的模型是 GPT-2 small(OpenAI,2019 年,1.24 亿参数),一个 Transformer。它把文本切成词元,把每个词元变成由 768 个数组成的向量,再让这些向量依次穿过 12 个块。每个块里,注意力让每个词元读取它之前的词元,随后 MLP 再单独处理每个词元。最后一个词元的向量最终被转换成一个概率分布,覆盖所有可能的下一个词元。

仅解码器意味着它从左往右读:一个词元永远看不到它后面的词元。生成文本就是不断重复这件事:选出一个词元、接到末尾、再跑一遍。LLaMA 和大多数对话模型沿用了同样的设计,只做了少量改动(见“架构演进”)。

1.24 亿个参数都在哪里

  • MLP,12 × 4.72M 56.7M 46%
  • 词元嵌入 WE(同时用于输出) 38.6M 31%
  • 注意力,12 × 2.36M 28.3M 23%
  • 位置 WP 786K 0.63%
  • LayerNorm 38K 0.03%

运行它时,每个词元的每个权重大约需要 2 次浮点运算,每生成一个新词元约 2.5 亿 FLOPs,再加上注意力的那部分——它随上下文增长。更大的模型保留相同的部件,只是更宽、更深:GPT-2 XL 有 15 亿个权重,LLaMA 3 有 80 亿和 700 亿两种。

学习路径

  1. 基础
  2. 前向传播
  3. 分词器
  4. 嵌入
  5. LayerNorm 与残差
  6. 注意力
  7. MLP
  8. 反嵌入与采样
  9. 训练
  10. 架构演进
  11. 推理服务
  12. 智能体

如何读图

  • 每个位置在每一页都保持自己的颜色(颜色代表位置,而不是词;七个位置之后颜色循环)。
  • 一条“车道”是一个词元的向量在模型中流动;它吸收其他词元的信息时,颜色会随之混合。
  • 一块玻璃板是车道穿过的一层。
  • 在矩阵中,实心格为正,空心格为负,斜线格表示被掩码遮住。在“推理服务”的内存示意图中,斜线表示已预留但为空的空间。
  • 在矩阵乘积 C = A · B 中,A 的第 i 行(左侧)与 B 的第 j 列(上方)在 C 的 (i, j) 格相遇。图中一格一格地填,方便你跟上;硬件实际上是同时算出所有格。
  • ⊕ 把一层的输出加回车道上(即残差流)。
  • 标有 ↗ 的部分可以打开详解页。把鼠标停在(或点按)任意矩阵格上可查看它的公式;点击可固定。

Space 播放或暂停 · ← → 上一步或下一步。每一步结束时都会暂停,留出阅读时间;在控制栏切换到自动即可连续播放。

这些数字从哪里来?

每一个权重(共 1.24 亿个)都是训练出来的:GPT-2 读了约 40 GB 的网页文本,预测每一个下一个词元,并在每个批次之后微调全部权重,让真实的下一个词元得到稍多一点概率。模型里没有任何东西是手写的,连分词器也是学出来的——靠统计哪些符号对最常一起出现。“下一词元损失”一页展示了它学习所依据的信号。

真实还是玩具?

“前向传播”和“反嵌入”页展示的是 GPT-2 small 一次真实运行的数值,离线算好。逐格演示矩阵乘法的详解页使用玩具模型(每个词元 8 个数,而不是 768 个),好让每一格都放得下;这些页会标明图中数值:玩具规模,并在旁边给出 GPT-2 的真实尺寸。