一文看懂注意力机制:点积注意力机制、QKV含义、自注意力、多头注意力、注意力掩码

注意力机制(尤其是Transformer架构中的点积注意力)的提出是自然语言处理乃至人工智能领域的里程碑式突破:

它从根本上解决了传统序列建模模型(RNN/LSTM等)的核心痛点,既打破了顺序计算的效率瓶颈,实现了序列数据的并行处理,又攻克了长距离依赖难题,让模型能精准捕捉任意位置的语义关联;

其自适应的信息加权能力,使模型摆脱了对输入序列“一视同仁”的局限,可聚焦核心信息、忽略冗余内容,大幅提升了建模精度;

更重要的是,注意力机制重构了序列建模的核心范式,催生了Transformer架构,为BERT、GPT等大规模预训练模型奠定了基础,推动AI从“模式匹配”走向“语义理解”,并从NLP领域延伸至计算机视觉、语音识别、跨模态生成等全场景,成为现代大语言模型和通用人工智能发展的核心基石,同时其可解释的注意力权重可视化特性,也让深度学习模型从“黑箱”走向部分可解释,为模型的优化和信任度提升提供了关键支撑。


一、注意力机制的核心实现:点积注意力机制

什么是点积注意力?
点积注意力(Scaled Dot-Product Attention)是Transformer架构中注意力机制的核心实现方式,由Google在2017年的《Attention Is All You Need》论文中提出。

其核心思想是: 通过计算查询向量(Query)与键向量(Key)的点积,得到注意力权重,再用该权重对值向量(Value)进行加权求和,最终得到注意力输出。

为什么需要"缩放"?
当向量维度d_k较大时,点积结果会偏大,导致Softmax函数梯度消失,因此需要除以√d_k进行缩放。

点积注意力其实就是给 “查询(Query)” 和 “每个键(Key)” 算相似度 —— 俩东西越像,算出来的数越大,对应的注意力权重就越高。但如果 Key/Query 的维度很高(比如几百维),这相似度的数会变得特别夸张(就像一堆数加起来,个数越多总和越容易飙高)。

这时候问题就来了:Softmax 函数碰到这种超大数,会变得 “极端偏心”—— 只死死盯着最大的那个数,其他数哪怕差一点,也会被当成 0 对待(相当于注意力只聚焦在一个地方,其他有用信息全忽略了)。更糟的是,这种情况下模型根本学不动(梯度消失),就像老师只看最高分,完全不管其他学生的进步,没法调整教学方法。

而 “缩放” 就是给这些超大的相似度数 “降温”,把它们压回合理范围。这样 Softmax 就能正常分辨 “哪些该多关注、哪些该少关注”,注意力分布更合理,模型也能踏踏实实学到东西了。

核心计算公式

在这里插入图片描述

计算步骤详解

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二、 Encoder-Decoder注意力与Decoder-only注意力

在 Transformer 的注意力机制体系中,不同架构设计的分支适配着各异的自然语言处理任务需求 ——Encoder-Decoder 与 Decoder-only 便是其中最具代表性的两类。前者以 “理解 + 生成” 的双重能力见长,凭借对输入信息与生成历史的双重利用,成为机器翻译、文本摘要等需要精准语义映射任务的优选;后者则聚焦自回归生成场景,依托海量数据习得的语言规律,在对话创作、文本续写等开放式生成任务中展现出强大的连贯表达能力。两类机制看似路径不同,实则都是对注意力分配逻辑的精妙设计,其差异与适配性也成为理解 Transformer 架构选型的关键切入点。

特性Encoder-Decoder注意力Decoder-only注意力
所属架构原始Transformer、T5、BART等编解码器模型GPT系列、LLaMA等纯解码器大语言模型
包含组件编码器双向自注意力 + 解码器掩码自注意力 + 编码器-解码器交叉注意力仅包含解码器掩码自注意力
信息来源同时关注输入序列(编码器输出)和已生成序列(解码器自身输出)仅关注已生成序列(自身历史输出)
核心限制解码器自注意力带掩码(不可看未来),交叉注意力无掩码(可看全部输入)所有自注意力都带掩码(只能看过去)
典型任务机器翻译、文本摘要、图文生成(理解+生成双重任务)文本生成、对话、创意写作(以生成为主)

Encoder-Decoder注意力:双向理解+单向生成

这种注意力机制就像一个专业翻译:先通读全文理解意思(编码器双向自注意力),再逐字逐句输出译文(解码器掩码自注意力),同时不断回看原文确保准确(交叉注意力)。

