第21讲 · EECS 189:Transformer(上)

UC Berkeley EECS 189/289A《机器学习导论》2026 春季 · 课堂实录重构

原始标题 Transformers and Attention (Part 1)
课堂进度提示 本讲讲到幻灯片 59("Stopped Here");幻灯片 60–119 为下一讲内容,放在文末附录。
视频 https://www.youtube.com/watch?v=mqaFEvi5rWE
课程主页 https://eecs189.org/sp26/
官方讲义/笔记(Lecture 21) Google Drive PDF
图片来源 书中幻灯片插图为官方 PDF 高清渲染图

对应讲次:第21讲(UC Berkeley EECS 189 机器学习导论)

制作模型:deepseek-flash(coding-agent / pi;据 ~/.pi/agent/settings.json)

说明:课程材料版权归 UC Berkeley 及授课教师所有,本书仅供学习

本讲路线图

(参考时间: 00:00)

  1. 背景:Attention Is All You Need(NeurIPS 2017)、注意力的历史;
  2. 特征变换 / 表示学习:从 MLP 到 CNN;
  3. 卷积的根本局限:感受野有限、无法「长程上下文」;
  4. 文档表示与 RNN:bag-of-words、TF-IDF、RNN 图像描述;
  5. 注意力:基于位置(location-based,soft/hard)→ 基于内容(content-based)。
标题页

📷 标题页
回到原视频 (00:00:20)

(概述)

📷 (概述)
回到原视频 (00:01:33)

(概述)

📷 (概述)
回到原视频 (00:02:46)


一、Transformer 的由来

(参考时间: 00:00)

几乎今天你能想到的所有模型(LLM、扩散模型……)底层都是 Transformer / 注意力。起点是 2017 年 NeurIPS 论文 《Attention Is All You Need》(多伦多大学 + Google Brain)。

论文标题的弦外之音:「你不需要别的」——具体说,你不需要 RNN。注意力本身不是新东西(2014 年就有了,见 Bahdanau 等),但它总和 RNN 搭配使用;这篇论文的 punchline 是把 RNN 扔掉,只留下注意力,这就是 Transformer。

架构演进主线:全连接/卷积 → 残差连接 → 注意力 → Transformer(「注意力就是全部」)。Transformer 最初用于自然语言,如今广泛用于视觉、多模态、图像/视频生成,被认为是最强的通用架构。

讲师强调:数据集同样是历史的重要驱动力(如 ImageNet)——每出现一个新数据集,就可能催生超越前人的新架构。

NeurIPS 2017(一)

📷 NeurIPS 2017(一)
回到原视频 (00:03:59)

NeurIPS 2017(二)

📷 NeurIPS 2017(二)
回到原视频 (00:05:12)

谁发明了注意力?

📷 谁发明了注意力?
回到原视频 (00:06:25)

变革性的架构思想

📷 变革性的架构思想
回到原视频 (00:07:38)


二、表示学习:从 MLP 到 CNN

(参考时间: 00:07)

核心思想:所有架构都在做特征变换 / 表示学习——把像素或词变成向量(embedding),逐层得到越来越抽象、越来越「上下文化」的表示(像素 → 猫须/猫耳 → 抽象的「猫 vs 狗」概念)。

2.1 MLP(多层感知机)

线性层(矩阵乘)+ ReLU 反复堆叠。极强表达力(任何架构都能被超大 MLP 模拟),但:

对图像,$P$ 像素 ⇒ 每层 $P^2$ 参数,$1000\times1000$ 图像完全不可行。

深度学习就是特征变换

📷 深度学习就是特征变换
回到原视频 (00:08:51)

MLP 网络

📷 MLP 网络
回到原视频 (00:10:04)

用于像素的 MLP(一)

📷 用于像素的 MLP(一)
回到原视频 (00:11:17)

用于像素的 MLP(二)

📷 用于像素的 MLP(二)
回到原视频 (00:12:30)

用于像素的 MLP(三)

📷 用于像素的 MLP(三)
回到原视频 (00:13:43)

用于像素的 MLP(四)

📷 用于像素的 MLP(四)
回到原视频 (00:14:56)

用于像素的 MLP(五)

📷 用于像素的 MLP(五)
回到原视频 (00:16:09)

2.2 卷积网络(CNN)

固定感受野的核在输入上滑动,权重被复用:

卷积网络(一)

📷 卷积网络(一)
回到原视频 (00:17:22)

卷积网络(二)

📷 卷积网络(二)
回到原视频 (00:18:35)

