跳到正文
AI 知识地图 0.18 · 2026-07-30
关于与纠错文字目录 / Search
理解原理

注意力机制

处理每个词时,让模型自己决定该「看」句子里的哪些词

Attention · Self-Attention · 自注意力

建议 30–40 分钟 · 中级 · 需要:向量点积、softmax、了解「神经网络」

核心命题 标准全局注意力让每个查询与可见键计算匹配分数,再按归一化权重汇总值;本质是一次由内容、位置与掩码共同决定权重的加权和。它缩短远距离信息路径并允许训练时并行处理位置,但权重不是解释保证,也不自动等于正确因果关系。
读完这一页,你应该能自己回答:
  • 要解决什么——理解一个词时,模型面临的核心难题是什么。
  • 核心机制——Query / Key / Value 三步,怎样让模型「自己决定该看谁」。
  • 为什么是转折点——它比旧的序列模型强在哪两点。
  • 多头——为什么要并行跑好几组注意力。
  • 代价——它的平方级开销从何而来,又约束了什么。
  1. 理解一个词要看句中相关的词,而相关的词可能很远、且随内容变——旧的 RNN 应付不了。(§1)
  2. 注意力用 Q/K/V 三步:Query·Key 算匹配、softmax 成权重、按权重加权求和 Value。(§2)
  3. softmax 把缩放分数变成权重,Value 加权和产生新的表示;权重不是因果解释。(§3)
  4. Q/K/V 都来自同一句话时,就是自注意力:句子内部互相看。(§4)
  5. 它让任意两位置在一层内直接交互、又能并行训练,改善经典 RNN 的长路径与串行瓶颈。(§5)
  6. 多头提供多个投影子空间;专门化可能出现,也可能冗余。(§6)
  7. 标准全局注意力的分数矩阵有平方级开销;长上下文还会出现位置偏差,但“中间迷失”不能只归因于平方复杂度。(§7)

1要解决的核心难题直觉

理解序列中的一个词,关键不只在这个词本身,还在于它与上下文中哪些词有关。例如,在一句包含“小红”和“她”的话里,要正确理解“她”,就需要把它与前面的“小红”联系起来。这个关联词可能相隔多个位置,而且需要关注谁会随句子内容变化,因此不能用“只看前几个词”之类的固定规则解决。

注意力机制让模型根据当前内容,为每个位置动态决定应当关注序列中的哪些位置。输入是序列中所有词的一组表示。处理某个词时,模型先用它的表示逐一比较其他词的表示,得到内容相关度,再把这些相关度转成权重,并按权重汇总各位置携带的信息。相关度越高的位置,对汇总结果的贡献越大;最终输出的是每个词结合全序列信息之后的新表示。

因此,一个词获得较高权重,表达的是它与当前词在当前上下文中更相关,而不是它在位置上更近。因果链可以概括为:词的表示 → 与其他位置进行内容比较 → 得到不同的关注权重 → 按权重聚合信息 → 形成带有上下文的新表示。这个过程同时处理“远距离信息可能很重要”和“关注对象必须随内容改变”两个问题。

在注意力机制成为主流之前,循环网络通常按顺序逐词处理,并把记忆沿时间步向后传递。信息经过的链条越长,早先内容越难保留;不同时间步彼此依赖,也难以并行。门控循环网络可以缓解信息保留问题,但不能消除长传递路径和顺序计算这两个结构约束。

注意力提供的是一种学习内容关联并汇总信息的机制,而不是正确性的保证。权重由内容比较产生,并不意味着模型一定会把最高权重放在真正正确的位置;模型能否学到合适的关注关系,仍取决于训练结果和输入条件。

2核心机制:Query / Key / Value数学

要让模型决定当前词应该关注哪些位置,每个词都先从自己的输入表示生成三个用途不同的向量:Query、Key 和 Value。Query 表示“我正在寻找什么”,Key 表示“我可以凭什么被匹配”,Value 则是匹配成功后真正参与汇总的内容。以代词“她”为例,它的 Query 可以去寻找可能的指代对象;句中每个词都提供自己的 Key 供它比较,同时准备相应的 Value 作为可被取走的信息。

注意力计算由匹配、归一化和汇总三步组成。第一步,当前词的 Query 与所有可见词的 Key 分别做点积,得到一排匹配分数。点积越大,表示这组 Query–Key 在当前注意力计算中越匹配。第二步,把分数经过 softmax,转换成一组总和为 1 的非负权重;分数较大的位置会得到更大的权重。第三步,用这些权重对所有位置的 Value 求加权和,得到当前词结合全局信息之后的新表示。

