AI大模型中的注意力机制(Attention)与自注意力机制(Self-Attention)深度解析
在现代大语言模型(LLM,如GPT、LLaMA、BERT、Qwen、DeepSeek等)中,注意力机制是核心驱动力,而自注意力机制则是Transformer架构最关键的创新。下面从概念、本质区别、计算过程、Transformer中的实际应用以及为什么它能“统治”AI大模型三个层面来系统讲解。
1. 注意力机制(Attention)的通用概念
注意力机制最早出现在Seq2Seq模型(2014–2015年 Bahdanau & Luong Attention),目的是解决RNN/LSTM在长序列上的信息瓶颈问题。
核心思想:不要把源序列压缩成一个固定向量,而是让解码器在每一步都“动态查看”源序列中所有部分,并根据当前需求加权求和。
经典公式(Scaled Dot-Product Attention 的前身):
- 输入:源序列的隐藏状态(作为Key和Value),当前解码器的隐藏状态(作为Query)
- 计算:
Attention(Q, K, V) = softmax(QKᵀ / √dₖ) V
其中:
- Q(Query):当前需要信息的“问题”或“需求”
- K(Key):用来匹配的“索引”或“标签”
- V(Value):真正要传递的内容
一句话总结经典Attention:让一个序列(通常是解码器侧)去关注另一个不同序列(通常是编码器侧)。
2. 自注意力机制(Self-Attention)—— Transformer的革命性创新
2017年《Attention is All You Need》论文中,Google提出:既然Attention这么好,为什么不让序列自己关注自己呢?
Self-Attention的核心区别就在于:Q、K、V 全部来自同一个序列!
| 对比维度 | 经典Attention(Cross-Attention) | Self-Attention |
|---|---|---|
| Q 来源 | 通常来自解码器(Decoder) | 与K、V来自同一个序列(Encoder或Decoder内部) |
| K、V 来源 | 来自另一个序列(通常Encoder输出) | 与Q来自同一个序列 |
| 关注的对象 | 关注“别人”(跨序列) | 关注“自己序列内部的所有token” |
| 典型使用位置 | Transformer的Decoder中Encoder-Decoder Attention层 | Encoder每一层、Decoder的Masked Self-Attention层 |
| 主要解决的问题 | 源语言与目标语言的对齐 | 序列内部的长距离依赖、上下文建模 |
| 是否允许并行 | 解码时仍需逐步生成 | 完全并行(这是最大杀手锏) |
一句话总结Self-Attention:让序列中的每个token同时“看到”序列中所有其他token(包括自己),并根据相关性加权聚合信息。
3. Self-Attention 的详细计算过程(Scaled Dot-Product Attention)
假设输入序列是 X ∈ ℝ^{n × d}(n个token,每个维度d)
- 线性投影得到三组向量(可学习参数):
Q = X W_Q ∈ ℝ^{n × d_k}
K = X W_K ∈ ℝ^{n × d_k}
V = X W_V ∈ ℝ^{n × d_v}
- 计算注意力分数(相似度):
scores = Q Kᵀ / √d_k ∈ ℝ^{n × n}
- 除以 √d_k 是缩放(Scaled),防止点积过大导致softmax梯度消失
- softmax归一化得到注意力权重:
attention_weights = softmax(scores) ∈ ℝ^{n × n}
- 加权求和得到输出:
output = attention_weights V ∈ ℝ^{n × d_v}
每一行output[i] 就是第i个token经过了整个序列加权后的新表示。
4. Transformer中三种注意力实际用法对比
| 层级位置 | Attention类型 | Q 来源 | K、V 来源 | 是否Mask | 作用 |
|---|---|---|---|---|---|
| Encoder 的每一层 | Self-Attention | Encoder自身 | Encoder自身 | 无Mask | 建模输入序列内部全局依赖 |
| Decoder 的第一子层 | Masked Self-Attention | Decoder自身 | Decoder自身 | 因果Mask(上三角) | 只看前面token(自回归生成) |
| Decoder 的第二子层 | Encoder-Decoder Attention(Cross-Attention) | Decoder当前层 | Encoder最后一层输出 | 无Mask | 让生成时关注整个源序列 |
这三种共同组成了Transformer的强大表达能力。
5. 多头注意力(Multi-Head Attention)——进一步增强
单次Self-Attention只能捕捉一种关系模式。
多头 = 把d_model拆成 h 份(通常 h=8/16/32),每份独立做一次Self-Attention,然后拼接起来再做一次线性变换。
效果:
- 不同head可以关注不同的语义维度(句法、语义、指代、情感等)
- 相当于集成学习,表达能力大幅提升
公式简写:
MultiHead(Q,K,V) = Concat(head₁, …, headₕ) W^O
6. 为什么Self-Attention让大模型“起飞”?
| 维度 | RNN/LSTM/GRU | Self-Attention + Transformer |
|---|---|---|
| 长距离依赖 | 非常困难(梯度消失) | 直接建模,距离无关 |
| 并行计算 | 顺序计算,慢 | 所有token同时计算,极易并行 |
| 路径长度 | O(n) | O(1)(任意两个token直接交互) |
| 位置信息 | 天然带有 | 需要额外加Positional Encoding |
| 可扩展性 | 很难到几百层 | 轻松堆到几十上百层(LLaMA 405B等) |
一句话:Self-Attention让模型第一次真正做到了“全局视野 + 完全并行 + 可深度堆叠”,这是后续所有大模型(GPT、BERT、T5、PaLM、LLaMA、Grok、Qwen、DeepSeek……)的共同基石。
如果你想更直观理解计算过程,推荐这两篇经典可视化文章(依然不过时):
- The Illustrated Transformer (Jay Alammar)
- LLM Transformer Model Visually Explained (Georgia Tech)
有想深入探讨的部分(例如Rotary Position Embedding、FlashAttention、GQA/MQA、Grouped-Query Attention等现代优化)也可以继续问!