注意力机制(Attention Mechanism)的核心思想与计算步骤
题目描述
在深度学习领域,注意力机制是一种让模型动态聚焦于输入数据中不同部分的技术。例如,在机器翻译任务中,模型生成每个目标词时,可以自动关注源句子中与之最相关的词。本题要求详细解释注意力机制的核心思想、计算步骤及其背后的数学原理。
解题过程
1. 注意力机制要解决的核心问题
传统序列模型(如RNN/Encoder-Decoder)在处理长序列时存在瓶颈:
- 编码器 需要将整个输入序列压缩成一个固定维度的上下文向量(Context Vector),可能导致信息丢失;
- 解码器 在生成每个输出时只能依赖同一个上下文向量,无法灵活关注输入的不同部分。
注意力机制的核心思想:
在解码器的每一步,动态计算输入序列各部分的权重,根据权重对输入信息加权求和,生成一个动态变化的上下文向量,使模型能够聚焦于当前最相关的输入部分。
2. 注意力计算的关键组件
假设输入序列有 \(N\) 个元素(如单词),编码器将其转换为隐藏状态序列 \(\mathbf{H} = [h_1, h_2, ..., h_N]\)。解码器在时刻 \(t\) 的隐藏状态为 \(s_t\)。注意力机制需计算以下内容:
-
评分函数(Score Function)
衡量 \(s_t\) 与每个 \(h_i\) 的相关性,常见形式包括:- 点积注意力:\(\text{score}(s_t, h_i) = s_t^\top h_i\)
- 加性注意力:\(\text{score}(s_t, h_i) = \mathbf{v}^\top \tanh(\mathbf{W}_1 s_t + \mathbf{W}_2 h_i)\)(其中 \(\mathbf{v}, \mathbf{W}\) 为可学习参数)
-
注意力权重(Attention Weights)
通过 softmax 将评分转换为权重,确保权重和为 1:
\[ \alpha_{t,i} = \frac{\exp(\text{score}(s_t, h_i))}{\sum_{j=1}^N \exp(\text{score}(s_t, h_j))} \]
\(\alpha_{t,i}\) 表示生成第 \(t\) 个输出时,模型对第 \(i\) 个输入的关注程度。
- 上下文向量(Context Vector)
对编码器隐藏状态加权求和:
\[ c_t = \sum_{i=1}^N \alpha_{t,i} h_i \]
- 解码器输出
将 \(c_t\) 与解码器当前状态 \(s_t\) 拼接(或相加)后,预测输出:
\[
\tilde{s}_t = \tanh(\mathbf{W}_c [c_t; s_t] + b_c), \quad p(y_t | y_{
3. 具体计算示例(以加性注意力为例)
假设输入序列有 3 个词,编码器隐藏状态为:
\[h_1 = [0.2, 0.5], \quad h_2 = [0.3, 0.1], \quad h_3 = [-0.1, 0.4] \]
解码器当前状态 \(s_t = [0.6, -0.2]\),参数为:
\[\mathbf{W}_1 = \begin{bmatrix} 0.1 & 0.2 \\ 0.3 & 0.4 \end{bmatrix}, \quad \mathbf{W}_2 = \begin{bmatrix} 0.5 & 0.6 \\ 0.7 & 0.8 \end{bmatrix}, \quad \mathbf{v} = [1.0, 2.0] \]
步骤 1:计算评分
对于 \(h_1\):
\[\mathbf{u}_1 = \tanh(\mathbf{W}_1 s_t + \mathbf{W}_2 h_1) = \tanh\left( \begin{bmatrix} 0.1 & 0.2 \\ 0.3 & 0.4 \end{bmatrix} \begin{bmatrix} 0.6 \\ -0.2 \end{bmatrix} + \begin{bmatrix} 0.5 & 0.6 \\ 0.7 & 0.8 \end{bmatrix} \begin{bmatrix} 0.2 \\ 0.5 \end{bmatrix} \right) = \tanh\left( \begin{bmatrix} 0.02 \\ 0.10 \end{bmatrix} + \begin{bmatrix} 0.40 \\ 0.54 \end{bmatrix} \right) = \tanh\left( \begin{bmatrix} 0.42 \\ 0.64 \end{bmatrix} \right) \approx [0.40, 0.57] \]
\[\text{score}(s_t, h_1) = \mathbf{v}^\top \mathbf{u}_1 = 1.0 \times 0.40 + 2.0 \times 0.57 = 1.54 \]
同理计算 \(\text{score}(s_t, h_2) = 1.32\), \(\text{score}(s_t, h_3) = 0.89\)。
步骤 2:计算注意力权重
\[\alpha_{t,1} = \frac{e^{1.54}}{e^{1.54} + e^{1.32} + e^{0.89}} \approx 0.43, \quad \alpha_{t,2} \approx 0.32, \quad \alpha_{t,3} \approx 0.25 \]
步骤 3:生成上下文向量
\[c_t = 0.43 \times [0.2, 0.5] + 0.32 \times [0.3, 0.1] + 0.25 \times [-0.1, 0.4] \approx [0.16, 0.33] \]
步骤 4:解码器预测
将 \(c_t\) 与 \(s_t\) 拼接后通过全连接层生成输出概率(具体计算略)。
4. 注意力机制的变体与扩展
- 自注意力(Self-Attention):输入序列内部元素之间计算注意力(如Transformer),用于捕捉长程依赖。
- 多头注意力(Multi-Head Attention):并行多个注意力机制,捕捉不同子空间的特征。
- 缩放点积注意力(Scaled Dot-Product):Transformer 中使用的高效点积注意力,通过缩放避免 softmax 梯度饱和。
总结
注意力机制通过动态权重分配,解决了固定上下文向量的信息瓶颈问题,使模型能够灵活关注输入的不同部分。其核心步骤包括评分、权重归一化、加权求和,并可通过不同评分函数适应不同任务。