mhsa注意力机制原理图
时间: 2025-06-13 14:28:56 浏览: 28
### 多头自注意力机制 (MHSA) 的原理
多头自注意力机制(Multi-Head Self-Attention, MHSA)是一种用于自然语言处理和其他序列建模任务的核心技术,它通过多个并行的注意力头来捕获输入数据的不同子空间特征[^1]。其基本思想是将输入向量映射到不同的表示空间,在这些空间中计算注意力权重,并最终组合各个头部的结果。
#### 输入与线性变换
给定一个输入矩阵 \(X \in R^{n \times d}\),其中 \(n\) 是序列长度,\(d\) 是嵌入维度。对于每一个注意力头,分别定义三个可学习参数矩阵:查询权值矩阵 \(W^Q\), 键权值矩阵 \(W^K\), 和值权值矩阵 \(W^V\)。这三个矩阵被用来对输入进行线性变换:
\[ Q = X W^Q,\ K = X W^K,\ V = X W^V \]
这里 \(Q, K, V\) 分别代表查询、键和值矩阵[^2]。
#### 计算注意力分数
接着,利用缩放点积注意力公式计算每一对位置之间的相似度得分:
\[ Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V \]
这里的 \(d_k\) 表示键的维度大小,目的是为了稳定梯度下降过程中的数值范围[^3]。
#### 组合多个注意力头
在单个注意力层之后,通常会堆叠多个这样的结构形成所谓的“多头”。每个头独立工作,最后将其输出拼接起来并通过另一个全连接网络进一步加工:
```python
import torch.nn as nn
class MultiHeadedSelfAttention(nn.Module):
def __init__(self, num_heads, dim_model, dropout=0.1):
super().__init__()
self.num_heads = num_heads
assert dim_model % num_heads == 0
self.dim_head = dim_model // num_heads
self.linear_qkv = nn.Linear(dim_model, 3 * dim_model)
self.final_linear = nn.Linear(dim_model, dim_model)
def forward(self, x):
batch_size, seq_len, _ = x.size()
qkv = self.linear_qkv(x).view(batch_size, seq_len, 3, self.num_heads, self.dim_head)
q,k,v = [t.permute(2,0,3,1,4)[i] for i,t in enumerate(qkv.split([self.dim_head]*3,dim=-1))]
scores = torch.matmul(q / math.sqrt(self.dim_head), k.transpose(-2,-1))
attn_weights = F.softmax(scores, dim=-1)
context = torch.matmul(attn_weights, v)
concat_context = context.permute(1,2,0,3).contiguous().view(batch_size,seq_len,-1)
output = self.final_linear(concat_context)
return output
```
此代码片段展示了如何实现一个多头自注意模块,其中包括了必要的张量操作以及激活函数的应用[^4]。
#### 图形化解释
虽然无法直接提供图像文件,但是可以描述一下典型的 MHSA 流程图布局:
- 左侧展示的是原始输入序列;
- 中间部分显示经过不同头部转换后的 Query/Key/Value 对应关系及其相互作用;
- 右边则汇总所有头部的信息得到最终输出。
这种架构允许模型在同一时间关注来自不同表征次元的相关信息,从而增强了表达能力[^5]。
阅读全文
相关推荐


















