出现Attention机制的原因:基于循环神经网络(RNN)的seq2seq模型,在处理长文本时遇到了挑战,而对长文本中不同位置的信息进行attention有助于提升RNN的模型效果。
1 seq2seq框架
seq2seq:从一个文本序列得到一个新的文本序列。典型的seq2seq任务包括:机器翻译任务、文本摘要任务。简而言之就是输入了一个单词(字母或图像特征)序列,输出另一个单词(字母或图像特征)序列。
1.1 seq2seq细节
seq2seq模型由编码器(Encoder)和解码器(Decoder)组成,绿色的编码器会处理输入序列中的每个元素并获得输入信息,这些信息会被转换成为一个黄色的向量(称为context向量)。当我们处理完整个输入序列后,编码器把 context向量 发送给紫色的解码器,解码器通过context向量中的信息,逐个元素输出新的序列。
eq2seq模型中的编码器和解码器一般采用的是循环神经网络RNN(Transformer模型还没出现的过去时代)。编码器将输入的法语单词序列编码成context向量,然后解码器根据context向量解码出英语单词序列。
RNN处理Sequence的方法:
- 假设序列输入是一个句子,这个句子可以由个词表示:。
- RNN首先将句子中的每一个词映射成为一个向量得到一个向量序列:,每个单词映射得到的向量通常又叫做:word embedding。
- 然后在处理第个时间步的序列输入时,RNN网络的输入和输出可以表示为:
- 输入:RNN在时间步的输入之一为单词经过映射得到的向量。
- 输入:RNN另一个输入为上一个时间步得到的hidden state向量,同样是一个向量。
- 输出:RNN在时间步的输出为 hidden state向量。
2 Attention机制
基于RNN的seq2seq模型编码器所有信息都编码到了一个context向量中,便是这类模型的瓶颈。一方面单个向量很难包含所有文本序列的信息,另一方面RNN递归地编码文本序列使得模型在处理长文本时面临非常大的挑战(比如RNN处理到第500个单词的时候,很难再包含1-499个单词中的所有信息了)。
attention注意力机制,使得seq2seq模型可以有区分度、有重点地关注输入序列。
Attention模型和seq2seq模型的两点区别:
- 编码器会把更多的数据传递给解码器。编码器把所有时间步的 hidden state(隐藏层状态) 传递给解码器,而不是只传递最后一个 hidden state(隐藏层状态)。
- 注意力模型的解码器在产生输出之前,做了一个额外的attention处理。
- 由于编码器中每个 hidden state(隐藏层状态)都对应到输入句子中一个单词,那么解码器要查看所有接收到的编码器的 hidden state(隐藏层状态)。
- 给每个 hidden state(隐藏层状态)计算出一个分数(我们先忽略这个分数的计算过程)。
- 所有hidden state(隐藏层状态)的分数经过softmax进行归一化。
- 将每个 hidden state(隐藏层状态)乘以所对应的分数,从而能够让高分对应的 hidden state(隐藏层状态)会被放大,而低分对应的 hidden state(隐藏层状态)会被缩小。
- 将所有hidden state根据对应分数进行加权求和,得到对应时间步的context向量。
3 Transformer结构
https://jalammar.github.io/illustrated-transformer/
Transformer一个巨大的优点是:模型在处理序列输入时,可以对整个序列输入进行并行计算,不需要按照时间步循环递归处理输入序列。
3.1 Transformer宏观结构
Transformer可以看作是seq2seq模型的一种,对比之前的RNN,只是将Encoder和Decoder的RNN模型替换为Transformer模型。
编码部分(encoders)由多层编码器(Encoder)组成。每层编码器网络结构是一样的,每层解码器网络结构也是一样的。不同层编码器和解码器网络结构不共享参数。
单层encoder主要由以下两部分组成:
- Self-Attention Layer
- Feed Forward Neural Network(前馈神经网络,缩写为 FFNN) 编码器的输入文本序列最开始需要经过embedding转换,得到每个单词的向量表示,其中是维度为的向量,然后所有向量经过一个Self-Attention神经网络层进行变换和信息交互得到,其中是维度为的向量。self-attention层处理一个词向量的时候,不仅会使用这个词本身的信息,也会使用句子中其他词的信息(你可以类比为:当我们翻译一个词的时候,不仅会只关注当前的词,也会关注这个词的上下文的其他词的信息)。Self-Attention层的输出会经过前馈神经网络得到新的,依旧是个维度为的向量。这些向量将被送入下一层encoder,继续相同的操作。