注意力机制

概述

注意力机制,是深度学习中的一项关键技术,它让模型能够像人一样,在处理大量信息时,自动聚焦在最重要的部分。

1. 注意力机制是什么?它从何而来?

动机与直觉

当我们看一张照片时,视线会不自觉地落在人脸、文字标题等关键区域,而不是把每个像素平等对待。

这种高效分配有限处理资源的能力,就是注意力。

深度学习中的注意力机制正是借鉴了这一思想,核心目标是:从海量信息中,为当前任务筛选出更关键的部分,并赋予其更高权重。

本质定义

注意力机制,可以理解为"根据查询(Query),从一组键值对(Key-Value)中,有侧重地抽取信息"的过程。

最终输出是"值(Value)"的加权和,而权重由"查询(Query)"与"键(Key)"的匹配程度决定。

下面这组概念会贯穿全文:

  • Query(Q):当前要查询的目标,比如正在翻译的词。
  • Key(K):各个候选信息的关键特征,用来与 Q 匹配。
  • Value(V):候选信息本身的值,被加权求和的对象。

2. 基础注意力机制:加性注意力与缩放点积注意力

这是两种最经典的 Q-K 匹配方式。

加性注意力

将 Q 和 K 分别通过可训练矩阵进行线性变换,然后相加,再经 tanh 等激活函数和非线性变换后得到分数。

公式(示意):

score ( Q , K ) = w T tanh ⁡ ( W q Q + W k K ) \text{score}(Q, K) = w^T \tanh(W_q Q + W_k K) score(Q,K)=wTtanh(WqQ+WkK)

其中 W q , W k W_q, W_k Wq,Wk 是可学习参数。这种方式允许 Q 和 K 维度不同。

缩放点积注意力

直接对 Q 和 K 做点积,计算相似度。由于点积值可能很大,为防止 softmax 后梯度消失,引入缩放因子 d k \sqrt{d_k} dk 。

公式:

Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V Attention(Q,K,V)=softmax(dk QKT)V

这里要求 Q 和 K 的维度( d k d_k dk)相同。它是后续自注意力的基础。

一个小例子 (为后续串联铺垫):

假设我们要将中文"我"翻译成英文,目标词是"me"。

Q 是"我"的表示向量,K 是各个英文单词的关键特征,V 是英文单词本身的特征向量。

通过计算"我"(Q) 与 "me"、"I"、"you"等(K) 的点积相似度,再 softmax 得到权重。

最后,用这些权重对 V 加权求和,得到的信息会告诉模型:"我"和"me"最相关。


3. 自注意力机制(Self-Attention)------ 让序列内部互相关注

核心思想

自注意力让序列中的每个元素,都与序列内所有其他元素建立关联,从而捕获长距离依赖。每个位置的 Q、K、V 都来自输入自身,这就是"自"的含义。

详细数据推导:以序列 "你好机车" 为例

假设输入序列为三个词:"你" "好" "机车",词向量维度 d m o d e l = 4 d_{model}=4 dmodel=4。

经过 Embedding 后,得到输入矩阵(行向量表示每个词):

X = 1 0 1 0 0 2 0 2 1 1 1 1 X = \begin{bmatrix} 1 & 0 & 1 & 0 \\ % 你 0 & 2 & 0 & 2 \\ % 好 1 & 1 & 1 & 1 % 机车 \end{bmatrix} X= 101021101021

为便于手工计算,我们设所有可训练权重矩阵为简单单位阵或特定值。

这里取 W Q , W K , W V W^Q, W^K, W^V WQ,WK,WV 均为 4 × 3 4 \times 3 4×3 的矩阵(降维到 d k = d v = 3 d_k=d_v=3 dk=dv=3),并手动设定便于观察的值。

令:

W Q = 1 0 0 0 1 0 0 0 1 1 0 0 , W K = 0 1 0 0 0 1 1 0 0 0 1 0 , W V = 1 0 1 0 1 0 0 0 1 1 1 0 W^Q = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ 1 & 0 & 0 \end{bmatrix},\quad W^K = \begin{bmatrix} 0 & 1 & 0 \\ 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix},\quad W^V = \begin{bmatrix} 1 & 0 & 1 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ 1 & 1 & 0 \end{bmatrix} WQ= 100101000010 ,WK= 001010010100 ,WV= 100101011010

1) 计算 Q, K, V

