---
title: "用例子和自题解释 Transformer 如何使用 attention 学习文档"
description: "Transformer 中的注意力机制：用例子和自测读懂 Self-Attention 一句话先记住 Self-Attention 让句子里的每个词，都能一次性\"看到\"所有其他词，并按相关程度重新组合自己的含义。 据《Attention Is All You Need》（2017 年 6 月，Google 在 arX…"
canonical_url: "https://threadlab.pages.dev/d/ltJDPZ3rdpnNWP"
published_at: "2026-07-03T13:51:13.463Z"
updated_at: "2026-07-03T10:40:58.251Z"
word_count: 3047
source: "ALab public document"
---

# Transformer 中的注意力机制：用例子和自测读懂 Self-Attention

## 一句话先记住

> **Self-Attention 让句子里的每个词，都能一次性"看到"所有其他词，并按相关程度重新组合自己的含义。** 据《Attention Is All You Need》（2017 年 6 月，Google 在 arXiv 发布）一文介绍，Transformer 用纯 Attention 结构替代了传统的 CNN/RNN 序列建模方式，做到并行训练与远距离依赖建模兼顾（来源线索，未读原文，仅作背景参考）。

---

## 1. 为什么需要 Attention

### 1.1 一个直觉问题

当人听到"小明今天没来学校，因为他生病了"，听到"他"时会立刻回看"小明"。这种"指代消解"靠的不是从头复读，而是**按需拉远注意力**。

