跳到主要内容

01-outline — building-large-language-models-from-scratch

切分:13 章。判据:一条推理链一章;新词密度顶格就拆节/拆章;我们的章对原书结构走但重排了三处 (ch06+07 拆开、ch10 拆两章、ch11 的 CUDA 独立)。

自查口径:每行「出去时知道」互不相同;每章标了主走查与主承重词。

01 一台语言模型是什么——这本书要造的东西

  • 进来时以为:大模型是个神秘黑箱 → 出去时知道:它是一台「预测下一个 token」的概率机器, 靠注意力读上下文,2017 年 transformer 定型;本书要徒手拼一台 2025 配方的;工具链(Python/PyTorch/Jupyter/CUDA) 与四个训练数据集(TinyStories/莎翁/绿野仙踪/OpenWebText)各管哪一段。
  • 主承重词:语言模型、token、注意力、transformer、预训练。主走查:给一句"今天天气"看模型怎么接。
  • 原书:ch01(08-20) + ch02 开头(21:15-35)。

02 训练在优化什么——从下词预测到 Adam

  • 进来时以为:训练=喂数据 → 出去时知道:目标函数(交叉熵)怎么从"预测下一词"推出来、 梯度下降/SGD/Adam 各解决什么、反向传播为何算得起、dropout/权重衰减/标签平滑防什么; 顺带拿到 2024-25 模型版图(Qwen3/DeepSeek R1 的 MoE 口径)。
  • 主承重词:损失、梯度、学习率、Adam、反向传播。主走查:一个 batch 的 loss 数字(24.2→0.12)怎么变出来的。
  • 原书:ch02 后半(21:259-483)。

03 切词器——BPE,把文字变成 ID

  • 进来时以为:文字直接喂模型 → 出去时知道:为什么必须先切、三类切词器怎么取舍、 BPE 从压缩算法到 NLP 的来历、合并规则怎么学、Ġ 空格约定、特殊 token 占位、 训练-编码-解码-存载的完整生命周期;请求 160 词表只得 111 是怎么回事。
  • 主承重词:BPE、词表、合并规则、特殊 token。主走查:"Hello world." 从字符到 ['Hello','Ġ','world','.'] 逐步合并。
  • 原书:ch03(22-38)。

04 模型蓝图与 RMSNorm——配置里的每个数字

  • 进来时以为:超参是一堆要背的数 → 出去时知道:ModelConfig 每个字段对应一个设计决策 (深度=抽象层级、词表=粒度、hidden=分辨率、intermediate=草稿纸、ctx=视野); RMSNorm 砍掉 LayerNorm 的减均值,省 7-10% 算力、效果持平,所以 LLaMA 一代全换。
  • 主承重词:超参数、嵌入维度、归一化、RMSNorm。主走查:一个向量 [2, 0, 4, 0] 手算 RMSNorm 全程。
  • 原书:ch04(39)。

05 RoPE——用旋转编码位置,以及撑长上下文的三级火箭

  • 进来时以为:位置信息就是加个编号 → 出去时知道:排列不变性为什么逼出位置编码、 绝对/相对两条路线各自卡在哪、RoPE 用旋转让注意力分数只看相对距离、 训练 4k 用到 128k 靠 NTK/YaRN 的外推-插值混合;原书两处笔误(RoFormer→"Reformer")点破。
  • 主承重词:位置编码、旋转矩阵、外推。主走查:二维向量在位置 0/1/2 旋转后互相点积的数字。
  • 原书:ch05(40)。

06 注意力核心——SDPA 与三个省法(GQA/滑窗/sink)

  • 进来时以为:注意力就是加权平均 → 出去时知道:QKV 三份投影各干什么、为什么除 sqrt(d)、 因果/填充/滑窗掩码怎么改分数、GQA 共享 KV 省 4 倍缓存、滑窗把 O(n²) 压成 O(n·w)、 sink 这个虚拟 key 吸收多余概率;三种掩码叠加取最严。
  • 主承重词:查询/键/值、掩码、KV 缓存、GQA、滑动窗口、attention sink。主走查:T=4、window=2 的 4×4 分数矩阵逐格看掩码。
  • 原书:ch06(41)。

07 AttentionBlock 总装——一层注意力的完整流水线

  • 进来时以为:零件拼起来就行 → 出去时知道:预归一化→融合 QKV→切片→GQA 重排→RoPE→sdpa→ 输出投影→残差,每步为什么在这个位置;偶数层滑窗/奇数层全局的交替是 Mistral 的平衡术; 两个整除校验(头数、偶数维)防什么。
  • 主承重词:残差连接、预归一化。主走查:一个 [B,T,H] 张量带着形状变化走完整条流水线。
  • 原书:ch07(42)。