把所有可见 token 的向量分别排成矩阵 Q、K、V,整个过程写成:

Attention(Q, K, V) = softmax(Q·Kᵀ / d) · V

Q·Kᵀ 会同时计算每个查询与每个键之间的点积。Kᵀ 中的 T 表示转置,使矩阵维度能够对应到“每个 Query 对所有 Key”的两两比较。d 是 Query 和 Key 的向量维数;除以 d,是为了避免向量维数增大时点积的数值随之变得过大。softmax 按每个 Query 对应的那一排分数进行归一化,得到关注权重;再与 V 相乘,就完成对所有 Value 的加权求和。输入是 Q、K、V,输出则是每个 Query 汇总其可见 Value 后的新表示。

处理“她”时,它的 Query 会与“小红”以及句中其他词的 Key 都进行比较。如果 softmax 后“小红”得到最高权重,“她”的新表示就会更多地吸收“小红”的 Value。图中的连线粗细对应权重大小:连向“小红”的线更粗,表示它在这次汇总中贡献更多信息。

最终分数并非只由词间距离决定。Query–Key 的内容匹配是核心来源;如果模型还使用掩码、位置偏置、RoPE 或局部窗口,那么这些机制会在 softmax 之前影响分数或可见范围,从而让位置和距离也参与结果。掩码可以令某些位置不可见,局部窗口会限制可比较的范围,位置机制则会改变不同相对位置的匹配条件。

某个词获得高权重,只说明它在当前注意力头、当前输入和当前可见性条件下更匹配,并不等于解释概率,也不能单独证明它是模型最终结论的唯一原因。注意力权重描述的是这一步如何分配 Value 的汇总比例,其解释范围应限定在这次计算内部。

小明 小红 生日 Query 权重最高 → 看向「小红」
图 1 处理「她」时,它的 Query 和每个词的 Key 匹配,softmax 后「小红」拿到最高权重,于是「她」主要汇总了「小红」的信息。粗细即权重大小。
向量角色一句话
Query(查询)我在找什么「她」发出:我在找我指代的那个人
Key(键)我能提供什么每个词亮出一张「标签」,供别人匹配
Value(值)我的实际内容一旦被选中,真正被汇总走的信息
Attention(Q, K, V) = softmax( Q·Kᵀ / d ) · V

3手算一次缩放点积注意力数值例子

设一个查询 q = [1, 0],两个键 k₁ = [1, 0]、k₂ = [0, 1],键的维度 d = 2;与两个键对应的值分别是 v₁ = [2, 0]、v₂ = [0, 4]。这组输入可以完整展示缩放点积注意力怎样从“匹配程度”得到“信息混合结果”。

先计算查询与每个键的点积:

[q·k₁, q·k₂] = [1×1 + 0×0, 1×0 + 0×1] = [1, 0]

第一个分数更高,表示 q 与 k₁ 更匹配。随后用 d = 2 缩放这两个分数:

[1, 0] / 2 ≈ [0.707, 0]

缩放不改变两个键的高低顺序,只控制分数的数值尺度。再对缩放后的分数应用 softmax。softmax 会先对每个分数取指数,再除以所有指数之和:

softmax([0.707, 0]) = [exp(0.707), exp(0)] / [exp(0.707) + exp(0)] ≈ [0.670, 0.330]

这样,原始匹配分数被转换成两个相加为 1 的权重。k₁ 更匹配,所以与它对应的 v₁ 获得 0.670 的较大权重;v₂ 获得 0.330 的较小权重。最后用这组权重对 Value 做加权求和:

0.670v₁ + 0.330v₂ = 0.670[2, 0] + 0.330[0, 4] = [1.340, 0] + [0, 1.320] = [1.340, 1.320]

最终输出不是直接复制最匹配的 v₁,而是按照匹配权重混合两个 Value。由此可以区分 Key 和 Value 的作用:Query 与 Key 的比较决定每个位置“取多少”,Value 决定从该位置实际“取什么”。从输入到输出的完整链条是:查询和键做点积 → 按维度缩放 → softmax 归一化 → 用所得权重混合 Value → 输出新的向量表示。

这里的 0.670 和 0.330 只是在当前层、当前注意力头中进行这一次信息混合的系数。较高权重表示对应的键与查询更匹配,但它不是解释概率,也不能证明对应 token 是模型结论的唯一原因;残差连接、其他注意力头和后续层仍会继续改变表示。

步骤计算结果(约)
点积[q·k₁,q·k₂][1,0]
缩放[1,0]/2[0.707,0]
softmaxexp(s)/Σexp(s)[0.670,0.330]
加权和0.670v₁+0.330v₂[1.340,1.320]

