Multi-Head Self-Attention 直观解析


Multi-Head Self-Attention(多头自注意力机制)

一、什么是注意力机制(Attention)?

当你看一张图片时,你不会一次性注意所有像素。比如看一只猫,你可能先注意它的头,再注意尾巴、背景等。

注意力机制就是让模型学会在不同部分之间分配关注度


二、自注意力(Self-Attention)的含义

自注意力的意思是:一个元素(比如一个图像块 patch)要根据序列中其他所有元素的信息,来决定自己应该关注哪些部分。

在ViT中,每个Patch都可以“看”到其他所有Patch,从而学会它们之间的全局关系


三、它是怎么计算的?

假设图像被切成了多个Patch:$[ P_1, P_2, P_3, …, P_n ]$

每个Patch经过线性变换后会生成三个向量:

名称 含义 作用类比
Q(Query)查询向量 当前元素想“询问”别人什么 我的问题是什么?
K(Key)键向量 每个元素“代表”的特征标签 别人是谁?
V(Value)值向量 实际要传递的内容 别人能提供什么信息?

Step 1:计算相似度(Q × Kᵀ)

我们先用当前Patch的Q去和所有其他Patch的K做点积:$ \text{score}_{ij} = Q_i \cdot K_j$

它表示第i个Patch对第j个Patch的关注程度。比如猫头(Patch₁)对猫尾巴(Patch₇)的score可能高,对背景(Patch₉₉)的score可能低。


Step 2:Softmax归一化

将所有score通过 Softmax 转成概率(注意力权重):$ \alpha_{ij} = \text{softmax}(score_{ij})$

这样每个Patch的注意力分布都加起来等于1。


Step 3:加权求和

用这些权重对所有V加权求和:$ \text{output}i = \sum_j \alpha{ij} \cdot V_j $

这一步相当于:我(Patch_i)从其他Patch那里借信息的加权平均。结果是每个Patch都融合了来自其他位置的信息。


四、那为什么要多头(Multi-Head)?

上面描述的过程只是一种“注意力”,但现实中的图像关系是多层次的:

  • 一些头可能关注“形状结构”(边缘、轮廓)
  • 一些头可能关注“颜色区域”(红绿蓝差异)
  • 一些头可能关注“空间关系”(相对位置)

所以ViT引入了多头机制

将输入向量分成多个子空间,让模型并行学习多个不同类型的注意力模式。

形式上:

如果有 8 个头,每个头就会计算独立的一组 (Q, K, V),得到 8 种不同的注意力结果:$\text{head}_1, \text{head}_2, …, \text{head}_8$

然后把它们拼接(Concatenate)在一起,再通过一个线性层整合成最终输出。


例子:

假设你在看一张“猫坐在椅子上的图片”:

注意力头 模型关注的重点
Head 1 猫的边缘和轮廓(形状)
Head 2 猫的颜色分布(颜色)
Head 3 猫与椅子的空间关系(位置)
Head 4 背景与前景的分离(区域)

所有这些头的信息最后被合并,模型就能得到一个包含多层次语义关系的整体图像表示。


五、公式总结

设输入矩阵为 ( $X \in \mathbb{R}^{n \times d} $),则:

$$
Q = X W_Q,\quad K = X W_K,\quad V = X W_V
$$

单头注意力:

$$
\operatorname{Attention}(Q, K, V) = \operatorname{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right) V
$$

多头注意力:

$$
\operatorname{MultiHead}(Q, K, V) = \operatorname{Concat}(\text{head}_1, \ldots, \text{head}_h) W_O
$$

其中:

$$
\text{head}i = \operatorname{Attention}(Q W{Q_i}, K W_{K_i}, V W_{V_i})
$$


Author: linda1729
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source linda1729 !
评论
  TOC