05-序列模型与注意力 进阶 预计 30 分钟

注意力机制入门

注意力机制(Attention)让模型在处理每个位置时,用「查询 Query」与所有位置的「键 Key」计算相关度分数,经 softmax 得到权重后对「值 Value」加权求和——即一次可微的、按内容寻址的信息检索,公式为 Attention(Q,K,V) = softmax(QKᵀ/√d)V。

一句话定义

注意力机制(Attention)让模型在处理每个位置时,用「查询 Query」与所有位置的「键 Key」计算相关度分数,经 softmax 得到权重后对「值 Value」加权求和——即一次可微的、按内容寻址的信息检索,公式为 Attention(Q,K,V) = softmax(QKᵀ/√d)V。

直觉

RNN 读长文像「单向磁带录音机」,信息只能顺序压进一盘磁带;注意力像「图书馆检索」:带着问题(Q)去查每本书的标签(K),按相关度分配阅读时间(权重),把最相关的段落(V)摘录汇总——不必逐页重读。

为什么重要

注意力是本库的收官机制与通往 Transformer/大模型时代的门票:它把 kp-022/023 苦心经营的「长程依赖」从「沿时间递归传递」变成「一步直达」,RNN 时代的两大顽疾(信息经过长压缩、训练无法并行)被同时化解。Bahdanau 2015 让它拯救机器翻译,Vaswani 2017 让它取代递归本身——本库只讲到入门门槛,架构细节(多头、位置编码、自注意力堆叠)属于 Transformer 独立站点,此处按约定只留路标。

前置知识

  • kp-023(注意力所替代的递归通路)、kp-024(序列表示与 softmax)、kp-009(softmax 的数值性质)。

核心概念

  • Query/Key/Value(Q/K/V):查询向量、地址标签、被取内容——检索三要素,均由输入经线性投影得到。
  • 注意力分数:q·k 的点积相似度;除以 √d 缩放防止 softmax 饱和(维度大时点积方差 ∝ d)。
  • 注意力权重 α:分数经 softmax 归一化成概率分布,和为 1。
  • 对齐(alignment):翻译任务中权重可视化出的「源词-目标词」对应关系,注意力的可解释红利。
  • 加性注意力 vs 点积注意力:Bahdanau 用小网络打分 vs 用内积打分;点积版因可矩阵化成为主流。
  • 自注意力(self-attention):Q、K、V 同源序列,序列内部互查——Transformer 的基石(细节指路独立站点)。

原理与机制

计算流程四步:投影——Q=XW_Q、K=XW_K、V=XW_V;打分——e_{ij}=q_i·k_j/√d;归一——α_i=softmax(e_{i,·});加权——output_i=Σ_j α_{ij}v_j。矩阵形式即一行:softmax(QKᵀ/√d)V。三个机制要点。其一,「软寻址」的可微性:传统哈希检索是离散 argmax、不可导;注意力用 softmax 把「选哪个」变成「按概率全都要一点」,梯度能穿过权重直接训练 Q/K/V 的投影——这是 kp-009「可微化决策」哲学的又一次胜利。其二,一步直达的长程依赖:位置 1 与位置 100 的交互只隔一次加权求和,路径长度 O(1);对照 kp-022 的 O(T) 递归链与 kp-023 的「梯度需活着走完全程」,注意力从根本上绕开了衰减问题——kp-020 的残差为它保梯度、kp-014 的 LayerNorm 为它稳分布(变体,指路 Transformer 站点),组合后序列建模的深度与并行瓶颈同时打开。其三,√d 缩放的必要性:q、k 各分量独立时点积方差 ∝ d,d=64 时分数尺度大十余倍,softmax 落入 kp-009 讨论过的饱和区、权重退为 one-hot、梯度消失;除以 √d 把方差拉回 1,是「数值卫生」进入公式设计的名场面。注意力的史前史与两个方向:Bahdanau 2015 的注意力是 RNN 编码-解码器的补丁(解码器每步回头看编码器全部状态,顺带产出对齐可视化);Vaswani 2017 的宣言《Attention Is All You Need》把递归整个删掉。本库边界声明:多头机制、因果掩码、位置编码、自注意力的 O(T²) 复杂度治理与整套 Transformer 堆叠,均不在本库展开,请转入 Transformer/大模型独立站点。

公式或模型

