Self-Attention计算详解

第一步

准备输入向量(本例子里是每个单词的embedding),对每个单词创建Query向量、Key向量、Value向量。这些向量是单词embedding和三个转换矩阵(W_Q、W_K、W_V)相乘得到,这三个矩阵是在训练中学习得到的。
注意到这些新向量的维度比输入词向量的维度要小(512–>64),并不是必须要小的,这种结构是为了让multiheaded attention的计算更稳定。

第二步

self-attention计算的第二个步骤是一个计算分值。这里我们计算 “Thinking Matchines” 中 “Thinking” 的self-attention。我们需要计算句子中每个单词对 “Thinking” 的打分,这个分决定了在编码 “Thinking” 时,对句子中的其他部分的关注程度。
这个分是通过计算 “Thing” 的query向量与其他词的key向量做点积得到的。所以当我们处理位置1单词的 self-attention 时,第一个分值是 q1 和 k1 的点积,第二个分值是q1和k2的点积。
在这里插入图片描述

第三步&第四步

第三步和第四步是把分值除以8(key向量维度的开方 d i m k e y \sqrt{dim_{key}} dimkey ,这里用的是64),这样梯度会更稳定。然后通过 softmax 归一化分值使加和为1。
softmax 分值决定着每个词对这个位置的关注度。很明显,这个位置的词会有最高的softmax分数。
在这里插入图片描述

第五步

将softmax分数与对应value的向量相乘(为后续sum up做准备)。这么做的目的是保留关注词的value值,削弱非相关词的value值(如乘以一个很小的值0.001)。

第六步

累加所有加权后的 value 向量,就产出了该位置的self-attention的输出结果。
在这里插入图片描述
上述就是self-attention的计算过程。生成的向量可以继续送入前向神经网络。在实际实现中,上述计算是以速度更快的矩阵形式进行的。

Matrix Calculation of Self-Attention

第一步,计算query、key、value的矩阵,将所有输入词向量合并成矩阵X,并且将其分别乘以训练好的权重矩阵(WQ , WK , WV)。
在这里插入图片描述

矩阵X的每一行对应输入句子中的一个词,图片中 embedding 向量的维度是512,q/k/v向量的维度是64。

最后,鉴于我们使用矩阵处理,可以将步骤2~6合并成一个计算self-attention层输出的公式。
在这里述

矩阵形式的self-attention计算

参考:

http://jalammar.github.io/illustrated-transformer/

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值