注意力模型 (Attention Model)

双向RNN的激活
使用双向RNN(如双向GRU或双向LSTM)来处理输入句子的每个单词,从而得到每个时间步的特征或激活。对每个时间步 t’,有来自前向和后向RNN的激活,这两个激活被串联表示为$a_{t’}$
注意力权重的定义
注意力权重$\alpha_{t, t’}$模型决定在生成输出的第t 个单词时,应该给予输入的第t’个单词多少注意力的权重。它们满足的条件是:
$$ \begin{equation}\sum_{t’} \alpha_{t, t’} = 1 \quad \text{和} \quad \alpha_{t, t’} \geq 0\end{equation} $$
- 这些权重满足所有权重的总和为1,并且都是非负的。
- 上下文向量 $C_t$ 是按照这些注意力权重加权的输入激活的加权和。
上下文向量的计算
上下文向量 Ct 是按照注意力权重加权(Post-Atention)的输入激活的加权和。定义如下:
(上下文向量 $C_t$ 是一维向量)
$$ \begin{equation}C_t = \sum_{t’} \alpha_{t, t’} \cdot a_{t’}, \quad\sum_{t’} \alpha_{t, t’} = 1, \quad \alpha_{t, t’} \geq 0\end{equation} $$
注意力权重的计算
注意力权重是基于一个叫做 et, t’ 的中间变量,该变量由一个小神经网络计算得出。注意力权重可以通过以下公式计算(注意力权重是一个标量):
$$ \begin{equation}\alpha_{t, t’} = \frac{\exp(e_{t, t’})}{\sum_{t”} \exp(e_{t, t”})}, \quad\sum_{t’} \alpha_{t, t’} = 1, \quad \alpha_{t, t’} \geq 0\end{equation} $$
其中 $e_{t, t’}$ 是一个小型神经网络的输出,该网络的输入是前一个时间步的RNN隐藏状态 $s_{t-1}$和当前时间步的输入特征 $a_{t’}$(见注意力模型的举例)。
注意力模型的应用
- 上述描述主要集中在机器翻译,Attention Model也应用于其他问题,如图像字幕生成。
- 可以查看对注意力权重的可视化,以了解模型在翻译时实际上“关注”了哪些输入单词。
注意力模型的举例


1. 两个独立的LSTM:
在这个架构中,有两个明确的长短时记忆网络(LSTM),分别是:
- 预注意力 LSTM (Pre-attention LSTM)
- 后注意力 LSTM (Post-attention LSTM)
2. 预注意力双向LSTM (Pre-attention Bi-LSTM):
- 这个LSTM位于注意力机制之前(因此得名“预注意力”)。
- 它是一个双向LSTM (Bi-LSTM),意味着它从两个方向处理输入序列(从开始到结束和从结束到开始)。这使其能够捕捉到过去和未来的上下文。
- 它处理长度为 Tx 的输入序列。数字 Tx 代表输入序列的长度。
3. 注意力机制 (Attention Mechanism):
- 位于预注意力和后注意力LSTMs之间。
- 注意力机制允许模型在产生输出序列的每个词时,关注输入序列的不同部分。这对于如机器翻译这样的任务特别有用,因为输入和输出词之间的对齐可以变化。
4. 后注意力 LSTM (Post-attention LSTM):
- 顾名思义,这个LSTM位于注意力机制之后。
- 与预注意力LSTM不同,这一个是单向的,并处理输出序列。
- 它通过 Ty 个时间步来操作,其中 Ty 是输出序列的长度。
- LSTM在时间步之间保持隐藏状态和单元状态。对于每个时间步t,隐藏状态表示为 s<t>,单元状态表示为 c<t>。这些状态从一个时间步传递到下一个,确保序列的连续性和记忆。