三大核心组件

  • 编码器双向自注意力:输入序列中每个词可以同时"看到"左右两边所有词,全面理解上下文。比如"河边的银行倒闭了",能同时关联"河边"和"倒闭了"判断"银行"是金融机构而非河岸。
  • 解码器掩码自注意力:生成时只能看当前词及之前的词,用一个上三角掩码矩阵把未来位置设为-∞,确保不会"偷看答案"。
  • 编码器-解码器交叉注意力:解码器的"眼睛",让生成每个词时都能参考编码器处理过的完整输入信息,保证输出与输入的语义一致性。

Decoder-only注意力:专注自回归生成

这种注意力机制像一个即兴演讲者:没有稿子,只能根据自己已经说过的内容继续往下讲,全程保持单向思维。

掩码自注意力

  • 因果限制:每个词只能关注自己和左边的词,严格遵循"先有前因才有后果"的逻辑。
  • 实现方式:同样使用上三角掩码矩阵,把所有未来位置的注意力分数设为-∞,经过Softmax后这些位置的权重就变成0。
  • 自回归生成:生成过程是"预测-拼接-再预测"的循环,每一步都把新生成的词加入输入,继续预测下一个词。

三、自注意力机制

自注意力机制(Self-Attention)有何不同?

在注意力机制(Attention)里,query、key、value是三个核心概念——它们直译过来分别是“查询”“键”“值”,但光看中文释义还是很难get到本质,咱们用一个生活例子就能搞懂:小王想在优快云找深度学习的内容,他在搜索框里输入的“深度学习”就是query(查询);搜索引擎会拿着这个查询,去匹配数据库里提前存好的相关标签(比如吴恩达、神经网络这些,就是key(键));最后系统把匹配度最高的视频、专栏等内容(也就是value(值))推给小明,这就是QKV的核心逻辑。

而Self-Attention(自注意力)本质上也是一种注意力机制,它和普通Attention的区别很关键:普通Attention是“源内容”对“目标内容”的关联——比如做英译中翻译时,输入的英文句子是“源”,输出的中文句子是“目标”,两者是不同的内容;但Self-Attention是“源内容”和自身的关联,要么是源内容内部的元素互相关注,要么是目标内容内部的元素彼此作用,也可以理解成“目标内容和源内容完全相同(Target=Source)”时的特殊注意力机制。

在自注意力机制(Self-Attention)中,Q(Query,查询)、K(Key,键)、V(Value,值)权重矩阵是实现“关注序列中相关信息”的核心组件。它们通过对输入序列进行线性变换,生成三种特定的向量表示(Q、K、V),最终实现对序列中不同位置信息的动态聚合。

核心作用:将输入转换为“查询-键-值”系统

自注意力机制的目标是让序列中每个位置的输出,都能“自动关注”到序列中其他相关位置的信息(包括自身)。而Q、K、V权重矩阵的作用,就是将原始输入序列转换为支持这一目标的三种向量表示,具体分工如下:

Q权重矩阵( W Q W_Q WQ):生成“查询向量”,定义“需要什么信息”

Q权重矩阵的作用是将输入序列中的每个元素(如词向量)转换为查询向量(Query Vector)

  • 每个位置的查询向量( q i q_i qi)代表该位置“想要获取的信息类型”。例如,在句子“猫追狗”中,“追”这个词的查询向量可能会主动去寻找“动作的发出者”和“动作的接收者”相关的信息。
  • 直观理解:可以把查询向量想象成“问题”——比如“我需要和谁关联?”“谁对我重要?”。

K权重矩阵( W K W_K WK):生成“键向量”,定义“提供什么信息类型”

K权重矩阵的作用是将输入序列中的每个元素转换为键向量(Key Vector)

  • 每个位置的键向量( k j k_j kj)代表该位置“能提供的信息类型”。例如,“猫”的键向量可能包含“动作发出者”的特征,“狗”的键向量可能包含“动作接收者”的特征。
  • 键向量的核心作用是与查询向量匹配:通过计算 q i q_i qi k j k_j kj的相似度(如点积),得到“位置 i i i需要关注位置 j j j的程度”(即注意力分数)。
  • 直观理解:键向量是“答案的标签”——比如“我是动作发出者”“我是动作接收者”,用于被查询向量匹配。

V权重矩阵( W V W_V WV):生成“值向量”,定义“实际提供的信息内容”

