多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

大模型transformer中的QKV以及预测内容简述

大模型transformer中的QKV以及预测内容简述 概述目前各种agent搭配了越来越多的AI大模型而大模型最开始大多都是基于transformer训练而来那么在输入的内容和输出的内容之间具体的转换我理解主要是QKV这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 × V10.006 × V20.03 × V30.002 × V4Result [0.96v11 0.006v21 0.03v31 0.002v41,0.96v12 0.006v22 0.03v32 0.002v42,…]最后逐维相加得到一个4096维向量A此时初步计算已经完成接下来还要经过2次残差和FFN加工第一次残差是加回本身A 权重 · V 上面说的的变回 4096维度的向量Ax’ x A ← 第一次残差先加回原始 xh 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所改变
返回列表