第5章 Attention 的思想

第5章 Attention 的思想

本章目标:

不用公式,理解 Attention 为什么会出现,以及 Query、Key、Value 这三个名字的直觉含义。


5.1 从一个问题开始

假设你在读一篇文章:

text 复制代码
The animal didn't cross the street because it was too tired.

请问:it 指的是什么?

你一眼就知道:it 指的是 animal,而不是 street。

但是你是怎么知道的?

你的大脑做了什么?


5.2 人类是如何理解"it"的?

你读到 it 的时候,你的大脑会:

  1. 扫描整个句子
  2. 找到所有可能的候选词(animal、street)
  3. 根据语义判断:tired 更可能描述 animal,而不是 street
  4. 得出结论:it = animal

这个过程就是:

根据当前词,去整个句子中寻找相关的词,并根据相关程度加权。

这就是 Attention 的核心思想。


5.3 RNN 是怎么做的?

RNN 的做法是:
#mermaid-svg-E447frclesOGTxiU{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-E447frclesOGTxiU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-E447frclesOGTxiU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-E447frclesOGTxiU .error-icon{fill:#552222;}#mermaid-svg-E447frclesOGTxiU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-E447frclesOGTxiU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-E447frclesOGTxiU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-E447frclesOGTxiU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-E447frclesOGTxiU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-E447frclesOGTxiU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-E447frclesOGTxiU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-E447frclesOGTxiU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-E447frclesOGTxiU .marker.cross{stroke:#333333;}#mermaid-svg-E447frclesOGTxiU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-E447frclesOGTxiU p{margin:0;}#mermaid-svg-E447frclesOGTxiU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-E447frclesOGTxiU .cluster-label text{fill:#333;}#mermaid-svg-E447frclesOGTxiU .cluster-label span{color:#333;}#mermaid-svg-E447frclesOGTxiU .cluster-label span p{background-color:transparent;}#mermaid-svg-E447frclesOGTxiU .label text,#mermaid-svg-E447frclesOGTxiU span{fill:#333;color:#333;}#mermaid-svg-E447frclesOGTxiU .node rect,#mermaid-svg-E447frclesOGTxiU .node circle,#mermaid-svg-E447frclesOGTxiU .node ellipse,#mermaid-svg-E447frclesOGTxiU .node polygon,#mermaid-svg-E447frclesOGTxiU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-E447frclesOGTxiU .rough-node .label text,#mermaid-svg-E447frclesOGTxiU .node .label text,#mermaid-svg-E447frclesOGTxiU .image-shape .label,#mermaid-svg-E447frclesOGTxiU .icon-shape .label{text-anchor:middle;}#mermaid-svg-E447frclesOGTxiU .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-E447frclesOGTxiU .rough-node .label,#mermaid-svg-E447frclesOGTxiU .node .label,#mermaid-svg-E447frclesOGTxiU .image-shape .label,#mermaid-svg-E447frclesOGTxiU .icon-shape .label{text-align:center;}#mermaid-svg-E447frclesOGTxiU .node.clickable{cursor:pointer;}#mermaid-svg-E447frclesOGTxiU .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-E447frclesOGTxiU .arrowheadPath{fill:#333333;}#mermaid-svg-E447frclesOGTxiU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-E447frclesOGTxiU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-E447frclesOGTxiU .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E447frclesOGTxiU .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-E447frclesOGTxiU .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E447frclesOGTxiU .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-E447frclesOGTxiU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-E447frclesOGTxiU .cluster text{fill:#333;}#mermaid-svg-E447frclesOGTxiU .cluster span{color:#333;}#mermaid-svg-E447frclesOGTxiU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-E447frclesOGTxiU .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-E447frclesOGTxiU rect.text{fill:none;stroke-width:0;}#mermaid-svg-E447frclesOGTxiU .icon-shape,#mermaid-svg-E447frclesOGTxiU .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E447frclesOGTxiU .icon-shape p,#mermaid-svg-E447frclesOGTxiU .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-E447frclesOGTxiU .icon-shape .label rect,#mermaid-svg-E447frclesOGTxiU .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E447frclesOGTxiU .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-E447frclesOGTxiU .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-E447frclesOGTxiU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} The
animal
didn't
cross
the
street
because
it

