自然语言处理之Transformer原理及详细推导

自然语言处理之Transformer原理及详细推导

  在上一篇文章,我介绍了attention,以及attention机制与seq2seq模型的简单结合。seq2seq模型适用于问答、阅读理解、机器翻译、语言生成等自然语言处理的任务,结合attention之后,在2017年提出self-attention,形成现在所说的transformer模型。transformer模型相比于seq2seq+attention的好处主要体现于替代了RNN,使得模型可以并行计算,极大提高了效率,同时模型表现上有一定提升。

Transformer原理

自然语言处理之Transformer原理及详细推导_第1张图片
  上图为transformer的模型图。其左半部分为encoder,右半部分为decode。本博文沿用李宏毅老师的思路,先不考虑Positional Encoding来理解transformer。

不考虑Positional Encoding

  为了理解transformer,我们不妨先不考虑Positional Encoding。对于输入的文本序列 x 1 , x 2 , . . . , x n {x_1,x_2,...,x_n} x1,x2,...,xn,学习三个矩阵,对于每一个输入的文本(或单词)计算其q(查询向量)、k(关键词向量)和v(值向量)如图所示(图片来自李宏毅老师课件)。

自然语言处理之Transformer原理及详细推导_第2张图片
  如图所示,计算q、k、v的过程是平行的,也就是可以多线程同步运行。其中,q(查询向量)和k(关键词向量)的作用是两两相乘计算自注意力(self-attention),v(值向量)的作用是结合计算得到的自注意力,计算出文本特征向量。如图所示(图片来自李宏毅老师课件)。

自然语言处理之Transformer原理及详细推导_第3张图片
  如图所示,计算每一个a的过程也是平行的,可以多线程同步运行。得到a之后通过softmax得到attention权重,加权求和之后得到输出的特征向量b。得到b之后与其对应的a相加通过求和归一化操作(layer normalization)之后得到encoder层的中间输出z。将z输入前馈神经网络变形求和归一化操作(layer normalization)之后得到encoder层的最终输出(不知道为什么还要经过前馈神经网络)。

  对于decoder,每一个时间段的输入为上一个时间段的输出和当前时间段的encoder输入(很像seq2seq model)。decoder结构与encoder类似,但是在自注意力层做“masked attention”,意味着在解码器中,自注意力层只被允许处理输出序列中更靠前的那些位置。在softmax步骤前,它会把后面的位置给隐去(把它们设为-inf)。

  对于tranformer,encoder灰色框部分和decoder灰色框部分都可以重复多次(意义不明)。

考虑Positional Encoding

  不考虑Positional Encoding的transformer问题在于:对于序列中的词,在句子中的位置似乎不重要了。在transformer模型中,对于Positional Encoding使用预定义的方式进行赋值或计算,而不是在模型中进行学习。

Transformer应用

你可能感兴趣的:(自然语言处理原理)