以下图片来自李宏毅老师的PPT截图,李宏毅老师的视频对这部分讲的很清楚,看了以后有了很清晰的认识。
一、研究背景
如下图所示,b1、b2、b3、b4、用Self-Attention可以同时计算,而在RNN中不能够同时被计算,即解决RNN无法并行化的问题。
二、Self-Attention实现原理
1、在把各个词送入Self-Attention之前先将其乘以一个特征矩阵,以特征化的表示各个单词,然后将其送入Self-Attention中(词嵌入的方法,Word embedding),即ai=Wxi,然后把不同的a乘上不同的矩阵W变为向量q(去匹配其他向量)、k(被匹配)、v(要被抽取出的information),如下图所示:
2.然后用每个向量q去对每个k做attention,这里公式除以根号d是为了平衡q和k乘的时候方差太大。如下图:
3.然后做Soft-max,如下图:
4.从下图可以看出输出的向量b1可以考虑整个句子的信息。
综上四步,其实整个框架就是下图这个样子(所有向量可以被平行化计算):
三、Self-Attention总结
各个向量的点乘运算可以合起来表示,如下图:
更形象化表示:
然后,由于在Self-Attention中没有考虑位置信息,所以在原始论文中加一个ei来表示位置信息,怎么理解呢,可以理解为在xi向量上加了一个one-hot表示的pi,然后经过计算发现ei并不影响原来的向量,也就是原来的信息不会被影响:
那么也可以把Self-Attention用在Seq2seq中,和RNN的使用一样,如下图:
四、Self-Attention的变形(有了这个变形才更好理解Transformer)
Multi-head Self-Attention结构,以head数等于2为例:
可以对向量b乘一个W进行降维处理,如下图:
五、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部分。