Q = X W Q Q = X W^Q Q=XWQ, K = X W K K = X W^K K=XWK, V = X W V V = X W^V V=XWV

  • 第一行 "你" ( X 1 = 1 , 0 , 1 , 0 X_1 = 1,0,1,0 X1=1,0,1,0):

    Q 1 = 1 , 0 , 1 , 0 W Q = 1 + 0 + 0 + 0 , 0 + 0 + 0 + 0 , 0 + 0 + 1 + 0 = 1 , 0 , 1 Q_1 = 1,0,1,0 W^Q = 1+0+0+0,\\ 0+0+0+0,\\ 0+0+1+0 = 1, 0, 1 Q1=1,0,1,0WQ=1+0+0+0, 0+0+0+0, 0+0+1+0=1,0,1

    K 1 = 1 , 0 , 1 , 0 W K = 0 + 0 + 1 + 0 , 1 + 0 + 0 + 0 , 0 + 0 + 0 + 0 = 1 , 1 , 0 K_1 = 1,0,1,0 W^K = 0+0+1+0,\\ 1+0+0+0,\\ 0+0+0+0 = 1, 1, 0 K1=1,0,1,0WK=0+0+1+0, 1+0+0+0, 0+0+0+0=1,1,0

    V 1 = 1 , 0 , 1 , 0 W V = 1 + 0 + 0 + 0 , 0 + 0 + 0 + 0 , 1 + 0 + 1 + 0 = 1 , 0 , 2 V_1 = 1,0,1,0 W^V = 1+0+0+0,\\ 0+0+0+0,\\ 1+0+1+0 = 1, 0, 2 V1=1,0,1,0WV=1+0+0+0, 0+0+0+0, 1+0+1+0=1,0,2

  • 第二行 "好" ( X 2 = 0 , 2 , 0 , 2 X_2 = 0,2,0,2 X2=0,2,0,2):

    Q 2 = 0 , 2 , 0 , 2 W Q = 0 + 0 + 0 + 2 , 0 + 2 + 0 + 0 , 0 + 0 + 0 + 0 = 2 , 2 , 0 Q_2 = 0,2,0,2 W^Q = 0+0+0+2,\\ 0+2+0+0,\\ 0+0+0+0 = 2, 2, 0 Q2=0,2,0,2WQ=0+0+0+2, 0+2+0+0, 0+0+0+0=2,2,0

    K 2 = 0 , 2 , 0 , 2 W K = 0 + 0 + 0 + 0 , 0 + 0 + 0 + 2 , 0 + 2 + 0 + 0 = 0 , 2 , 2 K_2 = 0,2,0,2 W^K = 0+0+0+0,\\ 0+0+0+2,\\ 0+2+0+0 = 0, 2, 2 K2=0,2,0,2WK=0+0+0+0, 0+0+0+2, 0+2+0+0=0,2,2

    V 2 = 0 , 2 , 0 , 2 W V = 0 + 0 + 0 + 2 , 0 + 2 + 0 + 2 , 0 + 0 + 0 + 0 = 2 , 4 , 0 V_2 = 0,2,0,2 W^V = 0+0+0+2,\\ 0+2+0+2,\\ 0+0+0+0 = 2, 4, 0 V2=0,2,0,2WV=0+0+0+2, 0+2+0+2, 0+0+0+0=2,4,0

  • 第三行 "机车" ( X 3 = 1 , 1 , 1 , 1 X_3 = 1,1,1,1 X3=1,1,1,1):

    Q 3 = 1 , 1 , 1 , 1 W Q = 1 + 0 + 0 + 1 , 0 + 1 + 0 + 0 , 0 + 0 + 1 + 0 = 2 , 1 , 1 Q_3 = 1,1,1,1 W^Q = 1+0+0+1,\\ 0+1+0+0,\\ 0+0+1+0 = 2, 1, 1 Q3=1,1,1,1WQ=1+0+0+1, 0+1+0+0, 0+0+1+0=2,1,1

    K 3 = 1 , 1 , 1 , 1 W K = 0 + 0 + 1 + 0 , 1 + 0 + 0 + 1 , 0 + 1 + 0 + 0 = 1 , 2 , 1 K_3 = 1,1,1,1 W^K = 0+0+1+0,\\ 1+0+0+1,\\ 0+1+0+0 = 1, 2, 1 K3=1,1,1,1WK=0+0+1+0, 1+0+0+1, 0+1+0+0=1,2,1

    V 3 = 1 , 1 , 1 , 1 W V = 1 + 0 + 0 + 1 , 0 + 1 + 0 + 1 , 1 + 0 + 1 + 0 = 2 , 2 , 2 V_3 = 1,1,1,1 W^V = 1+0+0+1,\\ 0+1+0+1,\\ 1+0+1+0 = 2, 2, 2 V3=1,1,1,1WV=1+0+0+1, 0+1+0+1, 1+0+1+0=2,2,2

2) 计算注意力分数

用缩放点积: score ( i , j ) = Q i ⋅ K j T d k \text{score}(i,j) = \frac{Q_i \cdot K_j^T}{\sqrt{d_k}} score(i,j)=dk Qi⋅KjT,这里 d k = 3 d_k = 3 dk=3, 3 ≈ 1.732 \sqrt{3} \approx 1.732 3 ≈1.732。

