Transformer Attention机制中的Query、Key和Value

本文详细解释了Transformer架构中Query、Key和Value在注意力机制中的作用,以及它们在自注意力和跨注意力中的应用,强调了这些概念在捕捉上下文依赖和建立跨语言关联中的关键角色。
摘要由CSDN通过智能技术生成

在Transformer架构中的注意力机制中,Query、Key和Value是三个核心概念,其中Query 用于衡量与每个 Key 的相关性,Key 用于构建注意力得分的计算基础,而 Value 用于根据注意力得分进行加权求和,生成最终的注意力输出:

  • Query(查询):

Query向量代表的是“查询”的一部分,它通常与当前位置(例如解码阶段的当前位置)或者整个序列(编码阶段)有关的信息相对应。Query用来衡量和其它所有位置上的信息的相关性。当模型需要生成当前时刻的输出时,Query向量就起到了寻找相关信息的作用。

  • Key(键):

Key向量代表的是输入序列中每个位置的信息的“索引”或“查找表”,可以理解为每个位置的标识特征。在计算注意力权重时,每个位置的Key向量会与Query向量进行比较,通过计算点积或其它相似度函数来评估Query与序列中各位置之间的相关性。Key向量决定了哪些输入位置的信息对当前Query来说最重要。

  • Value(值):

Value向量是与每个位置相关联的“内容”或“上下文信息”的载体,包含的是实际要被关注并组合成输出的信息,即每个位置上我们认为对后续处理有价值的信息。当某个位置的Key与Query匹配度高时,对应的Value向量的权重就会增大,因此,在计算最终输出时会更多地考虑这部分信息。*注意:在计算完Attention权重之后,Value向量并不直接参与相似度计算,而是被相应的Attention权重所加权,然后累加得到的结果便是一个综合考虑了整个序列上下文信息的新向量。

如何使用:

 在注意力计算中,通常会先计算Query与所有Key的点积或相似度得分,然后通过softmax函数归一化这些得分得到注意力权重分布。之后,再用这个分布作为权重去加权求和所有的Value向量,从而得到每个Query位置的上下文向量

通过Query搜索与之最相关的Key,并从中抽取对应的Value作为最终生成或更新当前状态所需的有效信息。

公式上表达,假设对于每一个时间步t,其Query向量为Q_t,Key矩阵为K,Value矩阵为V,则注意力得分可以通过如下方式计算:

Attention(Q_t, K, V) = softmax(\frac{Q_t K^T}{\sqrt{d_k}}) V

其中d_k是Key向量的维度,除以根号下的维度是为了稳定梯度和防止数值过大。最终,每个时间步的输出是对应Query位置与整个序列其他位置交互后的加权和,这种设计使得模型可以根据当前Query的关注焦点动态调整对不同位置信息的重视程度。

具体步骤:

  1. 对于每一个输入位置i,模型都会分别计算一个Key向量Ki和一个Value向量Vi,通常是通过对输入序列经过线性变换(如嵌入层叠加或卷积操作后)得到的。

  2. 当模型在生成一个新的位置j的输出时,会首先计算一个针对该位置的Query向量Qj

  3. Qj与所有的Key向量(Ki)逐个计算注意力得分(得分反映了Qj与各个Ki的匹配程度)。

  4. 计算得出的注意力得分经过Softmax函数归一化后生成注意力分布,这个分布可以理解为当前位置j对输入序列中所有位置的关注程度。

  5. 最后,将注意力分布应用于Value向量集(Vi),通过加权求和的方式得到一个Context Vector(上下文向量),这个向量融合了输入序列中所有位置的信息,但不同位置的信息贡献程度由它们相对于Query的关注度决定。

举栗!:

自注意力(Self-Attention): 考虑句子 "The quick brown fox jumps over the lazy dog",对于Transformer模型的自注意力机制,我们首先将每个词转化为向量:

  • “The” -> Q1, K1, V1
  • “quick” -> Q2, K2, V2
  • “brown” -> Q3, K3, V3
  • ...
  • “dog” -> Q9, K9, V9

当计算“jumps”这个词的注意力时,它的Query向量Q5将会与所有的Key向量(K1至K9)进行点积运算,然后通过softmax函数得到相应的注意力权重分布。这个权重分布代表了“jumps”在生成过程中对其它词的依赖程度。

例如,如果权重显示“jumps”高度关注“fox”,则意味着在计算“jumps”的新表示时,“fox”的Value向量V4将被赋予较大的权重进行加权求和。最终生成的输出向量将综合反映了整个句子中各词的信息,尤其是与“jumps”密切相关的词。

计算过程如下:

  • 计算 Query 与所有 Key 的点积得分:scores = Q5 * K.T
  • 对得分进行缩放和平滑处理(softmax),得到每个位置对 Query 词 "jumps" 的注意力权重。
  • 使用这些权重去加权求和 Value 向量:output = weights * V

跨注意力(Cross-Attention): 在机器翻译场景下,假定我们现在正在从英语翻译成法语,并且已经得到了英文句子的编码器输出:

源句子(英语): "The quick brown fox jumps over the lazy dog" 编码器输出:(E1, E2, E3, ..., E9)

目标句子(法语): "Le rapide renard saute par-dessus le chien paresseux" 解码器在生成“saute”(跳跃)这个词时:

  • Query向量Q(解码器当前时刻的词向量,即基于“saute”的词向量)与所有编码器输出的Key向量(E1至E9)进行点积和softmax归一化。
  • 根据得到的注意力权重,选取对应编码器输出的Value向量进行加权求和。
  • 这样就得到了一个融合了源句子上下文信息的向量,帮助解码器更准确地生成目标语言词汇。

在自注意力中,Query、Key和Value来自同一序列,用于捕获内部上下文依赖;

而在跨注意力中,Query来自于解码器,而Key和Value来自于编码器,主要用于在跨语言任务中建立源语言和目标语言间的关联。

总结:

  • Query向量代表了模型在生成目标位置的输出或者在编码过程中关注某个特定输入片段的需求。它可以来源于当前解码器的隐状态(在解码过程中),或者是编码器对整个输入序列的某种抽象表示(在编码过程中)。Query向量作为引导信号,去查询与之相关的上下文信息。

  • Key向量如同索引表,对应输入序列中每个位置的特征标识,它与Query向量进行匹配计算,确定在整个输入序列中哪些部分与当前Query最为相关。

  • Value向量则存储了每个位置上实际的、有意义的信息内容,当Query通过与Key的匹配找到相关信息的位置后,Value向量提供的内容会被提取出来,按注意力权重加权整合。

模型首先利用Query去“搜索”整个输入序列(通过与Key的比较),确定哪些部分最值得关注,然后根据这种关注的程度(注意力权重)从对应的Value向量中提取并整合相关信息。这样,模型得以灵活地聚焦在输入序列的不同部分,并结合这些部分的重要信息来进行下一步的预测或编码任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值