深度学习 A to Z · 3-8

注意力与 Transformer — 不靠记忆,而是重新查找

3-7 的序列模型把走过的一切都压进一个隐藏状态,一格一格地往前走。注意力换了一种思路:每当需要时,就重新查看前面所有的格,并给相关的格更多注意。我们将亲手跟踪查询(Q)·键(K)·值(V)的数字,并看看由这些部件堆叠而成的 Transformer 为何成为当今语言模型的骨架,以及它的成本。

2015在翻译中加入注意力的论文 [R1]
2017Transformer 发表 [R2]
√dk用来除分数的数:防止 softmax 偏向一边
8 × 64原论文的头数 × 头宽(= 512) [R2]
n²长度为 n 时注意力分数的个数
2 段可在 Colab 中直接运行的代码
1遗留问题

序列模型遗留的两个问题 — 瓶颈与排队

编码器–解码器 RNN 把整个句子装进一个固定长度的向量,并且一格一格地依次处理。句子一长,就会出现两个问题。

句子长度

给初学者的解说

瓶颈:编码器–解码器翻译模型先把原文压缩成一个固定长度的向量,再从中生成译文。Bahdanau 等人认为这个固定长度向量是性能的瓶颈,提出了在生成译文的每个词时,让模型自己去原文中查找相关部分的方法 [R1]。这就是注意力。排队:RNN 必须知道 ht 才能计算 ht+1,所以各格无法同时计算。Transformer 干脆去掉了循环,只用注意力一次性计算所有格,大大加快了训练 [R2]。

2注意力

注意力的思路 — 每生成一个词,就重新看一遍原文

把韩语句子“果蝇·苹果·吃了”(按韩语语序逐词对应,意为“果蝇吃了苹果”)译成 “The fly ate the apple”。每生成一个英语词,就把注意力分配给各个韩语词。线越粗,注意力越大。

生成的词

给初学者的解说

韩语的顺序是“果蝇 · 苹果 · 吃了”,英语是 “The fly · ate · the apple”。动词的位置不同。所以生成 “ate” 时,要重点看句末的“吃了”。这张图里的注意力值是为了说明而设定的数字。真实的翻译模型会通过学习自己找到这种对应关系,Bahdanau 等人报告说,学到的注意力与人的直觉很吻合 [R1]。注意力都在 0~1 之间,总和为 1(softmax)。

3Q·K·V

Q·K·V 数字示例 — 在图书馆找书

注意力(Q, K, V) = softmax(Q·Kᵀ / √dk) · VVaswani 等,2017

问题 (Q)
符号在图书馆里在神经网络中
Q 查询写着我要找什么的纸条表示当前格“需要什么”的向量。输入 × WQ
K 键每本书上贴的索引卡表示每一格“我是这样的信息”的向量。输入 × WK
V 值书的实际内容每一格实际要交出的信息。输入 × WV
Q·K纸条和卡片有多匹配两个向量的内积。方向越相似,值越大
÷ √dk—防止向量变长时内积变大、导致 softmax 只集中在一格上 [R2]
softmax把阅读时间分给每本书把分数变成总和为 1 的注意力
× V按阅读时间把内容混合整理以注意力为权重把各个值相加。这就是输出
4自注意力

自注意力 — 句子查找它自己

第 3 节中,问题和书是分开的。在自注意力中,句子里的每个词既是查询,也是键,也是值。每个词都把注意力分配给其他所有词。

查询词

这个例子的数字从哪里来

词向量用 [动物, 食物, 动作, 指示词] 四格手工设定。查询变换 WQ 设定为“指示词找食物,动作找动物”。键·值变换保持不变。真实的 Transformer 中,词向量和 WQ·WK·WV 全都通过学习确定,宽度也有数百格。计算公式与这个例子完全相同。代码 1 会得出同样的数字。

5多头

多头 — 同时看多种关系

一个句子里有多层关系。“谁吃了”和“吃了什么”是不同的问题。每个头使用不同的 WQ·WK·WV 来看不同的关系,再把结果拼接起来。

查询词
模型宽度(参数计算)
6位置信息

位置信息 — 注意力不知道顺序

注意力一次性比较所有格。所以即使打乱词序,每个词的结果也完全相同。要告诉它顺序,就在词向量上加上每个位置都不同的“位置编码”。

位置编码
句子顺序

正弦·余弦位置编码

原论文在位置 pos 的偶数格放入 sin(pos / 100002i/d),奇数格放入 cos(…) [R2]。前面的格波动得快,后面的格波动得慢,于是每个位置都形成不同的花纹。这就像同时看时钟的秒针、分针和时针,时刻就唯一确定了。通过学习来确定位置编码的方法也被广泛使用。代码 2 的小 Transformer 使用了可学习的位置嵌入。