先算 Q 1 Q_1 Q1 对所有 K 的点积:

  • Q 1 ⋅ K 1 T = 1 × 1 + 0 × 1 + 1 × 0 = 1 Q_1 \cdot K_1^T = 1\times1 + 0\times1 + 1\times0 = 1 Q1⋅K1T=1×1+0×1+1×0=1
  • Q 1 ⋅ K 2 T = 1 × 0 + 0 × 2 + 1 × 2 = 2 Q_1 \cdot K_2^T = 1\times0 + 0\times2 + 1\times2 = 2 Q1⋅K2T=1×0+0×2+1×2=2
  • Q 1 ⋅ K 3 T = 1 × 1 + 0 × 2 + 1 × 1 = 2 Q_1 \cdot K_3^T = 1\times1 + 0\times2 + 1\times1 = 2 Q1⋅K3T=1×1+0×2+1×1=2

将每个点积除以 1.732 即得到缩放后的分数:

  • 1 / 1.732 ≈ 0.577 1 / 1.732 ≈ 0.577 1/1.732≈0.577
  • 2 / 1.732 ≈ 1.155 2 / 1.732 ≈ 1.155 2/1.732≈1.155
  • 2 / 1.732 ≈ 1.155 2 / 1.732 ≈ 1.155 2/1.732≈1.155

缩放后得分向量为 0.577 , 1.155 , 1.155 0.577, 1.155, 1.155 0.577,1.155,1.155

Softmax 计算(保留三位小数):

softmax ( 0.577 , 1.155 , 1.155 ) = e 0.577 e 0.577 + 2 e 1.155 , e 1.155 e 0.577 + 2 e 1.155 , e 1.155 e 0.577 + 2 e 1.155 \text{softmax}(0.577, 1.155, 1.155) = \left \\frac{e\^{0.577}}{e\^{0.577}+2e\^{1.155}},\\ \\frac{e\^{1.155}}{e\^{0.577}+2e\^{1.155}},\\ \\frac{e\^{1.155}}{e\^{0.577}+2e\^{1.155}} \\right softmax(0.577,1.155,1.155)=e0.577+2e1.155e0.577, e0.577+2e1.155e1.155, e0.577+2e1.155e1.155

e 0.577 ≈ 1.781 , e 1.155 ≈ 3.174 e^{0.577} \approx 1.781,\ e^{1.155} \approx 3.174 e0.577≈1.781, e1.155≈3.174,分母 = 1.781 + 2 × 3.174 = 8.129 = 1.781 + 2\times3.174 = 8.129 =1.781+2×3.174=8.129。

然后每个权重 = 对应指数 / 分母:

  • 1.781 / 8.129 ≈ 0.219 1.781 / 8.129 ≈ 0.219 1.781/8.129≈0.219
  • 3.174 / 8.129 ≈ 0.391 3.174 / 8.129 ≈ 0.391 3.174/8.129≈0.391
  • 3.174 / 8.129 ≈ 0.391 3.174 / 8.129 ≈ 0.391 3.174/8.129≈0.391

得到权重: 0.219 , 0.391 , 0.391 0.219, 0.391, 0.391 0.219,0.391,0.391

3) 加权求和输出

对于第一个位置的输出 Z 1 Z_1 Z1

Z 1 = 0.219 × V 1 + 0.391 × V 2 + 0.391 × V 3 Z_1 = 0.219 \times V_1 + 0.391 \times V_2 + 0.391 \times V_3 Z1=0.219×V1+0.391×V2+0.391×V3

V 1 = 1 , 0 , 2 , V 2 = 2 , 4 , 0 , V 3 = 2 , 2 , 2 V_1=1,0,2,\ V_2=2,4,0,\ V_3=2,2,2 V1=1,0,2, V2=2,4,0, V3=2,2,2

  • 第一维: 0.219 × 1 + 0.391 × 2 + 0.391 × 2 = 0.219 + 0.782 + 0.782 = 1.783 0.219\times1 + 0.391\times2 + 0.391\times2 = 0.219 + 0.782 + 0.782 = 1.783 0.219×1+0.391×2+0.391×2=0.219+0.782+0.782=1.783
  • 第二维: 0.219 × 0 + 0.391 × 4 + 0.391 × 2 = 0 + 1.564 + 0.782 = 2.346 0.219\times0 + 0.391\times4 + 0.391\times2 = 0 + 1.564 + 0.782 = 2.346 0.219×0+0.391×4+0.391×2=0+1.564+0.782=2.346
  • 第三维: 0.219 × 2 + 0.391 × 0 + 0.391 × 2 = 0.438 + 0 + 0.782 = 1.220 0.219\times2 + 0.391\times0 + 0.391\times2 = 0.438 + 0 + 0.782 = 1.220 0.219×2+0.391×0+0.391×2=0.438+0+0.782=1.220

所以 Z 1 ≈ 1.783 , 2.346 , 1.220 Z_1 \approx 1.783, 2.346, 1.220 Z1≈1.783,2.346,1.220。同理可算出 Z 2 , Z 3 Z_2, Z_3 Z2,Z3。