信息从左到右,一步一步传递。

当 RNN 处理到 it 的时候,animal 的信息已经经过了 7 步传递。

每一步都会有信息损失。

所以 RNN 很难记住 animal。


5.4 Attention 是怎么做的?

Attention 的做法是:
#mermaid-svg-d7gozhDVoRWOsqaO{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-d7gozhDVoRWOsqaO .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-d7gozhDVoRWOsqaO .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-d7gozhDVoRWOsqaO .error-icon{fill:#552222;}#mermaid-svg-d7gozhDVoRWOsqaO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-d7gozhDVoRWOsqaO .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-d7gozhDVoRWOsqaO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-d7gozhDVoRWOsqaO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-d7gozhDVoRWOsqaO .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-d7gozhDVoRWOsqaO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-d7gozhDVoRWOsqaO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-d7gozhDVoRWOsqaO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-d7gozhDVoRWOsqaO .marker.cross{stroke:#333333;}#mermaid-svg-d7gozhDVoRWOsqaO svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-d7gozhDVoRWOsqaO p{margin:0;}#mermaid-svg-d7gozhDVoRWOsqaO .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-d7gozhDVoRWOsqaO .cluster-label text{fill:#333;}#mermaid-svg-d7gozhDVoRWOsqaO .cluster-label span{color:#333;}#mermaid-svg-d7gozhDVoRWOsqaO .cluster-label span p{background-color:transparent;}#mermaid-svg-d7gozhDVoRWOsqaO .label text,#mermaid-svg-d7gozhDVoRWOsqaO span{fill:#333;color:#333;}#mermaid-svg-d7gozhDVoRWOsqaO .node rect,#mermaid-svg-d7gozhDVoRWOsqaO .node circle,#mermaid-svg-d7gozhDVoRWOsqaO .node ellipse,#mermaid-svg-d7gozhDVoRWOsqaO .node polygon,#mermaid-svg-d7gozhDVoRWOsqaO .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-d7gozhDVoRWOsqaO .rough-node .label text,#mermaid-svg-d7gozhDVoRWOsqaO .node .label text,#mermaid-svg-d7gozhDVoRWOsqaO .image-shape .label,#mermaid-svg-d7gozhDVoRWOsqaO .icon-shape .label{text-anchor:middle;}#mermaid-svg-d7gozhDVoRWOsqaO .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-d7gozhDVoRWOsqaO .rough-node .label,#mermaid-svg-d7gozhDVoRWOsqaO .node .label,#mermaid-svg-d7gozhDVoRWOsqaO .image-shape .label,#mermaid-svg-d7gozhDVoRWOsqaO .icon-shape .label{text-align:center;}#mermaid-svg-d7gozhDVoRWOsqaO .node.clickable{cursor:pointer;}#mermaid-svg-d7gozhDVoRWOsqaO .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-d7gozhDVoRWOsqaO .arrowheadPath{fill:#333333;}#mermaid-svg-d7gozhDVoRWOsqaO .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-d7gozhDVoRWOsqaO .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-d7gozhDVoRWOsqaO .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-d7gozhDVoRWOsqaO .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-d7gozhDVoRWOsqaO .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-d7gozhDVoRWOsqaO .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-d7gozhDVoRWOsqaO .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-d7gozhDVoRWOsqaO .cluster text{fill:#333;}#mermaid-svg-d7gozhDVoRWOsqaO .cluster span{color:#333;}#mermaid-svg-d7gozhDVoRWOsqaO div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-d7gozhDVoRWOsqaO .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-d7gozhDVoRWOsqaO rect.text{fill:none;stroke-width:0;}#mermaid-svg-d7gozhDVoRWOsqaO .icon-shape,#mermaid-svg-d7gozhDVoRWOsqaO .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-d7gozhDVoRWOsqaO .icon-shape p,#mermaid-svg-d7gozhDVoRWOsqaO .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-d7gozhDVoRWOsqaO .icon-shape .label rect,#mermaid-svg-d7gozhDVoRWOsqaO .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-d7gozhDVoRWOsqaO .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-d7gozhDVoRWOsqaO .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-d7gozhDVoRWOsqaO :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 直接查询
直接查询
直接查询
直接查询
直接查询
直接查询
直接查询
直接查询
直接查询
直接查询
it
The
animal ★高相关
didn't
cross
the
street ★低相关
because
was
too
tired

