在 Transformer 架构里,多头注意力机制是相当关键的部分,它能让模型从不同的表示子空间来捕捉特征。下面为你详细介绍其中的 K、Q、V 矩阵:
- Query(Q):它起着 “查询” 的作用,负责与键进行匹配,目的是找出需要关注的位置。
- Key(K):其功能是 “标识”,也就是为每个输入创建一个标识,方便进行匹配。
- Value(V):它是 “信息载体”,会根据注意力权重来聚合信息。
注意力机制的计算可以用这个公式表示: \(\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V\) 这里面:
- Q 的维度是
[batch_size, num_heads, seq_len, dim]。
- K 和 V 的维度通常是
[batch_size, num_heads, seq_len, dim]。
- \(\sqrt{d_k}\) 是缩放因子,引入它是为了防止点积结果过大。
-
初始化部分:
- 确定每个头的维度
head_dim。
- 构建线性变换层,用于生成 Q、K、V 矩阵。
- 计算缩放因子
scale,以此来稳定梯度。
-
前向传播过程:
- 借助线性层生成 Q、K、V。
- 把张量重塑成多头的形式,方便并行计算。
- 计算注意力分数并应用缩放。
- 应用掩码(在解码器的自注意力中会用到)。
- 利用 softmax 函数得到注意力权重。
- 通过加权聚合得到上下文向量。
- 最后经过线性层输出结果。
- 并行计算:多个头能够同时关注不同位置的信息,增强了模型的表达能力。
- 缩放操作:\(\sqrt{d_k}\) 这一缩放因子能有效防止梯度消失。
- 掩码机制:在解码器里,会使用因果掩码来保证模型只关注序列中已经出现的 token。
这个实现和 Transformer 论文《Attention Is All You Need》里的描述是相符的,是现代 NLP 模型的重要组成部分。