补全 Z 2 Z_{2} Z2 和 Z 3 Z_{3} Z3 的计算:

延续相同的输入和 Q , K , V Q, K, V Q,K,V 值

计算 Z 2 Z_{2} Z2(对应"好")

Q 2 = 2 , 2 , 0 Q_2 = 2, 2, 0 Q2=2,2,0

与各 Key 的点积(未缩放):

  • Q 2 ⋅ K 1 T = 2 × 1 + 2 × 1 + 0 × 0 = 4 Q_2 \cdot K_1^T = 2×1+2×1+0×0=4 Q2⋅K1T=2×1+2×1+0×0=4
  • Q 2 ⋅ K 2 T = 2 × 0 + 2 × 2 + 0 × 2 = 4 Q_2 \cdot K_2^T = 2×0+2×2+0×2=4 Q2⋅K2T=2×0+2×2+0×2=4
  • Q 2 ⋅ K 3 T = 2 × 1 + 2 × 2 + 0 × 1 = 6 Q_2 \cdot K_3^T = 2×1+2×2+0×1=6 Q2⋅K3T=2×1+2×2+0×1=6

缩放(除以 3 ≈ 1.732 \sqrt{3} \approx 1.732 3 ≈1.732):

  • 4 / 1.732 ≈ 2.309 4 / 1.732 ≈ 2.309 4/1.732≈2.309
  • 4 / 1.732 ≈ 2.309 4 / 1.732 ≈ 2.309 4/1.732≈2.309
  • 6 / 1.732 ≈ 3.464 6 / 1.732 ≈ 3.464 6/1.732≈3.464

Softmax 权重

  • e 2.309 ≈ 10.06 e^{2.309} \approx 10.06 e2.309≈10.06
  • e 3.464 ≈ 31.90 e^{3.464} \approx 31.90 e3.464≈31.90
  • 分母 ≈ 10.06 + 10.06 + 31.90 = 52.02 \approx 10.06 + 10.06 + 31.90 = 52.02 ≈10.06+10.06+31.90=52.02
  • 权重: 10.06 / 52.02 ≈ 0.193 , 0.193 , 31.90 / 52.02 ≈ 0.613 10.06/52.02 \\approx 0.193, 0.193, 31.90/52.02 \\approx 0.613 10.06/52.02≈0.193,0.193,31.90/52.02≈0.613

加权求和 Z 2 = 0.193 V 1 + 0.193 V 2 + 0.613 V 3 Z_2 = 0.193V_1 + 0.193V_2 + 0.613V_3 Z2=0.193V1+0.193V2+0.613V3

V 1 = 1 , 0 , 2 , V 2 = 2 , 4 , 0 , V 3 = 2 , 2 , 2 V1 = 1,0,2 ,V2 = 2,4,0 ,V3 = 2,2,2 V1=1,0,2,V2=2,4,0,V3=2,2,2

  • 第一维: 0.193 × 1 + 0.193 × 2 + 0.613 × 2 = 0.193 + 0.386 + 1.226 = 1.8050.193 × 1 + 0.193 × 2 + 0.613 × 2 = 0.193 + 0.386 + 1.226 = 1.805 0.193×1+0.193×2+0.613×2=0.193+0.386+1.226=1.8050.193×1+0.193×2+0.613×2=0.193+0.386+1.226=1.805 0.193×1+0.193×2+0.613×2=0.193+0.386+1.226=1.8050.193×1+0.193×2+0.613×2=0.193+0.386+1.226=1.805
  • 第二维: 0.193 × 0 + 0.193 × 4 + 0.613 × 2 = 0 + 0.772 + 1.226 = 1.9980.193 × 0 + 0.193 × 4 + 0.613 × 2 = 0 + 0.772 + 1.226 = 1.998 0.193×0+0.193×4+0.613×2=0+0.772+1.226=1.9980.193×0+0.193×4+0.613×2=0+0.772+1.226=1.998 0.193×0+0.193×4+0.613×2=0+0.772+1.226=1.9980.193×0+0.193×4+0.613×2=0+0.772+1.226=1.998
  • 第三维: 0.193 × 2 + 0.193 × 0 + 0.613 × 2 = 0.386 + 0 + 1.226 = 1.6120.193 × 2 + 0.193 × 0 + 0.613 × 2 = 0.386 + 0 + 1.226 = 1.612 0.193×2+0.193×0+0.613×2=0.386+0+1.226=1.6120.193×2+0.193×0+0.613×2=0.386+0+1.226=1.612 0.193×2+0.193×0+0.613×2=0.386+0+1.226=1.6120.193×2+0.193×0+0.613×2=0.386+0+1.226=1.612

得到 Z 2 ≈ 1.805 , 1.998 , 1.612 Z_2 \approx 1.805,1.998,1.612 Z2≈1.805,1.998,1.612

