> For the complete documentation index, see [llms.txt](https://yeasy.gitbook.io/llm_internals/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yeasy.gitbook.io/llm_internals/di-yi-bu-fen-ji-chu-pian/03_components/summary.md).

# 本章小结

本章解析了 Transformer 的文本预处理流程以及除注意力机制之外的所有核心组件，逐项给出了机制、算例与失效边界。

**分词**把文本切成词元。BPE 的训练是按计数反复合并相邻符号对，编码是按合并表的 rank 而非最长匹配反复合并；字节级把基础词表固定为 256，预分词正则决定了空格与数字怎么归片。词表大小是一笔两边都能算的账：Llama 3 8B 的词表矩阵两份占总参数 13.1%，而同一张表放到 405B 上只占 1.0%。分词的失效集中在故障词元、数字切分、多语言词元税与尾随空格四处。

**词嵌入**是一张 `[V, d_model]` 的查找表，把 `ids[B, T]` 换成 `X[B, T, d]`。它的梯度只落在本批出现过的行上，低频词元因此长期停在初始化附近。同一张矩阵在模型末端第二次出现，充当 LM head。原始论文把嵌入乘以 $\sqrt{d\_{\text{model}}}$，量级算例显示这使它与正弦位置向量的范数同量级；但这是通行解释而非原文论证，且现代模型的做法并不统一。

**位置编码**弥补自注意力的置换等变性。这一性质的前提是**无掩码**：因果掩码本身携带位置信息，仅解码器模型不加位置编码也能学到顺序。位置向量与嵌入相加而非拼接，代价是注意力分数里内容与位置的四项混在一起；收益是 $d\_{\text{model}}$ 不变，而每层参数按 $d\_{\text{model}}^2$ 增长。

**前馈网络**提供逐位置的非线性与通道混合。它占一层参数的三分之二以上，Llama 3 8B 上已达八成。SwiGLU 用三个矩阵换来门控，等参时中间宽度应为 $\tfrac{8}{3}d$，但真实模型取 2.69 到 3.5 倍不等。键值记忆视角与权重编辑实验都有一手依据，但“定位到哪一层”与“编辑哪一层有效”并不一致。

**残差连接**把每个子层的输出加回一条宽度固定的通路。反向看，连乘展开成 $2^L$ 条路径，恒等项始终存在；前向看，最后一层的表示等于嵌入与所有子层输出之和，这条通路就是**残差流**。相加要求两端同形状，这正是各层输出宽度都固定为 $d\_{\text{model}}$ 的原因。代价是方差随深度线性增长，GPT-2 的对策是把残差分支末端的初始化标准差乘 $1/\sqrt{N}$。

**层归一化**沿 `[B, T, d]` 的最后一维求统计量，每个词元各算一对。选 LayerNorm 而非 BatchNorm，是因为后者的统计量依赖整批：批小则不稳、填充位会污染统计量、训练与推理行为不一致。RMSNorm 去掉减均值与偏移参数，只改长度不改方向；其原论文报告的端到端提速区间是 7% 到 64%，Transformer 一档为 7% 到 9%。Pre-Norm 让恒等路径上不再有归一化，代价是残差流范数随深度增长，且末端必须补一次归一化。

**三种架构变体**各有适用场景。仅解码器胜出的可检验理由有三条：每个位置都产生训练信号、多轮对话可复用 KV 缓存、参数全部用在同一条通路上；反面证据是加了多任务微调后，非因果可见性配掩码目标的组合在对照实验中表现最好。

**三条速算式**贯穿全书后续章节：单层参数 $\approx 12d^2$、训练 $C \approx 6ND$、推理每词元 $\approx 2N$。$12Ld^2$ 隐含“多头注意力加 4 倍两矩阵 FFN”两个前提，用在 Llama 3 8B 上低估近两成，凭 `config.json` 的七个字段逐项相加才准确。三者都只数权重，没数注意力的 $O(T^2)$ 项，该项与权重项之比是 $T / (12d)$。**GQA** 把每词元的 KV 缓存缩到 $n\_{kv}/n\_h$：Llama 3 8B 为 128 KiB，多头版本则是 512 KiB。**权重绑定**的判据就是词表占比，小模型绑定、大模型放开。

**GPT 式生成流程**将上述组件串成一条时间线：聊天模板和分词先形成 Prompt；Prefill 并行处理全部已有位置，产生首个输出词元及每层 KV 缓存；随后 Decode 每次只处理一个已选词元，读取并扩展 KV 缓存，再预测下一个词元。性能优化改变的是这一过程的数据搬运、缓存和调度，不会消除单个请求输出词元之间的因果依赖。

[3.3 节](/llm_internals/di-yi-bu-fen-ji-chu-pian/03_components/3.3_position_encoding.md)只摆出了正弦公式，并断言“任意两个位置之间的相对距离可以通过线性变换表示”——为什么偏偏是正弦，那条线性性质又凭什么成立，都还没有答案。

***

> 📝 **发现错误或有改进建议？** 欢迎提交 [Issue](https://github.com/yeasy/llm_internals/issues) 或 [PR](https://github.com/yeasy/llm_internals/pulls)。
