DL ML Learning Lab
06 / 10
第 6 步 · 让模型学会「看哪里」

注意力机制 · AttentionAttention Mechanism

不再把整句压成一个向量,而是让每个词按需关注最相关的上下文。

12 分钟
阅读 + 实操
1 个
交互演示
高级
难度

注意力机制 · 交互演示

注意力头8
序列长16
上下文加权求和
① 注意力权重热力图(行 = Query 我在找什么 · 列 = Key 我被谁关注 · 颜色越深权重越高)— 点击格子或词标签切换 Query
② 两步走:原始打分 s = Q·Kᵀ ÷ √d(左,不受 τ 影响)→ softmax(s ÷ τ) 归一化(右,每行和为 1)
③ 输出怎么来:输出 = Σ(权重 × Value)— 先看权重,再逐项相乘、逐列相加(当前 Query 行)
温度系数 τ 1
选择 Query(我在找什么)
当前 Query「」最关注
τ 越小,softmax 越接近 one-hot(只盯住最相关的词);τ 越大,越接近均匀分布(雨露均沾)。

为什么学这步?

注意力是现代 NLP/CV 的通用算子。它解决了 RNN 的长程依赖瓶颈,也是 Transformer 的核心。

📌 发生了什么

  • Q-K 相似度得注意力权重
  • 对 V 加权求和得上下文
  • 多头并行捕捉多样关系

⚠️ 常见陷阱

  • 序列过长计算量平方增长
  • 需缩放点积防梯度爆炸
  • 位置信息需额外注入

本章小结

  • 注意力 = 按需加权平均
  • 可并行、易捕捉长程
  • 是 Transformer 基石

📐 缩放点积注意力

注意力让模型在每个位置动态决定"看哪里":用 Query 与所有 Key 的相似度对 Value 加权求和。

计算 Query Q 与 Keys K 的点积相似度,并用 √d_k 缩放,防止内积过大导致 softmax 饱和。

对相似度做 softmax 得到注意力权重(每行和为 1),再对 Value V 加权求和,得到每个位置的上下文向量。

缩放因子 √d_k 至关重要:随着 d_k 增大,点积方差随之增大,会把 softmax 推入饱和的低梯度区;除以 √d_k 让方差保持在 1。

🎛 注意力头数对比

多头注意力将 Q/K/V 拆成若干组并行,再拼接,让模型在不同子空间关注不同模式。

头数 表现 结果
1 单一注意力模式 表达力有限
8 多种模式并行 推荐
16 更细的子空间 强但参数更多

💡 头数越多表达力越强,但参数和计算量也成正比增长;8 是常用值,高维度可用更多头。

💻 单头注意力

缩放点积注意力的 Python 实现:

# 缩放点积注意力(单头)
def attention(Q, K, V, d_k):
    # 1. 打分:Q 与 K 的点积,除以 √d_k 缩放
    scores = Q @ K.T                    # [seq_q, seq_k]
    scaled = scores / np.sqrt(d_k)      # 防 softmax 饱和
    # 2. softmax 归一化得到注意力权重(每行和为 1)
    weights = softmax(scaled)           # [seq_q, seq_k]
    # 3. 对 V 加权求和,得到上下文向量
    output = weights @ V                # [seq_q, d_k]
    return output
# 多头:将 Q/K/V 拆成 h 组并行做 attention,再拼接后投影

📚 参考文献与延伸阅读

  • Bahdanau, Cho & Bengio (2014), Neural Machine Translation by Jointly Learning to Align and Translate, ICLR — 注意力机制的诞生
  • Vaswani et al. (2017), Attention Is All You Need, NeurIPS — 缩放点积与多头注意力
  • Goodfellow, Bengio & Courville, Deep Learning (2016), §12.4 Attention
  • arXiv:1706.03762 — Attention Is All You Need — Transformer 论文

📝 课后练习

检验你的理解——答对为止