计算 Z 3 Z_{3} Z3(对应"机车")

Q 3 = 2 , 1 , 1 Q_3 = 2, 1, 1 Q3=2,1,1

与各 Key 的点积(未缩放)

  • Q 3 ⋅ K 1 T = 2 × 1 + 1 × 1 + 1 × 0 = 3 Q_3 \cdot K_1^T = 2 \times 1 + 1 \times 1 + 1 \times 0 = 3 Q3⋅K1T=2×1+1×1+1×0=3
  • Q 3 ⋅ K 2 T = 2 × 0 + 1 × 2 + 1 × 2 = 4 Q_3 \cdot K_2^T = 2 \times 0 + 1 \times 2 + 1 \times 2 = 4 Q3⋅K2T=2×0+1×2+1×2=4
  • Q 3 ⋅ K 3 T = 2 × 1 + 1 × 2 + 1 × 1 = 5 Q_3 \cdot K_3^T = 2 \times 1 + 1 \times 2 + 1 \times 1 = 5 Q3⋅K3T=2×1+1×2+1×1=5

缩放:

  • 3 / 1.732 ≈ 1.732 3 / 1.732 ≈ 1.732 3/1.732≈1.732
  • 4 / 1.732 ≈ 2.309 4 / 1.732 ≈ 2.309 4/1.732≈2.309
  • 5 / 1.732 ≈ 2.887 5 / 1.732 ≈ 2.887 5/1.732≈2.887

Softmax 权重:

  • e 1.732 ≈ 5.65 e^{1.732} \approx 5.65 e1.732≈5.65
  • e 2.309 ≈ 10.06 e^{2.309} \approx 10.06 e2.309≈10.06
  • e 2.887 ≈ 17.93 e^{2.887} \approx 17.93 e2.887≈17.93
  • 分母 ≈ 5.65 + 10.06 + 17.93 = 33.64 \approx 5.65 + 10.06 + 17.93 = 33.64 ≈5.65+10.06+17.93=33.64
  • 权重: 5.65 / 33.64 ≈ 0.168 , 10.06 / 33.64 ≈ 0.299 , 17.93 / 33.64 ≈ 0.533 5.65/33.64 \\approx 0.168, 10.06/33.64 \\approx 0.299, 17.93/33.64 \\approx 0.533 5.65/33.64≈0.168,10.06/33.64≈0.299,17.93/33.64≈0.533

加权求和: Z 3 = 0.168 V 1 + 0.299 V 2 + 0.533 V 3 Z_3 = 0.168V_1 + 0.299V_2 + 0.533V_3 Z3=0.168V1+0.299V2+0.533V3

  • 第一维: 0.168 × 1 + 0.299 × 2 + 0.533 × 2 = 0.168 + 0.598 + 1.066 = 1.8320.168 × 1 + 0.299 × 2 + 0.533 × 2 = 0.168 + 0.598 + 1.066 = 1.832 0.168×1+0.299×2+0.533×2=0.168+0.598+1.066=1.8320.168×1+0.299×2+0.533×2=0.168+0.598+1.066=1.832 0.168×1+0.299×2+0.533×2=0.168+0.598+1.066=1.8320.168×1+0.299×2+0.533×2=0.168+0.598+1.066=1.832
  • 第二维: 0.168 × 0 + 0.299 × 4 + 0.533 × 2 = 0 + 1.196 + 1.066 = 2.2620.168 × 0 + 0.299 × 4 + 0.533 × 2 = 0 + 1.196 + 1.066 = 2.262 0.168×0+0.299×4+0.533×2=0+1.196+1.066=2.2620.168×0+0.299×4+0.533×2=0+1.196+1.066=2.262 0.168×0+0.299×4+0.533×2=0+1.196+1.066=2.2620.168×0+0.299×4+0.533×2=0+1.196+1.066=2.262
  • 第三维: 0.168 × 2 + 0.299 × 0 + 0.533 × 2 = 0.336 + 0 + 1.066 = 1.4020.168 × 2 + 0.299 × 0 + 0.533 × 2 = 0.336 + 0 + 1.066 = 1.402 0.168×2+0.299×0+0.533×2=0.336+0+1.066=1.4020.168×2+0.299×0+0.533×2=0.336+0+1.066=1.402 0.168×2+0.299×0+0.533×2=0.336+0+1.066=1.4020.168×2+0.299×0+0.533×2=0.336+0+1.066=1.402

得到 Z 2 ≈ 1.832 , 2.262 , 1.402 Z_2 \approx 1.832,2.262,1.402 Z2≈1.832,2.262,1.402

小结:

可以看到,"你" 的输出融合了全序列信息,且与"好""机车"的权重较高,体现了长距离依赖。

解读:

"你"的输出融合了全序列信息。 计算"你"的最终表示 Z 1 Z_{1} Z1 时,并不只用"你"自己的信息,而是把整个序列里"你""好""机车"三者的信息都考虑了进去。