4自注意力:句子内部互相看直觉

自注意力中的 Query、Key 和 Value 都由同一个序列的词表示产生,因此序列中的每个词既可以发出查询,也可以提供供其他词匹配的键和被汇总的值。它解决的是句子内部各个词如何互相参照,从而形成对角色和关系的上下文理解。

输入是一句话中所有词的表示。对其中每个词,模型生成它的 Query,并与同一句中所有词的 Key 比较相关度;得到权重后,再对这些词的 Value 做加权汇总。由于每个位置都会执行这套过程,输出仍然对应句中的每个词,但每个输出都不再只是该词孤立的表示,而是它结合句内可见信息后的新表示。

例如,在“小红”和“她”出现在同一句话时,“她”的 Query 会与句内包括“小红”在内的各个 Key 匹配。如果“小红”获得较大权重,“她”的输出表示就会更多地吸收“小红”的 Value,从而建立两者在当前句子中的关联。某个词主要看向另一个词,表示它们在这次句内注意力计算中更相关;这描述的是信息汇总关系,不是脱离上下文的固定词义关系。

“自”限定了信息来源:Query、Key、Value 来自同一个序列。若 Query 来自一个序列,而 Key 和 Value 来自另一个序列,这种变体称为交叉注意力。它的匹配、归一化和加权汇总机制不变,变化的是查询者与被查询信息的来源。例如在翻译中,译文序列中每个词的 Query 可以去匹配原文序列的 Key,并从原文对应的 Value 中汇总信息。

因此,自注意力适合建模一个序列内部的相互参照,交叉注意力适合让一个序列有选择地读取另一个序列。二者的边界由 Q、K、V 来自哪里决定,而不是由点积、softmax 或加权求和的计算形式决定。

5为什么它是转折点直觉数学

经典 RNN 按时间步串行处理序列:第 t+1 步必须等待第 t 步的状态产生,较早位置的信息要沿着一条逐步传递的链才能到达较晚位置。注意力改变了这两种结构约束。它接收整段序列中所有 token 的表示,让每个位置直接与所有可见位置匹配,并同时输出各位置融合上下文后的新表示。

对于相隔 n 个位置的信息,经典 RNN 中的交互路径通常会随间隔增长,需要经过约 n 个时间步的传递。全局自注意力则允许任意两个可见位置在同一层内直接交互:一个位置的 Query 可以直接匹配另一个位置的 Key,并按权重汇总其 Value。图中 RNN 的信息沿位置逐步传递,而注意力在可见位置之间建立直接连接,正体现了这一路径差异。

更短的交互路径有利于学习长距离依赖,因为远处信息不必先后经过一连串中间状态才能参与当前表示。但“路径更短”并不等于信息不会变化,也不保证模型一定学到正确关联。信息仍会经过向量投影、分数缩放、softmax、Value 汇总以及后续层;注意力权重也可能没有落在真正有用的位置。因此,它改善的是远距离交互的结构条件,而不是自动保证理解正确。

另一个转折来自并行性。RNN 的时间步存在前后依赖,无法在同一层同时完成所有位置的计算;注意力中各位置的匹配与汇总可以并行计算,不必等待前一个位置完成。这使硬件能够同时处理序列中的大量位置,更充分地利用 GPU。

这种并行能力直接影响模型和数据规模能否在工程上持续扩大。若训练仍被逐时间步的串行依赖限制,模型越大、数据越多,训练耗时越容易变得不现实。注意力把序列内部的主要交互改造成可并行的整段计算,为沿着扩大模型与数据规模的路线训练今天的大模型提供了关键条件。

注意力成为转折点,不只是因为它能表示词与词之间的关系,而是因为同一种机制同时缓解了两个瓶颈:用一层内的直接交互缩短长距离信息路径,并让所有位置的计算能够并行。前者改善学习远距依赖的条件,后者使大规模训练在工程上可行。

RNN:信息沿链条逐步传,隔得越远越衰减、还必须串行 第 1 个词要影响第 5 个词,得走 4 步 注意力:任意两词直接相连,路径长度都是 1,且同时算
图 2 经典 RNN 中相隔 n 个时间步的信息要经过长度随 n 增长的传递链;全局注意力让任意两个可见位置在一层内直接交互。路径更短有利于学习远距依赖,但仍要经过投影、softmax 与后续层,并非“没有衰减”。

6多头注意力:为什么要好几组直觉

