大模型逻辑闭环
第 1 步:输入分词(Tokenization)
用户输入的原始文本“每天进步真”首先被系统的分词器(Tokenizer)处理。分词器会对照词表,将每个汉字或子词映射为对应的整数 Token ID。
-
数据变换:输入文本 "每天进步真" ➡️ 转换为 ID 数组,例如
[101, 102, 103, 104, 105],当前序列长度(Sequence Length)为 5。
第 2 步:输入词嵌入与位置编码(Embedding & Positional Encoding)
模型无法直接理解整数 ID,需要将它们转换为高维向量。同时,模型需要知道每个字在序列中的具体位置。
-
词嵌入层(Token Embedding):查询嵌入表,将 5 个 ID 转换为形状为
(5, 12)的词向量矩阵(假设隐藏层维度 $d_{model} = 12$)。 -
位置编码层(Positional Encoding):生成一个同样形状为
(5, 12)的矩阵,给每个特征打上位置标签。 -
动作:将两者逐元素相加,得到融合了“语义”与“位置”的初始特征矩阵,记为 $H_0$。
-
【工程细节填充】:这里的“词嵌入矩阵”通常在初始化时会与最后一步(第 9 步)的输出映射矩阵(LM Head)共享权重(Weight Tying),以大幅减少模型总参数量。
第 3 步:第一个子层前置归一化(Pre-LayerNorm 1)
数据正式进入第一个 Transformer Block 的注意力子层。
-
动作:对 $H_0$ 的数值分布进行归一化,使其均值为 0,方差为 1。这里使用的是
LN_1专属的可学习参数(缩放系数 $\gamma$ 和平移系数 $\beta$)。 -
设计原因:防止后续矩阵乘法产生的数值过大或过小,确保深层网络训练时的梯度稳定。
第 4 步:因果多头注意力计算(Masked Multi-Head Attention)
这是模型“理解上下文”的核心步骤。
-
生成 QKV:归一化后的矩阵被送入三个独立的线性层,分别生成查询向量(Q)、键向量(K)和值向量(V)。
-
多头切分:将向量切分成多个“头”,并行计算,让模型能从不同角度理解语意。
-
因果掩码与 Softmax:计算注意力分数($Q \cdot K^T$ 并缩放)后,施加上三角的因果掩码,强制模型只能看当前位置及之前的内容。随后应用 Softmax 将分数转化为 0~1 的加权概率。
-
【机制填充:Attention Dropout】:如果是训练阶段,此时会按设定概率丢弃一部分注意力权重,防止过拟合;若是推理生成阶段,此操作完全关闭。
-
加权求和:用最终的概率去加权提取 V 矩阵中的信息,再将多头拼接并通过输出线性层,得到形状依旧为
(5, 12)的注意力输出向量。
第 5 步:第一个残差连接(Shortcut 1)
计算完注意力后,执行“保底”操作。
-
【机制填充:Residual Dropout 1】:在与原始输入相加前,同样(仅在训练时)对注意力输出进行一次 Dropout。
-
动作:将第 2 步的原始输入 $H_0$,与经过 Dropout 的注意力输出进行逐元素相加。相加后的结果记为 $H_{att}$。
第 6 步:第二个子层前置归一化(Pre-LayerNorm 2)
进入前馈网络前,再次进行标准化。
-
动作:对 $H_{att}$ 进行第二次独立的层归一化。
-
【严格校验】:这里的参数属于
LN_2,与第 3 步的LN_1绝对不可共享。
第 7 步:前馈神经网络(FFN:升维 - GELU - 降维)
这是模型独立进行“深度逻辑推演”的环节。
-
升维(W1):将特征维度从 12 扩展到 4 倍(变为 48),在高维空间捕捉更复杂的特征关系。
-
非线性激活(GELU):应用激活函数过滤无用信息,引入非线性表达能力。
-
降维(W2):将高维空间的特征重新压缩回 12 维,输出形状依旧是
(5, 12)。
第 8 步:第二个残差连接(Shortcut 2)
-
【机制填充:Residual Dropout 2】:在残差相加前,对 FFN 的输出(仅在训练时)执行 Dropout。
-
动作:将第 5 步的输出 $H_{att}$,与此时的 FFN 输出进行逐元素相加。至此,单个 Block 的计算彻底完成。
-
循环:这套逻辑会在模型内部重复 N 次(穿透所有 Block)。
第 9 步:最终归一化与输出映射(Final LN & LM Head)
经过所有 N 个 Block 的反复萃取,序列末尾第 5 个位置(对应“真”字)的特征已经完美融合了前文的所有上下文信息。
-
动作一:经过最后一层独立的后置层归一化(Final LayerNorm)。
-
动作二:向量进入 LM Head 线性层。本质是矩阵乘法(例如
nn.Linear(12, 50257)),将维度为 12 的浓缩特征,一次性映射到包含 50,257 个词的巨大词表空间上。 -
数据形态:最终输出形状为
(1, 50257)的 Logits(未归一化的原始分数)。
第 10 步:概率归一化与采样生成(Softmax & Sampling)
-
概率归一化:应用 Softmax 函数,将 Logits 转化为分布在 0 到 1 之间、总和为 1 的概率分布。
-
采样动作:根据设定好的策略(如 Top-K、Top-p 或温度调节),模型选中了概率为 0.85 的 Token ID。系统将其还原为汉字 “好”,输出给用户。
【终极进阶版闭环:KV Cache 机制引入】
模型输出“好”之后,本次前向推理结束。“好”字会被追加到原始输入的末尾,变成 6 个字的“每天进步真好”,准备预测第 7 个字。
-
原始理论逻辑:模型带着这 6 个字,作为第 1 步的输入,把前面的步骤重新全部算一遍。
-
【工业级真实逻辑(KV Cache)】:
由于前 5 个字(“每天进步真”)在刚才的计算中,它们的 键向量(K)和值向量(V) 已经算过了。为了避免灾难性的重复计算,系统会将这 5 个字的 K 和 V 矩阵存储在显存中(这就叫 KV Cache)。
在预测第 7 个字时,模型只将新生成的“好”字(序列长度为 1)输入网络,计算出属于“好”字的 Q、K、V。然后,用“好”字的 Q,去和缓存中前 5 个字的 K 以及它自己的 K 做注意力点积,提取缓存中前 5 个字的 V 和它自己的 V 完成信息汇总。
闭环结论: 凭借 KV Cache,大模型在生成长文时,每一轮循环的本质只是在处理当前最新生成的那 1 个 Token,而不是把整篇文章重算一遍。这才是真实世界中自回归能够高速运行的终极秘密。
更多推荐




所有评论(0)