it 直接和所有词交互,计算相关程度,然后加权求和。

不需要经过中间步骤。


5.5 Query、Key、Value 的直觉

这三个名字来自信息检索(Information Retrieval)的概念。

想象一个搜索引擎:
#mermaid-svg-EPahlujJMMdD8KDE{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-EPahlujJMMdD8KDE .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-EPahlujJMMdD8KDE .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-EPahlujJMMdD8KDE .error-icon{fill:#552222;}#mermaid-svg-EPahlujJMMdD8KDE .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EPahlujJMMdD8KDE .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-EPahlujJMMdD8KDE .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EPahlujJMMdD8KDE .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EPahlujJMMdD8KDE .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-EPahlujJMMdD8KDE .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EPahlujJMMdD8KDE .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EPahlujJMMdD8KDE .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EPahlujJMMdD8KDE .marker.cross{stroke:#333333;}#mermaid-svg-EPahlujJMMdD8KDE svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EPahlujJMMdD8KDE p{margin:0;}#mermaid-svg-EPahlujJMMdD8KDE .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-EPahlujJMMdD8KDE .cluster-label text{fill:#333;}#mermaid-svg-EPahlujJMMdD8KDE .cluster-label span{color:#333;}#mermaid-svg-EPahlujJMMdD8KDE .cluster-label span p{background-color:transparent;}#mermaid-svg-EPahlujJMMdD8KDE .label text,#mermaid-svg-EPahlujJMMdD8KDE span{fill:#333;color:#333;}#mermaid-svg-EPahlujJMMdD8KDE .node rect,#mermaid-svg-EPahlujJMMdD8KDE .node circle,#mermaid-svg-EPahlujJMMdD8KDE .node ellipse,#mermaid-svg-EPahlujJMMdD8KDE .node polygon,#mermaid-svg-EPahlujJMMdD8KDE .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EPahlujJMMdD8KDE .rough-node .label text,#mermaid-svg-EPahlujJMMdD8KDE .node .label text,#mermaid-svg-EPahlujJMMdD8KDE .image-shape .label,#mermaid-svg-EPahlujJMMdD8KDE .icon-shape .label{text-anchor:middle;}#mermaid-svg-EPahlujJMMdD8KDE .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-EPahlujJMMdD8KDE .rough-node .label,#mermaid-svg-EPahlujJMMdD8KDE .node .label,#mermaid-svg-EPahlujJMMdD8KDE .image-shape .label,#mermaid-svg-EPahlujJMMdD8KDE .icon-shape .label{text-align:center;}#mermaid-svg-EPahlujJMMdD8KDE .node.clickable{cursor:pointer;}#mermaid-svg-EPahlujJMMdD8KDE .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-EPahlujJMMdD8KDE .arrowheadPath{fill:#333333;}#mermaid-svg-EPahlujJMMdD8KDE .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EPahlujJMMdD8KDE .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EPahlujJMMdD8KDE .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EPahlujJMMdD8KDE .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-EPahlujJMMdD8KDE .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EPahlujJMMdD8KDE .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-EPahlujJMMdD8KDE .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EPahlujJMMdD8KDE .cluster text{fill:#333;}#mermaid-svg-EPahlujJMMdD8KDE .cluster span{color:#333;}#mermaid-svg-EPahlujJMMdD8KDE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EPahlujJMMdD8KDE .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-EPahlujJMMdD8KDE rect.text{fill:none;stroke-width:0;}#mermaid-svg-EPahlujJMMdD8KDE .icon-shape,#mermaid-svg-EPahlujJMMdD8KDE .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EPahlujJMMdD8KDE .icon-shape p,#mermaid-svg-EPahlujJMMdD8KDE .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-EPahlujJMMdD8KDE .icon-shape .label rect,#mermaid-svg-EPahlujJMMdD8KDE .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EPahlujJMMdD8KDE .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-EPahlujJMMdD8KDE .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-EPahlujJMMdD8KDE :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Query

