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=dkQKT
步骤 3:可选‑Mask 掩码
- 编码器 (Encoder‑BERT):无 mask,可以看到整句话全部内容;
- 解码器 (Decoder‑GPT):加入上三角 Mask,让第i个 token 看不到后面未来的 token,防止提前看到后文。
步骤 4:Softmax 归一化
对每一行做 softmax,所有分数变成 0‑1 之间的权重,一行所有权重总和等于 1:
A=Softmax(dkQK⊤) 矩阵A就是注意力权重矩阵。Aij代表第i个 token 对第j个 token 的关注程度。
步骤 5:加权 Value 得到输出
注意力权重乘以 V 矩阵,把其他单词的信息加权汇总到当前单词:
Output=A⋅V 之后再过一层线性层和残差连接 + LayerNorm。
四、多头自注意力 Multi‑Head‑Attention(拓展)
把 Q、K、V 拆分到h个 head 分头计算自注意力:
- 将 Q,K,V 均匀切分;
- 每个 head 独立算 self‑attention;
- 把每个头的结果拼接起来再乘输出矩阵; 好处:
- 不同头捕捉不一样类型关联:语法关系、指代关系、位置关系;
- 特征空间多元化,表达能力更强。
五、数学公式精简版(官方公式)
Attention(Q,K,V)=Softmax(dkQK⊤)VMultiHead(Q,K,V)=Concat(head1,...,headh)WO
六、Self‑Attention 对比 RNN、CNN 优缺点
优点
- 全局视野:任意位置 token 直接交互,轻松捕捉长距离依赖,RNN 距离太远信息衰减严重;
- 完全并行计算:RNN 必须顺序逐个计算;Self‑Attention 整段序列一起运算,GPU 利用率极高;
- 动态分配权重:上下文不同,关注重点自动变化(一词多义天然解决)。
缺点
- 时间复杂度 O(n2),文本很长时n变大,算力消耗爆炸;
- 本身不内置位置信息,必须额外加入位置编码 Positional Encoding区分词语先后顺序。
七、极简生活化例子
句子:I drank coffee
- token‑I:Q 查询,和 K (I、drank、coffee) 打分;发现和 drank 关联性更高;
- token‑coffee 重点关联 drank; 自注意力自动学到:coffee 是 drank 的宾语。
八、区分概念
- Self‑Attention:Q、K、V 全部来自同一组输入(BERT、GPT);
- Cross‑Attention(交叉注意力):Q 来自解码器,K、V 来自编码器,用于翻译模型,Q 和另一序列做匹配。