跳到主要内容

这一章补上第 15 章欠的债:编码器把整条输入压成几个向量,长的输入必堵。 解法是让输出一方回头直接看输入——但「看」必须可微,所以把「看哪个」 从硬选择换成软分布:每个位置打一个分、按分加权取回。就这么两步。

注意力机制:打分再加权

1. 这一章讲什么

三件事: 注意力机制的两步(打分、加权)与它的四种打分写法; 四个变体(硬性/键值对/多头/指针——只指向输入位置); 以及把查询指向自己的自注意力——Transformer 的心脏。

它在全书链条里的位置: 第 15 章留下了两笔债:编码器-解码器的信息瓶颈、 循环网络跨长距离传不稳。这一章一次性还清:不再逐步传递、不再压缩成定长向量, 让任意位置直接看任意位置。下一章把它组装成 Transformer。

需要第 15 章。

2. 顶层全景

输入序列 x1 x2 … xT(每个是一组信息)
│ │ │
▼ ▼ ▼
┌─ 打分:s(x_t, q) ← 查询 q:当前任务关心的东西
│ │
│ softmax → 注意力分布 α1…αT(和为 1)
│ │
└─ 加权:att = Σ αt·xT(取回一份混合内容)

变体:硬性(只挑一个) | 键值对(K 算分、V 取货) | 多头(几组查询并行) | 指针(只取分布)
自注意力:查询也来自同一序列 → 任意两个位置一步可达

一句话链条: 任务相关的一方拿查询 → 和每个位置打分 → softmax 变成分布 → 按分布加权取回内容。分数是「看哪里」的预算,聚合是「取回什么」的执行; 下一章的全部结构,都是围着这两步搭建的脚手架。

3. 先有认知原型:聚焦式与显著性

注意力这个词的原型在人脑:面对大量感觉输入, 根据目标、环境和刺激的显著性,有选择地分配处理资源的能力1。 书分了两种:聚焦式注意力自上而下、由当前任务驱动,主动且有意图; 显著性注意力自下而上、由外界刺激驱动,与任务无关—— 喧闹的鸡尾酒会上你能专注听朋友说话(聚焦式), 但有人喊你名字会立刻回头(显著性)2

人工智能借走的是第一种:根据当前任务动态选择信息的思想, 实现为一种可微、可学习的信息选择与聚合机制3。 (书也点了两个近亲:最大汇聚和门控可以近似看作自下而上的那一种4; 本库第 16 章的门控单元,在这里认了个远亲。)

动机可以直接沿用第 15 章的阅读理解场景:一篇长文章配一个问题, 问题往往只和其中一小部分句子相关;后续计算若能优先利用这些相关片段, 而不是无差别处理全部内容,任务就更容易完成5

4. 两步机制:打分,再加权

形式化之后,整套机制只有两步。输入是 T 组向量 X=[x₁,…,x_T], 一方携带任务信息,叫查询向量 q——它可以动态生成,也可以是可学习参数6

第一步,打分并归一。 用打分函数 s(xₜ, q) 量每个位置和查询的相关性, 过 softmax 得到注意力分布 αₜ = p(z=t|X,q),全体加和为 17。 打分函数书列了四种8:

写法公式一句话点评
加性模型vᵀtanh(Wx+Uq)最早的形式,多一层非线性
点积模型xᵀq最简单,实现可吃矩阵乘法,效率高
缩放点积xᵀq/√D现代默认;除以 √D 有讲究,见下
双线性模型xᵀWq泛化的点积:W=UᵀV 时即 (Ux)ᵀ(Vq),对两边各自先做线性变换,引入了非对称性

缩放那一下不是装饰。 维度 D 较高时,两个 D 维向量点积的数值方差会变大 (均值为 0 方差 1 的独立分量,点积方差为 D), 大分数会让 softmax 进入梯度极小的饱和区——梯度传不回去。 除以 √D 把方差归一回 1,防的就是这件事9

第二步,按分布加权取回。 att(X,q) = Σ αₜxₜ—— 输出是所有输入在注意力分布下的期望,所以叫软性注意力10

