Multi-head Self-attention & 应用到图片

Multi-head Self-attention

背景:Self-attention有一个进阶的版本,叫做Multi-head Self-attention。Multi-head Self-attention在今天使用上非常地广泛。

至于需要用多少的head,这个是另外一个hyperparameter,也是需要我们自己调试的。

那为什么我们会需要比较多的head呢?
因为,我们在做Self-attention的时候,我们用q去找相关的k,但是相关这件事情有很多种不同的形式有很多种不同的定义。所以也许我们不能只有一个q,我们应该要有多个q,不同的q负责不同种类的相关性。 

如下图所示,详细说明多头注意力机制。

·

  • 先把a乘上一个矩阵得到q
  • 再把q乘上另外两个矩阵,分别得到q^{i,2}q^{i,1}i代表的是位置;1跟2代表这个位置的第几个q。所以有q^{i,2}q^{i,1}代表说我们有两个head。

我们认为这个问题,里面有两种不同的相关性,所以需要产生两种不同的head,来找两种不同的相关性。

其实就是把q,k,v,分别乘上两个矩阵,得到这个不同的head,就这样子而已。

那么,如何求b向量呢?以求b^{i}为例,如下图两个图片表示: 

 然后把得出的b^{i,1}b^{i,2 }连接起来,在通过一个transform,即在乘上一个矩阵W^{O},最终得到b^{i}  

 Positional Encoding

背景:到目前为止,你会发现Self-attention layer,它缺少一个很重要的资讯,这个资讯是位置的资讯。对一个Self-attention layer而言,每一个input,它是出现在sequence的最前面,还是最后面,它是完全不知道的,因为没有位置资讯。

对Self-attention而言,位置1与位置2与位置3与位置4之间的完全没有任何差别,这四个位置的操作其实是一模一样。对Self-attention来说,q1到q4的距离,并没有特别远;q2到q3的距离也没有特别近。

对它来说所有的位置之间的距离都是一样的,没有任何一个位置距离比较远,也没有任何位置距离比较近,也没有谁在整个sequence的最前面,也没有谁在整个sequence的最后面。

但是这样子设计可能会有一些问题,因为有时候位置的资讯也许很重要,比如做这个POStagging(词性标记),也许你知道说动词比较不容易出现在句首,所以如果我们知道说,某一个词汇它是放在句首的,那它是动词的可能性可能就比较低,这样子的位置的资讯往往也是有用的。

 但Self-attention里面根本不存在位置资讯,那应该怎么办呢?

有办法,使用positional encoding 如下图所示

  •  你为每一个位置设定一个vector,叫做positional vector这边用e^{i}来表示,上标i代表位置。每一个不同的位置.就有不同的vector。即 e1是一个vector;e2是一个vector;e128是一个vector;
  • 不同的位置都有一个它专属的e,然后把这个e加到a上面,就结束了。
  • 这样就可以告诉Self-attention位置的资讯。如果它看到α有被加上e^{i},那它就知道现在α出现的位置应该是在i这个位置

但,如何得出那些positional vector呢?

其实目前positional encoding 一直处于尚待研究的问题

  1. 你可以Hand-crafted
  2. 也可以Learned from data

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值