Advertisement

Transformer 开篇:Self-attention Multi-head Self-attention

阅读量:

论文:Transformer: Attention Is All You Need
在这里插入图片描述

Transformer它的提出最开始是针对NLP领域的,在次之前大家主要用的是RNN,LSTM这类时序网络。像RNN这类网络其实它是有些问题的,首先它的记忆的长度是有限的,特别像RNN它的记忆长度就比较短,所以后面就有提出LSTM。但是他们还有另外一个问题就是无法并行化,也就是说我们必须先计算t_0时刻的输出,计算完之后我们才能进一步计算t_1时刻的数据。由于无法并行化,训练效率就比较低这样是一件非常痛苦的事情。

针对这一问题,Google提出了Transformer来替代之前的时序网络,

  • Transformer不受硬件限制的情况下,理论上记忆是可以无限长的。
  • 其次,它是可以做并行化的,这是一个非常大的优点

理论基础

Self-Attention理论

在这里插入图片描述
假设我们输入时序数据是x_1,x_1

  • 我们会将输入的x输入embedding层,将它映射到更高的维度上,得到对应的a,比如x1对应得到a_1x_2对应得到a_2

  • 紧接着,将我们的a分别通过W^q,W^k,W^v,这三个参数矩阵生成对应的q,k,v,注意这里的W^q,W^k,W^v对于所有的a都是共享的。在原论文中W^q,W^k,W^v其实是通过全连接层来实现的,这3个参数是可训练的参数。

  • 假设如图中a_1=(1,1),a_2=(1,0) ,W^q的矩阵为[[1,1],[0,1]],根据公式
    q^i=a^i W^q ,可以计算出q,这里的q代表的是query,接下来它会匹配每一个k
    在这里插入图片描述

  • 这里的k根据公式k^i=a^i W^k,计算得到。这里的k会被我们的q进行match.

  • 同理v根据公式v^i=a^i W^v,这里的v表示从a中提取得到的信息。可以认为是从a当中学到它认为有用的信息

在Transformer当中是可以并行化的,所以可以将整个过程用矩阵乘法进行书写。比如将a_1a_2拼接在一起就得到如下的矩阵。
在这里插入图片描述
然后依次与W^q,W^k,W^v相乘,就能得到q^1,q^2,k^1,k^2,v^1,v^2
在这里插入图片描述

  • 然后将所有q放在一起就是我们公式attention中的大Q,将所有的k放在一起就对应于我们公式中的大K.将所有的v放在一起就对应于我们公式中的大V.
    在这里插入图片描述

  • 将我们的Q与我们每一个K进行match,它是怎么match的呢,公式如下:
    在这里插入图片描述
    这里的d对应的就是k的 dimmensiion,k向量的元素个数.
    在这里插入图片描述
    比如图中q^1k^1进行点乘,然后除以\sqrt d(d=2表示k的向量维度),就得到对应的a_{1,1}=2.12 ; 然后再拿q^1k^2进行match,同样是拿q^1k^2进行点乘除以\sqrt d得到a_{1,2}=1.41

然后将a_{1,1}a_{1,2}通过soft-max就得到 a的结果输出就是v对应的权重,a越大我们就越关注该v,soft-max计算如下:
在这里插入图片描述
同理也会拿q^2和每个k进行match操作,同样得到a_{2,1}a_{2,2}
在这里插入图片描述
矩阵计算过程如下:
在这里插入图片描述

  • 然后根据计算求得的a与v相乘,就得到对应的输出b
    在这里插入图片描述
    整个过程可抽象为如下模块:
    在这里插入图片描述

Multi-Head Attention理论

transformer中使用最多的其实还是我们的Multi-Head Attention
在这里插入图片描述

  • aW_q,W_k,W_v相乘得到q,k,v,这一步是跟Self-Attention是一样的。

  • 然后将q均分给每个head,比如q_1=(1,1,0,1)均分两个分别为(1,1)(1,0),同理对k,v均分给每个head,如下:
    在这里插入图片描述

  • 然后对每个head执行self-attention,就能得到对应的b
    在这里插入图片描述

  • 接下来对每个head得到的结果进行拼接。
    在这里插入图片描述
    b_{1,1}b_{1,2} 进行拼接,b_{2,1}b_{2,2} 进行拼接。

  • 接下来通过一个W^o对我们拼接后的数据进一步融合,得到最终Multi-Head的输出
    在这里插入图片描述
    将muti-head抽象成一个模块,如下:
    在这里插入图片描述

Posotional Encoding(位置编码)

在这里插入图片描述
根据muti-head attention的原理,假设我们输入`a_1,a_2,a_3得到对应的b_1,b_2,b_3,如果我们将a_3a_2的顺序进行调换,我们可以发现对于我们的b_1而言是没有任何影响的,无论你后面的顺序是怎样的的,都不影响我们的b_1,这样的话肯定是有问题的。

为了解决该问题,提出了Positional Encoding编码思想

对于每个a_i,都加上了位置编码pe_i,pe_i的计算方法有两种:

  • 根据论文公式计算出位置编码
  • 可训练的位置编码

全部评论 (0)

还没有任何评论哟~