出现Attention机制的原因:基于循环神经网络(RNN)的seq2seq模型,在处理长文本时遇到了挑战,而对长文本中不同位置的信息进行attention有助于提升RNN的模型效果。

1 seq2seq框架

seq2seq:从一个文本序列得到一个新的文本序列。典型的seq2seq任务包括:机器翻译任务、文本摘要任务。简而言之就是输入了一个单词(字母或图像特征)序列,输出另一个单词(字母或图像特征)序列。

1.1 seq2seq细节

seq2seq模型由编码器(Encoder)和解码器(Decoder)组成,绿色的编码器会处理输入序列中的每个元素并获得输入信息,这些信息会被转换成为一个黄色的向量(称为context向量)。当我们处理完整个输入序列后,编码器把 context向量 发送给紫色的解码器,解码器通过context向量中的信息,逐个元素输出新的序列。

Transformer-Attention机制_Transformer

eq2seq模型中的编码器和解码器一般采用的是循环神经网络RNN(Transformer模型还没出现的过去时代)。编码器将输入的法语单词序列编码成context向量,然后解码器根据context向量解码出英语单词序列。

Transformer-Attention机制_Transformer_02

RNN处理Sequence的方法:

  1. 假设序列输入是一个句子,这个句子可以由
    Transformer-Attention机制_Transformer_03
    个词表示:
    Transformer-Attention机制_Transformer_04
  2. RNN首先将句子中的每一个词映射成为一个向量得到一个向量序列:
    Transformer-Attention机制_Transformer_05
    ,每个单词映射得到的向量通常又叫做:word embedding。
  3. 然后在处理第个时间步的序列输入时,RNN网络的输入和输出可以表示为:
  • 输入:RNN在时间步
    Transformer-Attention机制_Transformer_06
    的输入之一为单词
    Transformer-Attention机制_Transformer_07
    经过映射得到的向量
    Transformer-Attention机制_Transformer_08
  • 输入:RNN另一个输入为上一个时间步
    Transformer-Attention机制_Transformer_09
    得到的hidden state向量
    Transformer-Attention机制_Transformer_10
    ,同样是一个向量。
  • 输出:RNN在时间步
    Transformer-Attention机制_Transformer_06
    的输出为
    Transformer-Attention机制_Transformer_12
    hidden state向量。

2 Attention机制

基于RNN的seq2seq模型编码器所有信息都编码到了一个context向量中,便是这类模型的瓶颈。一方面单个向量很难包含所有文本序列的信息,另一方面RNN递归地编码文本序列使得模型在处理长文本时面临非常大的挑战(比如RNN处理到第500个单词的时候,很难再包含1-499个单词中的所有信息了)。

attention注意力机制,使得seq2seq模型可以有区分度有重点地关注输入序列

Attention模型和seq2seq模型的两点区别:

  • 编码器会把更多的数据传递给解码器。编码器把所有时间步的 hidden state(隐藏层状态) 传递给解码器,而不是只传递最后一个 hidden state(隐藏层状态)。
  • 注意力模型的解码器在产生输出之前,做了一个额外的attention处理。
  1. 由于编码器中每个 hidden state(隐藏层状态)都对应到输入句子中一个单词,那么解码器要查看所有接收到的编码器的 hidden state(隐藏层状态)。
  2. 给每个 hidden state(隐藏层状态)计算出一个分数(我们先忽略这个分数的计算过程)。
  3. 所有hidden state(隐藏层状态)的分数经过softmax进行归一化。
  4. 将每个 hidden state(隐藏层状态)乘以所对应的分数,从而能够让高分对应的 hidden state(隐藏层状态)会被放大,而低分对应的 hidden state(隐藏层状态)会被缩小。
  5. 将所有hidden state根据对应分数进行加权求和,得到对应时间步的context向量。

Transformer-Attention机制_Transformer_13

3 Transformer结构

 https://jalammar.github.io/illustrated-transformer/

Transformer一个巨大的优点是:模型在处理序列输入时,可以对整个序列输入进行并行计算,不需要按照时间步循环递归处理输入序列。

Transformer-Attention机制_Transformer_14

Transformer-Attention机制_Transformer_15

3.1 Transformer宏观结构

Transformer可以看作是seq2seq模型的一种,对比之前的RNN,只是将Encoder和Decoder的RNN模型替换为Transformer模型。

Transformer-Attention机制_Transformer_16

编码部分(encoders)由多层编码器(Encoder)组成。每层编码器网络结构是一样的,每层解码器网络结构也是一样的。不同层编码器和解码器网络结构不共享参数。

Transformer-Attention机制_Transformer_17

单层encoder主要由以下两部分组成:

  • Self-Attention Layer
  • Feed Forward Neural Network(前馈神经网络,缩写为 FFNN) 编码器的输入文本序列
    Transformer-Attention机制_Transformer_18
    最开始需要经过embedding转换,得到每个单词的向量表示
    Transformer-Attention机制_Transformer_19
    ,其中
    Transformer-Attention机制_Transformer_20
    是维度为
    Transformer-Attention机制_Transformer_21
    的向量,然后所有向量经过一个Self-Attention神经网络层进行变换和信息交互得到
    Transformer-Attention机制_Transformer_22
    ,其中
    Transformer-Attention机制_Transformer_23
    是维度为
    Transformer-Attention机制_Transformer_21
    的向量。self-attention层处理一个词向量的时候,不仅会使用这个词本身的信息,也会使用句子中其他词的信息(你可以类比为:当我们翻译一个词的时候,不仅会只关注当前的词,也会关注这个词的上下文的其他词的信息)。Self-Attention层的输出会经过前馈神经网络得到新的
    Transformer-Attention机制_Transformer_25
    ,依旧是
    Transformer-Attention机制_Transformer_03
    个维度为
    Transformer-Attention机制_Transformer_21
    的向量。这些向量将被送入下一层encoder,继续相同的操作。