[《【每日一技】Transformer》](https://so.html5.qq.com/page/real/search_news?docid=70000021_978695d016612952)一文把这种能力描述为：每个词都可以主动去"看"句子里最相关的其他词，不再像旧模型那样逐字阅读，而是像一个聪明的读者——哪儿重要，就把注意力放到哪儿。

### 1.2 传统方法的两个痛点

| 方法 | 主要问题 |
| --- | --- |
| RNN / LSTM | 序列必须按时间步串行计算，远距离信息需要经过多步累积才能相连，距离越远信号越弱 |
| CNN | 局部窗口建模，要堆叠多层才能覆盖远距离，并行效率虽好但感受野受限 |

Self-Attention 的解法是：**让任意两个词之间的依赖距离都"≈1"**——不管它们在句子中隔多远，都通过一次运算直接相连。摘要线索（来自[《【经典精读】万字长文解读 Transformer》](https://zhuanlan.zhihu.com/p/104393915)一文摘要，未读原文）也提到 Transformer 的核心思想是让同一序列不同位置之间"distance = 1 的平行关系"，但具体表述以原论文为准。

---

## 2. 三件套：Query、Key、Value

注意力机制用一个"查字典"的比喻就能讲清。[《【每日一技】Transformer》](https://so.html5.qq.com/page/real/search_news?docid=70000021_978695d016612952)一文把每个词的三个角色写得很直白：

| 角色 | 它在"问"什么 | 类比 |
| --- | --- | --- |
| **Query (Q)** | 我现在想知道什么？ | 检索时输入的关键词 |
| **Key (K)** | 我有什么特征供别人匹配？ | 字典/索引里的标题 |
| **Value (V)** | 如果别人选了我，能从我这里拿到什么内容？ | 索引对应正文里的实际信息 |

### 2.1 走一遍计算流程（以"今天 下雨， 我 没 带 伞"为例）

假设我们要算"没"这个词的新表示。直觉上它最关心"下雨"和"伞"。算法要做这四步：

1. **准备 Q/K/V**：把每个词的 embedding 乘以三个可学习矩阵，得到 Q、K、V 三个向量。
2. **算相似度**：用"没"的 Q 去点乘（dot product）所有词（包括自己）的 K，得到一组分数。
  - 分数高 ≈ "没"想问的问题正好和这个词的特征匹配。
3. **归一化**：分数除以 $\sqrt{d_k}$（向量维度的平方根，防止分数过大让 softmax 饱和），再过 softmax，让所有分数变成"和为 1 的权重"。
4. **加权求和**：用这些权重对所有词的 V 做加权平均，得到"没"的新表示。

写成公式就是论文里那个经典版本：

$$
\text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V
$$

> 公式与 Q/K/V 缩放点积的描述在[《【每日一技】Transformer》](https://so.html5.qq.com/page/real/search_news?docid=70000021_978695d016612952)[《Transformer模型详解》](https://zhuanlan.zhihu.com/p/105080984)[《【经典精读】万字长文解读 Transformer 模型和 Attention 机制》](https://zhuanlan.zhihu.com/p/104393915)等资料摘要中均被反复提及；其中只有[《【每日一技】Transformer》](https://so.html5.qq.com/page/real/search_news?docid=70000021_978695d016612952)一文为可读正文，其余两份为"未读原文"标记，仅作线索，最终应以原论文《Attention Is All You Need》为准。

### 2.2 一个具体的数值小例子

> 句子：`[今天, 下雨, 我, 没, 带, 伞]` 算"没"对其他词的注意力权重（示意数值）：

| 词 | QKᵀ / √dₖ | softmax 之后 |
| --- | --- | --- |
| 今天 | 0.2 | 0.06 |
| 下雨 | 2.5 | 0.42 |
| 我 | 0.8 | 0.11 |
| 没 | 0.3 | 0.07 |
| 带 | 0.4 | 0.07 |
| 伞 | 2.0 | 0.27 |

加和=1，最高的两个权重落在"下雨 (0.42)"和"伞 (0.27)"上。这与[《【每日一技】Transformer》](https://so.html5.qq.com/page/real/search_news?docid=70000021_978695d016612952)文中描述的"自动把'下雨'与'没带伞'关联起来"的效果一致。

> 数字仅为示意；真实数值由训练得到的 WQ/WK/WV 矩阵决定。

---

## 3. Multi-Head Attention：多视角同时看

一个 head 只学一种"关注方式"可能不够。Multi-Head Attention 的做法是：

- 把 Q/K/V 各自切成 $h$ 份（head），每份独立做一次 scaled dot-product attention；
- 把 $h$ 个输出拼起来，再乘一个输出矩阵 $W_O$ 还原维度。

[《【每日一技】Transformer》](https://so.html5.qq.com/page/real/search_news?docid=70000021_978695d016612952)一文给出了一个直观的说法：*"有人关注主语，有人关注时态，有人关注指代关系"*——这正是多头想达到的效果。

> **一个常见误解**：多头不是把头数变多就更"强"，而是把不同子空间学到的关系同时利用起来。计算量大致是单头的 $h$ 倍（拼接再投影开销可控）。

---

## 4. 在 Transformer 中，Attention 出现在哪里

下表整理了 Transformer 三大使用 Attention 的位置，并标注资料包中已读 / 仅有线索的支持情况。

| 位置 | Q 来自 | K, V 来自 | 用途 |
| --- | --- | --- | --- |
| Encoder Self-Attention | 当前层 encoder 输入 | 同序列其他位置 | 让每个词看到整个句子的上下文 |
| Decoder Masked Self-Attention | 当前层 decoder 输入 | 同序列已生成部分 | 训练时用 mask 防止看到"未来" |
| Encoder-Decoder Cross-Attention | decoder 当前状态 | encoder 输出 | 让译文词对齐到源语言词 |

> **来源说明**：以上三处结构是公开论文的通用描述。资料包中[《Transformer模型详解》](https://zhuanlan.zhihu.com/p/105080984)[《【经典精读】万字长文解读 Transformer 模型和 Attention 机制》](https://zhuanlan.zhihu.com/p/104393915)两份摘要均提及 encoder/decoder + attention 的总体架构，但未读取原文；部分细节（如下三角 mask 的具体实现方式、是否在每一层都做 cross-attention）建议回到原论文《Attention Is All You Need》核实。

---

## 5. 三个常见误区，先避坑

1. **"Self-Attention 就是注意力机制"** Self-Attention 是一种特殊形式——Q/K/V 都来自同一序列。Attention 还包括 encoder-decoder 等其他形式（据[《Transformer模型详解》](https://zhuanlan.zhihu.com/p/105080984)摘要描述："Self Attention……是 Source 内部元素之间或者 Target 内部元素之间发生的 Attention 机制"，未读原文）。
2. **"Attention 越多越能解决长文本"** 自注意力的时间和空间复杂度是 $O(N^2)$，序列变长时显存和算力增长很快。摘要线索（来自《2021-Swin Transformer Attention 机制的详细推导》，未读原文）提到 Swin Transformer 通过窗口 Attention 把复杂度从 $O(N^2)$ 降到 $O(N)$，但具体机制与数据以原文为准。
3. **"Attention 权重高 = 因果关系"** Attention 只是相关性打分，并不天然表示因果。一个词被高度关注，可能只是模型学到了某种共现模式，而非真正的因果证据（此为对注意力机制作用的常识性辨析，资料包未直接论述，标注待核验）。

---

## 6. 自测题：5 题检验掌握程度

> 建议先在纸上写下答案，再回看正文对照。

**Q1（概念辨析）** Self-Attention 和传统 RNN 的"序列建模"在依赖距离上有什么本质区别？请用一两句话回答。

**Q2（公式复述）** 写出 Scaled Dot-Product Attention 的公式，并解释分母 $\sqrt{d_k}$ 的作用。

**Q3（手算）** 假设某 head 中"伞"对其他词的 QKᵀ / √dₖ 分数为 `[0.1, 0.3, 0.2, 0.5, 0.1, 1.2]`（对应"今天、下雨、我、没、带、伞"），请估算 softmax 后分配到"下雨"和"没"两个词的权重（保留两位小数即可，过程可以近似）。

> 提示：先做 `exp(.)`，再做归一化。

**Q4（结构理解）** Encoder-Decoder Cross-Attention 中，Q 来自哪里、K 与 V 又来自哪里？它的作用是什么？

**Q5（场景迁移）** 如果让你把 Self-Attention 用到"商品评论情感分类"上，输入序列是 100 个 token 的评论，输出一个二分类标签。请问：

- 应该只用 Encoder 的 Self-Attention，还是必须用 Decoder？
- 分类标签向量通常从哪里"读出"？

### 自测题参考答案（先做题再看）

点开查看参考答案

- **A1**：RNN 中两个位置的信息传递要走 $N$ 步，依赖距离随序列长度增长；Self-Attention 中任意两个位置只需一次点积，距离都被压成 1。
- **A2**：$\text{Attention}(Q,K,V) = \text{softmax}\!\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V$；$\sqrt{d_k}$ 用于把点积的方差稳定在 1 附近，避免 softmax 进入饱和区、梯度消失。
- **A3**：`exp` 后 ≈ `[1.11, 1.35, 1.22, 1.65, 1.11, 3.32]`，总和 ≈ 9.76；"下雨"权重 ≈ `1.35/9.76 ≈ 0.14`；"没"权重 ≈ `1.65/9.76 ≈ 0.17`。两个都明显高于"今天""带"等位置，符合"伞"应该最关注与下雨/没带相关内容的直觉。
- **A4**：Q 来自 decoder 上一层的输出，K 与 V 来自 encoder 最后一层的输出；它让解码器在生成每个目标词时，能"对齐"到源语言最相关的片段。
- **A5**：通常只需要 Encoder 部分（自回归逐步生成是 Decoder 的事，分类不需要逐步生成）；分类向量通常取序列第一个 token（`[CLS]`）经过 Encoder 后的表示，接一个全连接层做二分类——这是 BERT 类模型的常见做法。**此为对 BERT 用法的常识性总结，资料包未直接论述，标注待核验。**

---

## 7. 不确定点与待核验问题

1. **未读原文的来源**：本笔记主要事实来源为[《【每日一技】Transformer》](https://so.html5.qq.com/page/real/search_news?docid=70000021_978695d016612952)（可读正文）；[《Transformer模型详解》](https://zhuanlan.zhihu.com/p/105080984)[《【经典精读】万字长文解读 Transformer 模型和 Attention 机制》](https://zhuanlan.zhihu.com/p/104393915)《2021-Swin Transformer Attention 机制的详细推导》三篇均为搜索摘要，未读原文。涉及到具体数值、复杂度公式、mask 实现细节、训练技巧等表述时，应回到《Attention Is All You Need》原文核实。
2. **O(N²) 复杂度与 Swin Transformer 的 O(N)**：摘要线索提到 Swin Transformer 通过窗口注意力把 Self-Attention 复杂度从 $O(N^2)$ 降到线性 $O(N)$，但资料包未读取原文，具体降复杂度的机制、是否近似线性的条件，需要回到原论文验证。
3. **复杂度表述的细微差别**：摘要线索（[《【经典精读】万字长文解读》](https://zhuanlan.zhihu.com/p/104393915)）中提到 Transformer 训练时"相对序列长度的复杂度是 O(1)"，但同份摘要也注明"实际上还是有一些额外的开销，比如 attention 里的某些运算复杂度和长度呈线性关系"。O(1) 仅就"序列不同位置之间的依赖距离"而言，并非整体计算复杂度。引用时需注意这一区分。
4. **BERT **`[CLS]`** 做分类**：自测题 A5 中关于"取 `[CLS]` 向量做分类是 BERT 经典做法"的说法为常见知识总结，资料包未直接论述，标注待核验。
5. **"Attention 权重高 ≠ 因果关系"**：误区 5.3 是对注意力机制的常识性辨析，资料包未直接论述，标注待核验。

## 8. 进一步阅读建议

- **论文原文**（建议直接读）：Vaswani et al., *Attention Is All You Need*, NeurIPS 2017。资料包中所有摘要都围绕它展开，但**摘要没有替代原文**——公式、mask 细节、位置编码等最好回到原文。
- **精读长文**：[《经典精读·万字长文解读 Transformer 模型和 Attention 机制》](https://zhuanlan.zhihu.com/p/104393915)（知乎）—— 资料包中只有摘要线索，需要回看全文。
- **直觉讲解**：[《【每日一技】Transformer》](https://so.html5.qq.com/page/real/search_news?docid=70000021_978695d016612952)一文（已读）—— 适合作为本笔记的科普补充。
- **进阶 / 视觉方向**：《2021-Swin Transformer Attention 机制的详细推导》（知乎摘要，未读原文）—— 当你想把注意力机制用到图像上时再回读。

> 资料包中没有覆盖到的内容（如 Attention 的完整复杂度推导、相对位置编码、FlashAttention 优化等）建议另行查阅；本笔记的对比与结论都基于上文标注的来源。

## 参考来源

### [1] Transformer模型详解

```alab-bookmark
{
  "url": "https://zhuanlan.zhihu.com/p/105080984",
  "title": "Transformer模型详解",
  "description": "Google于2017年6月在arxiv上发布了一篇非常经典的文章: Attention is all you need ,提出了解决sequence to sequence问题的transformer模型,该文章使用全Attention的结构代替了LSTM,抛弃了之前传统的encoder-decoder模型必须结合CNN或者RNN的固有模式。在减少计算量和提高并行效率的同时还取得了更好的结果,也被评为2017年NLP 领域的年度最佳论文。那么,下面就来详细剖析一下Transformer模型。 在进入正题之前,先介绍一些背景知识,方便我们更好的理解这个模型。 Self-Attention 机制 Self-Attention是Transformer中很关键的一个概念。所谓Self-Attention,上一篇文章也提到了,query=key=value的只使用内部信息的Attention。普通的Attention机制都是求输出Target句子中某个单词和输入Source句子每个单词之间的相似度,而Self Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制。 self-attention实例 如上图所示,Self-Attention可以捕获同一个句子中单词之间的一些句法特征或者语义特征,该例子中Self-Attention捕获了同一个句子中单词之间的语义特征,\"it\"的指代对象是\"the animal\"。 显然,Self-Attention更容易捕获句子中长距离的相互依赖的特征,因为如果是RNN或LSTM需要根据时间序列计算Target,对于远距离的相互依赖的特征,要经过若干时间步的信息累积才能将两者联系起来,而距离越远,有效信息也就越难提取。但是,Self-Attention在计算过程中直接将句子中任意两个单词之间的联系通过一个计算结果直接表示,远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。 经典架构:LSTM+Attention+Seq2Seq 上一篇文章也提到过,在Attention引入以前,seq2seq模型处理机器翻译task最大的问题就是由于对于长距离的信息不能有效的提取和记忆,导致了信息的大量丢失。即使在引入Atte",
  "siteName": "zhuanlan.zhihu.com",
  "image": "",
  "favicon": "https://www.google.com/s2/favicons?domain=zhuanlan.zhihu.com&sz=64",
  "canonicalUrl": "",
  "fetchStatus": "success"
}
```

### [2] 【经典精读】万字长文解读Transformer模型和Attention机制 - 知乎

```alab-bookmark
{
  "url": "https://zhuanlan.zhihu.com/p/104393915",
  "title": "【经典精读】万字长文解读Transformer模型和Attention机制 - 知乎",
  "description": "文字长度: 阅读难度: 原创程度: Transformer 是2017年的一篇论文《Attention is All You Need》提出的一种模型架构,这篇论文里只针对机器翻译这一种场景做了实验,全面击败了当时的机器翻译各个benchmark上的SOTA。其优点除了效果好之外,由于encoder端是并行计算的,训练的时间也被大大缩短了。 它开创性的思想,颠覆了以往序列建模和RNN划等号的思路,现在被广泛应用于NLP的各个领域。目前在NLP各业务全面开花的语言模型如GPT, BERT等,都是基于Transformer模型的。因此弄清楚Transformer模型内部的每一个细节就显得尤为重要。 本文将按照下面的思路展开 0. Transformer 是什么 Attention的背景溯源(为什么要有attention?) Attention的细节(attention是什么?) Query, Key, Value Multi-head Attention的本质 Transformer模型架构中的其他部分 Feed Forward Network Positional Embedding Layer Normalization Transformer的参数量和显存消耗估计 其他引发思考的问题(To be done...) 参考 0. Transformer是什么 Transformer模型的架构 Transformer的 核心思想 是:使用attention机制, 在一个序列的不同位置之间建立distance = 1的 平行 关系,从而解决RNN的长路径依赖问题(distance = N)。 理解“平行”的含义:在Transformer结构中,序列的不同pos(位置)之间距离都是1,具体请看3.3 Transformer的 核心优势 在于:由于同一个序列的不同位置之间的平行关系,带来了两个重要优势 ---(1)它在训练时相对序列长度的复杂度是O(1) (实际上还是有一些额外的开销,比如attention里的某些运算复杂度和长度呈线性关系),和先辈RNN的O(N)复杂度比起来是一个重大突破;(2)做到了真正的双向context融合,在此之前我们只有BiLSTM,但是其本质只是两个单向建模的叠加,而不是Transformer这种彻底的context融合 1. Attentio",
  "siteName": "zhuanlan.zhihu.com",
  "image": "",
  "favicon": "https://www.google.com/s2/favicons?domain=zhuanlan.zhihu.com&sz=64",
  "canonicalUrl": "",
  "fetchStatus": "success"
}
```

### [3] GitHub - prateeksethvns/llm-course: Course to get into Large Language Models (LLMs) with roadmaps and Colab notebooks. · GitHub

```alab-bookmark
{
  "url": "https://github.com/prateeksethvns/llm-course",
  "title": "GitHub - prateeksethvns/llm-course: Course to get into Large Language Models (LLMs) with roadmaps and Colab notebooks. · GitHub",
  "description": "🗣️ Large Language Model Course The LLM course is divided into three parts: 🧩 LLM Fundamentals covers essential knowledge about mathematics, Python, and neural networks. 🧑‍🔬 The LLM Scientist focus the best possible LLMs using the latest techniques 👷 The LLM Engineer focuses on how to create LLM-based solutions and deploy them. 📝 Notebooks A list of notebooks and articles related to large language models. Fine-tuning Notebook Description Article Notebook Fine-tune Llama 2 in Google Colab Step-by-step guide to fine-tune your first Llama 2 model. Article Fine-tune LLMs with Axolotl End-to-end guide to the state-of-the-art tool for fine-tuning. Article W.I.P. Fine-tune a Mistral-7b model with DPO Boost the performance of supervised fine-tuned models with DPO. Article Quantization Notebook Description Article Notebook 1. Introduction tiases, activation functions (sigmoid, tanh, ReLU, etc.) Training and Optimization : Familiarize yourself with backpropagation and different types of los",
  "siteName": "github.com",
  "image": "https://opengraph.githubassets.com/53c631bcd042dc6e05e60b77894f3a578885689c1659b66b251c1a77ae992ea5/prateeksethvns/llm-course",
  "favicon": "https://www.google.com/s2/favicons?domain=github.com&sz=64",
  "canonicalUrl": "",
  "fetchStatus": "success"
}
```

### [4] GitHub - kyrolabs/llm-course: Course to get into Large Language Models (LLMs) with roadmaps and Colab notebooks. · GitHub

```alab-bookmark
{
  "url": "https://github.com/kyrolabs/llm-course",
  "title": "GitHub - kyrolabs/llm-course: Course to get into Large Language Models (LLMs) with roadmaps and Colab notebooks. · GitHub",
  "description": "🗣️ Large Language Model Course The LLM course is divided into three parts: 🧩 LLM Fundamentals covers essential knowledge about mathematics, Python, and neural networks. 🧑‍🔬 The LLM Scientist focusding the best possible LLMs using the latest techniques. 👷 The LLM Engineer focuses on creating LLM-based applications and deploying them. 📝 Notebooks A list of notebooks and articles related to larmerge models using mergekit in one click. ⚡ AutoGGUF Quantize LLMs in GGUF format in one click. Fine-tuning Notebook Description Article Notebook Fine-tune Llama 2 in Google Colab Step-by-step guide to fine-tune your first Llama 2 model. Article Fine-tune LLMs with Axolotl End-to-end guide to the state-of-the-art tool for fine-tuning. Article W.I.P. Fine-tune a Mistral-7b model with DPO Boost the performance of supervised fine-tuned models with DPO. Article Quantization Notebook Description Article Notebook 1. Introduction tiases, activation functions (sigmoid, tanh, ReLU, etc.) Training and O",
  "siteName": "github.com",
  "image": "https://opengraph.githubassets.com/60a2ec3dab3a1c66aab9e60fb14494b4570cd0493c2d5f232a4cbbfe0e55fb67/kyrolabs/llm-course",
  "favicon": "https://www.google.com/s2/favicons?domain=github.com&sz=64",
  "canonicalUrl": "",
  "fetchStatus": "success"
}
```

### [5] 【每日一技】:Transformer

```alab-bookmark
{
  "url": "https://so.html5.qq.com/page/real/search_news?docid=70000021_978695d016612952",
  "title": "【每日一技】:Transformer",
  "description": "</p><p>Transformer 的思路就跟人一样:</p><p><strong>每个词都可以主动去“看”句子里最相关的其他词</strong>,这种机制叫<strong>注意力机制(Attention)</strong>｡</p><p>它不再像旧时代的模型一样逐字阅读,而是像一个聪明的读者——哪儿重要,就把注意力放到哪儿｡”</p><p>Transformer 会自动把“下雨”与“没带伞”关联起来,而不是只看字面｡</p><p>Transformer 会对每个词做三件事:</p><p>1.<strong>问问题(Query)</strong>:我现在想知道什么?</p><p>2.<strong>查别人(Key)</strong>:其他词有什么特征?</p><p>3.<strong>取内容(Value)</strong>:哪些词对我有帮助?</p><p>然后让所有词互相“注意彼此”,从中挑出最相关的内容｡</p><p>这",
  "siteName": "so.html5.qq.com",
  "image": "",
  "favicon": "https://www.google.com/s2/favicons?domain=so.html5.qq.com&sz=64",
  "canonicalUrl": "",
  "fetchStatus": "success"
}
```

还有 7 个来源保留在资料包中，用于交叉核验。