卷积网络(三)

📷 卷积网络(三)
回到原视频 (00:19:48)

卷积网络(四)

📷 卷积网络(四)
回到原视频 (00:21:01)

卷积网络(五)

📷 卷积网络(五)
回到原视频 (00:22:14)

卷积网络(六)

📷 卷积网络(六)
回到原视频 (00:23:27)

卷积网络(七)

📷 卷积网络(七)
回到原视频 (00:24:40)

卷积网络(八)

📷 卷积网络(八)
回到原视频 (00:25:53)

卷积网络(九)

📷 卷积网络(九)
回到原视频 (00:27:06)

卷积网络(十)

📷 卷积网络(十)
回到原视频 (00:28:19)

卷积网络(十一)

📷 卷积网络(十一)
回到原视频 (00:29:32)

卷积网络(十二)

📷 卷积网络(十二)
回到原视频 (00:30:45)

2.3 卷积的根本局限

例子:一张很难辨认的图(原来是「消防员版蜘蛛侠」)。当你只看一个 $20\times20$ 的小块,根本不知道这是什么——理解图像需要把整幅图「上下文化」,需要远距离信息。

关键铺垫:这个「信息瓶颈」问题,正是注意力要解决的——后面在 RNN 图像描述里会再次出现(「母亲级别的动机」)。

这张图里是什么?

📷 这张图里是什么?
回到原视频 (00:31:58)

消防员(蜘蛛侠)

📷 消防员(蜘蛛侠)
回到原视频 (00:33:11)

卷积感受野(一)

📷 卷积感受野(一)
回到原视频 (00:34:24)

卷积感受野(二)

📷 卷积感受野(二)
回到原视频 (00:35:37)

卷积网络(十三)

📷 卷积网络(十三)
回到原视频 (00:36:50)

解决方案:Transformer 架构

📷 解决方案:Transformer 架构
回到原视频 (00:38:03)


三、文档表示与 RNN

3.1 文档 → 向量

路线图

📷 路线图
回到原视频 (00:39:16)

把文档表示为向量

📷 把文档表示为向量
回到原视频 (00:40:29)

文档到向量

📷 文档到向量
回到原视频 (00:41:42)

路线图

📷 路线图
回到原视频 (00:42:55)

Bag of Words(词袋):英文词表约 5 万维;文档中出现的词记 1(或用词频)。优点:整个文档一个向量、维度不随文档长度变化。缺点:丢失词序(把《哈利波特》拆碎丢进袋子数词频,最高频的词永远是 "the")。

TF-IDF:$\text{TF}$ 是词在文档内的归一化频率;$\text{IDF}$ 是「词在各文档中多罕见」的对数倒数。二者相乘 ⇒ 常见词降权、有信息量的词升权。历史方法,如今少用。

用词袋表示文档

📷 用词袋表示文档
回到原视频 (00:44:08)

TF-IDF

📷 TF-IDF
回到原视频 (00:45:21)

3.2 循环神经网络(RNN)

思想:把网络的输出再喂回网络(同一组权重反复使用)。数学上:$(s_t,y_t)=f(s_{t-1},x_t)$。好处:权重可随输入长度复用,能处理任意长度序列。

基线任务:MS COCO(2014,约 12 万图 + 描述)上的图像描述(captioning)——用预训练 CNN 把图像编成特征($3\times3$ 的格,每格是 $D$ 维向量),再用 RNN 逐词生成「a man is playing the guitar」。

RNN 的问题(信息瓶颈):生成到后面时,网络只能通过被反复变换的隐状态获取图像信息,无法重新查看图像的某个部分 ⇒ 会漏掉「吉他」「窗户」等。如果每步都把整幅图塞进去,又会信息过载,反复念叨同一个东西。

解决方案:让网络自己决定每一步看哪里——这就是注意力。

什么是 RNN(一)

📷 什么是 RNN(一)
回到原视频 (00:46:34)

什么是 RNN(二)

📷 什么是 RNN(二)
回到原视频 (00:47:47)

什么是 RNN(三)

📷 什么是 RNN(三)
回到原视频 (00:49:00)

基线:用于描述的 RNN(一)

📷 基线:用于描述的 RNN(一)
回到原视频 (00:50:13)

基线:用于描述的 RNN(二)

📷 基线:用于描述的 RNN(二)
回到原视频 (00:51:26)

CNN 产生特征表示

📷 CNN 产生特征表示
回到原视频 (00:52:39)

基线:用于描述的 RNN(三)

