【模型】Transfomer(一)

253 阅读3分钟

来自于论文:attention is all you need

1. 基本构造:encoders+decoders

  • 其中encoders和decoders分别由很多个encoder堆叠或者decoder堆叠。

  • encoder由自注意力层和前馈神经网络构成

  • decoder构成

2. embedding模块

  • word embedding

    • 作用:word的独热表示造成维度爆炸,用nn.Embedding对词的onehot形式进行压缩,转化为稠密的词向量。

    • Embedding的权重矩阵有两种选择:

      • pre-trained的embeddings固定,这样就是一个lookup table。
      • 随机初始化,社会trainable,这样在训练过程中不断对embedding进行改进。(Transformer用的方法)
  • position embedding

    • 作用:单个词的embedding只表达意思,但是在seq中的上下关系就没办法表示了,所以位置编码是用来表达word在seq中的位置关系。而采用的三角函数形式表示的话每个维度都能对应一个正弦曲线,这样可以相对轻松的通过对应位置学习。
    • 公式:
    PE(pos,2i)=sin(pos/100002i/dmodelPE(pos,2i+1)=cos(pos/100002i/dmodelPE_{(pos,2i)}=\sin(pos/10000^{2i/d_{model}}\\ PE_{(pos,2i+1)}=\cos(pos/10000^{2i/d_{model}}
    • 参数:
      • pos指逐个word在句子中的位置。
      • i指embedding维度。
  • 两个embeddings相加后,即组成了带有位置信息的embedding。

3. encoder

  • 自注意力机制

    • 输入:词向量,先通过权重矩阵得到三个新向量q,k,v,以增加更多可训练参数(wq, wk, wv).

    • 其中q(query)和k(key)理解为找关系手握自身号牌(即q和别的k做乘法),和别人来找关系领的号牌(别人的q来跟我的k做乘法),他们通过相乘找到自身和上下文以及上下文和自身的关系(Q×KTQ\times K^T).
    • v(value)则就是本身的数值,要和相互关系做乘法,得到的注意力得分(softmax(Q×KTdk)×Vsoftmax(\frac{Q\times K^T}{\sqrt{d_k}})\times V)。其中分母的作用是做缩放,压制QK乘积过大的情况。

  • 多头自注意力机制

    • 多头起到的作用是提供了自注意力角度的多样性,最后多个子注意力得分矩阵z拼接得到了自注意力层的输出。

    • 然后用一个额外的权重矩阵对拼接矩阵进行embedding,得到最后的拼接结果。

  • 前馈神经网络

    • 输入:自注意力层输出的综合得分矩阵z(序列长度x词向量)。

    • 结构:两层线性层。

    • 作用:考虑到注意力机制对负责过程的拟合程度不够,通过两层网络加强模型的拟合能力。

    • 数学表达:

    FFN(x)=max(0,xW1+b1)W2+b2FFN(x)=max(0,xW_1+b_1)W_2+b_2
    • 输出:跟输入同维度矩阵。
  • 实际组成

    • word + position embedding输入多个串联形式的encoders,输出的结果通过FFN进一步拟合,然后送入decoder的第二个attention模块。

4. decoder

  • masked self-attention

    • mask在训练阶段使用主要是因为不能让模型接触到未来信息。所以在一个batch中使用下三角阵来达到掩盖的目的,逐个释放seq中需要预测的词。

    • 第二步的self-attention起的作用是对masked self-attention和encoder的输出z拼接进行注意力计算。
    • FFN作用和encoder中一样。
  • 最后输出的结果通过一个线性层和softmax预测对应的词的概率。

参考:

  1. zhuanlan.zhihu.com/p/82312421
  2. zhuanlan.zhihu.com/p/80986272
  1. blog.csdn.net/zhaojc1995/…