一、Attention基础
1.Seq2Seq
Seq2Seq经常用在机器翻译中,如下图所示,seq2seq模型中的编码器和解码器一般采用的是循环神经网络RNN。编码器将输入的法语单词序列编码成context向量(在绿色encoder和紫色decoder中间出现),然后解码器根据context向量解码出英语单词序列。
最早提出的seq2seq模型都是基于RNN进行处理的,方法如下图:首先将单词映射为embedding向量(绿色输入),并和初始化好的隐藏向量(橙色输入)进行计算得到输出(粉色)和一个新的隐藏向量,不断重复这个过程,最终会得到编码器的context向量。
解码器的原理也类似,输入是编码器得到的context向量和第一个单词输入,经过上述原理不断生成结果。
2.attention
seq2seq的缺点很明显,在处理长文本的过程中容易丢失信息,使解码器更关注最后面的单词,解决这个问题的方法是添加注意力机制。
带有attention机制的编码器和之前类似,只不过最终得到的输出是所有单词的隐向量,
解码器的流程如下:
- 注意力模型的解码器 RNN 的输入包括:一个word embedding 向量,和一个初始化好的解码器 hidden state,图中是h_{init}hinit。
- RNN 处理上述的 2 个输入,产生一个输出和一个新的 hidden state,图中为h4。
- 注意力的步骤:我们使用编码器的所有 hidden state向量和 h4 向量来计算这个时间步的context向量(C4)。
- 我们把 h4 和 C4 拼接起来,得到一个橙色向量。
- 我们把这个橙色向量输入一个前馈神经网络(这个网络是和整个模型一起训练的)。
- 根据前馈神经网络的输出向量得到输出单词:假设输出序列可能的单词有N个,那么这个前馈神经网络的输出向量通常是N维的,每个维度的下标对应一个输出单词,每个维度的数值对应的是该单词的输出概率。
- 在下一个时间步重复1-6步骤。
二、Transformer基础
下图为一个经典的Transformer结构,左半部分为编码器,右半部分为解码器。