自注意力机制(Self-Attention)的原理与多头注意力计算过程
字数 2175 2025-12-06 23:42:46

自注意力机制(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. 计算注意力权重

注意力权重表示每个位置对其他位置的关注程度。具体步骤:

  1. 计算查询和键的点积:\(S = Q K^T\),形状 \(n \times n\)\(S_{ij}\) 表示位置 \(i\) 对位置 \(j\) 的原始关联分数。
  2. 缩放点积:为防止点积数值过大导致梯度不稳定,将 \(S\) 除以 \(\sqrt{d_k}\)

\[ S' = \frac{S}{\sqrt{d_k}} \]

  1. 应用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}\) 维。步骤:

  1. 对每个头 \(t\)(共 \(h\) 个),使用独立的权重矩阵 \(W_t^Q, W_t^K, W_t^V\) 生成 \(Q_t, K_t, V_t\)
  2. 每个头计算自注意力输出 \(Z_t = \text{Attention}(Q_t, K_t, V_t)\)
  3. 将所有头的输出拼接:\(Z' = [Z_1; Z_2; ...; Z_h]\),形状 \(n \times d_{model}\)
  4. 通过可学习的权重矩阵 \(W^O \in \mathbb{R}^{d_{model} \times d_{model}}\) 进行线性变换:

\[ \text{MultiHead}(Q, K, V) = Z' W^O \]

多头注意力的优势在于同时关注不同子空间的信息(例如语法、语义、距离等),增强了模型的表达能力。


总结
自注意力机制通过查询-键-值映射、点积注意力计算和加权求和,实现了序列内部元素的直接交互。多头注意力进一步扩展了这一机制,允许模型并行学习多种依赖关系。这一设计使得Transformer能够高效处理长序列,并成为现代自然语言处理任务的基石。

自注意力机制(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能够高效处理长序列,并成为现代自然语言处理任务的基石。