V权重矩阵的作用是将输入序列中的每个元素转换为值向量(Value Vector)

  • 每个位置的值向量( v j v_j vj)代表该位置“实际包含的具体信息”。例如,“猫”的值向量可能包含其语义特征(如“动物、哺乳动物、宠物”),“狗”的值向量包含其自身的语义特征。
  • 当通过Q和K计算出注意力分数后,值向量会被这些分数加权求和,最终生成位置 i i i的输出(即“关注度高的位置,其值向量在输出中占比更大”)。
  • 直观理解:值向量是“答案的具体内容”——当查询向量匹配到某个键向量后,就会提取对应的值向量中的信息。

假设输入序列为 X = [ x 1 , x 2 , . . . , x n ] X = [x_1, x_2, ..., x_n] X=[x1,x2,...,xn] x i x_i xi为第 i i i个位置的输入向量),通过Q、K、V权重矩阵生成:

  • Q = [ q 1 , q 2 , . . . , q n ] = X ⋅ W Q Q = [q_1, q_2, ..., q_n] = X \cdot W_Q Q=[q1,q2,...,qn]=XWQ q i = x i ⋅ W Q q_i = x_i \cdot W_Q qi=xiWQ
  • K = [ k 1 , k 2 , . . . , k n ] = X ⋅ W K K = [k_1, k_2, ..., k_n] = X \cdot W_K K=[k1,k2,...,kn]=XWK k i = x i ⋅ W K k_i = x_i \cdot W_K ki=xiWK
  • V = [ v 1 , v 2 , . . . , v n ] = X ⋅ W V V = [v_1, v_2, ..., v_n] = X \cdot W_V V=[v1,v2,...,vn]=XWV v i = x i ⋅ W V v_i = x_i \cdot W_V vi=xiWV

对于位置 i i i的输出 y i y_i yi

  1. 计算 q i q_i qi与所有 k j k_j kj的相似度(注意力分数): s c o r e i , j = q i ⋅ k j score_{i,j} = q_i \cdot k_j scorei,j=qikj(点积);

在这里插入图片描述

  1. 对分数归一化(如softmax): α i , j = softmax ( s c o r e i , j d k ) \alpha_{i,j} = \text{softmax}(\frac{score_{i,j}}{\sqrt{d_k}}) αi,j=softmax(dk scorei,j) d k \sqrt{d_k} dk 为缩放因子,避免分数过大);

在这里插入图片描述
3. 用归一化分数对 V V V加权求和: y i = ∑ j = 1 n α i , j ⋅ v j y_i = \sum_{j=1}^n \alpha_{i,j} \cdot v_j yi=j=1nαi,jvj,即得到Z矩阵。
在这里插入图片描述

关键特性:可学习性

Q、K、V权重矩阵是可学习的参数(在训练过程中通过反向传播更新)。模型会根据具体任务(如翻译、文本分类)自动调整这些矩阵,使得:

  • Q能更精准地定义“需要关注的信息”;
  • K能更清晰地标识“自身提供的信息类型”;
  • V能更有效地承载“需要传递的具体内容”。

四、多头注意力机制

多头注意力机制的提出,本质是为了突破单头注意力只能捕捉单一维度语义关联的局限——通过并行学习多个子空间的注意力分布,让模型更全面、细致地理解序列中的复杂关系,最终提升注意力机制的表达能力和建模效果。

多头注意力计算过程

下图为多头注意力机制的计算过程说明,减少单头注意力Q、K、V矩阵的维度为原来的1/n,并用一个权重矩阵W0有机地将各个头学习到的特征矩阵整合为最终的特征矩阵:

在这里插入图片描述

多头注意力机制的提出的核心意义

  • 单头注意力的先天不足:
    单头注意力会将Query(查询)、Key(键)、Value(值)统一投影到同一个低维空间计算相似度,相当于只能用“单一视角”观察序列元素间的关系。比如面对句子“他在河边的银行取钱”,单头注意力可能只捕捉到“银行”与“取钱”的动作关联,却忽略“河边”与“银行”的场景关联、“他”与“银行”的主体关联;再比如机器翻译中,单头可能只关注单词的字面匹配,漏掉语法结构或指代关系。这种单一维度的建模,会让模型丢失大量关键语义信息,无法应对复杂的自然语言任务。

  • 多维度、多视角的语义捕捉:
    多头注意力的核心设计是:将Q、K、V通过不同的线性投影矩阵,映射到多个相互独立的子空间(每个子空间对应一个“注意力头”),每个头专注学习一种维度的语义关联,最后将所有头的结果拼接(或加权求和)整合。

  • 比如上面的例句,一个头关注“动作关联”(银行→取钱),一个头关注“场景关联”(河边→银行),还有一个头关注“主体关联”(他→银行);
  • 再比如在文本摘要任务中,有的头聚焦“主旨句与细节句的关联”,有的头聚焦“因果逻辑关联”,有的头聚焦“高频核心词的关联”。 通过这种多视角建模,模型能整合不同维度的注意力信息,完整还原序列的语义全貌。
  • 提升模型表达能力与泛化性:
    多个注意力头相当于给模型配备了“多副眼镜”,每副眼镜能看到不同层面的信息,避免了单一视角的偏差和信息遗漏。这种设计让模型能学习到更丰富的特征表示:
  • 在对话任务中,有的头关注上下文的指代关系(比如“它”指代前文的“手机”),有的头关注情感倾向的延续(比如从“开心”到“兴奋”的情绪关联);
  • 在代码生成任务中,有的头关注语法规则(比如函数名与参数的匹配),有的头关注逻辑流程(比如循环与条件判断的衔接)。

