Transform模型

Elmo(基于LSTM)

Attention模型


  • Transform模型_第1张图片

  • attention


    Transform模型_第2张图片

  1. 隐藏层: h 1 , h 2 , ⋯   , h N h_1,h_2,\cdots,h_N h1,h2,,hN
  2. on timestep t,we have decoder hiden state s t s_t st
  3. 可以得到sttention score e t e^t etfor thie step
    e t = [ s t T h 1 , ⋯   , s t T h N ] e^t = [s_t^Th_1,\cdots,s_t^Th_N] et=[stTh1,,stThN]
  4. we take softmax to get the attenion distribution a t a^t at for this step
    a t = s o f t m a x ( e t ) a^t = softmax(e^t) at=softmax(et)
  5. we use a t a^t at to take a weighted sum of the encodet hidden states to get the attention output a t a_t at
    a t = ∑ i = 1 N a i t h i a_t = \sum_{i=1}^Na_i^th_i at=i=1Naithi
  6. finally we conctenate the attention output a t a_t at with the decodet hidden state s t s_t st and proceed as in the non-attention seq2seq model

[ a t , s t ] [a_t,s_t] [at,st]

Self Attention模型

  • 系统讲解

    首先该模型是一种自编码的方法,且为每个Embedding构建了三个向量:Queries向量即问题向量;Keys向量即被查询问题的向量;Values向量即该问题本身,其获取过程如下:
    图:


    Transform模型_第3张图片

    我们将 X 1 X_1 X1乘以 W Q W^Q WQ的权重矩阵得到新向量 q 1 q_1 q1 q 1 q_1 q1就是query的向量。同理可得key,value的向量表示形式。

  • 编码过程

    其编码过程如下图所示:


    Transform模型_第4张图片

  • Matrix Calculation of Self-Attention

    为了加快计算,该模型可以通过矩阵方式获取,如下图所示:

    1. 计算Query,Key和Value矩阵(scaled dot-product attention)

      Transform模型_第5张图片

    此处X中的一行对应输入中的一个单词,上文中使用4个方格代表一个单词。

    1. 计算Self-Attention层的输出

      Transform模型_第6张图片
  • Multihead

    Multihead可以理解为多层注意力模型,只是需要将多个结果连接( Z 0 , Z 1 , ⋯ Z_0,Z_1,\cdots Z0,Z1,)并压缩(W_0[ Z 0 , Z 1 , ⋯ Z_0,Z_1,\cdots Z0,Z1,])即可


    Transform模型_第7张图片

  • Positional Encoding

    使用Self-Attention方式进行编码时无法处理以下的顺序问题:
    我从北京上海
    我从上海北京
    上述两个语句进行编码时,第一句的北京与上海两个词的编码与第二句的北京与上海两个词的编码会完全相同,但这两个语句中的两个地点代表着不同的含义:起始位置、终点位置。为了解决此问题,进行自编码时在输入层引入了一个位置编码,如下所示:

P E ( p o s , 2 i ) = s i n ( p o s ÷ 1000 0 2 i / d m o d e l ) PE(pos,2i)=sin(pos \div 10000^{2i/d_{model}}) PE(pos,2i)=sin(pos÷100002i/dmodel)
P E ( p o s , 2 i + 1 ) = c o s ( p o s ÷ 1000 0 2 i / d m o d e l ) PE(pos,2i+1)=cos(pos \div 10000^{2i/d_{model}}) PE(pos,2i+1)=cos(pos÷100002i/dmodel)

  • 编码过程:

      position_encoding = np.array(
      [[pos / np.power(10000, 2.0 * (j // 2) / d_model) for j in range(d_model)] for pos in range(max_seq_len)])
    
      position_encoding[:, 0::2] = np.sin(position_encoding[:, 0::2])
      position_encoding[:, 1::2] = np.cos(position_encoding[:, 1::2])
    

    与输入计算过程如下:


    在这里插入图片描述

Transformer结构

  • 结构

    Transformer由两部分组成:一个Encoder和一个Decoders。进一步剖析,发现每个Encoder中分别由6个Encoder组成。而每个Decoder中同样也由6个Decoder组成,如下图所示:


    Transform模型_第8张图片

  • Encoder-Decoder

    对于Encoders中每一个Encoder,他们结构都是相同的,但是并不会共享权值。每层Encoder由两部分组成,如下图所示:


    Transform模型_第9张图片

    每个Encoder的输入首先会通过一个self-attention层,通过self-attention层帮助Encoder在编码过程中查看序列中的其他单词。Self-Attention的输出会被传入一个全连接的前馈神经网络,每个encoder的前馈神经网络参数都是相同的。每个Decoder也同样具有这样的层级结构,但是在这之间有一个Attention层,帮Decoder专注于输入据之中对应的那个单词。

  • Encoder

    每个单词进入Self-Attention层后都会有一个对应的Attention层中的输出。Self-Attention层中输入和输出是存在依存关系的。而前馈层则没有依赖,所以在前馈层,我们可以用到并行化来提高速率。下面将介绍一个理解,如下所示:

  1. 编码

    编码过程使用Self-Attention完成,此处就不再赘述

  2. Add&Normalize

    算法

    在这里插入图片描述

    此处使用的归一化方式为层间归一化,其与BN的区别如下:
    示例:


    Transform模型_第10张图片
    Transform模型_第11张图片

  3. Mask

    mask表示掩码,它的主要作用是对某些值进行掩盖。我们以下图作为实例:

    a. 计算 Q K T QK^T QKT可得如下矩阵:


    Transform模型_第12张图片

  • b. 一句话包含的数据长度可能不同,例如此处的一句话包含3个单词(How are you),但有的长句子可能包含100多个单词。为了计算的方便我们一般希望一次处理相同的数据量,因此我们需要用到mask用来以用来后期进行计算,我们可以从代码中查看此掩码是如何工作的

      if mask is not None:
      	scores = scores.masked_fill(mask ==0 , -1e9)
      p_attn = softmax(scores,dim=-1)
    

    通过上述计算可以计算得到每个单词计算的权重矩阵,进而进一步计算Self-Attention。

  • Decoder

    当序列输入时,Encoder开始工作,最后在其顶部的Encoder输出适量组成的列表,然后我们将其转化为一组(K,V)。(K,V)将带入每个Decoder的“Encoder-decoder attention”层中去计算,有助于decoder捕获输入序列的位置信息。完成Encoder后,我们开始Decoder阶段

    Decoder中的Attention层与Encoder中的Attention层略有不同,不能使用you 去预测 are 因此增加了一个掩码矩阵(sequence mask),其形式如下:


    Transform模型_第13张图片

ELMo

EMLo是一种新型深度语境化词表征,可对词进行复杂特征和词在语境中的变化进行建模。我们的词向量是深度双向语言模型(biLM)内部状态的函数,在一个大型文本语料中训练而来。EMLO的主要做法是先训练一个玩你整的语言模型,然后用这个语言模型去处理需要训练的文本,生成对应的词向量,所以对于同一个字在不同的句子中能生成不同的词向量。

  • 语言模型训练

图例

Transform模型_第14张图片

  • 缺陷
  1. 时序训练无法并行
  2. 无法完全避免梯度消失问题,从而导致long-term dependce问题
    3.前向与后向是单独处理的

OpenAI GPT

使用Transformer

降维算法 TNSE详解

你可能感兴趣的:(Transform模型)