3. Transformer —— 理解QKV

本文介绍了Transformer中的词向量表示,重点解析了Q,K,V在注意力机制中的作用,以及它们如何通过关系向量和残差连接赋予词向量更多语义信息。后续将深入探讨解码器和Transformer的整体结构。

        在写这一章之前,我原本想继续写decoder,交叉注意力,掩码注意力等等。但是,如果按照之前的对q,k,v的解释,我觉得并不能很好理解decoder、交叉注意力倒是在做什么,最后这个decoder是怎么把下一个单词给预测出来的?q,k,v到底都是些什么东西?为什么要qk点积?等等一系列问题,都很难理解。

        于是,我觉得应该从向量的角度,重新理解q, k,v及attention中各种运算的意义。这篇文章很大程度上受益于3Blue1brown的两个对transformer形象解读的视频。我非常建议大家去看下他的视频。

1. 词向量

        正如我们之前所说,embedding是将人类理解的单词变成计算机理解的数字。

        在transformer中,单词先经过一次单词编码,再经过一层位置编码。位置编码的意义就是标注这个单词是句子中的第几个单词。总之,经过这两次编码后,得到一个向量,代表词空间中这个单词。比如,通过两层embedding,将 "china" 编译成 [ 3, 6 ,10]。那么在这个三维的词空间中,这个向量就代表china。现实情况中,embedding出来的词向量的维度往往很高。

             同样的,embedding将句子里的单词都编译到一个空间中。如下图所示,在进行学习前,所有的这些向量,只是杂乱无章的,在空间中分布着,仅仅代表着单词本身。

        模型学习的意义,就是调整这些向量,使得其按照一定的逻辑关系在空间中分布。简单的来说就说是物以类聚,相近意思的单词应该靠在一起。看下图,在经过学习后,“中国”和“熊猫”相近,“澳大利亚”“袋鼠”相近。而且中国和澳大利亚就离得很远。

        注意这两个绿色的小剪头,他们也代表着一种关系,可以是 “这个国家代表性的动物是什么”。由此可以看到,学习后的向量,可以蕴含十分丰富的关系和逻辑,包含了语义和句法的信息,以及重要的是,也包涵了下一个单词是什么的信息

        学习前,中国这个向量,只代表中国。学习后,模型就可以知道,跟中国相近的还有 熊猫熊猫 是 中国的一种代表性动物。如果是在生成一段关于中国的介绍,那么跟中国相近的熊猫,这个单词就更容易被获取到,这个单词的概率就更大,就更容易被生成出来,比如生成“中国熊猫”。像 澳大利亚,袋鼠 这些,由于离得很远,那么肯定更难被读取,下一词是他们的概率也就更低。

        上述的学习过程,其实就是encoder中自注意力的学习过程。比如在中文翻译成英文的过程中,encoder先学习的是中文文本。学习后,使中文的词向量按照一定的关系在空间中分布。

2. Q,K是什么?              

        同样地,我们看下面这张图片。在计算x1的注意力时,q1可以理解“句子里什么单词跟thinking(x1)有关?”。对于k1,k2可以理解是对于这个问题的回答。比如,k1回答是“我是这个词的形容词”时,q1*k1的相似度结果就会是正值而且较大。如果k2是“我跟这个词没关系”,q1*k1的相似度结果就会是负值。

        在向量的层面上,该怎么理解呢?x1,x2,...,等是高维度的词向量(比如12,288)。我们要比较问题和回答之间的关系,就需要将q,k放到同一个空间维度(qk空间,通常是较低的维度,比如128)下比较。

        把高维度的词向量x,通过Wq,输出到低维度的,qk空间中的,查询query向量q。

        同理,把高维度的词向量x,通过Wk,输出到低维度的,qk空间中的,回答key向量k。

        那么,为了计算问题query和回答key之间的相似度,很明显是可以通过向量的点积来计算得到。比如上面两张图的例子,creature和fluffy在原文本中是"fluffy creature",指的是 毛茸茸的生物。显然他们两的关系很大,fluffy 是 creature的形容词。那么在QK空间中,creature向量q和fluffy 的回答向量k之间的相似度就很高。从图中也可以看到,他们几乎一致。

        这里简单说下向量点积,向量a和向量b越相近,那么他们的点积是正值而且会越大。向量a和向量c越相远,那么他们的点积是负值而且会越大。

       

        得到相似度分数后,会进行一次归一化的处理,也是为了方便后续的计算。就是下图中的softmax以及括号里的除以\sqrt{d_{k}}