📷 基线:用于描述的 RNN(三)
回到原视频 (00:53:52)

基线:用于描述的 RNN(四)

📷 基线:用于描述的 RNN(四)
回到原视频 (00:55:05)

基线:用于描述的 RNN(五)

📷 基线:用于描述的 RNN(五)
回到原视频 (00:56:18)


四、注意力:从位置到内容

4.1 基于位置的软注意力

(参考时间: 00:42)

Show, Attend and Tell(ICML 2015,Bahdanau/Bengio 等)在 Show and Tell 的基础上加入注意力:网络除了输出下一个词,还输出一个关于「看哪里」的分布($\ell\times\ell$ 的位置图)。注意力块据此把图像各块的向量加权组合成上下文向量(attended features)$z$。

可解释性:训练后,位置图自动学到在说 "bird" 时看鸟、说 "water" 时看水——完全由梯度下降学出,没人手工标注位置。

加入软注意力(一)

📷 加入软注意力(一)
回到原视频 (00:57:31)

加入软注意力(二)

📷 加入软注意力(二)
回到原视频 (00:58:44)

软注意力 vs 硬注意力(一)

📷 软注意力 vs 硬注意力(一)
回到原视频 (00:59:57)

软注意力 vs 硬注意力(二)

📷 软注意力 vs 硬注意力(二)
回到原视频 (01:01:10)

软注意力 vs 硬注意力(三)

📷 软注意力 vs 硬注意力(三)
回到原视频 (01:02:23)

软注意力 vs 硬注意力(四)

📷 软注意力 vs 硬注意力(四)
回到原视频 (01:03:36)

可解释的注意力(一)

📷 可解释的注意力(一)
回到原视频 (01:04:49)

可解释的注意力(二)

📷 可解释的注意力(二)
回到原视频 (01:06:02)

用于翻译:输入西语、输出英语,网络每吐一个词就产生一个关于输入词的位置分布(注意力)——这是注意力最早的应用(Bahdanau 等 2014/2015)。

用于翻译的软注意力

📷 用于翻译的软注意力
回到原视频 (01:07:15)

软注意力用于一切

📷 软注意力用于一切
回到原视频 (01:08:28)

基于位置的寻址注意力

📷 基于位置的寻址注意力
回到原视频 (01:09:41)

(本讲讲到此处)

📷 (本讲讲到此处)
回到原视频 (01:10:54)

4.2 基于内容的注意力

(参考时间: 01:01)

位置注意力的问题:位置数固定。内容注意力让网络产生一个查询向量 $Q$(语义,如「把有吉他的向量给我」),而不是位置分布。

核心直觉:内积 = 相似度(当向量归一化时即余弦相似度)。对每个 $x_i$ 计算 $Q^\top x_i$,得到一组相似度分数。

$$ p_i=\frac{\exp(Q^\top x_i)}{\sum_j\exp(Q^\top x_j)} $$

警告:若向量长度很大,内积会因模长主导而失真 ⇒ 应归一化,否则「大向量会吸引所有注意力」(实践中可通过乘 5 倍让某个表示更受关注)。

这本质是 soft 的键值查找 / 向量数据库检索(如 RAG):给出 query,按相似度软选择最相关的表示。

基于内容的注意力(一)

📷 基于内容的注意力(一)
回到原视频 (01:12:07)

基于内容的注意力(二)

📷 基于内容的注意力(二)
回到原视频 (01:13:20)

基于内容的注意力(三)

📷 基于内容的注意力(三)
回到原视频 (01:14:33)

本讲到此处结束。下一讲继续:Keys/Values、Self-Attention 的矩阵形式、多头注意力、Transformer 层、位置编码——见文末附录。


附录:本讲未展示的幻灯片(下一讲继续,幻灯片 63–119)

以下幻灯片属于本讲课件,但因课堂时间未讲到,按惯例置于附录。它们将在第二十二讲(Transformer 续)中讲解。

Hard max 与 Softmax

🖼️ Hard max 与 Softmax

基于内容的寻址注意力(一)

🖼️ 基于内容的寻址注意力(一)

经典的 IR 内积检索

🖼️ 经典的 IR 内积检索

基于内容的寻址注意力(二)

🖼️ 基于内容的寻址注意力(二)

基于内容的寻址注意力(三)

🖼️ 基于内容的寻址注意力(三)

基于内容的寻址注意力:Keys 与 Values

🖼️ 基于内容的寻址注意力:Keys 与 Values

注意力是一个层:$W_f,W_g$ 是参数

