第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. 找到所有可能的候选词(animalstreet
  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 这个词时:

  • Querysat 在问:"谁坐了?坐在哪里?"
  • Key :每个词都在说:"我是 The"、"我是 cat"、"我是 on"...
  • Attention Scoresatcat 的相关度高,和 The 的相关度低
  • Value :根据相关度,把 catonmat 的信息加权融合到 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?
  • 完整手算一个例子
相关推荐
deepdata_cn1 小时前
从弱AI到强AI:符号推理是实现通用人工智能AGI的关键钥匙
人工智能·agi·符号推理
AI英德西牛仔1 小时前
秘塔 导出word指令之外:AI导出鸭电脑版的底层逻辑与批量交付哲学
人工智能·word·excel·deepseek·ai导出鸭
老白说数智化升级1 小时前
AI与人工如何并行,Operation Agent Brain如何让制造运营持续优化?
人工智能·制造
小小测试开发1 小时前
AI 安全测试:腾讯开源 A.I.G 平台拆解——2000+ CVE 规则与 LLM 审计的双引擎协作
人工智能·开源
guwentian1 小时前
从0到1手写 AI Agent Harness:为什么护城河不在模型,而在工程外壳
人工智能·python·安全·deepseek·harness
独隅1 小时前
从 Copilot 到 Agent:AI 驱动下的开发工作流重构实战
人工智能·重构·copilot
Summer-Bright1 小时前
独立 AI 浏览器之死与「内嵌化」之生:Atlas 关停、Comet 免费化、豆包虚拟桌面,入口之争的终局
人工智能·ai·ai 浏览器
淳悦qiqi1 小时前
2026依托技术优势高准确率语音识别软件多场景让信息整理更省事更清晰
人工智能·语音识别
云浪1 小时前
给大模型装上"手":三分钟看懂 AI Agent 的 Tool 工具调用
javascript·人工智能·node.js