搜索词

'深度学习'
搜索引擎
Key

文档标题

'机器学习入门'

'深度学习实战'

'Python教程'
相关度计算
Value

文档内容

加权返回

概念 搜索引擎 Attention
Query 搜索词 当前 Token 想找什么
Key 文档标题 每个 Token 能提供什么
Value 文档内容 每个 Token 的实际信息
相关度 匹配分数 Attention Score

5.6 一个更直观的例子

句子:The cat sat on the mat.

当处理 sat 这个词时:

  • Query :sat 在问:"谁坐了?坐在哪里?"
  • Key :每个词都在说:"我是 The"、"我是 cat"、"我是 on"...
  • Attention Score :sat 和 cat 的相关度高,和 The 的相关度低
  • Value :根据相关度,把 cat、on、mat 的信息加权融合到 sat 的表示中

最终,sat 的新表示包含了:

"cat 坐在 mat 上" 这个完整的语义信息。

5.6.1 Embedding 是原材料,Attention 是雕刻师

这里有一个很重要的直觉:

Embedding 查表得到的初始向量,对于多义词(如 bank)每次都一样------它不知道当前语境是"银行"还是"河岸"。

真正区分多义词的是 Self-Attention。

text 复制代码
Embedding(原材料):bank → 同一块"石材"

Attention(雕刻师):
  - 上下文有 money, loan  → 雕刻成"金融银行"
  - 上下文有 river, boat  → 雕刻成"河岸"

所以 Embedding 像一块通用的原材料 ,它代表"bank 这个词所有可能的含义"。Attention 根据周围的 Token 把它加工 成当前语境下的精确语义。这就是为什么 Transformer 的输出叫做 Contextual Embedding(上下文词向量)------同一个词在不同句子中会得到完全不同的向量。

📌 第11章会用可视化展示 bank 在不同语境中如何逐层从"模糊"变成"明确"。


5.7 为什么需要三个矩阵?

一个自然的问题:为什么不直接用词向量计算相关度?

为什么要有 Q、K、V 三个矩阵?

原因是:

Q、K、V 让模型学习"如何查询"和"如何被查询",而不是直接用原始向量。

类比:

  • 你去图书馆找书(Query)
  • 书的索引卡(Key)和书的实际内容(Value)是分开的
  • 索引卡是为了快速匹配,内容才是真正有用的信息

如果 Key 和 Value 是同一个东西,模型就失去了这种灵活性。

5.7.1 为什么 Key 和 Value 不能合并?

这是 Transformer 设计中最精妙的一步,很多教材一笔带过。

如果让同一个向量既负责"让别人容易找到我"(Key 的职责),又负责"提供真正的语义信息"(Value 的职责),这两个目标会互相冲突。

类比:一本书的标题 和正文承担的职责完全不同:

角色 职责 优化方向
标题(Key) 让读者快速判断"这本书和我的需求相关吗" 简洁、易匹配
正文(Value) 提供真正完整的知识内容 丰富、有语义

如果强行让一个向量同时做标题和正文,就像让一本书的标题写满详细内容------别人反而找不到它了。

拆开后的好处:

  • Key 可以自由地学习:"怎样让需要我的人更容易找到我"
  • Value 可以自由地学习:"当别人找到我后,我应该贡献什么信息"
  • 两者解耦,模型学习更高效