最终,模型的泛化能力会显著提升,能更好地适配不同类型的任务场景。

  • 效率与效果的平衡:
    多头注意力的设计还兼顾了计算效率:每个头的维度被设置为 d m o d e l / h d_{model}/h dmodel/h d m o d e l d_{model} dmodel 是模型总维度, h h h 是头数),因此总计算量与单头注意力几乎相当,却能通过并行计算实现“多倍”的语义捕捉能力,是对模型性能与计算成本的最优平衡。

五、注意力掩码

注意力掩码(Attention Mask):注意力计算的“遮挡板”
注意力掩码本质是在注意力机制计算过程中,人为限制模型关注范围的工具——通过对注意力分数矩阵中“不该被关注”的位置设置极小值(如 − ∞ -\infty ),让这些位置经过Softmax后权重趋近于0,相当于给模型戴上“选择性眼罩”,只允许它看到符合任务逻辑的内容,避免无效信息干扰或违背任务规则(比如“偷看未来内容”)。

核心原理:修改注意力分数矩阵

注意力计算的关键步骤是:Query与Key做点积得到注意力分数矩阵(每个元素代表“当前位置对其他位置的关注程度”),再通过Softmax将分数转化为0~1的权重。

注意力掩码的作用就是对这个分数矩阵进行“修改”:

  1. 构建与分数矩阵形状相同的掩码矩阵(值为0或1,1表示“可关注”,0表示“不可关注”);
  2. 将掩码矩阵中0的位置对应到分数矩阵中,替换为极小值( − ∞ -\infty );
  3. 经过Softmax后, − ∞ -\infty 对应的权重会无限接近0,模型便不会关注这些位置。

简单说:掩码就是让模型“看不见”某些位置,从根源上杜绝无效关注。

两种最常见的注意力掩码

(1)因果掩码(Causal Mask / 未来掩码)

  • 适用场景:Decoder的自注意力层(如GPT等Decoder-only模型、Transformer的Decoder部分)。

  • 作用:保证生成任务的“自回归逻辑”——生成第 i i i 个词时,只能关注第 1 至 i 1至i 1i 个词(已生成的内容),绝对不能看第 i + 1 i+1 i+1 个及以后的词(未来内容)

  • 例子:生成句子“我爱吃苹果”时:

    • 生成“爱”(第2个词):只能看“我”(第1个词);
    • 生成“吃”(第3个词):只能看“我”“爱”(第1~2个词);
    • 掩码会把分数矩阵中“未来位置”(如生成“爱”时的“吃”“苹果”)设为 − ∞ -\infty ,Softmax后这些位置权重为0。

    因果掩码的矩阵形状是下三角矩阵(下三角为0,上三角为 − ∞ -\infty ),直观来看就是“只能看左边,不能看右边”。

生成位置 → 关注位置1(我)2(爱)3(吃)4(苹果)
1(我)0-∞-∞-∞
2(爱)00-∞-∞
3(吃)000-∞
4(苹果)0000

(2)填充掩码(Padding Mask)

  • 适用场景:所有注意力层(Encoder、Decoder)处理批量不等长序列时。
  • 作用:忽略序列中的填充位(如[PAD]标记)——因为实际任务中,我们会把一批长度不同的句子补成相同长度(比如用[PAD]填充短句子),但这些填充位没有实际语义,模型关注它们会引入噪声。
  • 例子:一批有两个句子:
    • 句子A:“我爱吃苹果”(长度4,无填充);
    • 句子B:“他爱梨”(长度3,补1个[PAD],总长度4)。
      填充掩码会把句子B中[PAD]对应的位置设为 − ∞ -\infty ,让模型计算注意力时完全忽略这个填充位,避免它干扰“他”“爱”“梨”之间的语义关联。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracyCoder123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值