Tranformer模型学习

Word Embedding


  • Word2Vec
  • Glove

RNN改进与拓展


  • Seq2Seq
  • LSTM/GRU
  • attention/self-attention

Tranformer模型学习


全部采用self-attention 层进行编码,引入三个变换矩阵,得到Q K V向量,然后利用词与词之间Q K相乘的结构进行注意力计算,将权重系数乘以V就是新的词向量表示。

位置向量

  • self-attention计算并没有考虑位置信息,如果将K,V的顺序打乱,获得的Attention的结果还是一样的, 因此要引入位置嵌入
  • 位置嵌入的维度和字向量的维度一致,将每个位置编号,然后每个编号对应这一向量,最后将该向量和词向量相加(注意是相加而不是拼接),这样就给每个词引入了一定的位置信息。

Multi-head Attention 计算过程

    • 插入最新理解(不一定对)首先词向量经过变换矩阵变成(QKV) ,然后把QKV等分h份,然后经过不同的权重(W_i)变换,得到新的(Q_i,K_i,V_i)
    1. 假设现在头数是(h),首先将向量长度等分为(h)

    2. 然后将等分后的数据通过不同的权重((W_i^Q),(W_i^K),(W_i^V),)映射得到新的(Q,K,W)值,

    3. 将上述映射的h分数据计算相应的attention的值

    4. 按照之前分割的形式重新拼接起来,再映射到原始的向量维度。就可以得到Multi-head-Attention的值

      其实认真来看Multi-Head Attention的机制有点类似与卷积中的多个卷积核,在卷积网络中,我们认为不同的卷积核会捕获不同的局部信息,在这里也是一样,我们认为Multi-Head Attention主要有两个作用

      1)增加了模型捕获不同位置信息的能力,如果你直接用映射前的Q, K, V计算,只能得到一个固定的权重概率分布,而这个概率分布会重点关注一个位置或个几个位置的信息,但是基于Multi-Head Attention的话,可以和更多的位置上的词关联起来。

      2)因为在进行映射时不共享权值,因此映射后的子空间是不同的,认为不同的子空间涵盖的信息是不一样的,这样最后拼接的向量涵盖的信息会更广。

        有实验证明,增加Mult-Head Attention的头数,是可以提高模型的长距离信息捕捉能力的。

Attention Mask

  • 由于有的句子padding后部分为0,当进行(Softmax)计算时,0会使计算产生偏差,因此采用mask方法进行补偿 即把0的位置改成很大的负数

残差连接

  • 我们在上一步得到了经过注意力矩阵加权之后的(V​), 也就是(Attention(Q, K, V)​), 我们对它进行一下转置, 使其和(X_{embedding}​)的维度一致, 也就是([batch size, sequence length, embedding dimension]​), 然后把他们加起来做残差连接, 直接进行元素相加, 因为他们的维度一致

layer normalization

  • 作用是吧神经网络中的隐藏层归一化为标准正太分布,也就是(i.i.d)独立同分布 ,以起到加快训练速度,加速收敛的过程,

  • [mu_{i}=frac{1}{m} sum^{m}_{i=1}x_{ij}$$ 上式中以矩阵的行$(row)$为单位求均值 ]

    (x_{ij}-mu_{j})^{2}​$$ 上式中以矩阵的行((row)​)为单位求方差; $$LayerNorm(x)=alpha odot frac{x_{ij}-mu_{i}}
    {sqrt{sigma^{2}_{i}+epsilon}} + eta ag{eq.6}​$$ 然后用每一行的每一个元素减去这行的均值, 再除以这行的标准差, 从而得到归一化后的数值, (epsilon​)是为了防止除(0​);
    之后引入两个可训练参数(alpha, eta​)来弥补归一化的过程中损失掉的信息, 注意(odot​)表示元素相乘而不是点积, 我们一般初始化(alpha​)为全(1​), 而(eta​)为全(0​). 

  • [X_{attention} = X + X_{attention} ]

  • [X_{attention} = LayerNorm(X_{attention}) ]

FeedForward

  • [X_{hidden} = Activate(Linear(Linear(X_{attention}))) ag{eq. 7}​$$ 5). ]

[X_{hidden} = X_{attention} + X_{hidden} ]

[X_{hidden} = LayerNorm(X_{hidden}) ]

[X_{hidden} in mathbb{R}^{batch size * seq. len. * embed. dim.} ​ ]

Bert


  • elmo+transformer
  • 训练的时候会随机遮蔽掉某些单词 mask

xlnet


代码与实战


原文地址:https://www.cnblogs.com/rise0111/p/11320683.html