缩放点积注意力(Vaswani 2017 形式):

单头:  Attention(Q, K, V) = softmax( Q Kᵀ / √d_k ) V
逐位:  e_ij = q_i·k_j/√d_k ,  α_ij = softmax_j(e_ij) ,  out_i = Σ_j α_ij v_j

变量说明:Q∈R^{T_q×d_k}、K∈R^{T_k×d_k}、V∈R^{T_k×d_v};softmax 沿 j(被检索的位置轴)归一化;√d_k 为分数缩放。多头注意力的拆分与拼接在本库不展开。

图示

                 softmax 归一(每行和=1)
   Q ──┐    ┌──────────────┐
       ├─► │ QKᵀ/√d (打分) │ ──► α ──► Σ_j α_ij·v_j ──► 输出
   K ──┤    └──────────────┘            ▲
       └────────────────────────────────┤
   V ────────────────────────────────── ┘

例:翻译「the → 阅读」时 α 对「读」的键给 0.72、对「书」给 0.21 ……
    (对齐矩阵可可视化,注意力最直观的可解释产物)

直观类比

√d 缩放像「多人投票前先把票数除以人数」:维度越高票数(点积)天然越大,不除以人数,softmax 就会变成一家独大的「伪民主」。

实例或案例

30 行实现并可视化对齐(最小 Bahdanau 式打分):

import torch, torch.nn.functional as F

T, d = 6, 32
X = torch.randn(1, T, d)
Wq, Wk, Wv = (torch.nn.Linear(d, d, bias=False) for _ in range(3))
Q, K, V = Wq(X), Wk(X), Wv(X)
scores = Q @ K.transpose(1, 2) / d ** 0.5      # [1, T, T]
alpha = F.softmax(scores, dim=-1)              # 每行权重和=1
out = alpha @ V                                # [1, T, d]
# alpha[0] 即 6×6 对齐矩阵:用 matplotlib 热力图即可看到「谁在看谁」

语义检查实验:给一句含指代的句子画 α 热力图,代词位置的行会在其指代对象处出现亮斑——对齐可解释性是注意力最早的「可视化红利」。 kp-024 的语言模型若把 RNN 主干换成本节的注意力块(再加 kp-020 残差),即得到迷你 Transformer 编码器的雏形;完整堆叠、掩码与训练属于 Transformer 站点第一课。

常见误区

  • 「注意力权重 = 人类意义上的解释」:α 只说明「模型检索了谁」,不保证因果解释正确,可解释性有限度(kp-033 呼应)。
  • 忘记 √d 缩放:高维下 softmax 饱和,注意力退化为硬性 one-hot、训练停滞。
  • 「注意力=Transformer 全部」:它只是核心算子;位置编码、多头、FFN、残差、LayerNorm 缺一不可——本库只承包第一块砖。
  • 在 RNN 上加注意力就能完全解决长程问题:注意力改善「读」,但顺序递归的并行瓶颈仍在,最终要靠删掉递归(Vaswani 路线)。

与其他知识点的关系

它用 kp-009 的 softmax 做归一、用 kp-020 的残差做骨架、用 kp-024 的嵌入做输入;它是 kp-022/023 递归路线的「取代者」,也是本库通向 Transformer/大模型独立站点的一句路标(见延伸阅读)。

自测题

  1. 写出缩放点积注意力公式并解释 Q/K/V 各自的角色。

答案要点:softmax(QKᵀ/√d_k)V;Q 是查询、K 是地址、V 是内容,权重由内容相关度决定。

  1. 为什么点积分数要除以 √d_k?

答案要点:独立分量点积方差 ∝ d_k,大分数使 softmax 饱和、梯度消失;除以 √d_k 使方差回到 O(1)。

  1. 注意力如何同时化解 RNN 的两大顽疾?

答案要点:任意两位置一步直达(长程依赖 O(1),不再依赖递归存活);全序列矩阵化计算(时间步可并行训练)。

延伸阅读

  • Bahdanau、Cho、Bengio ICLR 2015(注意力与对齐的起点)。
  • Vaswani 等《Attention Is All You Need» NeurIPS 2017——Transformer 架构细节请转入本套知识库体系中的 Transformer/大模型独立站点,本站不再展开。

学习状态

状态保存在浏览器本地,用于首页与路径页的进度统计。