自注意力机制(Self-Attention)的原理与多头注意力计算过程
题目描述
自注意力机制(Self-Attention)是Transformer模型的核心组成部分,它能够捕捉序列中任意两个元素之间的依赖关系,无论它们在序列中的距离有多远。本题目将详细讲解自注意力的数学原理、计算步骤,并扩展到多头注意力机制,解释如何增强模型的表达能力。
解题过程
1. 自注意力的核心思想
在传统的序列建模(如RNN)中,一个位置的表示只能通过循环结构逐步传递信息,难以直接捕获长距离依赖。自注意力通过计算序列中每个位置与其他所有位置的“关联强度”(注意力权重),并基于权重对各个位置的表示进行加权求和,从而生成新的表示。这使得每个位置都能直接关注到序列中的其他位置。
2. 输入表示
假设我们有一个输入序列 \(X = [x_1, x_2, ..., x_n]\),其中 \(x_i \in \mathbb{R}^{d_{model}}\) 是第 \(i\) 个位置的向量表示(例如词嵌入)。在实际计算中,\(X\) 是一个形状为 \(n \times d_{model}\) 的矩阵。
3. 生成查询、键、值向量
自注意力通过三个可学习的权重矩阵,将每个输入向量 \(x_i\) 映射为三个不同的向量:
- 查询向量(Query):\(q_i = W^Q x_i\)
- 键向量(Key):\(k_i = W^K x_i\)
- 值向量(Value):\(v_i = W^V x_i\)
其中,\(W^Q, W^K, W^V \in \mathbb{R}^{d_{model} \times d_k}\) 是权重矩阵(通常 \(d_k = d_{model}/h\),\(h\) 是注意力头数量)。将所有位置的映射拼接成矩阵形式:
- \(Q = X W^Q\),形状 \(n \times d_k\)
- \(K = X W^K\),形状 \(n \times d_k\)
- \(V = X W^V\),形状 \(n \times d_k\)
4. 计算注意力权重
注意力权重表示每个位置对其他位置的关注程度。具体步骤:
- 计算查询和键的点积:\(S = Q K^T\),形状 \(n \times n\)。\(S_{ij}\) 表示位置 \(i\) 对位置 \(j\) 的原始关联分数。
- 缩放点积:为防止点积数值过大导致梯度不稳定,将 \(S\) 除以 \(\sqrt{d_k}\):
\[ S' = \frac{S}{\sqrt{d_k}} \]
- 应用Softmax归一化:对 \(S'\) 的每一行进行Softmax,使得每个位置对所有位置的注意力权重之和为1:
\[ A = \text{softmax}(S'), \quad A_{ij} = \frac{e^{S'_{ij}}}{\sum_{t=1}^n e^{S'_{it}}} \]
\(A_{ij}\) 表示位置 \(i\) 对位置 \(j\) 的注意力权重。
5. 加权求和生成输出
用注意力权重对值向量进行加权求和,得到每个位置的新表示:
\[Z = A V \]
其中 \(Z\) 的形状为 \(n \times d_k\),其第 \(i\) 行 \(z_i = \sum_{j=1}^n A_{ij} v_j\) 是位置 \(i\) 的自注意力输出。
6. 多头注意力机制
单个注意力头只能学习一种依赖模式。多头注意力将 \(d_{model}\) 维的输入拆分为 \(h\) 个头,每个头在低维空间(维度 \(d_k = d_{model}/h\))中独立计算自注意力,最后将结果拼接并映射回 \(d_{model}\) 维。步骤:
- 对每个头 \(t\)(共 \(h\) 个),使用独立的权重矩阵 \(W_t^Q, W_t^K, W_t^V\) 生成 \(Q_t, K_t, V_t\)。
- 每个头计算自注意力输出 \(Z_t = \text{Attention}(Q_t, K_t, V_t)\)。
- 将所有头的输出拼接:\(Z' = [Z_1; Z_2; ...; Z_h]\),形状 \(n \times d_{model}\)。
- 通过可学习的权重矩阵 \(W^O \in \mathbb{R}^{d_{model} \times d_{model}}\) 进行线性变换:
\[ \text{MultiHead}(Q, K, V) = Z' W^O \]
多头注意力的优势在于同时关注不同子空间的信息(例如语法、语义、距离等),增强了模型的表达能力。
总结
自注意力机制通过查询-键-值映射、点积注意力计算和加权求和,实现了序列内部元素的直接交互。多头注意力进一步扩展了这一机制,允许模型并行学习多种依赖关系。这一设计使得Transformer能够高效处理长序列,并成为现代自然语言处理任务的基石。