☰
大模型transformer中的QKV以及预测内容简述
2026/10/10 9:49:44 网站建设 项目流程

概述

目前各种agent搭配了越来越多的AI大模型,而大模型最开始大多都是基于transformer训练而来;那么在输入的内容和输出的内容之间具体的转换,我理解主要是Q,K,V这3个矩阵运算而来

token切片后的QKV矩阵
输入的内容会切分成小块token,然后再抛送给大模型大家基本都知道;
但字符串内容切片后并没有直接抛给大模型,而是会先根据分词器获得一个id,然后从字典表(大模型官方训练好的字段表)中查询对应的id的向量x(向量x可以理解为一个num数组)

之后再将查询出来的的向量x进行矩阵运算(简单理解的话类似一个nXn的矩阵,java代码中类似嵌套for循环)

而这个矩阵有3个,一般是Wq,Wk,Wv三个矩阵,这3个矩阵是AI大模型官方提前训练好的,和embedding表是一起训练出来的;

向量x经过Wq矩阵计算后获得Q向量数据(没错Q也是一个4096长度的向量数组);
K和V也是一样的步骤,生成出来的也是K向量数组和V向量数组;(即所有的token都会经过同一份Wq/Wk/Wv矩阵的计算)

矩阵计算的循环次数是大模型官方提前设定好的;每一层计算的时候大致流程是这样的:

前面通过Wq/Wk/Wv矩阵分别得出Q、K、V向量数组后,Q和K做向量点积汇总成1个数值(注意这里是1个token下的4096的Q和4086的K相乘),每一个Token的Q,分别和所有Token的K做一次点积,n个token就有n个数值,然后token之间两两打分,再用softmax将打分变成权重(即相加为1的百分比),再乘上V向量数组变回4096数组;

乘上V向量数组变回4096数组解释:
比如n是4,经过softmax后是这样一个权重
W = [0.96, 0.006, 0.03, 0.002]
然后V是这样一个嵌套数组
V =
[
V1 ← 4096维
V2 ← 4096维
V3 ← 4096维
V4 ← 4096维
]

然后
0.96 × V1
+
0.006 × V2
+
0.03 × V3
+
0.002 × V4

Result =
[
0.96v11 + 0.006v21 + 0.03v31 + 0.002v41,
0.96v12 + 0.006v22 + 0.03v32 + 0.002v42,
…
]

最后逐维相加得到一个4096维向量A;

此时初步计算已经完成,接下来还要经过2次残差和FFN加工

第一次残差是加回本身
A = 权重 · V (上面说的的"变回 4096"维度的向量A)
x’ = x + A ← 第一次残差(先加回原始 x)
h = FFN(x’) ← 逐 token 加工
x’’ = x’ + h ← 第二次残差

x’'就是本层

预测下一个内容

在上面经过指定次数的矩阵运算后,拿到最后一个token的在最后一层矩阵运算后的结果x'',然后把这个4096长度的向量x''和词表做点积(词表里每个值也是一个4096长度的向量),得到一个词表长度的分数数组;接着用softmax将这个分数数组转成占比;最后根据选择策略,抽到词表中的值对应的id,然后通过分词器将id背后的内容捞出来,拼接到输入内容后;

之后再将整个输入内容再重新切分token,然后进行矩阵运算吗,重复这个过程直到词表抽取到结束标识或者达到最大token计算数量;

在重复计算的时候有个K,V缓存,在前面提到的nXn的token矩阵计算中,是token自己的Q和其他token的K去计算打分,单历史token已经计算过了,再次进入矩阵后历史token的计算其实不会变化,只有新token才需要重新计算(计算的时候只需要其他token的K)然后再把自己的V和其他token的V进行累积打分;

K,V缓存的判定是token的结算是否会被后来的token所改变

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询