transformer中对于QKV的个人理解

目录

1、向量点乘

2、相似度计算举例

3、QKV分析

4、整体流程

(1) 首先从词向量到Q、K、V

(2) 计算Q*(K的转置),并归一化之后进行softmax

(3) 使用刚得到的权重矩阵,与V相乘,计算加权求和。

5、多头注意力


eb2919d2e03c4e1eaf437f0c569ecb42.png

上面这个transformer中的注意力公式,相信大家不会陌生。公式并不复杂,但是why? 为什么是这个公式,为什么大家都说QKV代表Query(查询)、Key(键)和Value(值)?

之前了解transformer的时候,对于QKV的设定感到很奇怪,后来慢慢接受了这个设定,今天记录一下自己的理解。

本文只考虑了QKV的计算过程便于理解,对于位置编码等并不作说明。

1、向量点乘

首先从向量点乘说起,是用于计算两个向量的相似度。

2e40f19a064b4282900ac287ec489801.png

图中可以看到如果两个向量的方向相同或相近,它们的点乘结果会很,表示这两个向量相似度。相反,如果向量方向相反,点乘结果会很小或为负值

10412f0f2eca4378b39b90879253e0d5.png

向量x和向量y点乘表示向量x在向量y上的投影再乘以向量y。反应两个向量的相似度。

假设矩阵X由n个行向量组成,每个行向量xi代表一个词的词向量,整个矩阵由这些词向量组成。简而言之,矩阵X是一个词向量矩阵,每个元素都是一个词的向量表示。

具体来说,矩阵X是一个n×n的方形矩阵,其中包含n个行向量(n个词的向量)

ba62c2208ccf46bda9ee934514c0bd66.png

当矩阵X与它的转置XT进行乘法运算时,得到的是目标矩阵XXT。这个目标矩阵的每一个元素是通过矩阵X中的行向量与列向量的点乘得到的。如下图所示

bd2ec682373e4919850e337e3c719a1d.png

例如,目标矩阵XXT中的第一行第一列元素X0​⋅X0​,实际上是向量𝑋X0​与自身做点乘,这表示的是向量𝑋X0​与自身的相似度,也就是它自身的模的平方。

同样地,第一行第二列元素X0​⋅X1​表示的是向量X0​与向量X1​之间的相似度,即它们之间的点乘结果。

这个过程可以推广到矩阵X的所有行和列,从而得到整个XXT矩阵,其中每个元素都表示了对应向量之间的相似度

2、相似度计算举例

下面以词向量矩阵为例,这个矩阵中,每行为一个词的词向量。矩阵与自身的转置相乘,生成了目标矩阵,目标矩阵其实就是一个词的词向量与各个词的词向量的相似度。

6b75a7dac5694b159641ce3cf57fe13d.png

最终的矩阵数值代表了词向量之间的相似度。
我们为什么要求相似度,是为了合理分配权重。这个时候可以加上softmax

f50fafd313be45128cb69f59ad64be18.png

406c3fe78b384c31bb1132030cafd358.png

对上述得到的相似度矩阵应用Softmax函数,进行归一化处理。Softmax函数将每个元素转换成一个概率分布,使得每个元素的值都在0到1之间,并且所有元素的和为1。
这样,每个词向量与其他所有词向量的相似度都被转换成了一个概率权重。

接下来,将这个权重矩阵与原始的词向量矩阵 X 相乘。这个过程可以看作是每个词向量根据其权重与其他所有词向量进行加权求和。

a5a7366a573746348df8a030f57dcd2b.png

98e315d1fd614513bea90ab445bf0a94.png

权重矩阵中某一行分别与词向量的一列相乘,词向量矩阵的一列其实代表着不同词的某一维度。经过这样一个矩阵相乘,相当于一个加权求和的过程,得到结果词向量是经过加权求和之后的新表示。
这个新词向量综合了输入词向量矩阵中所有词的信息,权重由它们之间的相似度决定。

3、QKV分析

注意力Attention机制的最核心的公式为:

eb2919d2e03c4e1eaf437f0c569ecb42.png

