### Transformer模型中的权重矩阵结构与作用
Transformer模型的核心机制之一是自注意力机制(Self-Attention Mechanism),其中涉及三个重要的权重矩阵:查询矩阵 \( W_q \)、键矩阵 \( W_k \) 和值矩阵 \( W_v \)[^4]。这些矩阵通过线性变换分别计算输入序列的查询向量(Query)、键向量(Key)和值向量(Value)。具体来说:
#### 查询、键和值的定义
在自注意力机制中,每个位置上的词会被表示为三部分:
- **查询(Query, Q)**:代表当前词与其他词的关系。
- **键(Key, K)**:类似于其他词的特征描述。
- **值(Value, V)**:实际要提取的信息。
这三个部分通过以下公式计算得出:
\[
Q = XW_q,\quad K = XW_k,\quad V = XW_v
\]
其中 \( X \) 是输入嵌入向量组成的矩阵,\( W_q \), \( W_k \), \( W_v \) 则是可训练的权重矩阵。
#### 自注意力机制的工作流程
1. 计算点积得分:对于每一个 Query 向量,与其对应的 Key 向量做点乘操作得到匹配程度分数。
2. 缩放处理:为了避免数值过大影响后续 Softmax 的稳定性,通常会将上述点积结果除以 \( \sqrt{d_k} \),这里 \( d_k \) 表示 Key 向量维度大小[^3]。
3. 应用 Softmax 归一化:使得每一对 (Query, Key) 得分转换成概率分布形式作为最终加权系数。
4. 加权求和:利用上一步获得的概率分布对 Value 进行加权平均运算从而获取新的上下文表征。
这种设计允许模型并行地关注整个句子的不同部分,捕捉到更丰富的语义信息而不受距离限制。
#### 权重矩阵的作用
- **捕获不同类型的依赖关系**:不同的头(Heads)能够学习到不同类型的关注模式,比如局部依存或者全局主题关联等。
- **提升表达能力**:多头注意机制增加了网络宽度方向上的容量,有助于更好地建模复杂的数据特性。
以下是实现一个多头注意力层的一个简单例子:
```python
import torch
import torch.nn as nn
class MultiHeadedAttention(nn.Module):
def __init__(self, num_heads, model_dim, dropout=0.1):
super(MultiHeadedAttention, self).__init__()
assert model_dim % num_heads == 0
self.head_dim = model_dim // num_heads
self.num_heads = num_heads
self.linears = clones(nn.Linear(model_dim, model_dim), 4)
self.attn = None
self.dropout = nn.Dropout(p=dropout)
def forward(self, query, key, value, mask=None):
nbatches = query.size(0)
# Do all the linear projections in batch from d_model => h x d_k
query, key, value = \
[l(x).view(nbatches, -1, self.num_heads, self.head_dim).transpose(1, 2)
for l, x in zip(self.linears, (query, key, value))]
# Apply attention on all the projected vectors in batch.
x, self.attn = scaled_dot_product_attention(query, key, value, mask=mask,
dropout=self.dropout)
# Concatenate and apply final Linear transformation.
x = x.transpose(1, 2).contiguous().view(nbatches, -1, self.num_heads * self.head_dim)
return self.linears[-1](x)
```