自注意力QKV
时间: 2025-07-19 19:53:04 浏览: 3
### 自注意力机制中的QKV概念
在深度学习领域,尤其是自然语言处理(NLP),自注意力机制(self-attention mechanism)扮演着重要角色。该机制通过引入查询(Query, Q)、键(Key, K) 和 值(Value, V)三个矩阵来实现输入序列内部不同位置之间的关联计算[^1]。
#### 查询(Query)
查询表示当前时刻关注的信息点,在多头自注意力模型中,每一个时间步都会生成一个对应的查询向量用于与其他位置交互获取信息。这有助于理解上下文中特定部分的重要性程度[^2]。
#### 键(Key)
键代表每个元素自身的特征描述符,当给定某个查询时,可以通过比较此查询与所有其他位置上的键来进行相似度匹配操作,从而决定哪些地方应该被更多地注意到。
#### 值(Value)
值则包含了实际要传递的内容数据;一旦确定了关注度分布之后,就可以按照权重组合这些值作为最终输出的一部分参与后续运算过程。
```python
import torch.nn as nn
import math
class SelfAttention(nn.Module):
def __init__(self, embed_size, heads):
super(SelfAttention, self).__init__()
self.embed_size = embed_size
self.heads = heads
# 定义线性变换层以获得Q,K,V
self.values = nn.Linear(embed_size, embed_size, bias=False)
self.keys = nn.Linear(embed_size, embed_size, bias=False)
self.queries = nn.Linear(embed_size, embed_size, bias=False)
def forward(self, query, key, value):
N = query.shape[0]
# 对输入进行线性变换得到Q,K,V
values = self.values(value)
keys = self.keys(key)
queries = self.queries(query)
# 计算注意力分数并应用softmax函数
energy = torch.einsum("nqd,nkd->nkq", [queries, keys])
attention = torch.softmax(energy / (self.embed_size ** (1/2)), dim=1)
out = torch.bmm(values.permute(0, 2, 1), attention.permute(0, 2, 1))
return out
```
上述代码展示了如何构建一个多头自注意模块,其中`values`, `keys`, `queries`分别对应于V,Q,K的映射转换,并实现了基于这三个组件的标准缩放点积形式下的自我注意计算逻辑。
阅读全文
相关推荐

















