transformer---李宏毅

transformer---李宏毅
什么是transformer?对于seq2seq模型,我们常用的是RNN,但我们所使用的RNN是按照时间步去计算的,缺少并行性,当我们的训练集很庞大时,我们的训练时间要很久,而李宏毅老师在视频里讲到,有人提出用CNN去替代RNN,如下图,左图为双向RNN,而右图为CNN去训练序列
transformer---李宏毅
我们看到右图中使用CNN对序列进行特征的提取,图中每一个三角形代表一个filter,我们第一层提取相邻的序列单词的特征,第二层则对特征进行更深入的提取,以此类推当我们想要提取到更多信息的联系的话,那么我们就要叠加多层的CNN,这种的好处是可以并行化,但是缺点是要叠很多层,这样我们才能获得丰富的信息。
transformer---李宏毅
对此google提出了Attention is all you need的论文,论文中使用了Self-Attention Layer去代替seq2seq的RNN,即使所有的RNN都可以用self-attention去代替,我们输入一个序列也可以输出一个序列,并且他的计算是并行的,极大地加快效率。

transformer---李宏毅
上图为self-attention的参数介绍,我们输入序列x1 — x4 通过inner product
获得输入a1 — a4,然后我们需要在self-attention层中输入三个参数q(query)、k(key)、v(value),我们可以通过a分别dot三个不同的权重矩阵获取每个输入的q、k、v。
transformer---李宏毅
上图为我们使用q、k、v三个参数进行运算了,我们的第一步是算出当前的词语与其他的词语的相似度,以上图为例,我们将一个输入的query分别于其他输入的key进行点积乘法,得到的α即为我们所说的词与词之间的相似度,我们要计算所有的输入的相似度,上图没有给出。为什么除以根号d?因为当我们输入的矩阵过大时,矩阵乘法产生的数据会非常大,我们要适当缩小。
transformer---李宏毅
我们获取到相似度后要怎么做呢?如上图,我们要将我们获取的相似度进行归一化,使用soft-max层获取到相似度的概率,这就是soft-max层的运用,得出当前词对其他词的注意力分布的概率。
transformer---李宏毅
获取到当前单词的注意力后,我们所需要做的就是整合注意力,使用获取到的注意力与每个词的value进行点乘,这时我们获取到的就是注意力机制对每个词的权重分布,相加后我们就可以得到当前的词对所有词的信息,并且这些信息是由着重点的。
transformer---李宏毅
上图为对x2进行self-attention。
transformer---李宏毅
上图为对序列输入的抽象。
那么我们是怎么对计算进行平行化的呢,请看下图
transformer---李宏毅
当我们的a1 - a4进行拼接与权重矩阵进行inner product时,我们可以同时获得所有输入的q、k、v的拼接,原理就是关于矩阵的乘法。
transformer---李宏毅
获取到q、k、v的拼接后怎么办呢,我们看上图,我们需要的是α,也就是相似度,那么我们可以用每个query,去product key的拼接矩阵的转置矩阵,这样我们就可以获得一个α的拼接矩阵。
transformer---李宏毅
那让我们再进一步,让我们使用key的转置拼接矩阵,去product q的拼接矩阵,那么我们就可以获得一个关于所有输入的相似度的拼接矩阵,每一列都为一个输入的相似度。然后,我们进行softmax归一化,就可以获得注意力的概率。
transformer---李宏毅
最后呢,我们就要使用我们的概率去与每个输入的value进行点乘,在这里我们使用v1 - v4的拼接矩阵与注意力分布矩阵进行矩阵乘法,最后我们就可以得到每个输入关于整个序列的输出了。
transformer---李宏毅
self-attention的流程。

multi-head self-attention
下面是muti-head self-attention
transformer---李宏毅
原理与上述的self-attention相同,只是每个输入的q、k、v参数可以是多个。
每个self-attention都只与相同层次的参数相乘,例如qi1只与ki1和kj1相乘,value也是如此。
transformer---李宏毅
而因为每个输入都可以得到多个的信息输出,我们可以使用dot将他们转化为一个输出。mult-head的优点是不同的head可以关注不同的信息,每个head各司其职。

顺序问题
对self-attention来说,输入的次序是不重要的
原paper中,使用人工设置的positional vector ei
也可以在xi上append一个one-hot的vector,但是实际的效果是一样的。
transformer---李宏毅

流程图
transformer---李宏毅
其中解码器的第一层为masked-muti-head-attention只是用于对已经输出了的词进行self-attention,因为后面的词还没有产生。
transformer---李宏毅
muti-head-attention
transformer---李宏毅
一个考虑远处,一个只考虑近处。

学习自:https://www.bilibili.com/video/BV1J441137V6?t=1463