第22讲 · EECS 189:Transformer(下)

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

原始标题 Transformers and Attention (Part 2) — Self-Attention, Multi-Head Attention, Positional Encoding
课堂进度提示 本讲从幻灯片 60(Content-based attention) 继续,讲到位置编码;幻灯片 117–119 未讲完,置于文末附录。
视频 https://www.youtube.com/watch?v=syp1pSf_DYY
课程主页 https://eecs189.org/sp26/
官方讲义/笔记(Lecture 22) Google Drive PDF
图片来源 书中幻灯片插图为官方 PDF 高清渲染图

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

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

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

本讲路线图

(参考时间: 00:00)

本讲是注意力与 Transformer 的核心。我们从基于内容的注意力出发,逐步构建 Self-Attention → 多头注意力 → Transformer 层 → 位置编码:

  1. 内容寻址注意力:Query / Key / Value、内积检索、softmax 行归一化;
  2. 自注意力:每个 token 同时充当 Q/K/V;矩阵形式 softmax(QKᵀ/√d)·V;PyTorch 实现;
  3. 上下文化:it 指代谁、bank 指河岸还是银行;
  4. 复杂度:参数 $\mathcal{O}(d^2)$ 与上下文无关,但计算 $\mathcal{O}(n^2)$;
  5. 软查找表:注意力 ≈ 可微的字典 / hashmap;
  6. 多头注意力、Transformer 层(残差 + LayerNorm + MLP);
  7. 位置编码:注意力本身对顺序不变,必须显式注入位置。
标题页

📷 标题页
回到原视频 (01:12:07)

(概述)

📷 (概述)
回到原视频 (01:13:20)

基于内容的寻址注意力

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

Hard max 与 Softmax

📷 Hard max 与 Softmax
回到原视频 (01:15:46)

基于内容的寻址注意力

📷 基于内容的寻址注意力
回到原视频 (01:16:59)

经典的 IR 内积检索

📷 经典的 IR 内积检索
回到原视频 (01:18:12)

基于内容的寻址注意力

📷 基于内容的寻址注意力
回到原视频 (01:19:25)

基于内容的寻址注意力

📷 基于内容的寻址注意力
回到原视频 (01:20:38)

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

📷 基于内容的寻址注意力:Keys 与 Values
回到原视频 (01:21:51)

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

📷 注意力是一个层:$W_f,W_g$ 是参数
回到原视频 (01:23:04)

$x_1$(一)

📷 $x_1$(一)
回到原视频 (01:24:17)

$x_1$(二)

📷 $x_1$(二)
回到原视频 (01:25:30)

计算 $z_1$

📷 计算 $z_1$
回到原视频 (01:26:43)

$x_1$(三)

📷 $x_1$(三)
回到原视频 (01:27:56)

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

📷 加入 Values:矩阵把 $x_i$ 映到 $v_i$
回到原视频 (01:29:09)

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

📷 终于完成:矩阵形式的自注意力
回到原视频 (01:30:22)

自注意力总结

📷 自注意力总结
回到原视频 (01:31:35)


一、内容寻址注意力

(参考时间: 00:00)

信息检索(IR)的经典工具 = 内积检索:把每篇文档编码成 key 向量,把问题编码成 query 向量,算 $Q\cdot K_i$。由三角恒等式,$Q\cdot K_i=\lVert Q\rVert\lVert K_i\rVert\cos\theta$——所以(归一化后)内积 = 余弦相似度。

注意力 = 软检索:

$$ \text{score}_i = Q^\top x_i,\qquad p_i=\mathrm{softmax}(\text{score})_i,\qquad z=\sum_i p_i\,x_i $$

软 vs 硬:hard max 是 one-hot(argmax),softmax 是"软化版"——把大值放大、小值压小($e^{-50}$ 几乎为 0)。为什么一切都要"软"?因为软的操作可微、能反向传播。

对矩阵做 softmax = 逐行 softmax(这是后面自注意力的关键操作)。

