常用注意力机制及其代码
时间: 2024-08-22 07:03:12 浏览: 63
注意力机制(Attention Mechanism)是一种深度学习模型中用于处理序列数据的重要技术,它允许网络在处理输入时对某些部分给予更高的权重。常见的注意力机制有:
1. **硬注意力** (Hard Attention): 最基本的形式,例如自注意力(Self-Attention),如Transformer中的Multi-Head Self-Attention。它通过计算查询和键的相似度,然后生成注意力分布,选择最相关的值进行加权求和。在编码器-解码器结构中,比如Transformer,每个位置的解码器会关注源序列的不同部分。
```python
def dot_product_attention(Q, K, V):
attention_scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(V.size(-1))
attention_weights = F.softmax(attention_scores, dim=-1)
context_vector = torch.matmul(attention_weights, V)
return context_vector
```
2. **软注意力** (Soft Attention): 比较常见的是基于softmax函数的加性注意力,比如LSTM配合Attention,它通过给每个输入单元分配一个权重来动态聚焦于最重要的部分。
```python
def additive_attention(query, memory, weights):
energy = torch.tanh(torch.matmul(query, memory.permute(0, 2, 1)))
attention_weights = weights * energy
context_vector = torch.sum(attention_weights, dim=1)
return context_vector
```
3. **自注意力网络** (Self-Attention Networks, SANs): 在图像识别等领域,像SENet这样的模型引入了全局特征表示,它同时考虑局部和全局特征。
4. **位置编码** (Positional Encoding): 对于时间序列或顺序数据,通常会添加位置信息到编码器的输入,以便模型了解元素的相对顺序。
阅读全文