7块

组装块 — 注意力 + 前馈,再加上捷径

Transformer 的一个块由多头注意力和前馈神经网络(3-2 的 MLP)组成。两者各自加上直接把输入加回来的捷径(残差连接)和归一化,再把这样的块堆叠多层。

块的大小
8编码器·解码器

编码器·解码器与 GPT 型 — 让它能看到什么

同样的块,只要改变“哪一格能看到哪一格”(掩码),用途就会不同。

结构
9基础与局限

成为当今基础的原因与局限

Transformer 被广泛使用的原因可归纳为三点。相应地也有成本。最大的成本是随长度平方增长的注意力计算。

长度 n
成为基础的原因
  • 一次性计算:没有循环,所有格同时计算,因此在同样的时间里可以用多得多的数据训练 [R2]。
  • 直接连接远处的格:第一格和最后一格通过一次注意力就连上了。不会像 RNN 那样经过一格又一格而变得模糊。代码 2 用 3-7 的任务亲自验证(第 9 节下方)。
  • 把同样的块做大:通过把块堆成多层、加宽宽度的方式,很容易扩大规模。只用编码器的 BERT [R4]、只用解码器的 GPT-3(1,750 亿个参数) [R5] 都是堆叠这种块而成。
局限与成本
  • 长度的平方:长度为 n 时,注意力分数有 n² 个。句子变长 2 倍,注意力的计算和内存约变为 4 倍。因此一次能处理的长度有上限,减少这一成本的研究仍在继续。
  • 数据与计算:它对顺序或邻近关系的假设(CNN 的局部性、RNN 的顺序性)较弱,相应地就必须从数据中学到这些。在小数据上,RNN·CNN 可能更好。
  • 训练范围之外的长度:当输入比训练时长得多时,位置编码变得陌生,性能可能下降。
  • 注意力 ≠ 解释:注意力图只显示“看了哪里来计算”,并不保证这个判断正确的理由。

代码 2 的实验 — 用 Transformer 挑战 3-7 中 LSTM 失败的任务

与 3-7 代码 2 相同的任务(所有格都是 ±1,答案是第一格)和相同的训练设置(Adam 0.005,30 轮次,训练 2,000 个·测试 1,000 个,种子 2 个)。Transformer 使用一个自注意力块(宽度 16,2 个头)和可学习的位置嵌入。“对第一格的注意力”是所有格给第一格的注意力的平均值。

本系列的范围

本篇讲到 Transformer 的结构为止。用这种结构生成文字·图像的生成模型(大规模语言模型的预训练、指令遵循训练、扩散模型等)不在本系列范围内。接下来的几篇(3-4 语音、3-6 时间序列·股价、3-5 文本)专注于把数据变成数字的过程。

Colab 代码 — 亲手运行本页内容

两段代码都只使用 Colab 默认安装的库。点击“下载笔记本(.ipynb)”后,在 Colab 中通过文件 → 上传笔记本打开,或者复制后粘贴到新笔记本的单元格中。

代码 1 · 用 numpy 手算注意力对应第 3~6 节 · numpy, matplotlib · CPU 不到 1 秒

用同样的数字计算图书馆示例、五个词的自注意力、两个头、打乱顺序与位置编码。想换成自己的数据,就修改 BOOK_K·BOOK_V·QUERIES 或词向量 X。

运行结果(2026-10-03 运行,numpy 2.4 · matplotlib 3.10 · CPU)。计算中没有随机数,无论何时运行结果都相同。
代码 2 · 用 Keras 比较小 Transformer 与 LSTM — 3-7 的“记住第一个信号”对应第 9 节 · tensorflow(Keras), numpy, matplotlib · CPU 约 8 分钟

用只有一个自注意力块的 Transformer 重新解决 3-7 中 LSTM 在长序列上失败的任务。还会测量训练后的 Transformer 给答案所在的第一格多少注意力。第 9 节下方的表格直接由这段输出生成。

运行结果(2026-10-03 运行,TensorFlow 2.21 · Keras 3.15 · CPU)。数字可能因种子·版本·硬件而变化。

AI 应用提示词 — 以这段代码为起点

这是粘贴到 ChatGPT、Qwen、Claude 等 AI 助手中的提示词。点击“复制”时,所选代码会一并附在提示词后面。把〔 〕里的内容换成自己的情况即可。

一并附上的代码