单组注意力用一套 Query、Key、Value 投影来衡量 token 之间的相关性,但同一对词可能同时存在语法、指代、位置等不同关系。多头注意力在同一层并行运行多组注意力,为这些不同的匹配方式提供多个表示子空间和多条信息路由,而不必把所有关系都压进同一组分数。

输入是同一批词表示。每个注意力头使用自己的投影,把输入变成该头的 Q、K、V,并在自己的子空间中计算匹配分数、softmax 权重和 Value 的加权和。由于不同头的投影不同,即使面对相同输入,它们也可以形成不同的关注分布,并从不同位置提取不同内容。随后,各个头的输出被拼接起来,再经过一次投影,得到融合多个视角的新表示。

这条计算链可以概括为:同一批输入表示 → 各头分别投影到不同子空间 → 各头独立计算注意力并汇总信息 → 拼接所有头的结果 → 投影成该层的综合输出。多头机制解决的不是“把同一个结果重复算几遍”,而是让模型同时拥有多种学习相关性和传递信息的机会。

训练后,有些头可能呈现较明显的语法、指代或位置模式。例如,一个头可能经常把代词与其指代对象联系起来,另一个头可能更关注相邻位置。但架构并没有预先指定“哪个头专管哪种关系”;如果出现这种分工,它是训练过程中学出来的,而不是人为写入的规则。

多头也不保证每个头都形成稳定、独立且容易解释的职责。许多头可能相互冗余,同一个头也未必只表达一种关系。因而,观察到某种关注模式可以作为分析线索,却不能仅凭架构名称断定每个头的功能。多头注意力提供的是多个子空间和并行路由的能力,实际是否形成清晰分工,需要通过实证分析判断。

7它的代价:平方级开销数学工程

全局注意力允许每个 token 与所有 token 直接交互,代价也正来自这种两两比较。设序列长度为 n,每个位置都要对 n 个位置计算匹配分数,因此注意力分数矩阵包含 n×n = n² 个元素。模型以全部位置的表示为输入,依次完成两两打分、归一化和 Value 加权,最后为每个位置输出新的表示;其中分数计算和朴素实现下的分数存储都会随 n² 增长。

平方增长意味着序列长度翻倍时,这部分成本约变为原来的四倍。1 千个 token 需要计算约 1,000×1,000 = 100 万个位置对;10 万个 token 则需要约 100,000×100,000 = 100 亿个位置对。这解释了长上下文推理为什么会迅速变慢、变贵:上下文每增加一档,注意力付出的不是线性增加的代价。

n² 描述的是注意力两两交互的核心成本,并不等于模型的全部成本。实际计算还包含 Q、K、V 投影、输出投影和前馈层;具体显存与运行时间也会受实现方式影响。FlashAttention 可以显著减少显存搬运并改变实际显存常数,但不把全局两两注意力的计算复杂度从平方级降下来。

平方级开销直接限制了上下文窗口不能任意扩展。窗口越长,可比较的位置对越多,计算和朴素显存需求越难承受。长窗口还可能暴露“中间迷失”等位置偏差,即模型对开头和结尾的信息利用得更好,而对中间信息利用不足。这种现象与训练分布、位置表示和注意模式等多种因素有关,不能简单归结为“注意力权重被摊薄”。

围绕这一瓶颈,不同优化采用不同取舍。稀疏注意力只计算部分位置对,滑窗注意力把每个位置的可见范围限制在邻近区域,从减少交互数量入手;FlashAttention 则优化全局注意力的执行过程,减少数据搬运。前两者可能改变可见关系和有效复杂度,后者主要改善工程效率。它们都能缓解长上下文成本,但不能笼统地理解为既保留任意全局交互、又完全消除了平方代价。

验证优化是否真正有效,需要同时检查效率和任务能力。应固定模型权重、数值精度、batch 和硬件,分别在 1K、4K、16K 等输入长度下记录任务正确率、峰值显存、吞吐量和 p95 延迟。还应把关键证据放到序列的不同位置,检查加速是否通过截断、局部窗口或可见范围变化而损伤了远距离信息利用。

如果速度提高但长距离任务的正确率下降,应先检查可见范围和 mask,确认关键证据是否仍能被查询位置访问,再比较底层内核实现。注意力热图只能展示某次权重分配,不能代替对准确率、显存、吞吐和延迟的联合验证。

8把整条因果链连起来综合

序列理解的起点是:一个词的含义往往取决于句中其他词,而真正相关的词可能相隔很远,关注对象也会随内容改变。经典 RNN 依靠状态沿时间步逐次传递,远距离信息需要经过较长路径,计算还受到前后时间步依赖的限制。注意力把问题改写为“当前词应当从所有可见位置各取多少信息”。

