以下图片来自李宏毅老师的PPT截图,李宏毅老师的视频对这部分讲的很清楚,看了以后有了很清晰的认识。

一、研究背景

如下图所示,b1、b2、b3、b4、用Self-Attention可以同时计算,而在RNN中不能够同时被计算,即解决RNN无法并行化的问题。

nlp中英文翻译的项目 nlp transform_自然语言处理

二、Self-Attention实现原理

1、在把各个词送入Self-Attention之前先将其乘以一个特征矩阵,以特征化的表示各个单词,然后将其送入Self-Attention中(词嵌入的方法,Word embedding),即ai=Wxi,然后把不同的a乘上不同的矩阵W变为向量q(去匹配其他向量)、k(被匹配)、v(要被抽取出的information),如下图所示:

nlp中英文翻译的项目 nlp transform_深度学习_02


2.然后用每个向量q去对每个k做attention,这里公式除以根号d是为了平衡q和k乘的时候方差太大。如下图:

nlp中英文翻译的项目 nlp transform_自然语言处理_03


3.然后做Soft-max,如下图:

nlp中英文翻译的项目 nlp transform_自然语言处理_04


4.从下图可以看出输出的向量b1可以考虑整个句子的信息。

nlp中英文翻译的项目 nlp transform_自然语言处理_05


nlp中英文翻译的项目 nlp transform_自然语言处理_06


综上四步,其实整个框架就是下图这个样子(所有向量可以被平行化计算):

nlp中英文翻译的项目 nlp transform_自然语言处理_07

三、Self-Attention总结

各个向量的点乘运算可以合起来表示,如下图:

nlp中英文翻译的项目 nlp transform_人工智能_08


nlp中英文翻译的项目 nlp transform_深度学习_09


更形象化表示:

nlp中英文翻译的项目 nlp transform_nlp_10


然后,由于在Self-Attention中没有考虑位置信息,所以在原始论文中加一个ei来表示位置信息,怎么理解呢,可以理解为在xi向量上加了一个one-hot表示的pi,然后经过计算发现ei并不影响原来的向量,也就是原来的信息不会被影响:

nlp中英文翻译的项目 nlp transform_nlp中英文翻译的项目_11


那么也可以把Self-Attention用在Seq2seq中,和RNN的使用一样,如下图:

nlp中英文翻译的项目 nlp transform_nlp中英文翻译的项目_12

四、Self-Attention的变形(有了这个变形才更好理解Transformer)

Multi-head Self-Attention结构,以head数等于2为例:

nlp中英文翻译的项目 nlp transform_nlp_13


nlp中英文翻译的项目 nlp transform_人工智能_14


可以对向量b乘一个W进行降维处理,如下图:

nlp中英文翻译的项目 nlp transform_nlp中英文翻译的项目_15

五、Transformer

先看Encoder部分,inputs通过embedding变成一个向量,然后这个向量会加上positional encoding(位置编码),然后进入Nx里,会重复n次,先经过Multi-head Self-Attention,Add&Norm的意思是会先把Multi-head Self-Attention的输入和输出加起来,得到b’,然后经过Layer Norm,Add&Norm之后,Feed Forward对每个输入进行处理在经过Add&Norm。

Decoder部分,Masked表示已经产生出的部分,其他过程类似于Encoder部分。

nlp中英文翻译的项目 nlp transform_nlp中英文翻译的项目_16