self-attention

self-attention:

输入:是多个向量,如一句话里的每个单词都可作为一个单独的向量。有可能是原始输入,也可能是某个hidden layer的输出

输出:是融合全文语义信息后生成的向量,输入和输出是一对一的

 如上图,就是考虑了所有input sequence,才有的输出

还可以多次叠加使用

具体实现:

1、找到与a1相关的所有向量,分别计算\alpha,代表相似程度

 计算\alpha的两种方法:

左侧点乘:两个向量,分别乘上wq和wk两个权重矩阵,得到q和k两个向量,再做点乘,得到结果,w一般是随机初始化,然后train出来的

右侧:差不多,qk拼接,往后算,不是重点,跳过

 算a1与其它向量的关联程度时,a1乘wq(W\, query),其他的都乘wk,最后内积算出每个attention score(注意力分数)

 注意,自己的关联性也要算,好像很重要,但是不知道为啥重要

 

 之后送入softmax,不一定非要是soft,可以换

 a1乘上矩阵Wv得出v1,乘上a{}'\,,以此类推,求和,结论是,谁的\alpha越大,b1就与谁更接近,这里不太懂

注意,这里b1到b4全是并行计算的

 实际上是将所有qkv拼成矩阵来计算的,权重矩阵wq、wk、wv乘上所有input的vector拼接成的矩阵,得到q k v的矩阵

 将k矩阵转置后,inner-product Q矩阵,得到所有的attention score的矩阵表示,然后softmax,无敌,矩阵计算需要加强

 和上边都一样,都是矩阵的inner-product,得出b1到b4组成的矩阵,就是对应位置相乘

 无敌了,全过程只有wq、wk和wv是需要train出来的,I是输入,其他的都是人为设定好的

多头自注意机制muti-head self-attention

         所谓多头,就是self-attention的变形,因为单头只能计算一个特征的相关性(我的理解是,就那一个矩阵,你不可能计算世间万物,只能算某一个特征是不是相似),但是任何事物都是有很多特征的,所以用多头可以计算多个特征的相关性,比如,一个西瓜,颜色是一个头,大小是一个头,深浅是一个头等等,综合考量这些所有的特征,才能进行最终的预测。

        多头就是把原来的q,乘上两个不同的矩阵,就会得到q(i,1)和q(i,2),以此类推k和v,但是计算的时候,q1就算k1,v1;q2就算k2,v2,以此类推

 最后把b1、b2...拼接起来,乘上一个权重矩阵Wo

position vector

目前为止,无论单头多头,都没有考虑到位置因素,不面对不同的业务场景时,有时候位置信息也很重要,比如英文中动词不能出现在句首,这样的位置信息在词性标注这样的业务场景下显得尤为重要。

方法就是给input的ai拼接一个ei位置向量(positional vector),右边那图看不懂,反正位置向量的产生方式不是固定的,可以自己研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值