Transformer 的注意力机制是如何工作的
前面聊 NLP 演进时说过,Transformer 取代 RNN 靠的是注意力机制。但”注意力”三个字到底在计算什么?本文把 Q/K/V、缩放点积、多头与位置编码四层一次讲透,读完能手推一遍注意力的完整计算。
为什么需要注意力
RNN 处理序列必须逐步传递隐藏状态,长句开头的信息传到句尾已衰减殆尽(长距离依赖问题),且串行计算无法并行。注意力换了一个思路:让每个位置直接”看向”序列中所有位置,按相关性加权取信息——距离不再是问题,一步直达。
Q/K/V:注意力的三要素
每个 token 的表示被线性变换成三个向量:
- Query(查询):我正在找什么信息
- Key(键):我能提供什么信息的”标签”
- Value(值):我实际携带的信息内容
类比检索:Query 是你的搜索词,Key 是文档的标题摘要,Value 是文档正文。注意力就是用搜索词和所有标题匹配,按匹配度加权阅读正文。
缩放点积注意力的计算流
Attention(Q, K, V) = softmax(Q K^T / √d_k) V |
四步拆解:
- 打分:Q 与每个 K 做点积,得相关性分数矩阵(n×n)
- 缩放:除以 √d_k——维度高时点积值方差大,softmax 会进入梯度极小的饱和区,缩放把分数拉回合理范围
- 归一化:softmax 按行转成权重(和为 1,可解释为”注意力分配比例”)
- 加权求和:权重乘 V 矩阵,每个位置得到”融合了全序列相关信息”的新表示
多头注意力:多个子空间并行
单头注意力只有一种”匹配视角”。多头把 Q/K/V 切成 h 份(如 8 头),每头独立做注意力再拼接:
- 不同头可以学到不同关系:有的头关注语法依赖(主谓),有的头关注位置邻近,有的头关注指代共现
- 类比 CNN 的多通道:每通道提取不同特征
头数×头维度=模型维度,计算量与单头全维基本持平,表达力却成倍增加。
位置编码:补上被注意力丢掉的顺序
点积注意力本身对位置无序(打乱 token 顺序,注意力结果只是相应打乱)。Transformer 用位置编码(正弦函数族或可学习向量)加到输入嵌入上,让每个位置带上”序号签名”,顺序信息由此进入计算。
复杂度与代价
| 模型 | 单步计算 | 序列内路径长 |
|---|---|---|
| RNN | O(n) 串行 | O(n) |
| 自注意力 | O(n²·d) 并行 | O(1) |
注意力用 O(n²) 的内存与计算换了并行性和短路径——序列短时无敌,序列超长时 n² 成为瓶颈(这正是后来稀疏注意力、线性注意力、KV cache 等优化的出发点)。
与大模型的连接
GPT 类模型 = 多层”掩码自注意力 + 前馈网络”堆叠:掩码保证生成时只能看到前文(因果性);KV cache 缓存历史 K/V 避免重复计算;层数越深,注意力的组合视角越丰富。理解了一层注意力,就理解了大模型每一层在做的事——其余都是工程优化。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 非鱼小站!
评论
WalineDisqus









