模型架构
本章深入解读大语言模型的核心架构,从基础的 Transformer 出发,逐步演进到 GPT、Llama 和 DeepSeek-V3。
架构演进路线
Transformer (2017) → GPT (2018) → Llama (2023) → DeepSeek-V3 (2024)
│ │ │ │
Encoder-Decoder Decoder-Only 开源优化 MoE + MLA章节导航
| 主题 | 核心内容 | 关键创新 |
|---|---|---|
| Transformer | 完整的 Encoder-Decoder 架构 | Self-Attention、位置编码 |
| 注意力机制 | 注意力的各种变体与优化 | Multi-Head、Flash Attention |
| 分词器 | 文本到 Token 的转换 | BPE、SentencePiece |
| 解码策略 | 从概率分布生成文本 | Top-k/Top-p、Temperature |
| GPT 架构 | Decoder-Only 语言模型 | Pre-Norm、KV Cache |
| Llama 架构 | Meta 开源大模型系列 | RoPE、RMSNorm、GQA |
| DeepSeek-V3 架构 | 国产高性能大模型 | MoE、MLA、Multi-Token Prediction |
学习建议
建议按顺序阅读:先理解 Transformer 和注意力机制的基础,再看各架构如何在此基础上创新。分词器和解码策略可以穿插阅读。
详细内容索引
attention.md — 注意力机制 (1014 lines)
- 在大模型体系中的位置 (L11)
- Scaled Dot-Product Attention (L33)
- 核心公式 (L35)
- 为什么要除以
?——方差证明 (L47) - 代码实现 (L85)
- Multi-Head Attention (MHA) (L115)
- 核心思想 (L117)
- 完整过程:拆分 → 并行计算 → 拼接 (L131)
- Multi-Query Attention (MQA) 与 Grouped-Query Attention (GQA) (L168)
- 演进动机 (L170)
- MQA:所有 Q 头共享 1 组 KV (L176)
- GQA:分组共享 KV(Llama 2/3 采用) (L207)
- Multi-Latent Attention (MLA) (L249)
- DeepSeek 的创新思路 (L251)
- 代码实现 (L267)
- 矩阵吸收技巧(推理优化) (L311)
- Flash Attention (L329)
- GPU 内存层次:SRAM vs HBM (L331)
- 标准 Attention 的 IO 瓶颈 (L338)
- Flash Attention 的分块策略 + Online Softmax (L348)
- Flash Attention 深度实现 (L437)
- 核心算法:Online Softmax 与分块计算 (L439)
- 前向传播伪代码 (L459)
- PyTorch 实现 (L485)
- 反向传播:重计算 vs 存储 (L575)
- Flash Attention 2 的优化 (L596)
- IO 复杂度分析 (L631)
- 面试考点:为什么 Flash Attention 更快但 FLOPs 相同? (L653)
- Online Softmax:从两遍扫描到一遍扫描 (L664)
- Flash Attention 反向传播 (L734)
- 用 PyTorch Autograd 验证正确性 (L847)
- Tensor Product Attention (TPA) (L872)
- 核心思想 (L874)
- 数学公式 (L878)
- 简化版代码实现 (L894)
- TPA vs 标准 Attention 对比 (L944)
- 注意力变体对比 (L956)
- 苏格拉底时刻 (L972)
- 常见问题 & 面试考点 (L986)
- 推荐资源 (L1005)
decoding.md — 解码策略 (332 lines)
- 在大模型体系中的位置 (L11)
- 核心概念 (L20)
- Greedy Search(贪心搜索) (L22)
- Beam Search(束搜索) (L44)
- Temperature(温度参数) (L65)
- Top-k Sampling(Top-k 采样) (L81)
- Top-p / Nucleus Sampling(核采样) (L96)
- 各策略对比总结 (L122)
- 进阶话题:重复惩罚与停止条件 (L133)
- 代码实战 (L141)
- 统一的采样框架 (L145)
- Beam Search 从零实现 (L196)
- 完整运行示例:对比四种策略 (L260)
- 苏格拉底时刻 (L308)
- 常见问题 & 面试考点 (L318)
- 推荐资源 (L325)
deepseek.md — DeepSeek-V3 架构 (423 lines)
- 在大模型体系中的位置 (L11)
- 核心概念 (L23)
- MoE 混合专家(Mixture of Experts) (L25)
- 负载均衡(Load Balance) (L121)
- MLA 多头潜在注意力(Multi-head Latent Attention) (L149)
- Multi-Token Prediction(多 Token 预测) (L229)
- 完整 DeepSeek-V3 Block (L346)
- 苏格拉底时刻 (L396)
- 常见问题 & 面试考点 (L406)
- 推荐资源 (L415)
flow-matching.md — Flow Matching (499 lines)
- 在大模型体系中的位置 (L13)
- 从 Diffusion 到 Flow Matching (L35)
- 1.1 Diffusion 回顾 (L37)
- 1.2 Flow Matching 的核心思想 (L74)
- 1.3 关键区别对比 (L96)
- 数学基础 (L109)
- 2.1 常微分方程(ODE) (L111)
- 2.2 概率路径 (L125)
- 2.3 速度场(Velocity Field) (L146)
- Conditional Flow Matching (CFM) (L166)
- 3.1 为什么需要 "Conditional"? (L168)
- 3.2 CFM 目标函数 (L174)
- 3.3 训练算法 (L200)
- 3.4 采样算法 (L216)
- Rectified Flow (L231)
- 4.1 直线路径的优势 (L233)
- 4.2 Reflow 操作 (L248)
- 4.3 一步生成的可能性 (L258)
- 代码实现 (L272)
- 5.1 基础 Flow Matching(2D 演示) (L274)
- 5.2 Conditional Flow Matching(带条件) (L354)
- 在 LLM 中的应用 (L413)
- 6.1 从连续到离散:离散 Flow Matching (L415)
- 6.2 与自回归 LLM 的对比 (L443)
- 6.3 未来展望 (L453)
- 苏格拉底时刻 (L464)
- 推荐资源 (L488)
gpt.md — GPT 架构 (464 lines)
- 在大模型体系中的位置 (L11)
- 核心概念 (L22)
- Decoder-Only vs Encoder-Decoder (L24)
- GELU 激活函数 (L62)
- Pre-Normalization(预归一化) (L110)
- KV Cache 原理与实现 (L182)
- 代码实战:完整 GPT-2 模型 (L287)
- Perplexity(困惑度)计算 (L405)
- 苏格拉底时刻 (L441)
- 常见问题 & 面试考点 (L450)
- 推荐资源 (L457)
llama.md — Llama 架构 (505 lines)
- 在大模型体系中的位置 (L11)
- 核心概念 (L24)
- RoPE 旋转位置编码 (L26)
- 长上下文扩展:从 4K 到 128K+ (L91)
- RMSNorm(对比 LayerNorm) (L251)
- GQA 分组查询注意力 (L293)
- SwiGLU 门控激活 (L386)
- 完整 Llama Block (L418)
- 苏格拉底时刻 (L480)
- 常见问题 & 面试考点 (L490)
- 推荐资源 (L497)
scaling-laws.md — Scaling Laws (289 lines)
- 在大模型体系中的位置 (L11)
- 核心概念:幂律关系 (L25)
- 基本形式 (L27)
- 计算量公式 (L39)
- Kaplan Scaling Laws (2020) (L57)
- 来源 (L59)
- 核心发现 (L63)
- Kaplan 的经验公式 (L69)
- Chinchilla Scaling Laws (2022) (L81)
- DeepMind 的挑战 (L83)
- 核心发现 (L87)
- Chinchilla 最优比例 (L97)
- Chinchilla vs GPT-3 (L108)
- 为什么 Kaplan 和 Chinchilla 结论不同? (L120)
- 后 Chinchilla 时代:推理最优 (L133)
- 过训练(Over-training)策略 (L135)
- DeepSeek 的 Scaling Laws 研究 (L154)
- 涌现能力(Emergent Abilities) (L162)
- 什么是涌现 (L164)
- 涌现是真的吗? (L173)
- 实用意义 (L189)
- 如何估算训练成本 (L191)
- 用小模型预测大模型性能 (L233)
- 苏格拉底时刻 (L260)
- 常见问题 & 面试考点 (L270)
- 推荐资源 (L282)
tokenization.md — 分词器 (280 lines)
- 在大模型体系中的位置 (L11)
- 核心概念 (L19)
- 为什么需要分词 (L21)
- 分词粒度:字符、词、子词 (L27)
- BPE 算法(Byte Pair Encoding) (L37)
- WordPiece (L76)
- SentencePiece (L87)
- 中文分词的特殊挑战 (L99)
- 代码实战 (L109)
- 第一步:统计相邻对频率 (L115)
- 第二步:执行合并 (L127)
- 第三步:BPE 训练 (L145)
- 第四步:编码(文本 → Token ID 序列) (L196)
- 第五步:解码(Token ID 序列 → 文本) (L210)
- 完整运行示例 (L219)
- 苏格拉底时刻 (L256)
- 常见问题 & 面试考点 (L266)
- 推荐资源 (L273)
transformer.md — Transformer 架构 (523 lines)
- 在大模型体系中的位置 (L13)
- 从宏观到微观:Transformer 的整体结构 (L25)
- 自注意力机制(Self-Attention) (L51)
- 从直觉出发 (L53)
- 数学推导 (L63)
- 为什么要除以
?——方差分析 (L82) - 注意力实现代码 (L91)
- 多头注意力(Multi-Head Attention) (L141)
- 为什么需要多头? (L143)
- 多头如何工作? (L147)
- 多头注意力实现 (L157)
- 前馈神经网络(Feed-Forward Network) (L206)
- 结构 (L210)
- 实现 (L219)
- 残差连接与 Layer Normalization (L237)
- 为什么需要残差连接? (L239)
- LayerNorm vs BatchNorm (L245)
- LayerNorm 实现 (L257)
- Pre-Norm vs Post-Norm (L279)
- 位置编码(Positional Encoding) (L288)
- 为什么需要位置编码? (L290)
- 正弦余弦编码 (L296)
- 位置编码实现 (L311)
- 位置编码的使用 (L336)
- 完整的 Transformer 实现 (L366)
- Encoder Block (L370)
- Decoder Block (L392)
- 完整 Transformer (L419)
- 苏格拉底时刻 (L465)
- 常见问题 & 面试考点 (L481)
- 推荐资源 (L515)