迷你世界Laplace 人工智能 / 图版 F13 — 人工智能

Transformer 的注意力

大语言模型每次只做一件事:读完前面的字,猜下一个。决定该回头看哪里的,是注意力。这台机器里是一个真实训练过的小模型,两层八个头;每根丝线、每根指针,都是它此刻算出来的数。

向下滚动

01

一次只猜一个字母

前排的黄铜字模是模型读到的字:“the queen. the qu”。后排那一排玻璃管是它对下一个字母的猜测,液面高度就是概率。它猜 e,有九成以上的把握。

这个模型认识 30 个字符:26 个字母、空格、句号、逗号和撇号。它在六本公版小说上训练过,一共有 27,166 个数。GPT-3 有 1750 亿个,96 层,每层 96 个头。做的事是同一件:看前面,猜下一个。

2 层 × 4 头 · 每个字母 32 个数 · 27,166 个参数 · 在本页实时运行

02

字母先变成一串数

模型不认识字母,只认识数。每个字母查表得到 32 个数,叫嵌入。同一个字母,无论出现在哪里,查到的都一样。

可是“第几个”也很重要。2017 年的 Transformer 论文给每个位置加上一组正弦和余弦,频率从快到慢排开。玻璃管最前面一段就是这两样加在一起:颜色是这 32 个数,铜色为正,蓝色为负。

嵌入(每个字母一组)+ 位置(每个位置一组正余弦)= 进入第 1 层的 32 个数

03

查询与钥匙

每个头都从这 32 个数里算出三样东西,每样 8 个数:查询(我在找什么)、钥匙(我是什么)、值(如果被选中,我交出什么)。

现在抬起来的是第 1 层第 4 个头。最右边那个 u 的查询,和它前面每个字母的钥匙逐个做点积,再除以 √8。每个小表盘的指针就是这个分数,分数越高,越像它要找的东西。这个头分数最高的,是紧挨在前面的 q。

分数 = 查询 · 钥匙 / √8 · 指针为本页实时计算

04

只能往回看

分数经过 softmax:每个取指数,再除以总和。结果全是正数,加起来正好等于 1。这就是注意力权重,丝线越粗越亮,权重越大。

每个字母只能看它自己和它前面的字母,不能看后面的。训练时模型要猜的正是后面的字,偷看就成了作弊。这叫因果遮罩:机器上那块斜挡板把右边全部挡住了。

softmax(分数) → 权重,每一行加起来等于 1 · 位置 j > i 的权重恒为 0

05

把找到的东西搬过来

每个头按权重把各个字母的“值”加起来,送回查询那个字母的玻璃管。丝线上流动的小珠,就是这些值;珠子大小是权重。

送回来的东西不是替换,而是加上去。每个字母的管子从头到尾是一条通道,每一层都只往里面加一点。2021 年的一篇论文把这条通道叫作残差流。

头的输出 = Σ 权重 × 值,再加回残差流

06

剖开来看

从前往后:字模、嵌入、第 1 层的四片注意力头、第 1 层的前馈网络(MLP)、第 2 层的四片头、第 2 层的 MLP、最后一次归一化、读出。

MLP 是每个字母自己的一小段计算,不看别的字母:32 个数先变成 128 个,经过一个弯曲的函数,再变回 32 个,加回管子。剖开的外壳里那排细针,就是被选中那个字母的 128 个神经元。

最后,读出装置把管子末端的 32 个数换成 30 个分数,再经过 softmax,变成后排玻璃管里的概率。

嵌入 → [注意力 → MLP] × 2 → 读出 · 每一步都加回同一条残差流

07

八个头,各管一件事

同一层的四个头看的是同一串数,却各自学会了不同的事。没有人告诉它们分工,是训练分出来的。

在这个模型里,第 1 层的 2 号和 4 号头,一半以上的注意力落在前一个字母上;1 号头最常看前面第二个字母;3 号头偏爱空格,也就是词与词之间。第 2 层的 3 号和 4 号头做的事更特别,下一章细看。

第 1 层:前一个字母(2、4 号)· 前两个(1 号)· 偏爱空格(3 号)

08

照着上一次抄

读这串乱码:“qzxv kplw qzxv kp”。它从没在书里见过这些字母组合,却猜下一个是 l,把握约八成。

这要两层合作。第 1 层的“前一个字母”头先在每个字母上记下“我前面是谁”。第 2 层的头拿当前字母 p 去找:谁的前一个字母是 p?找到第一遍里的 l,把 l 搬过来。A B … A → B。2021 年,Anthropic 的研究者把这种头叫作归纳头。没有可抄的东西时,这两个头大多停在空格上。

第 2 层 3、4 号头:从第二个 p 指向第一遍 p 后面的 l

09

它是突然长出来的

左边的记录鼓记下了训练的全过程:9000 步,每步读 48 段、每段 64 个字母。拨动它,机器换上那一刻的权重。

前 1000 步,模型学会了常见的字母搭配,却完全不会照抄:在没见过的重复乱码上,它第二遍的准确率只有一成出头。之后的五百步里,归纳头突然成形,准确率跳到近八成。2022 年的研究在大小不同的许多模型里都看到了这样一次突变,往往在训练损失上留下一个小鼓包。

