MHSA注意力机制
时间: 2025-04-28 18:24:03 浏览: 86
### MHSA(多头自注意力)机制的原理
在深度学习中,多头自注意力(Multi-Head Self-Attention, MHSA)是一种用于处理序列数据的强大工具。该机制通过多个并行的自注意力层来捕捉输入序列中的不同表示子空间的信息。
#### 自注意力的基础概念
自注意力允许模型关注同一序列的不同位置,从而更好地建模依赖关系。具体来说,在计算过程中会生成三个向量:查询(Query)、键(Key)以及值(Value)。这三个矩阵分别代表了当前词与其他词语之间的关联程度及其对应的语义信息[^1]。
对于单个头部而言:
\[ \text{Attention}(Q,K,V)=\text{softmax}\left(\frac{QK^{T}}{\sqrt {d_{k}}} \right)V \]
其中 \( d_k \) 是键维度大小;\( Q \),\( K \), 和 \( V \) 分别对应于查询、键和值矩阵。
为了进一步增强表达能力,引入了多头结构,即在同一时间点上运行 h 组独立但参数不同的自注意力操作,并将它们的结果拼接起来作为最终输出:
\[ \text{MultiHead}(Q,K,V)=\text{Concat}(\text{head}_{1},...,\text{head}_{h})W^{O} \]
这里每一组 head_i 都遵循上述公式定义的方式工作,而 W^O 则是用来调整组合后的特征维数的一个线性变换权重矩阵。
这种设计使得网络可以联合地从不同表征子空间中提取信息,提高了模型对复杂模式的理解力。
```python
import torch.nn as nn
class MultiHeadSelfAttention(nn.Module):
def __init__(self, embed_size, num_heads):
super(MultiHeadSelfAttention, self).__init__()
self.embed_size = embed_size
self.num_heads = num_heads
assert (embed_size % num_heads == 0), "Embed size must be divisible by number of heads"
self.head_dim = embed_size // num_heads
# Linear layers for queries, keys and values projections
self.W_q = nn.Linear(embed_size, embed_size)
self.W_k = nn.Linear(embed_size, embed_size)
self.W_v = nn.Linear(embed_size, embed_size)
self.fc_out = nn.Linear(embed_size, embed_size)
def forward(self, query, key, value, mask=None):
N = query.shape[0]
seq_length = query.size(1)
q = self.W_q(query).view(N, seq_length, self.num_heads, self.head_dim).transpose(1, 2)
k = self.W_k(key).view(N, seq_length, self.num_heads, self.head_dim).transpose(1, 2)
v = self.W_v(value).view(N, seq_length, self.num_heads, self.head_dim).transpose(1, 2)
energy = torch.einsum("nqhd,nkhd->nhqk", [q, k]) / (self.head_dim ** 0.5)
if mask is not None:
energy = energy.masked_fill(mask == 0, float("-1e20"))
attention_scores = torch.softmax(energy, dim=-1)
out = torch.einsum("nhql,nlhd->nqhd", [attention_scores, v]).transpose(1, 2).contiguous().view(N, seq_length, -1)
return self.fc_out(out)
```
### 应用实例
MHSA 已经被广泛应用于自然语言处理领域内的各种任务当中,比如机器翻译、文本分类等。除此之外,在计算机视觉方面也有着重要的作用,例如图像描述生成或者视频动作识别等领域都可以见到其身影。另外值得注意的是,在语音情感识别研究中也采用了类似的架构来进行跨模态数据分析[^2]。
阅读全文
相关推荐




