AI 的回答只是起点。它提出的论文·数值·库函数务必对照原文和官方文档核实。如果在竞赛·论文中借助了 AI,请按照主办方和期刊的规定说明使用的事实和范围。

术语表

与正文中黄色虚线下划线相同的词典。整个系列使用统一的写法。点击章节名可跳到首次出现的位置。

类比合集 — 以及类比失灵之处

类比是理解的第一步,但也可能成为误解的种子。果蝇·大脑类比标注了强度。直接 有证据表明实际在做同样的事 · 部分 只有部分性质相似 · 无 尚未发现对应的东西

概念日常类比果蝇·大脑类比类比失灵之处
注意力备考时在重要的页上涂荧光笔部分 人的选择性注意(在嘈杂处专注于一个声音)大脑的注意是感觉·意图·疲劳等交织在一起的现象。模型的注意力只是由内积和 softmax 决定的加权平均
Q·K·V图书馆的问题纸条·索引卡·书的内容无图书馆会挑出一本书拿来,而注意力把所有的书按比例混合
softmax 注意力把阅读时间分给每本书无时间怎么分都会全部用完,但注意力只有 0.01 的格也一格不落地要计算(所以需要 n²)
多头几位编辑从不同角度阅读同一份文稿无头的“视角”不是人定的。训练后去解读,很多头看不出明确的角色
位置编码同时看时钟的秒针·分针·时针,时刻就确定了无时钟过了一天会回到原处,而位置编码只在训练过的长度内才熟悉
残差连接修改稿旁边总是附上原稿无关键在于原稿是“直接相加”的。修改幅度小时,原稿几乎原样传到下一层
掩码(GPT 型)遮住答案纸,只看前面的题来解下一题无训练时所有格一次性计算。遮住的只是“能看到的范围”

作者简介与参考文献

E-1 作者简介 · E-2 学术参考文献 · E-3 图片参考资料

E-1 作者简介

Sangsun Ahn(M-Robo 公司代表)

曾任职于韩国电气安全公社、《每日经济新闻》,现创办每日经济外部风投企业 M-Robo 公司并担任代表。M-Robo 公司是由媒体内部创业起步的媒体风投企业,曾为《国民日报》提供机器人记者(StockBot)服务,并在韩国互联网振兴院、韩国言论振兴财团、韩国广播通信电波振兴院等机构开展了多个项目。此后运营自有的 AI 新闻报纸 Money-Robo。任代表期间获得亚洲开放数据黑客马拉松冠军,并因在数据创业领域的贡献两次获得行政安全部长官奖,是人工智能及区块链领域 5 项专利的发明人和注册人。著有《AI 犯罪与自我防御》,并为韩国技术教育大学在线终身教育院开发了金融科技、统计学、人工智能领域的在线学习内容。最高学位为经济学博士(东国大学,微观数理经济学)。目前在国民大学、湖西大学等多所大学讲授数据及人工智能相关课程。详细简历

课程

  • Sangsun Ahn (2025). 《面向商业的数据科学》讲义. 韩国开放网络大学 人工智能融合学科.
  • Sangsun Ahn (2025). [K-数字] 人工智能自然语言处理. STEP(智能职业培训平台), 韩国技术教育大学 在线终身教育院.
  • Sangsun Ahn (2024). [K-数字] 金融科技数据分析基础. STEP(智能职业培训平台), 韩国技术教育大学 在线终身教育院.

STEP 课程直达链接:link.step.or.kr/1qyVoJ · link.step.or.kr/M9na9N · link.step.or.kr/brqEyc
如因网站改版无法顺利访问,请访问 www.step.or.kr。

论文与报告

  • Sangsun Ahn (2025). 利用国民养老保障面板数据的家庭支出预测模型研究:基于人工智能模型的方法. 《未来社会》, 16(2). 原文
  • Sangsun Ahn (2025). 利用国民养老保障面板数据的家庭支出预测模型研究:人工智能方法. 国民养老保障面板学术会议报告资料(2025.05.13), 国民年金公团 国民年金研究院. 报告资料
  • Sangsun Ahn (2025). 基于 SNS 文本的可疑毒品交易检测算法研究:以模式与语境分析为中心. 《未来社会》, 16(1). 原文
  • Sangsun Ahn (2024). 面向金融领域异常检测模型安全的基于统计的对抗性数据应对方案:实证分析与模拟结果. 《未来社会》, 15(3). 原文
  • Sangsun Ahn (2024). 利用人工智能、基于虚拟角色特性的 SNS 帖子检测解决方案. 2024 Summer Newmedia Party 海报发表(2024.06.19), 首尔媒体研究生院大学.
  • Sangsun Ahn (2024). 利用工伤面板数据的机器学习模型. 第 10 届工伤保险面板学术会议海报发表(2024.05.17), 劳动福利公团 劳动福利研究院.
  • Sangsun Ahn (2024). 虚拟资产时间序列数据的分析与预测:时间序列模型与人工智能模型的比较及改进建议. 《未来社会》, 15(1). 原文

