Query, Key, Value——Token职责的分化

Query, Key, Value——Token职责的分化

最后更新:


996 字 约 5 分钟

1.绪言

通过上一篇对Self-Attention的介绍,我们已经得知了这个Transformer架构中重要组成部分的原理

但是此时出现了一个新的问题,在自注意力的计算之中,我们到底应该如何去计算不同Token向量对其他Token向量的注意力?

直接内积?这无疑是不可行的,因为这样做的话,假如说有两个Token:AbelTomato和handsome,其中handsome对AbelTomato具有很高的注意力,但是AbelTomato显然不需要,因为这只是他众多优点中微不足道的一个,换而言之注意力是有方向的,而内积是无向的

这里的Token向量之间的双向注意力等同只是问题之一,真正的主要问题在于,我们现在对于一个Token只计算出一个Token向量,而一个Token所承担的职责却有三种:

  1. 首先是它需要表达自己想要找什么,比如handsome要去关注谁是它的主语
  2. 其次是它要表达自己能够被什么样的查询匹配,就类似于特征,tomato的特征是红色的,酸酸的,那么搜索这两个特征的时候,就需要对tomato分配注意力
  3. 最后则是当它被查询匹配之后,能够带给对方Token怎样的信息,比如handsome找到了它的主语AbelTomato,那么AbelTomato需要传递回去的就是自己所具有的语义和特征,比如来自厦门大学,比如是人工智能专业,等等

所以现在的矛盾点在于,Token向量所承载的意义太多,模型很难通过一个单一的向量去在不同的任务中调整这三种关系

所以在Transformer架构中,它并不直接使用原始的Token向量来计算注意力,而是先将每个Token投影到三个不同的表示空间中,分别得到Query、Key、Value这三个维度的向量


2.Query, Key, Value向量计算

那么我们应该如何从单一的Token输入向量映射到这三种向量呢?这就需要用到我们经过训练得到的三个矩阵: WQW_{Q}, WKW_{K}, WVW_{V}

这样一来,通过与矩阵相乘,经过线性投影变换,我们就可以得到三种新向量 Q,K,VQ, K, V

具体来说,对于输入序列中的某个Token向量 xix_{i},通过这样的运算

  • qi=xiWQq_{i} = x_{i} W_{Q}
  • ki=xiWKk_{i} = x_{i} W_{K}
  • vi=xiWVv_{i} = x_{i} W_{V}

从而得出新向量


3.Q和K:计算注意力分散

现在我们已经得到了每个Token的 (qi,ki,vi)(q_{i}, k_{i}, v_{i})

其中 qiq_{i} 代表当前Token想找什么,kik_{i} 代表其他Token能被如何匹配,因此两者点积越大,说明匹配程度越高

现在假如我们有一个只有三个词语的输入序列

AbelTomato is handsome

拆分为三个Token,有Token序列 (x1,x2,x3)(x_{1}, x_{2}, x_{3})

经过处理后得到 (q1,q2,q3)(q_{1}, q_{2}, q_{3}), (k1,k2,k3)(k_{1}, k_{2}, k_{3}), (v1,v2,v3)(v_{1}, v_{2}, v_{3})

假设此时我们需要处理第一个词AbelTomato的自注意力,那么就要计算它与其他词相关的得分,通过点积进行运算,得到

score1=q1⋅k1,score2=q1⋅k2,score3=q1⋅k3score_{1} = q_{1} \cdot k_{1}, score_{2} = q_{1} \cdot k_{2}, score_{3} = q_{1} \cdot k_{3}

这些 scorescore 就代表了AbelTomato需要注意的其他词的程度


4.缩放与Softmax

但是这个分数我们不能直接拿来用,为什么?因为它可能非常大,以及可能乱七八糟,有正有负,没有统一的方便比较的标准

所以我们有标准公式:

A=softmax⁡(QKTdk)A=\operatorname{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)

这里的 QKTQK^{T} 是矩阵层面上的计算,与原来逐向量的计算是一样的

首先为什么需要把分数除以 dk\sqrt{d_{k}} ?就是解决计算得分太大的问题,梯度模糊,不利于模型的训练

然后 softmax\text{softmax} 是什么?其实就是一种归一化的方法,能够让计算得分之和为 11,且均为正数,也就可以直接看作每个Token对于其他Token的注意力分配比例


5.V:根据权重收集信息

最后就是要应用到我们的 VV,有

O=AVO = AV

这一步的目的就是把其他每个Token的信息都收集回来汇总,得到最终的上下文表示方法

评论

评论会在审核后展示

正在加载人机验证...

查看原图