注意力机制的qkv

关于这个的介绍网络上非常非常多,我用个通俗的例子解释下.
整个注意力机制处理下来,词嵌入所表达的句子矩阵维度是不变的. 比如有一句话,3个词,每个词用10个维度向量表达.进去之前(3,10),transfomer以后还是这个维度.

q和k合起来干一个事情,就是搞明白这3个词之间彼此之间的权重关系,那怎么干了:

  • 词向量维度 (1,10), 整个句子是(3,10),和q乘,维度保持不变 (3,10),所以q的维度必须是(10,10)
  • 词向量维度 (1,10), 整个句子是(3,10),和k乘,维度保持不变 (3,10),所以k的维度必须是(10,10)
  • 上面两个(3,10)经过那个公式,要表达3个词之间的关系,即使你不动脑子,也知道结果的维度一定要是(3,3),

这么一通操作,就得到了一个(3,3)的矩阵,就好像统计的协方差矩阵 然后再看v

  • 词向量维度 (1,10), 整个句子是(3,10),和v乘,维度保持不变 (3,10),所以v的维度必须是(10,10)
  • 把上面的(3,3)的协方差矩阵乘以v,维度不变, 当然,理论上v也可以是(3,11),但是transfomer可也不是一个就完了,是一个套一个,过一个trans就变身了,下一个不好设计了,所以一般也是10.

然后再说下,这个qkv针对每个字变化,还是针对每个句子变化.

事实上,qkv不是针对句子和字来设定的,而是一个头不变. 比如词嵌入是700维的. 那么首先产生qkv的就是700*700维度,他们在一个头里面不变,和句子和字变了无关,类比于卷积核,全局共享.

计算一下注意力机制的参数量更明白这点:

  • 以700维度词嵌入为例,那么q,k,v合计参数700 * 700 * 3,约等于150万
  • 一个transformer5个头,那么150 * 5,约等于750万
  • 一共搞2次transformer,750*2,约等于1500万
  • 此外词嵌入本身也是可以训练的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值