5. 四个变体

硬性注意力。 只看分数最高的那一个位置(argmax),或在分布上采样一个位置。 问题很根本:最大选择和采样都不可导,没法直接反向传播, 训练要绕道强化学习;所以实践中几乎都用软性的11。 软硬之分反复出现——「分布上的期望」取代「单点的选择」, 是让选择变得可训练的标准代价。

键值对注意力。 把每组输入拆成两半:键 k 用来算分,值 v 用来取货—— 「键」决定 αₜ,「值」进加权平均;当 K=V 时退回普通模式12。 这一步分离看着小,实则是后面一切的门:内容用它来「被检索(按查询取回)」, 还可以同时用它来「被取用」,两者不必是同一份表示。

多头注意力(几组各看各的、再拼起来)。用 M 个查询并行跑注意力,各自取回一份,再拼接13不同的头可以分别关注不同的特征组合关系——同一层内并行提取多种组合模式14

指针网络。 反过来只走第一步:不要加权和,把注意力分布本身当作 指向输入位置的软指针,输出下标序列——输入一组乱序数字 20, 5, 10, 输出排序后的下标 1, 3, 215。凡任务要的答案是「输入里的第几个」, (组合优化、指向性问答)这一类就是它的形状。

6. 自注意力:查询也来自自己

前面的框架里,查询来自任务、来自解码器。把查询也换成序列自己—— 每个位置发出自己的查询,看序列里的所有位置(包括自己)—— 就是自注意力(也称内部注意力)[Vaswani et al., 2017]16

它解决的是一个比「翻译时看原文」更基本的问题:序列编码器内部的位置之间怎么交流。 卷积和循环本质都是局部的信息交互:卷积看邻域,循环一步步递推; 循环网络理论上能建立长程依赖,但受信息路径长和梯度消失所限, 实际更擅长局部或中等距离17。加深可以传递信息,全连接可以两两直连—— 但全连接处理不了变长输入,不同长度需要不同规模的连接结构18自注意力的答案是:连接结构像全连接,权重却由内容动态生成19

具体的 QKV 模式:每个位置 xᵢ 先线性投影出三个角色—— 查询 qᵢ、键 kᵢ、值 vᵢ(整个序列就是 Q=W_qX、K=W_kX、V=W_vX 三次矩阵乘); 然后每个查询对所有键做缩放点积打分、softmax、按权重聚合值:

H = V · softmax(KᵀQ / √Dk) (书按列向量约定;行约定 softmax(QKᵀ/√Dk)V 等价)

20

和全连接层的区别在图 8.5 里一目了然:全连接的连接权重是学出来固定的, 自注意力的连接权重是由输入内容当场算出来的——所以同一组参数天然处理变长序列21

三种序列编码器摆在一张表里比(表 8.1,序列长 T、表示维度 D、卷积核宽 k)22:

模型每步计算顺序操作(能否并行)任意两位置最大路径
循环网络O(T):必须一步步走O(T)
卷积网络O(1):可并行O(T/k):要穿过 T/k 层
自注意力O(1):可并行O(1):一步直达

自注意力的优势就是这两列 O(1):并行性强、路径最短,长距离依赖好建模; 代价同样明确:要显式构造 T×T 的两两相关性矩阵,序列一长,计算和存储都平方级上涨23 ——这笔账在第 22 章会被反复讨价还价。

7. 多头自注意力

单头只在一个投影空间里算相关性。多头自注意力(MHSA) 给每个头配自己的 投影矩阵(Qₘ=W_qᵐH 等),各自算一遍注意力,拼接后再过一次线性变换 W_o 压回原维度24。 直观含义仍是那一句:不同的头分别关注不同的特征组合关系14 ——语法(遣词造句的规则)关系、指代关系、位置邻近……不必挤在同一个打分空间里。

8. 主走查:一个查询,三个键,从头算到尾

设定: 三个词的片段:「猫」「追」「它」;为了让手算可行, 每个向量取 1 维(D_k=1,缩放因子 √1=1)。 查询取「它」的查询向量 q=1;三个键、三个值(标量键,二维值)全部写死:

