深度解析大模型预填充的结构和原理

大模型的注意力机制
注意力机制:找重点的"信息筛选器"
你读一句话时不会平均用力,会自动盯着关键信息
比如看到"小明在公园给小红送了一朵玫瑰"
会自然聚焦"小明","小红","玫瑰"这些核心
忽略"在","了",这类辅助词
大模型的注意力机制就是:
面对海量输入信息(比如一段话、一篇文章),它会计算每个词的"重要程度",然后重点关注高重要度的词,再基于这些关键信息生成回答
Q、K、V是什么
可以把它们类比成"找资料"的过程,三个角色分工明确:
- Q(Query,查询):你当下的"需求"比如你问"玫瑰是谁送的",这个问题就是Q,核心是"找送玫瑰的人"
- K(Key,键):信息的"标签"大模型会给输入里的每个词贴标签,比如"小明-送花的人","小红-收花的人","玫瑰-礼物",这些标签就是K
- V(Value,值):标签对应的"具体信息"比如K,"送花的人"对应的V是"小明";K,"收花的人"对应的V是"小红";V是最终要提取的核心内容
Token与Q、K、V
每个Token,都要生成一组Q、K、V
用Q举个例子--
你读"北京今天天气怎么样"时,不会只把"天气"当重点,每个词都会和其他词产生关联:
- 看到"北京",会自然想"北京和谁相关?和"天气"相关,是天气的发生地
- 看到"今天",会想"今天和谁相关?和"天气"相关,是天气的时间
- 看到"天气",会想"天气和谁相关?和"北京"(地点)、"今天"(时间)、"怎么样"(疑问)相关
- 每个词都是"关联中心",要通过和其他词的互动,才能明确自己在句子里的角色和含义
每个Token的Q:就是这个词的"专属提问"
大模型的Q是每个Token的"个性化查询需求",不同Token的Q对应不同的"提问方向":
- Token"北京"的Q:本质是"我(北京)在这句话里,和其他词是什么关系?谁需要我的信息?"
- Token"今天"的Q:本质是"我(今天)对应的是哪个事件的时间?和其他词怎么配合?"
- Token"天气"的Q:本质是"我(天气)的地点、时间、疑问方向是什么?需要找哪些词来补充我?"
如何得到Q、K、V
- 输入向量:每个token此时是一条7168维的隐藏向量h
- 模型里存着 3 个巨型矩阵:W_Q (7168 × 7168),W_K (7168 × 7168),W_V (7168 × 7168)
- 假设有n个token,就是n条7168维向量拼成n × 7168的矩阵X,同时计算:Q= X · W_Q;K= X · W_K;V= X · W_V
还有out
一个经过注意力计算的向量里,不仅包含它自己的原始语义(来自V),还融合了所有和它相关的其他Token的关键信息(按注意力权重比例融入),这样就会得到一个新向量
由于在计算时,进行了维度扩大(也就是上篇内容提到的"发散"),所以,还需要进行维度收缩会标准维度,这就是out计算
比如"天气"的out向量,会重点融入"北京"(地点)、"今天"(时间)的信息,同时弱化"怎么样","?"这类辅助词的影响
out是给每个Token"更新了语义身份",让它从"孤立的词向量"变成"懂上下文、有关联的词向量"
预填充是什么
预填充阶段(Pre-filling),是大模型处理输入文本的"准备阶段"
简单说就是把任务(比如"北京今天天气怎么样")转换成模型能运算的格式
还会提前算好关键中间结果,为后续生成回答打基础
预填充都包含哪些操作
- 把文本转换成数字向量,也称"查表"或"嵌入",在上一篇内容中有说明
- 生成Q、K、V矩阵
- 完成全量自注意力计算(让每个Token找到和其他Token的关联)
- K/V缓存:这里的K/V与第二步中生成的Q、K、V不是一个意思。这里是指将经过前三不处理,生成的数据,由一个键/值对保存,方便后续使用,不再反复计算
还有,FFN(前馈神经网络)
在预填充阶段,模型需要处理用户输入的完整prompt,并生成首个输出token
这一过程中,模型会逐层通过Transformer块,对于每一层,输入序列会先进入Self-Attention机制,其输出会再输入到FFN中
FFN通过两层线性变换和非线性激活函数对上下文表示进行进一步特征提取,以捕捉更复杂的语义信息
最后一层的FFN输出经过解码层转换为token概率分布,从而生成首个token
本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。