💡 这也是为什么 Transformer 用三个独立的可训练矩阵 WQW_QWQ、WKW_KWK、WVW_VWV------每个矩阵负责从同一个 Embedding 中"提取"出不同角色的表示。同一个词,站在"提问者"、"被匹配者"、"信息提供者"三个角度,应该有三种不同的表达方式。


5.8 Attention 的本质

Attention 的本质是:

软性的、可微分的、单向拉取式的信息检索。

  • 软性:不是硬性选择某一个词,而是对所有词加权求和
  • 可微分:权重是通过 Softmax 计算的,可以反向传播
  • 信息检索:根据 Query 从所有 Token 中检索相关信息

这三个特性使得 Attention 可以端到端训练。

5.8.1 Attention 是 Pull(拉取),不是 Exchange(交换)

这是一个容易产生误解的地方。我们常说"Token 之间交互",但更精确的描述是:
每个 Token 作为 Query,主动从所有 Token 中拉取信息。
#mermaid-svg-dwQp2yUqEAtCTYxe{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-dwQp2yUqEAtCTYxe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-dwQp2yUqEAtCTYxe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-dwQp2yUqEAtCTYxe .error-icon{fill:#552222;}#mermaid-svg-dwQp2yUqEAtCTYxe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-dwQp2yUqEAtCTYxe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-dwQp2yUqEAtCTYxe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-dwQp2yUqEAtCTYxe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-dwQp2yUqEAtCTYxe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-dwQp2yUqEAtCTYxe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-dwQp2yUqEAtCTYxe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-dwQp2yUqEAtCTYxe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-dwQp2yUqEAtCTYxe .marker.cross{stroke:#333333;}#mermaid-svg-dwQp2yUqEAtCTYxe svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-dwQp2yUqEAtCTYxe p{margin:0;}#mermaid-svg-dwQp2yUqEAtCTYxe .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-dwQp2yUqEAtCTYxe .cluster-label text{fill:#333;}#mermaid-svg-dwQp2yUqEAtCTYxe .cluster-label span{color:#333;}#mermaid-svg-dwQp2yUqEAtCTYxe .cluster-label span p{background-color:transparent;}#mermaid-svg-dwQp2yUqEAtCTYxe .label text,#mermaid-svg-dwQp2yUqEAtCTYxe span{fill:#333;color:#333;}#mermaid-svg-dwQp2yUqEAtCTYxe .node rect,#mermaid-svg-dwQp2yUqEAtCTYxe .node circle,#mermaid-svg-dwQp2yUqEAtCTYxe .node ellipse,#mermaid-svg-dwQp2yUqEAtCTYxe .node polygon,#mermaid-svg-dwQp2yUqEAtCTYxe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-dwQp2yUqEAtCTYxe .rough-node .label text,#mermaid-svg-dwQp2yUqEAtCTYxe .node .label text,#mermaid-svg-dwQp2yUqEAtCTYxe .image-shape .label,#mermaid-svg-dwQp2yUqEAtCTYxe .icon-shape .label{text-anchor:middle;}#mermaid-svg-dwQp2yUqEAtCTYxe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-dwQp2yUqEAtCTYxe .rough-node .label,#mermaid-svg-dwQp2yUqEAtCTYxe .node .label,#mermaid-svg-dwQp2yUqEAtCTYxe .image-shape .label,#mermaid-svg-dwQp2yUqEAtCTYxe .icon-shape .label{text-align:center;}#mermaid-svg-dwQp2yUqEAtCTYxe .node.clickable{cursor:pointer;}#mermaid-svg-dwQp2yUqEAtCTYxe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-dwQp2yUqEAtCTYxe .arrowheadPath{fill:#333333;}#mermaid-svg-dwQp2yUqEAtCTYxe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-dwQp2yUqEAtCTYxe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-dwQp2yUqEAtCTYxe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dwQp2yUqEAtCTYxe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-dwQp2yUqEAtCTYxe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dwQp2yUqEAtCTYxe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-dwQp2yUqEAtCTYxe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-dwQp2yUqEAtCTYxe .cluster text{fill:#333;}#mermaid-svg-dwQp2yUqEAtCTYxe .cluster span{color:#333;}#mermaid-svg-dwQp2yUqEAtCTYxe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-dwQp2yUqEAtCTYxe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-dwQp2yUqEAtCTYxe rect.text{fill:none;stroke-width:0;}#mermaid-svg-dwQp2yUqEAtCTYxe .icon-shape,#mermaid-svg-dwQp2yUqEAtCTYxe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dwQp2yUqEAtCTYxe .icon-shape p,#mermaid-svg-dwQp2yUqEAtCTYxe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-dwQp2yUqEAtCTYxe .icon-shape .label rect,#mermaid-svg-dwQp2yUqEAtCTYxe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dwQp2yUqEAtCTYxe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-dwQp2yUqEAtCTYxe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-dwQp2yUqEAtCTYxe :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} sat 作为 Query 时
计算相关度
计算相关度
计算相关度
sat 的 Q
cat 的 K ★高
the 的 K
mat 的 K ★中
按权重拉取 V
sat 的新表示

