注意力机制的数学公式
时间: 2024-12-28 13:21:48 浏览: 3
### 注意力机制的数学公式推导
在深度学习中,注意力机制允许模型聚焦于输入序列的不同部分,从而提高处理长依赖关系的能力。以下是注意力机制的核心数学表达:
#### 查询、键和值的概念
设 \( Q \) 表示查询矩阵 (queries),\( K \) 表示键矩阵 (keys),而 \( V \) 则表示值矩阵 (values)[^1]。
这些矩阵通常是从输入数据通过线性变换获得:
\[ Q = XW_Q, K = XW_K, V = XW_V \]
其中 \( W_Q \), \( W_K \), 和 \( W_V \) 是可训练参数矩阵,用于映射原始特征到新的空间[^2]。
#### 计算注意力分数
为了计算注意力权重,首先需要衡量查询与各个键之间的相似度。常用的方法是缩放点积法:
\[ \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V \]
这里 \( d_k \) 是键向量维度大小,除以其平方根是为了防止梯度过大影响收敛速度[^3]。
此公式的具体含义如下:
- **Query-Key Dot Product**: 对应位置相乘并求和得到匹配程度得分;
- **Scaling Factor**: 使用 \( \sqrt{d_k} \) 进行标准化操作;
- **Softmax Function**: 将所得分转换成概率分布形式作为最终加权系数;
最后一步就是利用上述计算出来的权重对 Value 向量做加权平均运算来获取输出结果。
```python
import torch.nn.functional as F
def attention(query, key, value):
# Compute dot product between queries and keys
scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(key.size(-1))
# Apply softmax to get weights
p_attn = F.softmax(scores, dim=-1)
# Multiply by values and sum over last dimension
output = torch.matmul(p_attn, value)
return output, p_attn
```
阅读全文