source: 小红书 url: https://www.xiaohongshu.com/discovery/item/69d139f600000000230212af?app_platform=ios&app_version=9.25&share_from_user_hidden=true&xsec_source=app_share&type=normal&xsec_token=CByXR4QCnS_lhns3Rx3ElnT0LUBqWK2h4pNt2itkD3Tqg=&author_share=1&xhsshare=WeixinSession&shareRedId=ODY7Nzs8ND02NzUyOTgwNjY0OTc5Sz85&apptime=1777893984&share_id=174bffe3e4b84cfe9265d12a0dd3d073 saved: 2026-05-04 19:26:45
id: 02cc1858-954f-4c81-89dc-a45b94870f8f
作者: maybe
发布/编辑时间: 2026年04月04日 16:19
假设现在有一个序列,一共有 4 个元素,每个元素是 8 维特征。
可以把输入写成:
X:4 × 8
(4 表示序列长度,8 表示每个特征的维度)
第一步:线性映射(生成 Q、K、V)
我们用三个矩阵,把原始特征投影到新的空间:
W_Q:8 × 4
W_K:8 × 4
W_V:8 × 4
计算之后得到:
Q = X · W_Q → 4 × 4
K = X · W_K → 4 × 4
V = X · W_V → 4 × 4
这里可以理解为:原来的 8 维特征,被压缩到了一个 4 维的“关系空间”。
第二步:计算注意力分数
S = Q · K^T
维度变化:
(4 × 4) · (4 × 4)^T → 4 × 4
这个矩阵的含义是:
第 i 行第 j 列,表示“第 i 个位置,对第 j 个位置有多关注”。
第三步:归一化(softmax)
A = softmax(S / √4)
这里 √4 = 2,是为了防止数值过大。
得到:
A:4 × 4
每一行加起来等于 1,可以理解为“注意力分布”。
第四步:加权求和
Y = A · V
维度:
(4 × 4) · (4 × 4) → 4 × 4
这一步是最关键的:
每一个位置的输出,都是对所有位置的 V 做了一次加权组合。
第五步:映射回原空间
W_O:4 × 8
Z = Y · W_O → 4 × 8
这样就回到了最初的维度,方便后面做残差连接。
如果换成多头注意力,可以这样理解:
假设用 2 个头,每个头都会重复上面的过程,但参数不一样。
每个头输出:4 × 4
拼接之后:
Concat → 4 × 8
再线性变换:
输出 → 4 × 8
本质上是:
用两个不同的“视角”去理解同一份数据。
如果再往前走一步,就是多重注意力(比如视觉任务里常见的)。
假设输入是:
X:C × H × W
通道注意力会生成一个权重:
w_c:C × 1 × 1
作用是:
X' = w_c × X
(给每个通道一个重要性)
空间注意力生成:
w_s:1 × H × W
然后:
X'' = w_s × X'