每个位置先产生 Query、Key 和 Value。当前 Query 与所有 Key 做点积,得到基于内容匹配的分数;分数经过按维度缩放和 softmax 后,变成总和为 1 的权重;这些权重再用于对所有 Value 加权求和,生成当前位置的新表示。于是,内容匹配决定“取多少”,Value 决定“取什么”,从原始表示到上下文表示的因果链完整闭合。

softmax 的作用不是选出唯一位置,而是把一排缩放分数转成可用于混合信息的权重。最高权重的位置贡献通常最大,但输出仍可以是多个 Value 的混合。权重只描述当前头、当前层中的信息汇总比例,不是某个 token 导致最终结论的因果证明。

当 Q、K、V 都来自同一句话时,这套机制就是自注意力。句中每个位置都能与同句的所有可见位置匹配,使词与词之间的关系在一层内直接建立。位置机制和掩码仍可能影响最终分数或可见范围,因此“由内容决定”指权重的核心匹配来自 Query–Key,而不是采用“距离越近权重固定越大”的规则。

这种直接交互同时改变了信息路径和计算方式。相隔很远的两个可见位置不必沿 RNN 的时间步逐次传递,可以在一层注意力中直接交互;同一层各位置的计算也不必等待前一个时间步完成,因而能够并行。短路径改善了学习远距离依赖的结构条件,并行性则使扩大模型和训练数据在工程上更可行。这两点共同解释了注意力为何能够取代经典 RNN 成为大规模序列建模的核心机制。

多头注意力进一步在同一层提供多组投影子空间。不同头可以学习不同的匹配方式和信息路由,再把各头结果拼接、投影为综合表示。某些头可能形成语法、指代或位置上的专门化模式,但这种分工来自训练,并非架构预设;多个头之间也可能存在冗余。

直接查看所有位置也带来明确代价。长度为 n 的标准全局注意力需要形成包含 n² 个元素的分数矩阵,因此计算量与朴素显存占用随长度平方增长。它限制了上下文窗口的扩展,而长上下文还可能出现“中间迷失”等位置偏差;后者同时受到训练分布、位置表示和注意模式等因素影响,不能只归因于平方复杂度。

整条机制最终形成一组相互制约的结果:基于内容的动态匹配让模型选择相关信息,短路径帮助远距离位置交互,并行计算支持规模扩展;多头带来多个表示视角,而全局两两匹配则产生平方级成本。Transformer 正是把这套机制进一步包装成可以重复堆叠的标准层。

11概念依赖与延伸学习路线

理解注意力机制需要先掌握向量与点积、softmax 和神经网络。向量与点积是 Query 和 Key 计算匹配分数的基础,softmax 负责把一排分数归一化为权重,神经网络则提供表示学习和参数投影的整体背景。循环神经网络 RNN 也是重要先修,因为注意力在路径长度和并行方式上的变化,需要通过与 RNN 的逐步传递进行对照才能看清。

注意力机制本身的核心概念依次包括 Query、Key、Value,自注意力与交叉注意力,信息路径长度与并行计算,多头注意力,以及全局两两匹配造成的平方级开销。这些概念连接成同一条逻辑:Q/K/V 定义如何匹配和汇总信息;Q、K、V 的来源决定是序列内部的自注意力还是跨序列的交叉注意力;直接交互改变了路径长度并支持并行;多头提供多个投影子空间;全局交互则带来随序列长度平方增长的成本。

掌握这些核心概念后,紧邻的延伸方向是 Transformer、位置编码、梯度消失、上下文窗口和中间迷失。Transformer 展示注意力怎样组成可堆叠的标准结构;位置编码补充序列位置信息;梯度消失帮助理解长路径为何难以训练;上下文窗口对应模型一次能够处理的序列范围;中间迷失则关注长序列中不同位置的信息是否得到同等有效利用。

更远的学习方向包括缩放定律、大语言模型和以 FlashAttention 为代表的推理优化。缩放定律与大语言模型把注意力的并行能力放到模型和数据规模扩展中考察,推理优化则从实际执行成本出发,研究如何缓解注意力在长上下文中的效率压力。

学习层级涉及概念
先修向量与点积、softmax、神经网络、循环神经网络 RNN
本页核心Query/Key/Value、自注意力与交叉注意力、路径长度与并行、多头、平方级开销
紧邻延伸Transformer、位置编码、梯度消失、上下文窗口、中间迷失
更远缩放定律、大语言模型、推理优化(FlashAttention 等)
资料来源与改编说明
访问日期:2026-07-21