键: k(猫)=0 k(追)=0.916 k(它)=0.405 ← 键值为演示所定
值: v(猫)=[2,1] v(追)=[0,1] v(它)=[1,0]

第一步:打分(点积 s=k·q):s = (0, 0.916, 0.405)。 「猫」的键与查询正交,打 0 分;「追」0.916 分;「它」自己 0.405 分。

第二步:softmax 归一:

exp(0) = 1.000 exp(0.916) = 2.500 exp(0.405) = 1.500 合计 5.000
α = (0.200, 0.500, 0.300)

第三步:加权聚合:

h(它) = 0.200×[2,1] + 0.500×[0,1] + 0.300×[1,0] = [0.7, 0.7]

读一遍这个结果:「它」的新表示里,猫的语义(值 [2,1])贡献了 20%, 追的中介作用贡献一半,自己的旧表示只剩 30%——指代消解在这里不是被规则写出来的, 是这三个分数算出来的。(键值全部为演示所定;真实模型里它们由训练出的投影矩阵生成。)

第四步:再加一个头。 第二个头用另一组投影,输出同样 2 维; 两头的输出拼接成 4 维 [0.7,0.7 | h′],再乘输出矩阵 W_o∈ℝ^{2×4} 压回 2 维—— 多头不改变层数和维度预算,改变的是「同时找几路关系」。

9. 作者的判断与证据

书里给了机理的: 缩放因子 √D 的方差论证(除回去防止 softmax 饱和)9; 键值分离的表示意义(K=V 时等价退回)12;多头=不同子空间找不同关系14; 自注意力对比全连接的「动态权重」本质21

书里给了带数字的对比: 表 8.1 的三行——顺序操作数与最大路径长度, 循环 O(T) 对自注意力 O(1)22; 以及代价那句「显式构造 T×T 相关性矩阵」23

书里给了取舍判断的: 硬性注意力不可导、需强化学习,实际用软性11; AI 借认知的是思想、不是生物实现细节3; 指针网络适用「答案=输入下标」的任务型态15

10. 边界与局限

打分函数的四种写法书只给形式不给实验比较:哪个任务该用双线性、 加性是否已被缩放点积全面取代,正文未下结论(点积的效率优势有一句)8

T×T 分数表是这一章立起来的天花板:书点到即止, 怎么讨价还价(稀疏化、线性化、系统优化)是第 22 章的主题23

位置信息这一章完全没出现:自注意力的打分只看内容—— 「那只猫没过马路」和「猫没过那条马路」在它眼里权重结构相同。 顺序从哪来,是下一章第一个要解决的问题。

11. 可带走的

  1. 注意力 = 打分(s)+ 加权(α·x),两头都是可微的,所以能端到端训练;
  2. 查询问「我在找什么」,键答「我有什么」,值是「取走的内容」——键值分开是一切的分水岭;
  3. 维度高时点积方差大,softmax 会饱和:除以 √D 缩放是现代默认的原因;
  4. 硬性选择不可导,「分布上的期望」是可训练的代价——软性胜出;
  5. 多头 = 几组查询并行找几路关系,拼接后投影回原维度;
  6. 指针网络只取分布:答案若是「输入的第几个」,直接把分布当指针;
  7. 自注意力 = 查询来自自己:连接像全连接、权重由内容动态生成,天然处理变长;
  8. 对比循环:顺序操作 O(T)→O(1),两两路径 O(T)→O(1);代价是 T×T 分数表;
  9. 1×1 卷积管通道,自注意力管位置——动态权重的两种用法;
  10. 这章欠下的下一章的问题:自注意力不知道谁先谁后

12. 原文地图

