Self‑Attention(自注意力)通俗 + 原理完整讲解

📅 2026/7/12 1:41:24 👁️ 阅读次数 📝 编程学习
Self‑Attention(自注意力)通俗 + 原理完整讲解

Self‑Attention(自注意力)通俗 + 原理完整讲解

一、核心作用

自注意力是 Transformer 模型的核心模块,目的:序列里面每一个 Token(单词、文字、向量),和序列里全部 Token 计算关联强弱,给自己分配不同权重,从而捕捉长距离依赖关系。 举例: 句子:He didn't finish his homework because he was tired传统 RNN 按顺序读取,相隔很远的两个 he 很难建立联系; Self‑Attention 可以直接让第二个 he 快速关联前面的 He,无视距离远近。

二、三个核心向量:Q Query 查询、K Key 键、V Value 值

输入每一个词的嵌入向量x,分别乘 3 组可训练权重矩阵 WQ​,WK​,WV​,得到:

QKV​=x⋅WQ​=x⋅WK​=x⋅WV​​​

  • Q:当前这个词要去寻找谁;
  • K:其余单词提供自身信息;
  • V:真正用来提取特征的值向量。

简单大白话:Q 拿着问题,挨个匹配 K,匹配分数决定取用 V 的多少。

三、计算步骤(标准缩放点积注意力公式)

步骤 1:计算相似度得分

某一个 Token 的 Q 和全部 Token 的 K 做内积:QKT。 内积结果越大代表两个单词相关性越高。

步骤 2:Scale 缩放(除以dk​​)

dk​代表 Q、K 向量维度。向量维度很高时内积数值会变得极大,经过 Softmax 之后梯度会极小,模型很难训练。除以dk​​把数值压小,梯度恢复正常。

score=dk​​QKT​

步骤 3:可选‑Mask 掩码

  1. 编码器 (Encoder‑BERT):无 mask,可以看到整句话全部内容;
  2. 解码器 (Decoder‑GPT):加入上三角 Mask,让第i个 token 看不到后面未来的 token,防止提前看到后文。

步骤 4:Softmax 归一化

对每一行做 softmax,所有分数变成 0‑1 之间的权重,一行所有权重总和等于 1:

A=Softmax(dk​​QK⊤​) 矩阵A就是注意力权重矩阵。Aij​代表第i个 token 对第j个 token 的关注程度。

步骤 5:加权 Value 得到输出

注意力权重乘以 V 矩阵,把其他单词的信息加权汇总到当前单词:

Output=A⋅V 之后再过一层线性层和残差连接 + LayerNorm。

四、多头自注意力 Multi‑Head‑Attention(拓展)

把 Q、K、V 拆分到h个 head 分头计算自注意力:

  1. 将 Q,K,V 均匀切分;
  2. 每个 head 独立算 self‑attention;
  3. 把每个头的结果拼接起来再乘输出矩阵; 好处:
  • 不同头捕捉不一样类型关联:语法关系、指代关系、位置关系;
  • 特征空间多元化,表达能力更强。

五、数学公式精简版(官方公式)

Attention(Q,K,V)=Softmax(dk​​QK⊤​)VMultiHead(Q,K,V)=Concat(head1​,...,headh​)WO​

六、Self‑Attention 对比 RNN、CNN 优缺点

优点

  1. 全局视野:任意位置 token 直接交互,轻松捕捉长距离依赖,RNN 距离太远信息衰减严重;
  2. 完全并行计算:RNN 必须顺序逐个计算;Self‑Attention 整段序列一起运算,GPU 利用率极高;
  3. 动态分配权重:上下文不同,关注重点自动变化(一词多义天然解决)。

缺点

  1. 时间复杂度 O(n2),文本很长时n变大,算力消耗爆炸;
  2. 本身不内置位置信息,必须额外加入位置编码 Positional Encoding区分词语先后顺序。

七、极简生活化例子

句子:I drank coffee

  • token‑I:Q 查询,和 K (I、drank、coffee) 打分;发现和 drank 关联性更高;
  • token‑coffee 重点关联 drank; 自注意力自动学到:coffee 是 drank 的宾语。

八、区分概念

  1. Self‑Attention:Q、K、V 全部来自同一组输入(BERT、GPT);
  2. Cross‑Attention(交叉注意力):Q 来自解码器,K、V 来自编码器,用于翻译模型,Q 和另一序列做匹配。