通过 Z 1 Z_{1} Z1 的计算公式是加权求和: Z 1 = w 11 V 1 + w 12 V 2 + w 13 V 3 Z_1 = w_{11}V_1 + w_{12}V_2 + w_{13}V_3 Z1=w11V1+w12V2+w13V3

  • 权重 w 11 , w 12 , w 13 w_{11},w_{12},w_{13} w11,w12,w13 是注意力权重, V 1 , V 2 , V 3 V_{1},V_{2},V_{3} V1,V2,V3分别是"你""好""机车"的值向量
  • 因此 Z 1 Z_{1} Z1 里同时包含了这三个词的特征,这就是"融合了全序列信息"。

"与'好''机车'的权重较高"。在计算 Z 1 Z_{1} Z1 时,分配给"好"和"机车"的注意力权重比分配给"你"自己的还要高。

从前面算出的注意力权重是:

  • "你" → "你":0.219
  • "你" → "好":0.391
  • "你" → "机车":0.391

可见,后两者的权重明显高于 0.219,所以"你"更多地关注了"好"和"机车"

所以为什么这体现了"长距离依赖"?

在序列"你 好 机车"中,"你"和"机车"之间隔着一个词,属于较长距离。

传统 RNN 等模型可能因为距离远而难以直接建立联系,但自注意力机制可以直接计算它们之间的点积并给予高权重。

说明它能自动跨越距离,捕捉到语义上相关的元素,这就是"长距离依赖"。

从 Q 1 Q_{1} Q1 ("你"的查询)与各个 K 的点积时:

  • Q 1 ⋅ K 1 = 1 Q_1 \cdot K_1 = 1 Q1⋅K1=1 (自身)
  • Q 1 ⋅ K 2 = 2 Q_1 \cdot K_2 = 2 Q1⋅K2=2 (好)
  • Q 1 ⋅ K 3 = 2 Q_1 \cdot K_3 = 2 Q1⋅K3=2 (机车)

点积大小反映了原始的"匹配程度"。

可以看到, Q 1 Q_{1} Q1 与远处的"机车"点积和"好"一样高,并没有因为距离而衰减。

经过 softmax 归一化后,这种相关性直接反映为注意力权重的高低,从而让"机车"的信息在 Z 1 Z_{1} Z1 中占据重要地位。

这就是"长距离依赖"的数值证据。


4. 多头自注意力机制 ------ 从单视角到多视角

单头注意力只能学习一种关联模式,多头则并行运行多个独立的注意力"头",让模型关注不同子空间的信息。

延续上例,设头数 h = 2 h=2 h=2

我们需要为每个头准备单独的 W Q , W K , W V W^Q, W^K, W^V WQ,WK,WV。

简单起见,将原先的 W ∗ W^* W∗ 拆分为两部分:前两列给 head 1,后一列给 head 2(或者降维后再拆)。

这里我们重新定义每个头的维度 d k = d v = 2 d_k = d_v = 2 dk=dv=2,权重随机设定。

Head 1 权重矩阵(4×2)

W Q 1 = 1 0 0 1 0 0 1 0 W^{Q1} = \begin{bmatrix}1&0\\0&1\\0&0\\1&0\end{bmatrix} WQ1= 10010100 ,

W K 1 = 0 1 1 0 0 1 0 0 W^{K1} = \begin{bmatrix}0&1\\1&0\\0&1\\0&0\end{bmatrix} WK1= 01001010 ,

W V 1 = 1 0 0 1 1 0 0 1 W^{V1} = \begin{bmatrix}1&0\\0&1\\1&0\\0&1\end{bmatrix} WV1= 10100101

Head 2 权重矩阵(4×2)

W Q 2 = 0 0 1 0 0 1 0 1 W^{Q2} = \begin{bmatrix}0&0\\1&0\\0&1\\0&1\end{bmatrix} WQ2= 01000011 ,

W K 2 = 1 0 0 0 0 1 1 0 W^{K2} = \begin{bmatrix}1&0\\0&0\\0&1\\1&0\end{bmatrix} WK2= 10010010 ,

W V 2 = 0 1 1 1 0 0 1 0 W^{V2} = \begin{bmatrix}0&1\\1&1\\0&0\\1&0\end{bmatrix} WV2= 01011100

计算每个头的 Q, K, V(仅以"你"为例,其他词类似)