a5a7366a573746348df8a030f57dcd2b.png

很相似。

daa232a6af8d45a29d2a80cb40134010.png

QKV的由来可以用图片演示为:

8f77ecb2f0c64fa1961e21f5e7d0869b.png

这些乘法操作是线性变换,它们将输入矩阵 X 映射到不同的表示空间,为注意力机制的计算提供基础。

注意力机制不直接使用原始的输入矩阵 X,而是使用经过这三个权重矩阵变换后的Q、K、V。因为使用三个可训练的参数矩阵,可增强模型的拟合能力。

dde1b4a960c44e2ea10007a21a6941bf.png

在上面这张论文中关于注意力的原图中,包含了我们之前所解释的过程,可以看到输入的是QKV,也就是真正输入到注意力的是这三个矩阵。流程解释如下:
04d5d81b41cb4c09b8da9341f6c1ed23.png

Mask是机器翻译等自然语言处理任务中经常使用的方法。在机器翻译等NLP场景中,每个样本句子的长短不同,对于句子结束之后的位置,无需参与相似度的计算(比如后面补充的数据为很大的负数,这样在softmax中这项就会接近于0),否则影响Softmax的计算结果。

4、整体流程

利用流程图重新整理一下整体的流程。

(1) 首先从词向量到Q、K、V

9d3d5a29a7ae434ab4c826da6056b9a0.png

(2) 计算Q*(K的转置),并归一化之后进行softmax

f4bc3ba133be4b9d95b4280e39820416.png

(3) 使用刚得到的权重矩阵,与V相乘,计算加权求和。

8230db7367134085bdbd213ce3be5dbe.png

注意这里得出的z1,z2形状(1,3),不同的词embedding之后经过QKV的输出,代表不同词的注意力。这里z1,z2代表Thinking和Machines的注意力。堆叠在一起之后的形状是(2,3),代表这个head输出的Z为(2,3),注意是大写的Z,Z表示这个头输出的不同词的注意力。

5、多头注意力

为了增强拟合性能,Transformer对Attention继续扩展,提出了多头注意力(Multiple Head Attention)。如下图

c525035103c1420d87ebc2f7d1c0733c.png

其实就是重复之前的步骤,如下图

6ac527a6b8ff486eaae4abd7b9c61b7f.png

定义多组可训练的参数矩阵,生成多组Q、K、V。这里的QKV和上面单head的形状不一样,这里的QKV已经包含了不同的词汇的形状。
比如我们定义8组参数,同样的输入X,最终会得到8个不同的输出,从Z0-Z7。

8042b2c5b55449238aa74269fe20c47d.png

这里得到大写的Z0-Z7。
在输出到下一层前,需要将8个输出拼接到一起,乘以矩阵WO, 将维度降低回我们想要的维度。

1cc8f48a1c6d498eabc24d36366627d2.png

输入的X是2行4列,QKV是2行3列,经过QKT得到2行2列,再乘以V得到2行3列的Z,8个Z拼接成2行24列的矩阵,通过乘以一个24行4列的矩阵WO可以变回X的2行4列,之后继续输入到下一层

 当前为后续层时,即不是第一层的编码器,输入数据不再是原始文本,而是上一层编码器的输出。这意味着每一层都会接收前一层的输出作为自己的输入。 

6、个人理解(如有不对,还请指正)

其实大家常说的Q 是Query,K 是Key,V 是Value,并非一定就是以我们主观上理解的逻辑。更多的是为transformer的有效性找到合理的解释,我个人理解为transformer的设计是empirical,那些解释是由果推因。

多头注意力机制为模型提供了一种并行处理信息的能力,允许它同时在多个表示子空间中捕捉数据的特征。这种设计不仅拓宽了模型的感知范围,而且使其能够在不同的潜在特征空间中探索更为丰富的信息维度。
这些特征空间中蕴含的信息,可能超出了人类直观理解的范畴,但正是这些难以捉摸的特征,为模型提供了更深层次的数据理解能力,从而在各种任务中展现出卓越的性能。

  • 22
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值