Transformer模型中的编码器-解码器注意力机制(Encoder-Decoder Attention)原理与计算细节
题目描述
在Transformer模型中,编码器-解码器注意力机制(又称交叉注意力)是连接编码器和解码器的关键组件。它允许解码器在生成每个输出时动态关注编码器输出的所有位置,从而有效捕捉输入序列与输出序列之间的对齐关系。本题目将详细讲解该机制的计算原理、作用及实现细节。
解题过程
-
机制的作用背景
- 在序列到序列任务(如机器翻译)中,解码器生成目标序列时需参考编码器对源序列的编码结果。
- 编码器-解码器注意力取代了传统RNN中手工设计的对齐机制,通过注意力权重自动学习源序列与目标序列的关联强度。
-
输入准备
- 假设编码器输出为矩阵 \(H_{\text{enc}} \in \mathbb{R}^{n \times d}\)(\(n\) 为源序列长度,\(d\) 为隐藏维度)。
- 解码器在生成第 \(t\) 个词时,其自注意力层的输出为 \(Q_{\text{dec}} \in \mathbb{R}^{m \times d}\)(\(m\) 为当前已生成目标序列长度,通常逐步计算)。
- 注意:实际计算中,\(Q_{\text{dec}}\) 是解码器当前层的查询向量,而键 \(K\) 和值 \(V\) 均来自编码器输出 \(H_{\text{enc}}\)。
-
计算步骤
步骤1:线性变换生成查询、键、值- 对解码器输入(当前层自注意力的输出)做线性变换得查询矩阵:
\[ Q = Q_{\text{dec}} W^Q \quad (W^Q \in \mathbb{R}^{d \times d_k}) \]
- 对编码器输出 \(H_{\text{enc}}\) 分别做线性变换得键和值矩阵:
\[ K = H_{\text{enc}} W^K, \quad V = H_{\text{enc}} W^V \quad (W^K, W^V \in \mathbb{R}^{d \times d_k}) \]
- 其中 \(d_k\) 为注意力头的维度(通常 \(d_k = d/h\),\(h\) 为头数)。
步骤2:缩放点积注意力计算
- 计算注意力分数矩阵:
\[ S = \frac{Q K^\top}{\sqrt{d_k}} \in \mathbb{R}^{m \times n} \]
- 对 \(S\) 按行应用softmax,得到注意力权重矩阵 \(A\):
\[ A = \text{softmax}(S, \text{dim}=-1) \]
- 加权求和编码器的值向量:
\[ O = A V \in \mathbb{R}^{m \times d_k} \]
步骤3:多头注意力融合
- 若使用多头注意力(\(h\) 个头),每个头独立执行上述计算,得到输出 \(O_i\)。
- 将所有头的输出拼接后做线性变换:
\[ O_{\text{multi}} = \text{Concat}(O_1, \dots, O_h) W^O \quad (W^O \in \mathbb{R}^{h \cdot d_k \times d}) \]
-
机制的核心特点
- 动态对齐:注意力权重 \(A\) 的每一行表示当前解码位置对源序列所有位置的关注程度,可自动学习类似“软对齐”的关系。
- 梯度传播:通过加权求和,编码器表示的错误信号可直接反向传播到解码器。
- 并行计算:解码时若使用掩码,可并行处理所有已生成位置(训练时全序列并行)。
-
实现细节
- 在解码器推理过程中,该机制需缓存编码器的 \(K, V\) 以避免重复计算。
- 为防止解码器关注未来信息,解码器自注意力需加掩码,但编码器-解码器注意力无需掩码(因编码器已完整可见)。
总结
编码器-解码器注意力通过查询-键值匹配机制,实现了解码器对编码器输出的自适应聚焦,是Transformer处理序列间依赖的核心组件。其计算过程与自注意力相似,但键值来源不同,体现了跨序列的信息交互能力。