3. V 就是 X 吗?

        我个人觉得对于v的理解,是整个attention中最重要的部分。在刚学习的时候,我一直认为v就是代表x。我看的很多文章,都是认为v是x。包括我第一篇文章里的例子,把v直接看作x似乎是个很合理的事情。

        但是这样理解的话,会有很多不合理的地方。首先,如果v是x,那么为什么不就用x,还花费那么大的参数量Wv和计算量去构造出这个v?其次,在实际结构中有个残差连接,对于这个输出的z,又把原来的x加了回来。如果z已经代表了新的x,那再加上x的后,这又成啥了?而且在decoder中的交叉注意力中,这么理解更加奇怪。比如在中文翻译成英文时,为什么要把代表中文的词向量加到英文的词向量中,等等问题。

        让我们一起来探讨下v是个什么东西。还记得这张图片中绿色的小箭头吗?中国的代表性动物是熊猫,澳大利亚的代表性动物是袋鼠。绿色的向量代表着一种逻辑关系,重要的是,他是可以加到其他不同的向量上。加到“中国”,就可以指向“熊猫”。加到”澳大利亚“,就可以指向“袋鼠”。

       V就是这种绿色的小箭头,代表的是词向量之间的关系,并且是可以应用在不同的词向量上得到新的,富有意义的词向量。

        结合上一节说到的,由q,k得到的相似度(注意力分数),可以理解为权重。将这个分数与关系向量v相乘,代表不同的关系有不同的权重。比如对于句子“中国的大熊猫很可爱,等我放暑假的时候,一定要去看看。” 其中,”大熊猫“跟“中国”,“可爱”,关系都比较大,跟“暑假”可以说关系不大。

        比如,对于“大熊猫”来说,“中国”相似度0.8,“可爱”0.2,“暑假”0.1。那么得到z就是   

             z = 0.8*v1+0.2*v2+0.1*v3

        下图中的绿色向量就是v加权输出后的结果。此时,这里的黄色向量,就代表着,中国的可爱的大熊猫(还跟假期会被去观看,有一点点关系)。

        那么这个黄色向量是哪里来的呢?注意,在残差连接中,原始输入x又重新被加回到输出。原始输入x就是红色向量,在加上attention的结果绿色向量后,就得到了学习后的黄色向量。黄色向量所代表的词蕴含了更多的信息。

4.总结

        在这一篇中,我们重新认识了词向量,qkv以及他们的意义和作用。在此基础上,后续才能更好的理解decoder的工作原理。接下来,主要会讲解decoder结构和原理,transformer的总体结构,训练和预测流程。如果能找到合适的项目的话,会进行代码层面的学习演示。

        非常感谢您的阅读,有任何问题,欢迎指正和交流~~

        

       

### TransformerQKV 的概念和作用 #### 查询 (Query, Q) 查询向量表示当前关注的词语或位置的兴趣点。对于句子中的每一个词,都会生成一个对应的查询向量来表达该词希望获取的信息方向。例如,在分析单词 "machines" 时,其查询向量旨在捕捉有关此词的相关背景信息。 ```python query_vector_machines = word_embedding("machines") @ W_Q ``` 这里 `W_Q` 是一个可训练参数矩阵,用来转换原始词嵌入到查询空间中[^1]。 #### 键 (Key, K) 键向量则对应着整个输入序列里各个部分所能提供给其他成分的信息线索。每个词都有自己的键向量,它反映了这个词可以贡献哪些特征供他人参考。当试图理解某个特定词汇的意义时,会拿这个目标词汇的查询向量去匹配所有可能关联项所提供的键向量。 ```python key_vectors = [ word_embedding("thinking") @ W_K, word_embedding("machines") @ W_K ] ``` 同样的,`W_K` 表示另一个独立学习得到的投影矩阵,负责把标准词嵌入映射成适合做对比操作的形式[^2]。 #### 值 (Value, V) 一旦确定了最有可能影响当前节点解释性的若干候选对象之后,则需进一步评估这些选项究竟携带了多少有用的内容——这便是值的作用所在。简单来说,如果某一部分被认为对解答问题至关重要的话,那么它的值就会被赋予较高的权重;反之亦然。最终,通过对一系列经过筛选后的值进行加权平均运算得出的结果构成了自注意力层的主要输出形式之一。 ```python value_vectors = [ word_embedding("thinking") @ W_V, word_embedding("machines") @ W_V ] attention_weights = softmax(query_vector_machines @ key_vectors.T / sqrt(d_k)) output_representation = attention_weights @ value_vectors ``` 其中 `d_k` 是键向量的维度大小,而 `softmax()` 函数确保了不同位置之间的相对重要程度总和为一。上述过程展示了如何利用软性选择机制从众多备选方案当中提炼出最具代表性和影响力的片段作为下一步工作的基础[^3]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值