第3章 LLM架构

发布时间:2026/7/19 2:59:42
第3章 LLM架构 第3章 LLM架构 —— 拆开模型看内脏3.1 LLM 基础架构 —— 模型的骨架一个 LLM 就像一个三层汉堡输入层面包 ↓ Transformer Block 堆叠层肉饼×几十层 ↓ 输出层面包输入层把文字变成数字计算机不认识中文字所以第一步是分词Tokenization把句子拆成一个个 token可以理解为最小语义单元词向量映射Token Embedding每个 token 映射成一个向量一串数字加入位置编码告诉模型这个词在第几个位置打个比方输入层就像一个翻译官把人类语言翻译成模型能理解的数学语言。Transformer Block模型的大脑这是 LLM 的核心每个 Transformer Block 里有两个关键组件自注意力机制Self-Attention让模型在处理某个词时能看到句子中其他词的信息前馈网络FFN对注意力的输出做非线性变换增强表达能力而且每个 Block 里还有残差连接和归一化保证几十上百层堆起来不会训练崩掉。一个 LLM 通常有几十到上百层Transformer Block 堆叠。输出层把数字变回文字把最后一层 Transformer Block 的输出向量通过一个线性层映射到词表大小再用Softmax得到每个 token 的概率分布选出概率最高的 token 作为输出或按概率采样然后把这个输出的 token 作为下一步的输入继续生成下一个 token——这就是自回归生成。3.2 LLM 架构演进 —— 每个零件都在进化整体结构没变还是 Decoder-only但里面的零件一直在升级。3.2.2 位置编码 —— 告诉模型词在哪里为什么需要位置编码Transformer 的注意力机制本身是无序的——它只看谁和谁相关不看谁在前谁在后。如果不加位置信息模型就会把我打你和你打我当成同一件事。第一代正余弦位置编码原理用正弦和余弦函数为每个位置生成一个唯一的向量。打个比方就像给每个座位贴一个频率不同的波形标签座位1是低频波座位2是中频波座位3是高频波……每个位置的波形指纹都不一样。优点不用训练固定函数生成简单可靠。理论上的好性质两个位置的编码做内积时能自然反映出它们之间的相对距离。但实际有个坑在注意力计算中Q和K的乘法会被可学习的权重矩阵搅乱原本的数学性质就被破坏了。模型得自己重新学会怎么利用位置信息效率不高。第二代可学习位置编码原理给每个位置一个可训练的向量跟着模型一起学。打个比方不贴固定标签了让模型自己去感受每个位置该怎么表示。优点完全由数据驱动更灵活。缺点训练时只见过前 N 个位置推理时遇到第 N1 个位置就懵了——没有长度外推能力位置向量数量跟最大长度成正比长上下文时参数量暴增第三代旋转位置编码RoPE—— 当前主流核心思想不往词向量里加位置信息而是直接对 Q 和 K 向量做旋转。打个比方想象你在看一个时钟每个位置就是时钟上的一个角度。位置1的指针转了30度位置2的指针转了60度。两个位置之间的角度差就天然包含了相对位置信息。关键数学性质旋转后注意力得分只依赖于两个 token 之间的相对位置差不依赖绝对位置。优点零参数不需要学习位置向量数学结构天然编码相对位置支持一定程度的长度外推推理时可以处理比训练时更长的序列但差距太大的话还是会出问题一句话总结RoPE 就是用旋转角度来编码位置既优雅又高效现在几乎所有主流 LLM 都在用它。3.2.3 注意力机制 —— 模型的眼睛注意力机制决定模型在生成下一个词时应该关注哪些上下文信息。MHAMulti-Head Attention—— 原始版本每个注意力头都有独立的 Q、K、V 矩阵各自计算注意力后拼接。问题出在推理阶段——KV Cache。什么是 KV Cache模型生成文本是逐个 token 生成的。每生成一个新 token它需要跟之前所有 token 做注意力计算。如果每次都重新算历史 token 的 K 和 V就太浪费了。所以把历史的 K 和 V缓存起来新 token 只需算自己的 Q、K、V然后跟缓存做匹配就行。MHA 的问题每个头都有独立的 K 和 V缓存量 头数 × 序列长度 × 每个头的维度。头越多缓存越大显存和带宽压力越大。MQAMulti-Query Attention—— 极简版核心思想所有注意力头共享同一套 K 和 V只有 Q 是各自独立的。打个比方原来是每个头都带一本自己的字典K/V现在所有人共用一本字典只有各自的问题Q不同。优点KV Cache 直接缩小为原来的 1/头数推理速度大幅提升。缺点所有头共用一套 K/V表达能力会略有下降。GQAGrouped-Query Attention—— 折中版当前主流核心思想把头分成若干组每组内的头共享一套 K/V不同组之间独立。打个比方不是一个班共用一本字典MQA也不是每人一本MHA而是每4个人共用一本。MHA 每个头 → 独立 K/V 最好但最贵 GQA 每组头 → 共享 K/V 折中当前主流 MQA 所有头 → 共享同一套 K/V 最省但略弱GQA 是当前主流 LLM 的默认选择Qwen3、DeepSeek 等都在用在推理效率和表达能力之间取得了最佳平衡。3.2.4 前馈网络FFN—— 模型的消化系统FFN 的典型结构是升维 → 激活 → 降维对每个 token 的表示做非线性变换。激活函数的进化ReLU最古老正区间输出本身负区间直接截断为0问题负区间梯度为零导致死亡神经元神经元永久失活已退出大模型主流GELUGPT-2/3 用过不硬截断用正态分布的累积函数做平滑缩放全域可导比 ReLU 更稳定SiLU / Swish差不多的东西用 sigmoid 函数对输入做加权也是平滑的性能和 GELU 接近GLU 及其变体当前主流核心思想双分支设计—— 一个分支做变换另一个分支做门控决定放多少信息通过主流变体SwiGLU用 SiLU 做门控 →当前 LLM 的默认选择Qwen、DeepSeek 都用这个MoEMixture of Experts—— 混合专家核心思想不用一个大 FFN而是搞多个小专家 FFN 并行用一个路由器Router决定每个 token 交给哪个专家处理。打个比方原来是一个全能厨师做所有菜现在是请了一堆专业厨师川菜师傅、粤菜师傅、日料师傅……来了什么菜就派什么师傅做。工作流程路由器给每个 token 打分看它最适合哪个专家选出得分最高的 Top-k 个专家通常只选2个被选中的专家各自计算按权重加权合并输出优点高容量、低计算总参数量很大很多专家但每次推理只激活少数几个专家计算量并不大专家分工不同专家自动学不同类型的模式天然适合分布式专家可以放到不同 GPU 上并行代表模型DeepSeek-V3、Mixtral 等都用了 MoE。3.2.5 残差连接与归一化 —— 保证不崩RMSNorm —— 当前主流的归一化方式传统的 LayerNorm 需要计算均值和方差RMSNorm 做了简化只算均方根RMS不算均值。公式很简单output x / RMS(x) * scale 其中 RMS(x) sqrt(mean(x²))为什么去掉均值也行实验发现在深层 Transformer 中均值项对稳定性的贡献很有限去掉后效果几乎不变但计算更简单。归一化放在哪Post Norm vs Pre NormPost Norm老版本先做注意力/FFN再归一化问题会破坏残差连接的恒等梯度路径深层网络训练不稳定已被淘汰Pre Norm当前主流先归一化再做注意力/FFN优点保留了残差连接的直通梯度通道深层训练稳定现在几乎所有 LLM 都用 Pre Norm打个比方Post Norm先干活再洗手 → 洗手把刚沾上的颜料洗掉了Pre Norm先洗手再干活 → 手是干净的干活效果更好3.3 Qwen3 架构解析 —— 理论联系实际整体结构一眼看全貌classQwen3Model:tok_emb → 词向量嵌入输入层 trf_blocks → N 个 Transformer Block核心层 final_norm → RMSNorm最后的归一化 out_head → 线性输出层映射到词表 cos,sin → RoPE 预计算的旋转参数Transformer Block每个块里有什么输入 x → RMSNorm → GQA注意力 → 残差连接x shortcut → RMSNorm → FFN(SwiGLU) → 残差连接x shortcut 输出 x两个关键点Pre Norm先 Norm 再算保证梯度稳定SwiGLU FFNsilu(x_fc1) * x_fc2 → x_fc3双分支门控结构GQA 的代码实现要点# Q 用全量头num_heads 个self.W_querynn.Linear(d_in,num_heads*head_dim)# K/V 只用分组数num_kv_groups 个远少于 num_headsself.W_keynn.Linear(d_in,num_kv_groups*head_dim)self.W_valuenn.Linear(d_in,num_kv_groups*head_dim)推理时K 和 V 会被repeat_interleave复制到每组的每个头上这样每组内的所有 Q 头都共享同一套 K/V。生成过程defgenerate_text(input_ids,model,tokenizer):output_logitsmodel(input_ids)# 前向传播resoutput_logits.argmax(dim-1)# 贪心解码取概率最高的returntokenizer.decode(res[0])# 把 token 变回文字这就是最基本的贪心生成策略每一步都选概率最高的 token。核心知识点速查表知识点当前主流选择一句话位置编码RoPE旋转角度编码相对位置注意力机制GQA分组共享K/V平衡效率和能力FFN 激活函数SwiGLU双分支门控性能最优FFN 结构MoE大模型多专家稀疏激活归一化RMSNorm去掉均值更简单归一化位置Pre Norm先归一化再计算梯度稳定全章一句话总结LLM 的架构本质是 Decoder-only Transformer核心组件包括位置编码RoPE、注意力机制GQA、前馈网络SwiGLU/MoE、归一化RMSNorm和残差连接Pre Norm。整体结构没变但每个零件都在持续优化。