E-2 学术参考文献

  1. [R1] Bahdanau, D., Cho, K., & Bengio, Y. (2015). Neural machine translation by jointly learning to align and translate. ICLR 2015. arXiv:1409.0473 — 开篇,第 1·2 节
  2. [R2] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention is all you need. Advances in Neural Information Processing Systems 30. arXiv:1706.03762 — 开篇,第 1·3·5·6·7·8·9 节(d_model 512,8 头 × 64,d_ff 2048,除以 √d_k,正弦·余弦位置编码)
  3. [R3] Cho, K., van Merriënboer, B., Gulcehre, C., Bahdanau, D., Bougares, F., Schwenk, H., & Bengio, Y. (2014). Learning phrase representations using RNN encoder–decoder for statistical machine translation. EMNLP 2014, 1724–1734. doi:10.3115/v1/D14-1179 — 第 1 节(编码器–解码器 RNN)
  4. [R4] Devlin, J., Chang, M.-W., Lee, K., & Toutanova, K. (2019). BERT: Pre-training of deep bidirectional transformers for language understanding. NAACL 2019, 4171–4186. doi:10.18653/v1/N19-1423 — 第 8·9 节
  5. [R5] Brown, T. B., Mann, B., Ryder, N., … Amodei, D. (2020). Language models are few-shot learners. Advances in Neural Information Processing Systems 33. arXiv:2005.14165 — 第 8·9 节(GPT-3,1,750 亿个参数)
  6. [R6] Hochreiter, S., & Schmidhuber, J. (1997). Long short-term memory. Neural Computation, 9(8), 1735–1780. doi:10.1162/neco.1997.9.8.1735 — 第 9 节的对比实验

E-3 图片参考资料

  • 第 2 节的翻译注意力值是为了说明而设定的数字(不是学到的值)
  • 第 7 节的块结构依据 [R2] 的图 1(编码器一侧)

给教育者的提示

这是面向讲师、实务 OJT 负责人和辅导老师的教学指南。时间为预估值,请根据实际课堂调整。

对象学完 3-7 的大学生·职场人士。想了解语言模型“由哪些部件构成”的从业者
先修知识向量的内积(相同位置相乘再相加)、3-2 的 softmax 与 MLP、3-7 的编码器–解码器
学习目标① 用数字计算注意力公式 softmax(QKᵀ/√d_k)V ② 分别说明自注意力·多头·位置编码为什么必要 ③ 同时说明 Transformer 成为基础的原因与 n² 成本
预计时间阅读 45~55 分钟 · 动画演示 25 分钟 · Colab 实操 30 分钟(代码 1 10 分钟,代码 2 运行 8 分钟 + 解读 12 分钟)

三种教学方案

讲授型 50 分钟

以概念为主

导入 5 分钟(第 1 节 瓶颈)→ 第 2·3 节 图书馆 15 分钟 → 第 4·5 节 10 分钟 → 第 6 节 打乱顺序 10 分钟 → 第 9 节 n² 与代码 2 结果 5 分钟 → 检测题 5 分钟。

实务 OJT 90 分钟

以业务应用为主

第 1·3 节 15 分钟 → 第 8 节 把三种结构与业务案例(分类·摘要·翻译)联系起来 20 分钟 → 第 9 节 成本计算(用我们自己的文档长度)15 分钟 → 代码 2 运行·解读 25 分钟 → 提示词卡片 15 分钟。

一对一辅导

按水平安排进度

入门者只学第 1·2·3·9 节。中级者先手算第 3 节的结果向量再与代码 1 对照,并亲自推导第 7 节的 4d² + 4d。

各节教学要点

