多头注意力计算公式
时间: 2025-04-27 16:32:01 浏览: 31
### 多头自注意力机制的计算公式
在深度学习中,多头自注意力(Multi-Head Self-Attention, MHSA)是一种用于处理输入序列的关键技术[^1]。MHSA通过多个并行的自注意力层来捕捉不同位置之间的关系。
具体来说,给定查询矩阵 \( Q \),键矩阵 \( K \),以及值矩阵 \( V \),单个头部的缩放点积注意力可以定义如下:
\[ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \]
其中 \( d_k \) 是键向量的维度大小。为了实现多头注意,模型会创建多个这样的注意力子层,并将它们的结果拼接起来再经过线性变换得到最终输出:
```python
import torch.nn as nn
import math
class MultiHeadedAttention(nn.Module):
def __init__(self, h, d_model, dropout=0.1):
super(MultiHeadedAttention, self).__init__()
assert d_model % h == 0
# 假设 d_v 总是等于 d_k
self.d_k = d_model // h
self.h = h
self.linears = clones(nn.Linear(d_model, d_model), 4)
self.attn = None
self.dropout = nn.Dropout(p=dropout)
def forward(self, query, key, value, mask=None):
if mask is not None:
# 对于批处理中的所有头部都相同掩码
mask = mask.unsqueeze(1)
nbatches = query.size(0)
# 将输入转换为形状 (nbatches, num_heads, seq_len, dim_per_head)
query, key, value = \
[l(x).view(nbatches, -1, self.h, self.d_k).transpose(1, 2)
for l, x in zip(self.linears, (query, key, value))]
# 应用注意力机制
x, self.attn = attention(query, key, value, mask=mask,
dropout=self.dropout)
# 使用一个可训练的线性投影重新组合来自不同头部的信息
x = x.transpose(1, 2).contiguous() \
.view(nbatches, -1, self.h * self.d_k)
del query, key, value
return self.linears[-1](x)
```
上述代码展示了如何构建一个多头注意力模块,在实际应用时还需要配合其他组件一起工作以完成特定的任务需求。
阅读全文
相关推荐


