对 X 1 = 1 , 0 , 1 , 0 X_1=1,0,1,0 X1=1,0,1,0

  • Head1:
    Q 1 1 = 1 , 0 Q_1^1 = 1,0 Q11=1,0,
    K 1 1 = 1 , 0 , 1 , 0 W K 1 = 0 , 2 K_1^1 = 1,0,1,0 W^{K1} = 0, 2 K11=1,0,1,0WK1=0,2 (计算: 1 × 0 + 0 × 1 + 1 × 0 + 0 × 0 = 0 1\times0+0\times1+1\times0+0\times0 = 0 1×0+0×1+1×0+0×0=0, 1 × 1 + 0 × 0 + 1 × 1 + 0 × 0 = 2 1\times1+0\times0+1\times1+0\times0 = 2 1×1+0×0+1×1+0×0=2)
    V 1 1 = 1 , 0 , 1 , 0 , W V 1 = 2 , 0 V_1^1 = 1,0,1,0 ,W^{V1} = 2, 0 V11=1,0,1,0,WV1=2,0
  • Head2:
    Q 1 2 = 1 , 0 , 1 , 0 , W Q 2 = 0 , 1 Q_1^2 = 1,0,1,0 ,W^{Q2} = 0, 1 Q12=1,0,1,0,WQ2=0,1 (第一维: 1 × 0 + 0 × 1 + 1 × 0 + 0 × 0 = 0 1\times0+0\times1+1\times0+0\times0=0 1×0+0×1+1×0+0×0=0,第二维: 1 × 0 + 0 × 0 + 1 × 1 + 0 × 1 = 1 1\times0+0\times0+1\times1+0\times1=1 1×0+0×0+1×1+0×1=1)
    K 1 2 = 1 , 0 , 1 , 0 , W K 2 = 1 , 1 K_1^2 = 1,0,1,0 ,W^{K2} = 1, 1 K12=1,0,1,0,WK2=1,1 (第一维: 1 × 1 + 0 × 0 + 1 × 0 + 0 × 1 = 1 1\times1+0\times0+1\times0+0\times1=1 1×1+0×0+1×0+0×1=1,第二维: 1 × 0 + 0 × 0 + 1 × 1 + 0 × 0 = 1 1\times0+0\times0+1\times1+0\times0=1 1×0+0×0+1×1+0×0=1)
    V 1 2 = 1 , 0 , 1 , 0 , W V 2 = 0 , 1 V_1^2 = 1,0,1,0 ,W^{V2} = 0, 1 V12=1,0,1,0,WV2=0,1 (第一维: 1 × 0 + 0 × 1 + 1 × 0 + 0 × 1 = 0 1\times0+0\times1+1\times0+0\times1=0 1×0+0×1+1×0+0×1=0,第二维: 1 × 1 + 0 × 1 + 1 × 0 + 0 × 0 = 1 1\times1+0\times1+1\times0+0\times0=1 1×1+0×1+1×0+0×0=1)

接着在每个头内,独立地进行缩放点积注意力计算(过程同第三节),得到每个头输出的 Z i 1 , Z i 2 Z_i^1, Z_i^2 Zi1,Zi2(维度均为2)。

最后,将两个头的输出拼接起来,再乘以输出权重矩阵 W O W^O WO(这里可设为2×4→4)得到最终的多头输出。

例如,拼接后 Z 1 = Z 1 1 , Z 1 2 Z_1 = Z_1\^1, Z_1\^2 Z1=Z11,Z12 维度为4,再与 W O W^O WO 相乘还原到模型维度。这样,序列的每个位置都包含了来自不同表示子空间的信息。


5. 通道注意力机制(SENet) ------ 告诉模型"哪个通道更重要"

在卷积神经网络中,不同的卷积核提取不同特征(纹理、颜色等),但并非所有通道都对当前任务同等有用。通道注意力就是给每个通道分配权重。

SENet 步骤(假设输入特征图维度 C × H × W C \times H \times W C×H×W)

  1. Squeeze(压缩) :对每个通道做全局平均池化,得到一个 C C C 维向量。例如,某通道的 2 × 2 2\times2 2×2 特征图为 1 3 2 4 \begin{bmatrix}1&3\\2&4\end{bmatrix} 1234,池化后为 ( 1 + 3 + 2 + 4 ) / 4 = 2.5 (1+3+2+4)/4 = 2.5 (1+3+2+4)/4=2.5。
  2. Excitation(激励):将这个向量送入一个小型全连接网络(降维再升维),经 Sigmoid 激活后得到每个通道的权重(0~1之间)。
  3. Scale(缩放):将原始特征图每个通道乘以对应权重,强化重要通道,抑制次要通道。

数值示例

假设经过卷积后的特征图 U U U 有 3 个通道,每个通道空间尺寸 2 × 2 2\times2 2×2。

C 1 : 1 1 1 1 , C 2 : 2 2 2 2 , C 3 : 3 3 3 3 C1: \begin{bmatrix}1&1\\1&1\end{bmatrix}, C2: \begin{bmatrix}2&2\\2&2\end{bmatrix}, C3: \begin{bmatrix}3&3\\3&3\end{bmatrix} C1:1111,C2:2222,C3:3333

