注意力机制与Transformer架构详解
立即解锁
发布时间: 2025-09-01 00:55:12 阅读量: 2 订阅数: 32 AIGC 

### 注意力机制与Transformer架构详解
在深度学习领域,注意力机制是一项意义重大的创新,它极大地提升了模型处理序列数据的能力。本文将深入探讨注意力机制的多种迭代形式,以及它在Transformer架构中的应用。
#### 1. 基础概念与seq2seq模型优化
在深入了解注意力机制之前,我们先来看几个关键的基础概念:
- **条件概率**:$P(y_1…y_{T'}|x_1…x_T)$ 表示在输入序列 $(x_1…x_T)$(长度为 $T$)的条件下,输出序列 $(y_1…y_{T'})$(长度为 $T'$)的条件概率。
- **思想向量**:$v$ 是输入序列的固定长度编码,也被称为思想向量。
- **输出词概率**:$P(y_{T'}|v, y_1…y_{T'-1})$ 表示在已知先前输出词 $y$ 和思想向量 $v$ 的情况下,输出词 $y_{T'}$ 的概率。
原始的seq2seq模型为了提升训练效果和性能,采用了一些技巧。例如,编码器和解码器分别使用独立的LSTM。在机器翻译场景中,这种设计使得可以使用同一个编码器为不同语言训练不同的解码器。
另外,还对输入序列进行了反向输入的改进。比如,输入序列 $[A,B,C]$ 到输出序列 $[W,X,Y,Z]$ 的转换,会变成 $[C,B,A]$ 到 $[W,X,Y,Z]$。虽然目前没有明确的理论解释为什么这样做有效,但作者认为,由于这是一个逐步处理的模型,如果输入序列按正常顺序排列,源句子中的每个词与输出句子中对应的词距离会较远。而将输入序列反向后,输入/输出词之间的平均距离不变,但第一个输入词会与第一个输出词非常接近,这有助于模型在输入和输出序列之间建立更好的联系。不过,这种改进也暴露出RNN(包括LSTM和GRU)隐藏状态的不足,即较新的序列元素会抑制较旧元素的可用信息。
#### 2. 注意力机制的迭代形式
##### 2.1 Bahdanau注意力
Bahdanau注意力是注意力机制的首次迭代,它对seq2seq模型进行了扩展,使解码器能够利用编码器的所有隐藏状态,而不仅仅是最后一个。它并非独立的模型,而是在现有seq2seq模型基础上的补充。
Bahdanau注意力的工作原理是在编码器和解码器之间插入一个额外的上下文向量 $c_t$。在时间 $t$ 时,解码器的隐藏状态 $s_t$ 不仅是前一步隐藏状态和输出的函数,还与上下文向量 $c_t$ 有关:
\[s_t = f(s_{t - 1}, y_{t - 1}, c_t)\]
每个解码器步骤都有一个独特的上下文向量,它是所有编码器隐藏状态的加权和:
\[c_t = \sum_{i = 1}^{T} \alpha_{t, i} h_i\]
其中:
- $c_t$ 是第 $t$ 个解码器输出步骤的上下文向量。
- $h_i$ 是编码器第 $i$ 步的隐藏状态向量。
- $\alpha_{t, i}$ 是在当前解码器步骤 $t$ 下与 $h_i$ 相关的标量权重。
需要注意的是,$\alpha_{t, i}$ 对于编码器和解码器步骤都是唯一的,即输入序列状态的权重会根据当前输出步骤而变化。例如,如果输入和输出序列长度都为10,那么权重将由一个 $10×10$ 的矩阵表示,共100个权重。这意味着注意力机制会根据输出序列的当前状态,将解码器的注意力集中在输入序列的不同部分。如果 $\alpha_{t, i}$ 较大,解码器在步骤 $t$ 会对 $h_i$ 给予更多关注。
权重 $\alpha_{t, i}$ 的计算方法是通过对注意力机制应用softmax操作,使得解码器在步骤 $t$ 时所有 $\alpha_{t, i}$ 权重之和为1:
\[\alpha_{t, i} = \frac{\exp(e_{t, i})}{\sum_{j = 1}^{T} \exp(e_{t, j})} = \text{softmax}(e_{t, i} / e_t)\]
其中,$e_{t, i}$ 是一个对齐分数,表示输入序列中位置 $i$ 附近的元素与位置 $t$ 的输出匹配(或对齐)的程度。这个分数基于前一个解码器状态 $s_{t - 1}$ 和编码器状态 $h_i$ 计算得出:
\[e_{t, i} = a(s_{t - 1}, h_i)\]
这里的 $a$ 是一个可微函数,通过反向传播与系统的其他部分一起进行训练。论文作者选择了所谓的加法注意力,它有两种形式:
\[e_{t, i} = a(s_{t - 1}, h_i) = v^{\top} \tanh(W[h_i; s_{t - 1}])\]
\[e_{t, i} = a(s_{t - 1}, h_i) = v^{\top} \tanh(W_1 h_i + W_2 s_{t - 1})\]
在第一个公式中,$W$ 是一个权重矩阵,应用于拼接后的向量 $s_{t - 1}$ 和 $h_i$,$v$ 是一个权重向量。第二个公式类似,但使用了单独的全连接层(权重矩阵 $W_1$ 和 $W_2$)并对 $s_{t - 1}$ 和 $h_i$ 进行求和。在这两种情况下,对齐模型都可以表示为一个具有单隐藏层的简单前馈网络(FFN)。
Bahdanau注意力算法的步骤如下:
1. 将输入序列输入编码器,计算隐藏状态集合 $H = \{h_1, h_2…h_T\}$。
2. 计算对齐分数 $e_{t, i} = a(s_{t - 1}, h_i)$,使用前一步的解码器状态 $s_{t - 1}$。如果 $t = 1$,则使用最后一个编码器状态 $h_T$ 作为初始隐藏状态。
3. 计算权重 $\alpha_{t, i} = \text{softmax}(e_{t, i} / e_t)$。
4. 计算上下文向量 $c_t = \sum_{i = 1}^{T} \alpha_{t, i} h_i$。
5. 基于拼接后的向量 $s_{t - 1}$ 和 $c_t$ 以及前一个解码器输出 $y_{t - 1}$,计算隐藏状态 $s_t = \text{RNN}_{decoder}([s_{t - 1}; c_t], y_{t - 1})$。此时,可以计算最终输出 $y_t$。在需要对下一个词进行分类的情况下,使用softmax输出 $y_t = \text{softmax}(W_y s_t)$,其中 $W_y$ 是一个权重矩阵。
6. 重复步骤2到5,直到序列结束。
下面是Bahdanau注意力算法的流程图:
```mermaid
graph TD
A[输入序列到编码器] --> B[计算隐藏状态集合H]
B --> C{t = 1?}
C -- 是 --> D[使用h_T作为初始s_t]
C -- 否 --> E[使用前一步s_t-1]
D --> F[计算对齐分数e_t,i
```
0
0
复制全文
相关推荐