主题原书章原文位置
认知原型与两种注意力第8章 注意力机制与Transformertext/09-ch08-8-transformer.txt:42(搜「称为注意力(Attention」) · text/09-ch08-8-transformer.txt:46(搜「聚焦式注意力(Focused Attention」) · text/09-ch08-8-transformer.txt:52(搜「鸡尾酒会效应」)
AI 借走的思想第8章 注意力机制与Transformertext/09-ch08-8-transformer.txt:63(搜「动态信息选择与聚合」) · text/09-ch08-8-transformer.txt:73(搜「优先利用这些相关片段」)
查询与注意力分布第8章 注意力机制与Transformertext/09-ch08-8-transformer.txt:79(搜「查询向量(Query Vector」) · text/09-ch08-8-transformer.txt:95(搜「注意力分布(Attention Distribution」)
四种打分函数第8章 注意力机制与Transformertext/09-ch08-8-transformer.txt:98(搜「加性模型」) · text/09-ch08-8-transformer.txt:103(搜「缩放点积模型」) · text/09-ch08-8-transformer.txt:115(搜「双线性模型是一种泛化的点积模」)
√D 缩放的理由第8章 注意力机制与Transformertext/09-ch08-8-transformer.txt:114(搜「防止 Softmax 进入梯度饱和区」)
软性注意力第8章 注意力机制与Transformertext/09-ch08-8-transformer.txt:132(搜「软性注意力机制(Soft Attention Mechanism」)
硬性注意力第8章 注意力机制与Transformertext/09-ch08-8-transformer.txt:166(搜「Hard Attention」) · text/09-ch08-8-transformer.txt:178(搜「难以直接使用反向传播算法进行训练」)
键值对第8章 注意力机制与Transformertext/09-ch08-8-transformer.txt:182(搜「键值对(key-value pair」)
多头与指针第8章 注意力机制与Transformertext/09-ch08-8-transformer.txt:200(搜「Multi-Head Attention」) · text/09-ch08-8-transformer.txt:212(搜「Pointer Network」) · text/09-ch08-8-transformer.txt:217(搜「输出序列是输入序列的下标」)
自注意力动机第8章 注意力机制与Transformertext/09-ch08-8-transformer.txt:267(搜「局部的信息交互方式」) · text/09-ch08-8-transformer.txt:276(搜「这就是自注意力(Self-Attention」) · text/09-ch08-8-transformer.txt:278(搜「Query-Key-Value,QKV」)
动态权重 vs 全连接第8章 注意力机制与Transformertext/09-ch08-8-transformer.txt:341(搜「动态生成的权重」)
三模型对比与代价第8章 注意力机制与Transformertext/09-ch08-8-transformer.txt:369(搜「自注意力的优势在于并行性强」) · text/09-ch08-8-transformer.txt:370(搜「显式构造」)
多头自注意力第8章 注意力机制与Transformertext/09-ch08-8-transformer.txt:377(搜「Multi-Head Self-Attention」) · text/09-ch08-8-transformer.txt:398(搜「多头机制的直观含义」)

Footnotes

  1. 出处:「第8章 注意力机制与Transformer」第 36 至 42 段(text/09-ch08-8-transformer.txt:42,搜「称为注意力(Attention」)。

  2. 出处:「第8章 注意力机制与Transformer」第 46 至 55 段(text/09-ch08-8-transformer.txt:46,搜「聚焦式注意力(Focused Attention」; text/09-ch08-8-transformer.txt:52,搜「鸡尾酒会效应」)。

  3. 出处:「第8章 注意力机制与Transformer」第 66 至 68 段(text/09-ch08-8-transformer.txt:63,搜「动态信息选择与聚合」)。 2

  4. 出处:「第8章 注意力机制与Transformer」第 67 段(text/09-ch08-8-transformer.txt:67,搜「最大汇聚(Max Pooling」)。

  5. 出处:「第8章 注意力机制与Transformer」第 73 段(text/09-ch08-8-transformer.txt:73,搜「优先利用这些相关片段」)。

  6. 出处:「第8章 注意力机制与Transformer」第 79 段(text/09-ch08-8-transformer.txt:79,搜「查询向量(Query Vector」), 边注注明查询向量可动态生成也可学习。

  7. 出处:「第8章 注意力机制与Transformer」第 88 至 95 段(text/09-ch08-8-transformer.txt:95,搜「注意力分布(Attention Distribution」),式(8.1)。

  8. 出处:「第8章 注意力机制与Transformer」第 98 至 103 段(text/09-ch08-8-transformer.txt:98,搜「加性模型」; text/09-ch08-8-transformer.txt:103,搜「缩放点积模型」),式(8.2)-(8.5); 点积效率与双线性非对称见第 109 至 120 段。 2

  9. 出处:「第8章 注意力机制与Transformer」第 110 至 115 段(text/09-ch08-8-transformer.txt:114,搜「防止 Softmax 进入梯度饱和区」)。 原文给出独立分量下点积方差为 D、除以 √D 归一化为 1 的论证。 2

  10. 出处:「第8章 注意力机制与Transformer」第 132 段(text/09-ch08-8-transformer.txt:132,搜「软性注意力机制(Soft Attention Mechanism」),式(8.7)。

  11. 出处:「第8章 注意力机制与Transformer」第 166 至 180 段(text/09-ch08-8-transformer.txt:178,搜「难以直接使用反向传播算法进行训练」)。 2

  12. 出处:「第8章 注意力机制与Transformer」第 182 至 198 段(text/09-ch08-8-transformer.txt:182,搜「键值对(key-value pair」),式(8.9)-(8.10)。 2

  13. 出处:「第8章 注意力机制与Transformer」第 200 至 206 段(text/09-ch08-8-transformer.txt:200,搜「Multi-Head Attention」),式(8.11)。

  14. 出处:「第8章 注意力机制与Transformer」第 398 段(text/09-ch08-8-transformer.txt:398,搜「多头机制的直观含义」)。 2 3

  15. 出处:「第8章 注意力机制与Transformer」第 212 至 218 段(text/09-ch08-8-transformer.txt:212,搜「Pointer Network」; text/09-ch08-8-transformer.txt:217,搜「输出序列是输入序列的下标」)[Vinyals et al., 2015]。 2

  16. 出处:「第8章 注意力机制与Transformer」第 272 至 278 段(text/09-ch08-8-transformer.txt:276,搜「这就是自注意力(Self-Attention」; text/09-ch08-8-transformer.txt:278,搜「Query-Key-Value,QKV」)[Vaswani et al., 2017]; 「内部注意力」别名见该节边注。

  17. 出处:「第8章 注意力机制与Transformer」第 267 至 272 段(text/09-ch08-8-transformer.txt:267,搜「局部的信息交互方式」); 「实际中往往更擅长建模局部或中等距离依赖」同段。

  18. 出处:「第8章 注意力机制与Transformer」第 273 段(text/09-ch08-8-transformer.txt:273,搜「全连接网络难以处理变长输入」)。

  19. 出处:「第8章 注意力机制与Transformer」第 275 至 276 段(text/09-ch08-8-transformer.txt:276,搜「这就是自注意力(Self-Attention」; 「动态生成不同位置之间的连接权」在同段)。

  20. 出处:「第8章 注意力机制与Transformer」第 319 段(text/09-ch08-8-transformer.txt:319,搜「利用公式(8.9)的键值对注意力机制」), 式(8.16)-(8.21);列/行两种记法等价的说明在第 336 段 (text/09-ch08-8-transformer.txt:336,搜「本书采用列向量表示」)。

  21. 出处:「第8章 注意力机制与Transformer」第 341 段(text/09-ch08-8-transformer.txt:341,搜「动态生成的权重」),图 8.5。 2

  22. 出处:「第8章 注意力机制与Transformer」第 362 至 368 段,表 8.1(text/09-ch08-8-transformer.txt:362,搜「顺序操作数」); 顺序操作数与最大路径两列是本节引用的数字。 2

  23. 出处:「第8章 注意力机制与Transformer」第 369 至 371 段(text/09-ch08-8-transformer.txt:370,搜「显式构造」)。 2 3

  24. 出处:「第8章 注意力机制与Transformer」第 375 至 396 段,式(8.22)-(8.24); 拼接与输出投影见式(8.24)。