Softmax 的作用

📷 Softmax 的作用
回到原视频 (01:32:48)

翻译中的挑战(一)

📷 翻译中的挑战(一)
回到原视频 (01:34:01)

翻译中的挑战(二)

📷 翻译中的挑战(二)
回到原视频 (01:35:14)

通过自注意力解决该挑战

📷 通过自注意力解决该挑战
回到原视频 (01:36:27)


二、自注意力(Self-Attention)

2.1 基本思想

(参考时间: 00:17)

自注意力 = 把每个输入 token 同时当作 Query、Key 和 Value。对第 $i$ 个 token:

所以 $y_1$ 是所有输入向量的线性组合,权重由 $x_1$ 与各 key 的相似度决定($x_1$ 既是 query 又是 key 之一 ⇒ "self-attention")。

关键性质:

三个可学习矩阵:$W_Q, W_K, W_V$(每个 $d\times d$)。在 Qwen/GPT 等模型里,每个 transformer block 的每个注意力层都有这些矩阵,可以直接下载查看。

需要包含上下文

📷 需要包含上下文
回到原视频 (01:37:40)

从 Token 嵌入开始

📷 从 Token 嵌入开始
回到原视频 (01:38:53)

Transformer 层的基本设置

📷 Transformer 层的基本设置
回到原视频 (01:40:06)

融入其他 Token 的上下文

📷 融入其他 Token 的上下文
回到原视频 (01:41:19)

并非所有上下文都相关

📷 并非所有上下文都相关
回到原视频 (01:42:32)

构造 Keys 与 Queries

📷 构造 Keys 与 Queries
回到原视频 (01:43:45)

$V_1$

📷 $V_1$
回到原视频 (01:44:58)

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

📷 为什么需要分开的 Key 与 Query?
回到原视频 (01:46:11)

$Q_2$

📷 $Q_2$
回到原视频 (01:47:24)

$K_3$(一)

📷 $K_3$(一)
回到原视频 (01:48:37)

$K_3$(二)

📷 $K_3$(二)
回到原视频 (01:49:50)

$K_3$(三)

📷 $K_3$(三)
回到原视频 (01:51:03)

自注意力层

📷 自注意力层
回到原视频 (01:52:16)

2.2 矩阵形式与实现

把 $n$ 个 token 堆成矩阵 $X\in\mathbb{R}^{n\times d}$(每一行是一个 token),则

$$ Q=XW_Q,\quad K=XW_K,\quad V=XW_V,\qquad \mathrm{Attn}(X)=\mathrm{softmax}\!\Big(\frac{QK^\top}{\sqrt d}\Big)V $$

PyTorch 实现极简(面试常考):

def self_attention(q, k, v):
    d = q.shape[-1]
    scores = q @ k.transpose(-2, -1) / d**0.5   # n×n
    attn = torch.softmax(scores, dim=-1)         # 逐行 softmax
    return attn @ v

为什么 Key 和 Query 要分开? 因为检索是非对称的:「swam 有多关注 river」和「river 有多关注 swam」不应是同一个关系。两套矩阵让网络学到更丰富的关联。

参数与计算复杂度

📷 参数与计算复杂度
回到原视频 (01:53:29)

2.3 上下文化(contextualization)

例子 1:The animal didn't cross the street because it was too tired. —— it 指 animal;换成 ...because it was too wide. —— it 指 street。只有看完整个句子才知道。自注意力后,it 的向量不再是"通用的 it",而是混合了 animal / street 的上下文嵌入。可视化注意力矩阵 $A$($n\times n$)就能看到 it 把大权重放在 animal 上。

例子 2:I swam across the river to get to the other bank. —— bank 初始可能联想到银行,上下文后变成"约 0.9 倍的河岸 + 0.1 倍的银行"。

图像同理:把图像切块作为 token,上下文化后每个块能"知道"这是孩子脸、消防员制服等。

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

📷 注意力作为软查找表(一)
回到原视频 (01:54:42)

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

