Self-Attention(自注意力机制)

Transformer的核心机制。序列中的每个token通过Q/K/V三组投影计算与所有其他token的关联权重,再用权重加权求和得到新的表示。让任意两个位置之间的信息传递距离变为O(1)。

核心公式

📖 符号说明

符号含义
Query矩阵(n×d_k)
Key矩阵(n×d_k)
Value矩阵(n×d_v)
Key向量维度(缩放因子)
转置

Self-Attention(自注意力机制)

一句话理解

自注意力让句子里的每个词都能直接"看到"所有其他词,并自动计算出该重点关注谁。

直觉

"我吃了一个苹果,很甜。"

"它"指的是谁?人类秒懂是"苹果"。Self-Attention 的工作就是让模型也能做到——每个 token 都去"询问"其他所有 token:"你跟我有关系吗?关系多大?"

Q/K/V 机制

每个 token 被投影成三个角色:

  • Query(查询):"我在找什么信息?"
  • Key(索引):"我能提供什么信息?"
  • Value(内容):"我的实际内容是什么。"

计算过程:

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)=softmax(dkQKT)V
  1. Q 和 K 做点积 → 得到注意力分数(谁跟谁相关)
  2. 除以 dk\sqrt{d_k}dk → 防止数值过大导致 softmax 梯度消失
  3. softmax 归一化 → 变成权重分布(加起来为 1)
  4. 用权重对 V 加权求和 → 输出融合了全局信息的新表示

注意力热力图

颜色越亮,表示该词对目标词的注意力越高。注意观察「它」那一行——模型学会了把注意力集中在「苹果」上。

注意力热力图

直觉类比

可以类比为搜索引擎:Query 是搜索词,Key 是每个网页的标题,Value 是网页内容。搜索引擎根据搜索词和标题的匹配度排序,然后把排名靠前的内容聚合返回。Self-Attention 就是每个 token 对整个句子做了一次"搜索"。

与传统 Attention 的区别

传统 Attention(如 Seq2Seq 中的 Bahdanau Attention)是 Encoder 和 Decoder 之间的注意力——Decoder 的 Query 去"看" Encoder 的 Key/Value。

Self-Attention 是序列内部的注意力——同一个序列的 token 互相看,Query/Key/Value 都来自同一个输入。

引用本概念的文章