当 sat 拉取 cat 的信息时,cat 不会因此获得 sat 的任何信息。cat 需要等到自己作为 Query 时,才会去拉取 sat 的信息。

最终效果:一层 Attention 之后,每个 Token 都独立地从全局拉取了信息,所以看起来"所有 Token 都更新了"。但本质上,这是 N 次独立的 Pull 操作并行执行,而非 N×N 次双向交换。


5.9 与 CNN 的对比

CNN 也有一种"注意力"机制,但它是局部的:
#mermaid-svg-8iv1uaeol06ujU36{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-8iv1uaeol06ujU36 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-8iv1uaeol06ujU36 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-8iv1uaeol06ujU36 .error-icon{fill:#552222;}#mermaid-svg-8iv1uaeol06ujU36 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8iv1uaeol06ujU36 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-8iv1uaeol06ujU36 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8iv1uaeol06ujU36 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8iv1uaeol06ujU36 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-8iv1uaeol06ujU36 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8iv1uaeol06ujU36 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8iv1uaeol06ujU36 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8iv1uaeol06ujU36 .marker.cross{stroke:#333333;}#mermaid-svg-8iv1uaeol06ujU36 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8iv1uaeol06ujU36 p{margin:0;}#mermaid-svg-8iv1uaeol06ujU36 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8iv1uaeol06ujU36 .cluster-label text{fill:#333;}#mermaid-svg-8iv1uaeol06ujU36 .cluster-label span{color:#333;}#mermaid-svg-8iv1uaeol06ujU36 .cluster-label span p{background-color:transparent;}#mermaid-svg-8iv1uaeol06ujU36 .label text,#mermaid-svg-8iv1uaeol06ujU36 span{fill:#333;color:#333;}#mermaid-svg-8iv1uaeol06ujU36 .node rect,#mermaid-svg-8iv1uaeol06ujU36 .node circle,#mermaid-svg-8iv1uaeol06ujU36 .node ellipse,#mermaid-svg-8iv1uaeol06ujU36 .node polygon,#mermaid-svg-8iv1uaeol06ujU36 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8iv1uaeol06ujU36 .rough-node .label text,#mermaid-svg-8iv1uaeol06ujU36 .node .label text,#mermaid-svg-8iv1uaeol06ujU36 .image-shape .label,#mermaid-svg-8iv1uaeol06ujU36 .icon-shape .label{text-anchor:middle;}#mermaid-svg-8iv1uaeol06ujU36 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-8iv1uaeol06ujU36 .rough-node .label,#mermaid-svg-8iv1uaeol06ujU36 .node .label,#mermaid-svg-8iv1uaeol06ujU36 .image-shape .label,#mermaid-svg-8iv1uaeol06ujU36 .icon-shape .label{text-align:center;}#mermaid-svg-8iv1uaeol06ujU36 .node.clickable{cursor:pointer;}#mermaid-svg-8iv1uaeol06ujU36 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-8iv1uaeol06ujU36 .arrowheadPath{fill:#333333;}#mermaid-svg-8iv1uaeol06ujU36 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8iv1uaeol06ujU36 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8iv1uaeol06ujU36 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8iv1uaeol06ujU36 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-8iv1uaeol06ujU36 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8iv1uaeol06ujU36 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-8iv1uaeol06ujU36 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8iv1uaeol06ujU36 .cluster text{fill:#333;}#mermaid-svg-8iv1uaeol06ujU36 .cluster span{color:#333;}#mermaid-svg-8iv1uaeol06ujU36 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8iv1uaeol06ujU36 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-8iv1uaeol06ujU36 rect.text{fill:none;stroke-width:0;}#mermaid-svg-8iv1uaeol06ujU36 .icon-shape,#mermaid-svg-8iv1uaeol06ujU36 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8iv1uaeol06ujU36 .icon-shape p,#mermaid-svg-8iv1uaeol06ujU36 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-8iv1uaeol06ujU36 .icon-shape .label rect,#mermaid-svg-8iv1uaeol06ujU36 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8iv1uaeol06ujU36 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-8iv1uaeol06ujU36 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-8iv1uaeol06ujU36 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Attention 全局感受野
Token 1
Attention
Token 2
Token 3
Token N
输出
CNN 局部感受野
Token 1
卷积核
Token 2
Token 3
输出