08 前馈网络——SwiGLU 与专家混合(MoE)

  • 进来时以为:FFN 就是两层全连接 → 出去时知道:注意力管 token 之间、FFN 管 token 之内; SwiGLU 用 Swish 门换掉 sigmoid 门(参数贵 50%,perplexity 换回来); MoE 门控每 token 只挑 2/16 个专家、负载均衡损失防偏心、张量并行分片; Mixtral 8x7B 胜 LLaMA 70B 的账怎么算。
  • 主承重词:前馈网络、激活函数、SwiGLU、专家混合、门控。主走查:一个 token 的门控分数→选 2 个专家→加权合成的数字。
  • 原书:ch08(43-49)。

09 总装——TransformerBlock 与完整模型

  • 进来时以为:模型=一堆层 → 出去时知道:block=注意力块+前馈块两行代码(残差/归一化藏在各自块内); 完整模型=查表→N 层→终归一化→投影到词表;权重绑定省参数;checkpoint 为什么 config 与权重分开存; 代价清单:O(n²)、GPT-3 460 万美元、比儿童多四个数量级的数据。
  • 主承重词:Transformer 块、前向传播、checkpoint。主走查:token ID 1523 进模型到 5 万个 logits 出来的每一步形状。
  • 原书:ch09(50-67)。

10 备料与训练——从一本短篇到 checkpoint

  • 进来时以为:训练就是把书读一遍 → 出去时知道:数据工程五件事(清洗/去重/配比/防污染/评测集); 本书真拿 4200 词 Wharton 短篇当语料;训练循环每件套(滑窗样本对、AdamW、预热+余弦退火、 混合精度、梯度裁剪、权重绑定);ppl 从 3.29e10 降到 1.13 意味着什么。
  • 主承重词:数据集、epoch、学习率调度、混合精度、困惑度。主走查:block_size=64 的窗口怎么切出 x/y 对,配上真实训练日志。
  • 原书:ch10 前半(68-73)。

11 推理与大时刻——一个诚实到残忍的演示

  • 进来时以为:训完就能问答 → 出去时知道:采样三件套(温度/top-k/top-p)叠加怎么做、 防复读五层防线;"who is rick" 的三阶段输出(复读小说→被护栏改道→崩成乱码)逐段解读; 吸引子、护栏只能改道、低概率尾部;为什么生产模型必须又大又多阶段。
  • 主承重词:推理、温度、top-p、重复惩罚。主走查:同一句 "who is rick" 的输出原文逐段归因。
  • 原书:ch10 后半(74-83)。

12 出师——预训练之后的四阶段与对齐

  • 进来时以为:预训练就是全部 → 出去时知道:中训补领域、SFT 教指令(只对回答算损失)、 RLHF 三步(奖励模型→PPO→KL 罚)、DPO 砍掉奖励模型、CAI 用宪法换人类标注; 质量铁律(1 万条好样本胜 100 万条);评测基准的污染与饱和;四阶段各自多少钱。
  • 主承重词:微调、SFT、RLHF、奖励模型、DPO。主走查:一条偏好对(好答案/差答案)在 RLHF 与 DPO 里各走一遍。
  • 原书:ch11 前半(85-94)。

13 GPU 之上——CUDA kernel 里训练长什么样

  • 进来时以为:GPU 就是"快" → 出去时知道:CPU 64 核 vs H100 16000 核的分工、kernel/线程/块/网格、 1024×1024 矩阵乘 100 万线程各算一个元素、共享内存+tiling 为什么省、融合是最大收益、 四个经典坑(竞态/bank conflict/分支发散/occupancy)。
  • 主承重词:GPU、kernel、并行、显存层级。主走查:一个 4×4 矩阵翻倍的 kernel 逐线程走。
  • 原书:ch11 末(95)。

与同族两本书的差异(写进总纲用)

  • 对 Raschka build-large-language-model(2024,GPT-2 复古配方):本书是 2025 配方 (RMSNorm/RoPE+NTK+YaRN/GQA/滑窗交替/sink/MoE+SwiGLU/权重绑定),且带对齐与 CUDA。
  • 对 cong-ling-gou-jian-da-mo-xing(中文教材,已拆):那本全而不深、五组件是 2017 原教旨、 不覆盖对齐与 MoE;本书正好补「现代配方+对齐流水线」,且有一个诚实的失败演示。
  • 对本书弱点的处理:综述段落疑似 AI 辅助、可疑精确数字当场点破(如"GPT-4/PaLM 万亿参数"是传闻口径); 数学公式在 epub 转码中丢失,拆解按正文散文重建并注明。