第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?
  • 完整手算一个例子
相关推荐
知识分享小能手11 小时前
深度学习学习教程,从入门到精通,自编码器 — 完整知识点与代码案例(14)
人工智能·深度学习·学习
来让爷抱一个11 小时前
2026 纹理一致性实战:贴图不许花脸,百智云精灵图把材质契约写进素材包
人工智能·机器学习·材质·贴图
零依赖极客11 小时前
Day 8·1 自注意力机制:Q·K^T/softmax/V的在线计算
c语言·arm开发·人工智能·llama
幻影123!12 小时前
AlphaZero 五子棋实战(五):评估工具 —— 学会在错误的地方掉头
人工智能·机器学习·强化学习·alpha zero
jbk331112 小时前
PixiuCut「视频批量分割」支持智能镜头分割、按时长、按数量分割,可定义最小时长避免无效片段等多可选参数可设置
人工智能·音视频·剪辑软件·剪映自动化软件
诺伦12 小时前
RiseClaw玄策:GEO优化工程实战,从零搭建生成式引擎优化体系
人工智能·chatgpt
星禾元亨12 小时前
企业 AI 落地 5 步路线图:诊断、企业知识库与 GEO 获客的工程化实施步骤
大数据·人工智能·自动化·创业创新
苏打水com12 小时前
内容合规红线:大模型生成内容,哪些能做哪些会犯法?
人工智能·安全·大模型
南京兴帝文化传媒有限公司12 小时前
本地生活服务商户GEO优化技术实践:AI大模型收录机制与地图POI权重算法拆解
大数据·人工智能·算法·生活·geo优化实操·csdn运营技巧·ai内容收录