特性 CNN Attention
感受野 局部(卷积核大小) 全局(所有 Token)
计算复杂度 O(N) O(N²)
长距离依赖 需要多层叠加 一层即可
位置感知 隐式 需要 Position Encoding

本章总结

Attention 的三句话总结:

  1. 为什么需要 Attention:RNN 无法直接建立长距离依赖
  2. Attention 做什么:让每个 Token 直接和所有 Token 交互,计算相关度
  3. Q、K、V 是什么:Query 是问题,Key 是索引,Value 是内容

本章思考题

  1. 如果没有 Attention,如何让 RNN 处理长距离依赖?(提示:思考 LSTM 的局限)
  2. 为什么 Attention 的计算复杂度是 O(N²)?
  3. Query 和 Key 为什么可以不同?举一个例子说明它们不同的好处。
  4. Attention 是"软性"的,这意味着什么?有什么好处?

下一章预告

下一章我们正式推导 Self-Attention。

包括:

  • Q、K、V 矩阵是如何计算的?
  • Attention Score 是如何计算的?
  • 为什么要除以 √d_k?
  • 完整手算一个例子
相关推荐
老金带你玩AI2 小时前
这几天,我都是拿手机让dot帮我干活
人工智能
7yewh5 小时前
SLAM 三维空间刚体运动(2)
数据结构·人工智能·机器人·嵌入式·slam
小虎AI生活6 小时前
WorkBuddy 模型选型实操:0.03 倍的 Space-Bunny 怎么用、派什么活、避什么坑
人工智能·超级个体·一人公司·青玥ai
ai小陈6 小时前
GPU服务器租用存储验收:检查点写入与磁盘吞吐实战
运维·服务器·人工智能·ai·ssh·gpu算力
微三云马玮均—GEO源码系统 私有化部署6 小时前
消费返物业费:消费+服务趋势的必然产物!
大数据·人工智能·物联网·区块链·生活
明月_清风6 小时前
Muse 登顶 App Store 第一,SDK 直接开源:AI Agent 开始进入下一个阶段
人工智能·后端
JackSparrow4146 小时前
和AI一起将全部CSDN博文迁移到个人博客站
人工智能·程序人生·ai·github·cloudflare·astro·静态博客
55873 生态系统7 小时前
第 22 篇|社区聊天|55873 文明共建者的日常交流与协作界面
人工智能·区块链·55873全域文明生态体系·55873操作系统·55873社区聊天
搬砖的小码农_Sky7 小时前
AI Agent:如何处理Claude Code 最近版本(2026年更新)引入的模型上下文限制
人工智能·windows·ai·ai编程