Squeeze 得向量 1 , 2 , 3 1, 2, 3 1,2,3。经过一个简单的 Excitation 网络(设权重 W 1 W_1 W1 将3维映射到2维,ReLU,再映射回3维,Sigmoid),可能得到权重 0.2 , 0.5 , 0.9 0.2, 0.5, 0.9 0.2,0.5,0.9

最后,逐通道相乘:C1 所有值变为 1 × 0.2 = 0.2 1\times0.2=0.2 1×0.2=0.2,C2 变为 2 × 0.5 = 1.0 2\times0.5=1.0 2×0.5=1.0,C3 变为 3 × 0.9 = 2.7 3\times0.9=2.7 3×0.9=2.7。模型将更关注第三个通道的特征。


6. 空间注意力机制(CBAM 中的空间注意力) ------ 告诉模型"哪里更重要"

空间注意力关注的是图像中的位置,通过压缩通道维度来得到二维的空间重要性图。CBAM 中的空间注意力模块接在通道注意力之后。

计算步骤

  1. 对输入特征图( C × H × W C \times H \times W C×H×W),在通道维度上分别做全局最大池化和全局平均池化,得到两个 1 × H × W 1\times H\times W 1×H×W 的矩阵。
  2. 将这两个矩阵拼接起来,形成一个 2 × H × W 2\times H\times W 2×H×W 的"特征图"。
  3. 通过一个卷积层(如7×7卷积)和 Sigmoid 激活,生成一张空间权重图( 1 × H × W 1\times H\times W 1×H×W)。
  4. 将这张权重图乘回原始特征图的每一个位置(广播相乘)。

数值示例

假设某个 2 × 2 2\times2 2×2 空间位置,通过所有通道的像素值(3个通道)为:

位置(0,0): 1, 5, 3 → 平均池化=3,最大池化=5

位置(0,1): 2, 4, 2 → 平均=2.67,最大=4

位置(1,0): 0, 6, 1 → 平均=2.33,最大=6

位置(1,1): 3, 3, 4 → 平均=3.33,最大=4

拼接后得到两个"通道"的2×2矩阵:平均池化矩阵 3 2.67 2.33 3.33 \begin{bmatrix}3 & 2.67\\ 2.33 & 3.33\end{bmatrix} 32.332.673.33,最大池化矩阵 5 4 6 4 \begin{bmatrix}5&4\\6&4\end{bmatrix} 5644

经过卷积和 Sigmoid 后,可能得到空间权重 0.9 0.3 0.8 0.5 \begin{bmatrix}0.9 & 0.3\\ 0.8 & 0.5\end{bmatrix} 0.90.80.30.5

将这个权重乘到原特征图每个通道的相应空间位置,让模型更关注(0,0)和(1,0)等高权重区域。


7. 完整串联:从自然语言处理到计算机视觉

我们用一个虚构的跨模态任务将上述机制串联起来:输入一张图片,模型需生成其文字描述。

  • 视觉编码器:用 CNN 提取图像特征图,依次通过通道注意力(SENet)和空间注意力(CBAM)增强特征,让模型聚焦在显著物体区域。
  • 特征向量化:将增强后的特征图展平或通过某个区域特征提取,得到一组向量序列,作为"图像部分的词元"。
  • 序列融合:将图像词元与文本前缀(如"START")一同输入 Transformer 解码器。解码器中,自注意力让文本上下文交互,交叉注意力(Q 来自文本,K,V 来自图像)则将视觉信息注入文本生成。
  • 生成下一个词:每一层都使用多头自注意力或交叉注意力,最终输出词的概率分布。

在这个过程中,通道注意力筛选了有用的特征通道,空间注意力锁定了关键图像位置,而自注意力/多头注意力保证了文本序列的连贯性和对视觉信息的动态选取。


总结

自注意力让序列元素两两交互,多头则提供多子空间表征。

通道注意力(SENet)告诉模型"哪个通道值得关注",空间注意力(CBAM)指出"通道内的哪个位置更重要"。

这些机制可以灵活组合,如 Transformer + CBAM 的视觉模型,或文本任务中加入通道/空间维度重标定。

参考资料

相关推荐
z小猫不吃鱼2 小时前
02 Optimal Brain Damage 详解:二阶信息剪枝的起点
算法·机器学习·剪枝
m0_626535202 小时前
近似attention
人工智能·算法·机器学习
atunet2 小时前
关于算法优化的渐进式重构与代码级实践的技术7
算法
霖大侠3 小时前
Decoupled and Reusable Adaptation for Efficient Cross-Modal Transfer
人工智能·深度学习·算法·机器学习·transformer
OOJO3 小时前
哈希表实现
数据结构·哈希算法·散列表
Sam09273 小时前
【AI 算法精讲 16】BPE 分词:从字节对到子词
人工智能·python·算法·ai
LJHclasstore_luo3 小时前
【题解】WebGoC 102683.大雨过后
算法·goc编程
MrZhao4003 小时前
Agent 如何持续工作:任务持久化、后台执行与定时唤醒
算法