📷 注意力作为软查找表(二)
回到原视频 (01:55:55)

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

📷 注意力作为软查找表(三)
回到原视频 (01:57:08)

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

📷 注意力作为软查找表(四)
回到原视频 (01:58:21)

2.4 注意力 = 软查找表

把 Python 字典 {A: 51, B: 42, C: ...} 一般化:

多头注意力

📷 多头注意力
回到原视频 (01:59:34)


三、多头注意力与 Transformer 层

3.1 多头注意力(Multi-Head Attention)

做法:并行复制 $h$ 套 $(W_Q,W_K,W_V)$(称为 $h$ 个 head),各自做一次自注意力,得到 $h$ 个输出,拼接后再过一个线性层。

多头注意力的替代方案

📷 多头注意力的替代方案
回到原视频 (02:00:47)

Transformer 层

📷 Transformer 层
回到原视频 (02:02:00)

展开 Transformer 层

📷 展开 Transformer 层
回到原视频 (02:03:13)

残差连接 +

📷 残差连接 +
回到原视频 (02:04:26)

3.2 Transformer 层(block)

一个 Transformer 层 = 多头自注意力 + MLP,每部分都带残差连接 + LayerNorm:

x ← x + MultiHeadAttention(LayerNorm(x))
x ← x + MLP(LayerNorm(x))          # MLP = 两层线性 + ReLU

要点:

提问中提到的 post-LN vs pre-LN:残差 + LayerNorm 的位置(层后还是层前)会影响训练稳定性;原始 Transformer 用 post-LN,现代大模型多用 pre-LN。

读取 Transformer 的输出(一)

📷 读取 Transformer 的输出(一)
回到原视频 (02:05:39)

读取 Transformer 的输出(二)

📷 读取 Transformer 的输出(二)
回到原视频 (02:06:52)

读取 Transformer 的输出(三)

📷 读取 Transformer 的输出(三)
回到原视频 (02:08:05)

读取 Transformer 的输出(四)

📷 读取 Transformer 的输出(四)
回到原视频 (02:09:18)

Transformer 与 Token 顺序

📷 Transformer 与 Token 顺序
回到原视频 (02:10:31)

图像与文本中的 Token 位置

📷 图像与文本中的 Token 位置
回到原视频 (02:11:44)

「The」

📷 「The」
回到原视频 (02:12:57)

「The food was」

📷 「The food was」
回到原视频 (02:14:10)


四、位置编码(Positional Encoding)

(参考时间: 01:07)

问题:自注意力对顺序不变——交换 token 顺序,输出完全一样。但 the food was good not bad at all 换序就变意义;图像里"右边的机器人是什么颜色"也需要"左/右"的概念。

解决:把位置信息注入输入特征——给每个 token 的嵌入加上(或拼接)位置编码。

好位置编码的要求:

两种主流方案:

  1. 学习式位置嵌入(learned positional embedding):每个位置一个可训练向量(如 GPT 常用);
  2. 正弦位置编码(sinusoidal):用不同频率的 $\sin/\cos$ 生成,可外推到训练时没见过的更长序列(原始 Transformer 用)。

简单的"位置 = 1,2,3..."直接加进一个坐标往往效果不好;如何设计位置编码仍是研究话题。

位置编码

📷 位置编码
回到原视频 (02:15:23)

设计位置嵌入

📷 设计位置嵌入
回到原视频 (02:16:36)

学习式位置嵌入

📷 学习式位置嵌入
回到原视频 (02:17:49)

正弦位置编码

📷 正弦位置编码
回到原视频 (02:19:02)

查询相对位置

📷 查询相对位置
回到原视频 (02:20:15)


附录 A:本讲未讲完的幻灯片(幻灯片 117–119)

因课堂时间结束,以下幻灯片未讲到,按惯例置于附录。

编码器 Transformer

🖼️ 编码器 Transformer

编码器

🖼️ 编码器

第二十一讲

🖼️ 第二十一讲


