问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Transformer里的Q K V是什么

创作时间:
作者:
@小白创作中心

Transformer里的Q K V是什么

引用
1
来源
1.
https://blog.cnbang.net/tech/3934/

Transformer模型作为AI领域的核心技术,其内部的注意力机制(Attention)是理解模型工作原理的关键。本文将详细解析Transformer中Q(Query)、K(Key)、V(Value)的概念及其在多头注意力机制(Multi-Head Attention)中的作用,帮助读者深入理解这一革命性模型的核心原理。

Transformer架构图,左边是encoder,右边是decoder,实际LLM大模型是由多个decoder构成

输入

假设一个字是一个token,输入是”我有一个玩”(用于推测下一个字”具“),5个字,每个字用一个向量表示,每个向量假设是9维(GPT3是12288维),也就是用9个数值表示这个字,那每个词顺序排下来,就组成了5行9列的输入矩阵,称他为X,每一行代表一个词。

输入矩阵X的示意图

权重矩阵 & Multi-Head Attention

Multi-Head Attention是由多个Self Attention模块拼接而成,如果它只有一个head,就是一个Self Attension模块。

Self Attention

Self Attention模块里,会包含Wq Wk Wv三个参数权重矩阵,模型训练过程就是不断调整Wq Wk Wv里的数值。

这几个权重矩阵的行和列数,需要满足:

  • 行数:输入矩阵X会与它们进行相乘,所以行数需要与输入词向量的维度匹配,也就是9。
  • 列数:Transformer中整个Attention模块的输入数据和输出数据维度应该是一致的,才能多层重复叠加,从矩阵相乘特性知道,这些权重矩阵的列数也应该对齐词向量的维度,还是9。

所以如果这里是单个Self Attention,Wq Wk Wv就是行数和列数都是与词向量维度一致的矩阵,也就是9×9。

Multi-Head Attention

但这里希望模型能捕获到单词间的多种不同注意力,所以会把它拆出来再拼接。假设把它拆成3个head,那就是能捕获到3种单词之间不同的关系。这里拆出来的3个head就是3个Self Attention模块,每个模块有自己的Wq Wk Wv矩阵,行列数是9 x 3。这里每个Self Attention独自进行注意力运算后,再组合拼接。

Q矩阵的运算过程

Attention运算过程

先来看这里每个Self Attention模块的运算过程。

这里输入向量分别与Wq Wk Wv相乘,得到新的矩阵Q K V,Q(query) K(key) V(value)名字已经对应了它的含义,看完它的运算过程后,再来补充下对它含义的理解。

可以认为这里Q K V这几个新的矩阵,每一行仍然是表示一个单词token向量,只是换了种表示(矩阵的乘法特性,例如第一行里的每一个数据都是由原矩阵第一行与W矩阵运算得来,与其他行无关)。

下图是Q矩阵的运算过程,K V的过程一样,只是W权重矩阵的值不同,略过。

Attention系数矩阵与V矩阵相乘的过程

单独拆除这里的第一行看看它的意义,单词”我“跟每一个字的注意力权重,再乘以每个字在V矩阵里的向量表示,结果再相加,组成最后的结果。比如这里第一个字”我“跟第三个字”一“的权重是0.1,那”一“的向量值对运算后最后表示”我“这个字的向量结果影响很小,如果是0就是没有影响。

上述整个过程,可以用这个数学公式表示:

Multi-Head Attention的运算过程

单独拆除这里的第一行看看它的意义,单词”我“跟每一个字的注意力权重,再乘以每个字在V矩阵里的向量表示,结果再相加,组成最后的结果。比如这里第一个字”我“跟第三个字”一“的权重是0.1,那”一“的向量值对运算后最后表示”我“这个字的向量结果影响很小,如果是0就是没有影响。

上述整个过程,可以用这个数学公式表示:

Multi-Head Attention的运算过程

实际模型如GPT3,单词向量维度是12288,上下文长度2048(每个token都要跟2048个token计算注意力),每个Multi-Head Attention分成96个head,同时有96层叠加,也就是96个Multi-Head Attention,运算量是巨大的。

Q K V的作用

Q可以理解为原输入的词数据,拿着这个数据找谁跟我有关系。K是被找的数据,用于计算输入的每个词之间的关系。Q和K是为了算出Attention关系系数,知道每个K的数据跟Q是什么关系。

如果Q和K是同个输入变换来的,那就是自注意力,如果是不同输入变换来,那就是交叉注意力,比如Stable Diffusion里Unet的交叉注意力模块中,Q是文字prompt,K和V是图片信息,Q与K计算的是文字与图片信息的Attention关系系数。

K和V是同个数据源,这个数据源,从Q和K的运算知道每个Q与数据源的关系系数,再与数据源做运算就是把这个关系数据作用到源数据上,源数据去做相应偏移,也就是可以在Q的作用下对源数据做相应推测。

感想

为什么这样一个算法架构,能衍生出智能,而且这个架构能扩展到多模态,语音、图像、视频基于它都有非常好的效果?我个人理解,最核心有两个点:

  • 上下文信息充足
  • 并行计算能力强

其他算法架构如果能充分融入上下文信息,规模大了也能有智能,只是Transformer可并行运算的特性,让目前的计算机算力可以触摸到涌现的那个点。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号