彻底吃透大模型核心:Attention、QKV、KV Cache、Prefix缓存、Decoder-only架构
目录
简介
本文基于从零到一的逻辑,完整串联大模型底层核心原理:Token与Token-ID区别、QKV本质、自注意力/交叉注意力分工、Prefill/Decode推理流程、KV缓存底层逻辑、Prefix前缀缓存匹配规则、Encoder-Decoder与Decoder-only架构差异。全文无跳跃、全细节落地、带大量通俗示例,适合深度学习、大模型推理、算法面试、工程优化系统学习。
一、前置基础:彻底分清 Token、Token-ID、Embedding
1.1 核心定义与层级关系
大模型无法直接识别人类文字,所有文本必须经过三层转换,才能进入矩阵运算:
-
Token(子词/文本单元):人类可读的字符串片段(汉字、词语、标点、英文词根),是分词器的输出结果。
-
Token-ID(词表索引):Token对应的唯一整数编号,模型的真实输入,神经网络只能读取数字,无法读取字符串。
-
Embedding向量:通过Token-ID查表得到的高维浮点向量,是Transformer所有矩阵运算的基础单元。
1.2 完整流转示例(逐步骤)
原始文本:我爱吃苹果
步骤1:Tokenizer分词 → Token列表:["我", "爱", "吃", "苹果"]
步骤2:词表映射 → Token-ID列表:[1234, 567, 889, 4021]
步骤3:Embedding查表 → 生成4组768/4096维浮点向量
步骤4:送入Transformer注意力、FFN完成计算
步骤5:模型输出向量 → LM Head映射为Token-ID概率 → 采样得到新Token-ID
步骤6:反向查表还原为人类文字,完成输出
1.3 关键避坑结论
1)KV Cache中不存储Token、不存储Token-ID,只存储模型投影后的K/V浮点矩阵;
2)Token/Token-ID只参与输入分词、输出解码,Transformer核心计算全程只操作向量;
3)日常口语中“输入Token”是简称,工程实际输入的是Token-ID数组。
二、Attention核心原理:Q/K/V矩阵的本质(彻底解决:固定权重为何产出动态向量)
2.1 自注意力核心逻辑
自注意力的唯一目的:让每个Token融合序列中所有相关Token的上下文信息。为了实现“查询-匹配-聚合”,模型训练出三组固定权重矩阵:
Q = X W Q , K = X W K , V = X W V Q = XW_Q, K = XW_K,V = XW_V Q=XWQ,K=XWK,V=XWV
-
W_Q、W_K、W_V:训练完成后永久固定、写死不变的可训练参数矩阵(推理全程不更新);
-
X:当前层输入的Hidden State(上下文融合后的向量,动态变化);
-
Q(查询):当前Token想要检索的信息特征;
-
K(键/标签):所有Token对外暴露的检索索引;
-
V(值/内容):所有Token承载的真实语义内容。
2.2 终极答疑:权重固定,为什么K/V向量是动态的?
这是所有人的核心误区:固定权重 ≠ 固定输出向量。
K/V向量公式: k i = x i W K , ; v i = x i W V k_i = x_i W_K,; v_i = x_i W_V ki=xiWK,;vi=xiWV
虽然 W K 、 W V W_K、W_V WK、WV 固定,但输入的 x i x_i xi(上下文表征)随场景变化:
示例:同一个Token「苹果」
场景1:我吃苹果 → 上下文偏向水果语义, x i x_i xi 不同,K/V向量偏向食物特征;
场景2:苹果手机 → 上下文偏向品牌语义, x i x_i xi 不同,K/V向量偏向科技产品特征;
✅ 结论:权重是固定转换规则,上下文输入是动态原料,最终产出的K/V矩阵天然动态可变。
2.3 注意力完整计算公式与含义
Attention ( Q , K , V ) = softmax ( Q K t o p d k ) V \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^{top}}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQKtop)V
逐行拆解:
-
QKᵀ:当前Token的查询,与所有Token的标签做相似度打分;
-
√d缩放:避免维度过高导致点积数值爆炸;
-
Softmax:将相似度转为0-1权重,总和为1;
-
加权V:根据相似度权重,聚合所有Token的真实语义内容。
2.4 核心区分:V向量 ≠ Hidden State
极易混淆的层级链路(从简到繁):
Token Embedding → Q/K/V投影 → 注意力加权输出(仅V加权结果) → 多头拼接 → 残差连接 → FFN前馈网络 → 最终Hidden State
关键结论:
-
K/V是注意力内部中间素材,仅用于计算相似度和信息聚合;
-
Hidden State是整层Transformer加工后的最终表征,只有顶层Hidden State能送入LM Head预测Token;
-
KV Cache只存K/V,不存注意力输出、不存Hidden State。
三、两类Transformer架构:Encoder-Decoder vs Decoder-only(大模型选型核心)
3.1 原版Transformer架构(机器翻译专属)
原生Transformer由Encoder编码器 + Decoder解码器组成,用于双序列任务(源文本→目标文本,如翻译、摘要)。
3.1.1 Encoder编码器(仅理解、不生成)
核心特性:双向自注意力、无掩码,所有Token可以互相看见前后内容。
作用:完整理解用户输入文本,压缩全局语义,生成固定不变的Memory记忆矩阵。
适用模型:BERT(Encoder-only),仅做语义分类、检索、相似度计算,无法生成文本。
3.1.2 Decoder解码器(负责生成)
Decoder内部包含两层注意力,各司其职、缺一不可,这是99%人搞混的重点:
1)Masked Self-Attention(解码器自注意力)
信息来源:模型自己已经生成的历史回答Token
规则:三角因果掩码,只能看左侧已生成内容,看不到未来未生成Token。
核心作用:读懂自己刚刚输出的内容,保证回答前后语法通顺、语义连贯、代词指代正确。
示例:生成“我很爱AI”,生成“爱”时,必须通过自注意力看到前面的“我很”,保证语句通顺。
2)Cross-Attention交叉注意力
信息来源:Encoder输出的固定Memory(用户原始输入)
向量规则:
-
Q:来自Masked Self-Attention加工后的当前Hidden State(当前生成位置的特征);
-
K/V:全部来自Encoder的固定Memory,全程不变、只算一次。
核心作用:持续锚定用户原始输入,纠正输出语义,防止答非所问、翻译跑偏。
3.1.3 Decoder单步生成完整数据流(闭环)
已生成序列 y 1 , y 2 . . . y t y_1,y_2...y_t y1,y2...yt → Masked Self-Attention(消化自身输出历史) → Cross-Attention(查询用户输入Memory) → 残差+归一化 → FFN → LM Head → 采样出新Token y t + 1 y_{t+1} yt+1 → 追加到序列,进入下一轮循环。
3.2 Decoder-only架构(GPT/Llama/Qwen主流大模型)
核心变革:砍掉独立Encoder、砍掉Cross-Attention,只用单层因果Decoder。
核心原理(你之前的核心疑问,精准落地):
将用户Prompt + 模型回答拼接为单条连续序列:[Prompt Token] + [回答Token]
依靠因果掩码规则:所有回答Token的左侧,永远包含完整Prompt。
等价能力:
-
无需Encoder:Prompt放在序列左侧,通过Masked Self-Attention天然完成“读懂输入”;
-
无需Cross-Attention:生成Token天然可见全部Prompt,自动锚定问题,不会答非所问;
-
训练适配:通过海量预训练+SFT指令微调,让模型学会「前缀是指令、后缀是回答」的序列格式。
3.3 两大架构终极对比表
| 架构 | 注意力类型 | 信息来源 | 核心优势 | 典型模型 |
|---|---|---|---|---|
| Encoder-Decoder | 双向Encoder+双层Decoder注意力 | 输入、输出双序列隔离 | 输入理解更强,双序列解耦 | T5、BART |
| Decoder-only | 单层因果Masked自注意力 | 单序列拼接共享信息 | 训练简单、推理高效、适配KV缓存 | GPT、Llama、Qwen |
四、大模型推理核心流程:Prefill + Decode(彻底搞懂第一个Token生成逻辑)
4.1 Prefill阶段(Prompt预处理阶段)
输入:用户完整Prompt所有Token
执行逻辑:GPU并行计算所有Prompt Token的Q/K/V
核心产出两件事:
-
所有Prompt Token的K/V矩阵,存入KV Cache(后续复用,避免重复计算);
-
所有位置的顶层Hidden State,仅取最后一个位置的Hidden State采样第一个输出Token。
4.2 终极答疑:为什么第一个Token必须取Prompt末尾Hidden State?
大模型训练的因果铁律:位置 i i i 的Hidden State,仅能预测位置 i + 1 i+1 i+1 的Token。
示例:Prompt序列 p 1 , p 2 , p 3 , p 4 p_1,p_2,p_3,p_4 p1,p2,p3,p4
-
h 1 h_1 h1:仅看到 p 1 p_1 p1,预测 p 2 p_2 p2(Prompt内部字符);
-
h 2 h_2 h2:看到 p 1 p 2 p_1p_2 p1p2,预测 p 3 p_3 p3;
-
h 4 h_4 h4:看到完整Prompt所有内容,唯一负责预测「Prompt之后的第一个回答Token」。
✅ 结论:前面所有位置的Hidden State只能预测Prompt内部文字,只有末尾位置能生成回答。
4.3 Decode阶段(自回归生成阶段)
Prefill产出第一个Token后,进入循环Decode:
-
仅输入最新生成的单个Token,计算其Q/K/V;
-
Q查询KV Cache中所有历史K/V(完整Prompt+已生成回答);
-
将新Token的K/V追加进KV Cache;
-
生成新Hidden State,采样下一个Token;
-
循环直到EOS结束。
核心优化:Decode阶段无需重算Prompt,100%复用Prefill缓存的KV,推理速度提升数十倍。
五、KV Cache深度解析:私有缓存与前缀缓存(Prefix Caching)
5.1 两类KV Cache严格区分(面试高频)
5.1.1 会话私有KV Cache(必用)
生命周期:单次问答推理期间有效,请求结束立刻释放。
存储内容:当前请求的Prompt KV + 已生成回答KV。
作用:单会话内复用历史KV,加速Decode生成。
特性:不可跨请求共享,仅当前对话可用。
5.1.2 全局Prefix前缀缓存(优化项)
核心定义:跨请求共享相同Prompt前缀的KV矩阵,仅缓存确定性的用户输入,绝不缓存模型生成的回答。
核心原因:
-
Prompt是用户固定输入,Token序列唯一,KV矩阵固定可复用;
-
模型回答带有采样随机性,相同前缀可能产出不同回答,KV无法全局复用。
5.2 Prefix Caching匹配规则(解决你最大的疑惑)
绝对核心规则:仅支持从0下标开始的完整前缀精确匹配,逐Token-ID比对,语义相似无效、中间相似无效、必须前缀完全一致。
5.2.1 可命中示例(Case1)
已缓存前缀Token-ID:[解释,什么,是,Transformer]
新Prompt Token-ID:[解释,什么,是,Transformer,,,举个例子]
匹配结果:前4个Token-ID完全一致,复用全部缓存KV,仅对后续新增Token做Prefill计算,大幅节省算力。
5.2.2 看似相似、完全无法命中示例(Case2)
已缓存前缀Token-ID:[解释,什么,是,Transformer]
新Prompt Token-ID:[解释,什么,是,大语言模型]
匹配逻辑:
-
下标0/1/2完全一致;
-
下标3:缓存为Transformer,新Token为大语言模型,第一个不匹配位置出现在前缀内部;
工程真实结果:缓存完全失效,全部重算。
5.3 关键答疑:为什么前3个相同也不能复用?
1)算法逻辑层面:理论上0-3下标可以复用,但Prefix缓存是完整序列Hash查表,不是动态最长匹配;
2)工程实现层面:缓存中只存储了「4个Token的完整前缀KV」,没有单独存储「前3个Token的短前缀KV」,无数据可复用;
3)性能层面:如果存储所有长度的前缀,会产生海量缓存碎片、显存爆炸,工业界绝不采用。
5.4 前缀缓存黄金使用场景
企业级Agent、对话服务中,所有请求共用超长固定System Prompt,这部分前缀100%重复,Prefix缓存命中率极高,可降低50%以上Prefill耗时。
六、上下文截断的底层原因(算力+模型双约束)
大模型设置最大上下文窗口(8K/32K/128K),需要截断超长文本,核心是两大硬约束:
6.1 模型结构约束(能力上限)
模型训练仅见过固定位置编码区间,超长Token的位置编码失真,模型无法理解语义,直接幻觉、答非所问。
6.2 算力显存约束(工程上限)
1)KV Cache显存占用与序列长度线性增长,超长序列直接OOM显存溢出;
2)自注意力计算复杂度 O ( N 2 ) O(N^2) O(N2),序列翻倍、计算量翻4倍,超长文本推理速度雪崩。
✅ 截断本质:提前裁剪Token,让序列长度同时满足「模型理解上限」和「硬件算力上限」。
七、全文终极逻辑闭环(一句话串联所有知识点)
1、Tokenizer将文本转为Token-ID,查表得到Embedding向量,送入Transformer;
2、固定的Wq/Wk/Wv权重,结合动态上下文表征,生成每一层动态QKV矩阵;
3、Decoder-only模型将Prompt与回答拼接为单序列,依靠因果自注意力,同时实现「读懂Prompt+连贯生成回答」;
4、Prefill阶段并行计算Prompt KV并缓存,末尾Hidden State生成第一个回答Token;
5、Decode阶段复用KV缓存自回归生成,Prefix缓存复用公共前缀KV极致优化性能;
6、超长文本通过截断,规避位置编码失效和算力爆炸问题。
更多推荐
所有评论(0)