附录 B:上一讲内容回顾(幻灯片 1–59)

本讲课件的前 59 页与第二十一讲相同(Transformer 背景、MLP/CNN、RNN 与注意力动机),课堂上未重复展示,此处按惯例列出。

EECS 189/289

🖼️ EECS 189/289

(概述)

🖼️ (概述)

(概述)

🖼️ (概述)

NeurIPS 2017(一)

🖼️ NeurIPS 2017(一)

NeurIPS 2017(二)

🖼️ NeurIPS 2017(二)

谁发明了注意力?

🖼️ 谁发明了注意力?

变革性的架构思想

🖼️ 变革性的架构思想

深度学习就是特征变换

🖼️ 深度学习就是特征变换

MLP 网络

🖼️ MLP 网络

用于像素的 MLP(一)

🖼️ 用于像素的 MLP(一)

用于像素的 MLP(二)

🖼️ 用于像素的 MLP(二)

用于像素的 MLP(三)

🖼️ 用于像素的 MLP(三)

用于像素的 MLP(四)

🖼️ 用于像素的 MLP(四)

用于像素的 MLP(五)

🖼️ 用于像素的 MLP(五)

卷积网络(一)

🖼️ 卷积网络(一)

卷积网络(二)

🖼️ 卷积网络(二)

卷积网络(三)

🖼️ 卷积网络(三)

卷积网络(四)

🖼️ 卷积网络(四)

卷积网络(五)

🖼️ 卷积网络(五)

卷积网络(六)

🖼️ 卷积网络(六)

卷积网络(七)

🖼️ 卷积网络(七)

卷积网络(八)

🖼️ 卷积网络(八)

卷积网络(九)

🖼️ 卷积网络(九)

卷积网络(十)

🖼️ 卷积网络(十)

卷积网络(十一)

🖼️ 卷积网络(十一)

卷积网络(十二)

🖼️ 卷积网络(十二)

这张图里是什么?

🖼️ 这张图里是什么?

消防员(蜘蛛侠)

🖼️ 消防员(蜘蛛侠)

卷积感受野(一)

🖼️ 卷积感受野(一)

卷积感受野(二)

🖼️ 卷积感受野(二)

卷积网络(十三)

🖼️ 卷积网络(十三)

解决方案:Transformer 架构

🖼️ 解决方案:Transformer 架构

路线图

🖼️ 路线图

把文档表示为向量

🖼️ 把文档表示为向量

文档到向量

🖼️ 文档到向量

路线图

🖼️ 路线图

用词袋表示文档

🖼️ 用词袋表示文档

TF-IDF

🖼️ TF-IDF

什么是 RNN(一)

🖼️ 什么是 RNN(一)

什么是 RNN(二)

🖼️ 什么是 RNN(二)

什么是 RNN(三)

🖼️ 什么是 RNN(三)

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

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

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

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

CNN 产生特征表示

🖼️ CNN 产生特征表示

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

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

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

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

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

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

加入软注意力(一)

🖼️ 加入软注意力(一)

加入软注意力(二)

🖼️ 加入软注意力(二)

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

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

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

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

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

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

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

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

可解释的注意力(一)

🖼️ 可解释的注意力(一)

可解释的注意力(二)

🖼️ 可解释的注意力(二)

用于翻译的软注意力

🖼️ 用于翻译的软注意力

软注意力用于一切

🖼️ 软注意力用于一切

基于位置的寻址注意力

🖼️ 基于位置的寻址注意力

(上一讲讲到此处)

🖼️ (上一讲讲到此处)


总结(Takeaways)


附:参考与延伸阅读

主题 链接
本讲视频 https://www.youtube.com/watch?v=syp1pSf_DYY
课程主页 https://eecs189.org/sp26/
官方讲义/笔记(Lecture 22) Google Drive PDF
Vaswani et al., Attention Is All You Need (2017) https://arxiv.org/abs/1706.03762
Dao et al., FlashAttention 注意力加速 · https://arxiv.org/abs/2205.14135

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