第 1000 步 → 第 1500 步:重复部分猜对 14% → 78%

10

拔掉一个头

把一个头的输出清零,就像把它从架子上拔出来。在 200 段没见过的重复乱码上,这个模型第二遍能猜对 96% 的字母。

拔掉第 2 层 4 号头,只剩 33%。拔掉它依赖的第 1 层 4 号头(前一个字母),只剩 28%。拔掉第 2 层 1 号头,几乎没有变化。哪个头真的有用,拔掉一次就知道。

重复乱码第二遍猜对:完整 96% · 去掉 L2H4 33% · 去掉 L1H4 28% · 去掉 L2H1 95%

11

平方的账,和 KV 缓存

读 n 个字母,每个头要算大约 n²/2 个分数:字母多一倍,分数变成原来的四倍。GPT-3 一次读 2048 个词元,在它做完整注意力的层里,每个头要算两百多万个分数。这就是注意力的平方代价。

一个字一个字往外写的时候,前面字母的钥匙和值不会再变,可以存起来,只为新字母算一个查询。这叫 KV 缓存。代价是内存:按 GPT-3 的尺寸(每一层都存下全部词元),每个词元要存约 236 万个数,用 16 位浮点约 4.7 MB;2048 个词元约 9.7 GB。

有缓存:每写一个字 ≈ n 次点积 · 没有缓存:≈ n²/2 次

12

实验台

可以输入自己的句子(英文字母),选一个头抬起来看,拔掉任意几个头,或者拨动训练进度。机器上所有的数都按你的输入实时重算。

试一试写一串没有意义的字母,再把它的开头重写一遍。模型猜对了第几个字母?把第 2 层的 4 号头拔掉,再看。

模型省略了什么

这是一个真实训练过的模型,但非常小:两层,每层四个头,每个字母 32 个数,前馈网络 128 个神经元,最多读 64 个字符,共 27,166 个参数,存成 8 位整数(约 33 KB)。真实的大语言模型读的是词元(常见的词或词的一段,GPT-3 有 50,257 种),不是单个字母;它们有几十到上百层,每层几十个头,读几千到上百万个词元。这里的位置编码是 2017 年原论文的正弦式;GPT-2、GPT-3 用学出来的位置向量,现在的许多模型用旋转位置编码(RoPE)。训练数据里有三成是人为重复的片段和随机字母,好让归纳头在几分钟的训练里出现;大模型的归纳头是从普通文本里学出来的。“拔掉”一个头在这里是把它的输出清零。玻璃管里的颜色是把每层之后的 32 个数按大小着色,只是示意。

一个常见的误解

注意力权重不等于模型的“理由”。一根亮线说明这个头此刻把那个位置的值搬了过来,但搬过来的东西有没有用、怎么用,要看后面的层;有的头权重很亮却几乎不影响输出(拔掉第 2 层 1 号头几乎没有变化)。要知道一个部件起什么作用,得像本页这样去改动它、量结果。另外,模型并不“理解”它抄来的字母:归纳头只是在找“上次这个字母后面跟着什么”。

资料来源

  1. Vaswani 等(2017):Attention Is All You Need,arXiv:1706.03762(缩放点积注意力、多头、正弦位置编码)
  2. Elhage 等(2021):A Mathematical Framework for Transformer Circuits,Anthropic(残差流、两层模型里的归纳头)
  3. Olsson 等(2022):In-context Learning and Induction Heads,Anthropic,arXiv:2209.11895(训练中的突变)
  4. Brown 等(2020):Language Models are Few-Shot Learners,arXiv:2005.14165(GPT-3 的层数、头数、宽度、2048 上下文)
  5. OpenAI:GPT-2 代码(50,257 个词元、学出来的位置向量;GPT-3 沿用同一结构)
  6. Su 等(2021):RoFormer,旋转位置编码,arXiv:2104.09864
  7. Pope 等(2022):Efficiently Scaling Transformer Inference,arXiv:2211.05102(推理时的 KV 缓存与内存)
  8. Andrej Karpathy:nanoGPT 与 minGPT(模型形状参照,MIT 许可)
  9. Project Gutenberg:训练用的六本公版小说

数据

The model is the site’s own: trained with numpy by src/topics/attention/train.py, in the shape of a GPT (pre-LayerNorm blocks of causal self-attention and an MLP) as in Andrej Karpathy’s nanoGPT and minGPT (github.com/karpathy, MIT licence), with sinusoidal positions as in Vaswani et al. (2017). Training text: six public-domain novels from Project Gutenberg (Alice’s Adventures in Wonderland, Pride and Prejudice, The Adventures of Sherlock Holmes, Frankenstein, A Tale of Two Cities, Moby Dick).

本页的文字、图片和模型采用 CC BY-NC 4.0 许可:可以免费用于教学和其他非商业用途,可以修改,请注明出自 world.lapla.si。上面列出的第三方素材仍按各自的许可。

延伸观看

  • 3Blue1Brown · 哔哩哔哩 在 哔哩哔哩 打开
  • 3Blue1Brown · 哔哩哔哩 在 哔哩哔哩 打开

播放器来自 哔哩哔哩,按下播放后才加载。

人工智能 · 全部图版