注意力机制和自注意力机制和多头注意力机制
时间: 2025-05-11 12:31:10 浏览: 38
### 注意力机制、自注意力机制与多头注意力机制
#### 定义与概念
注意力机制是一种用于增强模型性能的技术,它允许模型聚焦于输入序列的不同部分以生成输出[^1]。通过分配不同的权重给输入中的各个元素,注意力机制能够帮助神经网络更好地捕捉重要特征。
相比之下,自注意力机制(Self-Attention Mechanism)专注于同一序列内部的关系建模。具体而言,该方法计算序列中每个位置与其他所有位置之间的关系强度,并据此调整其表示向量。这种方法特别适用于自然语言处理任务,在这些场景下可以有效捕获长距离依赖性。
多头注意力机制则是对标准自注意力的一种扩展形式。它的核心思想在于并行运行多个独立的注意力子层,从而使得模型可以从不同角度提取信息。最终会将各头部的结果拼接起来并通过线性变换得到整体输出。
#### 主要差异对比
| 特征 | Attention Mechanism | Self-Attention Mechanism | Multi-Head Attention Mechanism |
|---------------------|----------------------------------------|---------------------------------------|-----------------------------------------|
| 输入源 | 来自两个不同的序列 | 同一序列 | 同一序列 |
| 关系建模 | 跨越两个序列 | 序列内 | 多视角下的序列内 |
| 计算复杂度 | 较低 | 中等 | 高 |
以下是实现一个多头注意力机制的一个简单例子:
```python
import torch.nn as nn
import torch
class MultiHeadAttention(nn.Module):
def __init__(self, d_model, num_heads):
super(MultiHeadAttention, self).__init__()
assert d_model % num_heads == 0
self.d_k = d_model // num_heads
self.num_heads = num_heads
self.W_q = nn.Linear(d_model, d_model)
self.W_k = nn.Linear(d_model, d_model)
self.W_v = nn.Linear(d_model, d_model)
self.fc_out = nn.Linear(d_model, d_model)
def forward(self, q, k, v):
batch_size = q.size(0)
# Linear transformations
Q = self.W_q(q).view(batch_size, -1, self.num_heads, self.d_k).transpose(1,2)
K = self.W_k(k).view(batch_size, -1, self.num_heads, self.d_k).transpose(1,2)
V = self.W_v(v).view(batch_size, -1, self.num_heads, self.d_k).transpose(1,2)
scores = torch.matmul(Q, K.transpose(-2,-1)) / (K.size(-1)**0.5)
attn_weights = nn.Softmax(dim=-1)(scores)
context_vector = torch.matmul(attn_weights,V).transpose(1,2).contiguous().view(batch_size, -1, self.num_heads * self.d_k)
output = self.fc_out(context_vector)
return output
```
阅读全文
相关推荐


















