【Transformer】single self-attention的理解与计算步骤

参考B站Enzo_Mi老师
【self-Attention|自注意力机制 |位置编码 | 理论 + 代码】https://www.bilibili.com/video/BV1qo4y1F7Ep?vd_source=19425b683f74eeac34bde8ddf968a0d6
建议大家去看老师的原视频,讲解非常清晰,这里个人整理一下思路

如何理解Q K V

在这里插入图片描述
attention和推荐算法有类似之处

我们在电商购物平台上输入查询query,然后平台返回商品列表

系统会根据query去查找所有相似度高的商品,商品自带的标签就是key,query与key相乘就得到相似度

然后根据客户的评价给所有商品打分,得到value,评价高的value就高。用户喜不喜欢、评价高不高、销量高不高就是value

最后,把相似度和value相乘就得到总分

在这里插入图片描述

关于什么是token,我的理解就是输入到transformer模型中的一个batch中的最小单元的定义,可以翻译成令牌,也可以翻译成词元 对于NLP token就是每个词,对于CV token就是一个个patch图像块

深入理解可以参考知乎的这些回答 NLP领域中的token和tokenization到底指的是什么?

self attention的计算步骤

1.计算Q K V

举个例子,这在有一个四个词的句子 I have a dog 通过embedding产生四个向量,得到4个token,v=value表示词的价值,比如按照直觉,dog的价值就高一些,如果要获得a1这个词与其他词的相似度的时候,就需要用q1与其他的k2,k3,k4相乘,就得到了a1这个词与其他词的相似度,以此类推。

在这里插入图片描述

a1 a2 a3 a4 就是4个token 那么输入的向量 就是一个三维的向量 (batch_size,num,dim_in )
batch_size的我们每次用多少个batch,num就是这一批的token的个数,这里也就是4,dim_in是每个token的特征维数,这里可以看到是2,因此每个token在这里是一个12的向量,concat到一起就是42的向量,按行堆叠,这里为了便于理解我们是一个一个token的计算,但是为了提高计算速度,实际过程是一个batch一起算,
对于q1,它等于a1W1 即12的向量乘以22的向量,得到的q1是12的向量。k1等于a1乘以W2,也是12的向量乘以22的向量,得到的k1是12的向量。v1等于a1W3,是12的向量乘以23的向量,得到的v1是1*2的向量。这个时候第一个token即a1的q,k,v就计算完了。以此类推,其他token的q,k,v都是这么计算的。

以上的介绍是为了方便大家理解,但是实际去实现的时候,为了加速计算过程,我们发现每个token在计算各自的q,k,v的时候实际上是共享了W1,W2,W3矩阵,那么我们就可以把整个batch与W1,W2,W3矩阵相乘,得到整体的Q、K、V
如下图

在这里插入图片描述

2.计算相似度分数 α \alpha α

对于q1,它等于a1W1 即12的向量乘以22的向量,得到的q1是12的向量,依次k1,k2,k3,k4相乘,k1等于a1乘以W2,也是12的向量乘以22的向量,得到的k1是12的向量,把k1向量进行转置,得到的 k 1 T k_1^T k1T就是12的向量乘以2*1的向量,得到的就是一个数,这个数再除以 d k \sqrt{d_k} dk d k d_k dk是k向量的维数,也就是2,得到 α \alpha α,相似度分数。

3.计算归一化的相似度分数 α ^ \hat\alpha α^

这一步实际上就是做了一个softmax操作,相对比较简单。

在这里插入图片描述

输入的是数,输出的还是数

计算Attention

归一化的相似度分数再分别与v1,v2,v3,v4相乘后再相加,这就计算完了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量子-Alex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值