self-attention学习笔记

self-attention

QKV的理解

以购物软件中的商品查询机制为例,输入query,会返回得分从高到低的排序。总分由相似度和value计算得出,相似度又由query和key做计算得出。
在这里插入图片描述
流程图
自注意力机制中的query来自于自己
用一个token的query和另一个token的key相乘获取两个token的相似度
在这里插入图片描述

计算过程

以a1举例

  1. 首先用q1和所有token的k做乘法操作
  2. 得到的结果送入soft-max分类器
  3. soft-max的各个输出与对应token的v做乘法
  4. 相加得到最终的结果b1
    如此往复可以得到全部的四个b

在这里插入图片描述

代码实现

需要保证q的维度和v的维度相同,因为后续要做乘法运算
代码

位置编码

为了解决token调换位置对最终输出b不会造成影响的问题提出了位置编码
在这里插入图片描述
位置编码生成后直接加在对应token上
生成方法有两种:

  1. 通过公式生成奇数位置和偶数位置的编码
  2. 生成可学习的位置编码
    在这里插入图片描述

muti-head attention

计算过程

实现方法为把w分为head份,a和w相乘得到对应的head个q,例如图中a[1,2],w1[2,2x3]分成3份,a与w1相乘得到q[1,2x3]
在这里插入图片描述
另一种表示:也可以看成是把单头注意力生成的q,k,v分成head份
在这里插入图片描述
之后每个head分别做自注意力机制在这里插入图片描述
将每个头对应位置的b concat得到新的b1-bm,再将b1-bm做一次全连接
在这里插入图片描述

代码实现

随机生成一个batch为1,token个数为4,token长度为2的tensor
在这里插入图片描述
dim_in,d_model都是向量长度,dim_in是输入的token长度,d_model是token生成的q,k,v的长度。num_heads是多头注意力的头个数
在这里插入图片描述在这里插入图片描述
forward中可以看到qkv的维度变化:

  • 经过全连接由[1,4,2] -> [1,4,6]
  • 经过reshape将d_model=6拆解为(nh=3)x(dk=2)这里d_model是单头的q,k,v维度,多头注意力将其分为nh=3份,每个头的q,k,v最后一维为dk=2,转换后的维度为[1,4,3,2]
  • 再通过transpose将nh和n位置互换,将nh维度提前用于做多头的并行计算,变换后维度为[1,3,4,2]

相似度分数dist计算:
在这里插入图片描述
注意力计算
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值