🖼️ 注意力是一个层:$W_f,W_g$ 是参数

$x_1$(一)

🖼️ $x_1$(一)

$x_1$(二)

🖼️ $x_1$(二)

计算 $z_1$

🖼️ 计算 $z_1$

$x_1$(三)

🖼️ $x_1$(三)

加入 Values:矩阵把 $x_i$ 映到 $v_i$

🖼️ 加入 Values:矩阵把 $x_i$ 映到 $v_i$

终于完成:矩阵形式的自注意力

🖼️ 终于完成:矩阵形式的自注意力

自注意力总结

🖼️ 自注意力总结

翻译的挑战:需要向前与向后(一)

🖼️ 翻译的挑战:需要向前与向后(一)

翻译的挑战:需要向前与向后(二)

🖼️ 翻译的挑战:需要向前与向后(二)

通过自注意力解决该挑战

🖼️ 通过自注意力解决该挑战

自注意力允许与未来的连接

🖼️ 自注意力允许与未来的连接

需要在表示中包含上下文

🖼️ 需要在表示中包含上下文

从 Token 嵌入开始

🖼️ 从 Token 嵌入开始

Transformer 层的基本设置

🖼️ Transformer 层的基本设置

融入其他 Token 的上下文

🖼️ 融入其他 Token 的上下文

并非所有上下文都相关

🖼️ 并非所有上下文都相关

构造 Keys 与 Queries

🖼️ 构造 Keys 与 Queries

$V_1$

🖼️ $V_1$

为什么需要分开的 Key 与 Query?

🖼️ 为什么需要分开的 Key 与 Query?

$Q_2$

🖼️ $Q_2$

$K_3$(一)

🖼️ $K_3$(一)

$K_3$(二)

🖼️ $K_3$(二)

$K_3$(三)

🖼️ $K_3$(三)

自注意力层

🖼️ 自注意力层

参数与计算复杂度

🖼️ 参数与计算复杂度

注意力作为软查找表(一)

🖼️ 注意力作为软查找表(一)

注意力作为软查找表(二)

🖼️ 注意力作为软查找表(二)

注意力作为软查找表(三)

🖼️ 注意力作为软查找表(三)

注意力作为软查找表(四)

🖼️ 注意力作为软查找表(四)

多头注意力

🖼️ 多头注意力

多头注意力的替代方案

🖼️ 多头注意力的替代方案

Transformer 层

🖼️ Transformer 层

展开 Transformer 层

🖼️ 展开 Transformer 层

残差连接(+)

🖼️ 残差连接(+)

读取 Transformer 的输出(一)

🖼️ 读取 Transformer 的输出(一)

读取 Transformer 的输出(二)

🖼️ 读取 Transformer 的输出(二)

读取 Transformer 的输出(三)

🖼️ 读取 Transformer 的输出(三)

读取 Transformer 的输出(四)

🖼️ 读取 Transformer 的输出(四)

Transformer 与 Token 顺序

🖼️ Transformer 与 Token 顺序

图像与文本中的 Token 位置

🖼️ 图像与文本中的 Token 位置

「The」

🖼️ 「The」

「The food was」

🖼️ 「The food was」

位置编码

🖼️ 位置编码

设计位置嵌入

🖼️ 设计位置嵌入

学习式位置嵌入

🖼️ 学习式位置嵌入

正弦位置编码

🖼️ 正弦位置编码

查询相对位置

🖼️ 查询相对位置

编码器 Transformer

🖼️ 编码器 Transformer

编码器

🖼️ 编码器

第二十一讲

🖼️ 第二十一讲


总结(Takeaways)


附:参考与延伸阅读

主题 链接
本讲视频 https://www.youtube.com/watch?v=mqaFEvi5rWE
课程主页 https://eecs189.org/sp26/
官方讲义/笔记(Lecture 21) Google Drive PDF
Vaswani et al., Attention Is All You Need (2017) https://arxiv.org/abs/1706.03762
Bahdanau et al., Neural Machine Translation by Jointly Learning to Align and Translate (2015) 注意力首次提出 · https://arxiv.org/abs/1409.0473
Xu et al., Show, Attend and Tell (2015) 图像描述注意力 · https://arxiv.org/abs/1502.03044
Vinyals et al., Show and Tell (2015) 图像描述基线 · https://arxiv.org/abs/1411.4555

版权说明:本讲视频、幻灯片与课程材料版权归 UC Berkeley EECS 189/289A 课程团队所有。本书为课堂内容的学习性中文重构,仅供学习交流。