章节停下来提问的问题操作提示
1 遗留问题“把 40 个词的句子装进 8 格向量,每个词能分到几格?”从 5 改成 40 个词,观察数字的变化
2 注意力“生成 ate 时,为什么要看最后一个词?”停在 “ate” 按钮上
3 Q·K·V“只拿注意力最大的那本书不行吗?”在“两者都想了解”中,观察结果混合成 [5.5, 5.5]
4 自注意力“‘它’指的是什么?模型是怎么知道的?”按 它 → 很甜 的顺序点击,也看看手工设定规则的局限
5 多头“把头增加到 8 个,参数会变成 8 倍吗?”在模型宽度 512 下确认参数数字
6 位置信息“打乱顺序结果却一样,问题在哪里?”按 无位置编码 → 打乱的顺序 → 加上 的顺序点击
7 块“块的参数大部分是注意力,还是前馈?”在基本型中读出“前馈所占比例”
8 编码器·解码器“GPT 型为什么要遮住未来的格?”点击“仅解码器”,指出掩码中的 × 格
9 基础与局限“文档长度变成 2 倍,注意力计算会变成几倍?”从 4,096 改成 32,768 比较内存,然后转到下方的实验表

常见误解 Top 5

误解正确解释要展示的场景
注意力会挑出最重要的一个词它把所有词按比例混合。注意力小的词也会进入结果第 3 节“两者都想了解”
Transformer 天生就知道顺序没有位置编码时,打乱顺序结果也一样第 6 节
每个头的角色由人来指定角色是通过学习形成的。本页的两个头是为了说明而手工设定的第 5 节及其下方的说明
Transformer 在所有方面都比 RNN 好它擅长长距离连接和并行计算,但要付出长度平方的成本,在小数据上可能处于劣势第 9 节
注意力图就是模型做出判断的理由它只是显示看了哪里来计算,并不保证判断正确的理由第 4 节的“很甜”

检测题(点击展开解析)

Q1. 当 q = [2, 0.4],k = [2, 0],d_k = 2 时,分数 q·k / √d_k 是多少?

q·k = 2×2 + 0.4×0 = 4。4 / √2 ≈ 2.828。与第 3 节中书 A 的分数相同。

Q2. 当分数为 [1.98, 1.98, 2.772] 时,softmax 注意力是多少?用它混合值 V = [10,0], [0,10], [6,6] 的结果是多少?

注意力 ≈ [0.238, 0.238, 0.525]。结果 = 0.238×[10,0] + 0.238×[0,10] + 0.525×[6,6] ≈ [5.53, 5.53]。代码 1 的输出是 [5.525, 5.525]。

Q3. 如果没有位置编码只用自注意力,打乱词序时每个词的输出会怎样?为什么?

完全相同。每个词的输出只由“与其他所有词的比较”决定,而比较对象的集合与顺序无关,始终相同。在代码 1 中,差异为 1e-16(计算误差的水平)。

Q4. 模型宽度 d = 512 的多头注意力层有多少参数?把头从 8 个改为 16 个呢?

W_Q·W_K·W_V·W_O 四个矩阵各为 512 × 512,偏置各 512 个:4 × 262,144 + 4 × 512 = 1,050,624 个。改变头数只是头宽变小,矩阵大小不变,所以参数数量不变。

Q5. 文档长度从 4,096 增加到 8,192 时,注意力分数的个数变为几倍?

4 倍。(2n)² = 4n²。从 4,096² = 16,777,216 个变为 8,192² = 67,108,864 个。

Colab 作业

基础

在代码 1 中计算:如果不除以 √d_k,图书馆示例的注意力会怎样变化。用两句话说明:把向量放大 10 倍时,除法的作用如何变大。

挑战

在代码 2 中去掉 Transformer 的位置嵌入(AddPosition)后重新训练。用 3 个以上的种子报告结果和“对第一格的注意力”如何变化,并联系第 6 节写出原因。

难度调整与延伸学习

入门者跳过第 5·7 节也不会打断思路。只需把第 3 节的图书馆示例亲手算一遍
进阶让学生调查并发表减少第 9 节 n² 成本的方法(分段查看、低维近似等)。调查到的论文要查阅原文确认
延伸学习Sangsun Ahn,《面向商业的数据科学》讲义(数据科学总览) · STEP [K-数字] 人工智能自然语言处理(与 3-5·3-8 相关) · STEP [K-数字] 金融科技数据分析基础(与 3-6 相关)
讲师用资料检测题的评分标准和作业参考答案可在教师用答案页面(3-8)中查看

辛苦了!

你读完了「3-8 注意力与 Transformer」篇。实验室的成员们各说一句来帮你总结。

博士
博士我们用“不靠记忆、重新查找”的方法结束了这个系列。
  • 注意力每当需要时就重新查看前面所有的格
  • Q·K·V 就是问题、索引卡、书的内容
  • 长度变成 2 倍,注意力计算就变成 4 倍
助手
助手Transformer 直接找到了第一格!
果蝇研究员
果蝇研究员恭喜读完全程!回到首页再选一篇吧。