Language Modeling from Scratch
从分词器到 RLVR,把一个现代语言模型的每一层抽象都亲手拆开重建。这里是全 17 讲的中文精读文档。
0. 这门课在讲什么
CS336 的立场很明确:研究者正在与他们所研究的技术脱节。2016 年大家自己实现并训练模型,2018 年变成下载 BERT 微调,今天则是调用 API 写 prompt。抽象层次的上升带来了生产力,但这些抽象是漏的——想做真正底层的研究,就必须把整个技术栈重新撕开。
于是这门课的方法论是 understanding via building:从零实现分词器、Transformer、训练循环、分布式并行、推理引擎、数据流水线和对齐算法。不用 HuggingFace 的现成组件,每一行都自己写。
给定固定的算力预算,怎样训出最好的模型?这是一个效率问题,它把看似分散的 17 讲串成一条链:
$$ \text{模型质量} \;\approx\; f\big(\underbrace{\text{数据}}_{\text{L13–14}} \times \underbrace{\text{算力}}_{\text{L02, L05, L07–08}} \times \underbrace{\text{效率}}_{\text{L03–06, L09–11}}\big) $$每一讲都在回答"这一环怎样才能不浪费"。
为什么值得完整读一遍
- 它把账算给你看。70B 模型在 1024 张 H100 上训 15T token 要多久?8 张卡最大能训多大?这些不是估计,而是可以逐项列出的算式。
- 它讲取舍而不只讲方案。为什么是 pre-norm 而不是 post-norm,为什么 RoPE 赢了,MoE 什么时候不值得用——讲师给的是判断依据。
- 它是少数覆盖全栈的课。从 CUDA kernel 一直讲到 RLHF 的偏好数据标注协议,中间不跳步。
预备知识
- 熟练的 Python 与 PyTorch(会写自定义
nn.Module和训练循环) - 线性代数、概率、微积分(能看懂反向传播的链式法则推导)
- 深度学习基础(知道什么是 Transformer、注意力、交叉熵损失)
- 不需要:CUDA 经验、分布式训练经验、强化学习基础——这些课程内会从头讲
1. 全部讲义
课程为什么存在、当前 LM 格局、效率这条主线;然后是分词器的完整故事:字符 / 字节 / 词级各自的死路,压缩率的定义,BPE 的训练与编码算法,以及 tokenizer-free 的未来。
全课最实用的"会算账"基本功。dtype 与混合精度、张量的 stride 视图、einops;矩阵乘法 2mnp 的来历与 6ND 的完整推导;参数 / 梯度 / 优化器状态 / 激活值的逐项显存核算;MFU 与训练时间估算。
从"原始 Transformer"到现代变体的每一处改动及其理由:pre-norm、RMSNorm、SwiGLU、RoPE、去 bias。各大模型在这些选择上的共识与分歧,以及宽高比、词表、学习率等超参的经验法则。
KV cache 为什么是推理的枷锁,以及沿着 MHA → MQA → GQA → MLA 的压缩谱系;稀疏与线性注意力、状态空间模型;后半是 MoE:路由、负载均衡、aux-loss-free,以及主流 MoE 配置对比。
SM / warp / Tensor Core 的硬件层次与 grid / block / thread 的软件层次如何对应;存储带宽金字塔;算术强度与 roofline 模型——为什么矩阵乘法能跑满而 softmax 跑不满,以及融合、分块、重计算这三板斧。
用一个 GELU 贯穿三级实现:朴素 PyTorch → 内置算子 → torch.compile,把加速来自哪里的访存量逐项算清楚。然后是 Triton 的三个递进例子(softmax 的整行归约、row sum 的分块归约、matmul + ReLU 的 tiling),以及 benchmark 与 profiler 的正确用法。
互连拓扑决定并行策略的分层。全部集合通信原语及其通信量公式,ring all-reduce 为什么是 2(p−1)N/p;torch.distributed 实操;DDP 的通信-计算重叠;ZeRO 三阶段逐项对比。
Megatron 张量并行的列切+行切为什么只需一次 all-reduce;流水线并行的 bubble 公式与 1F1B 调度;序列 / 上下文 / 专家并行;最后把 TP × PP × DP × EP 映射到真实集群拓扑,推演一次千卡训练配置。
用小实验预测大实验的方法论。幂律的经验形式与三项式拟合;Kaplan 的结论与局限;Chinchilla 三种方法论逐一讲透,以及 tokens/param ≈ 20 的拉格朗日推导;critical batch size 与 muP。
prefill 是 compute-bound、decode 是 memory-bound——这一句话解释了推理优化的全部动机。continuous batching、PagedAttention、量化,以及投机解码的算法与"输出分布严格不变"的完整证明。
把 2022 年后各家公开技术报告当案例逐个拆开:MiniCPM 怎么用 muP 锁死超参、WSD 调度如何把拟合成本从 $O(n^2)$ 降回 $O(n)$、DeepSeek 直接给超参拟合缩放律、Step Law 的系统性扫描。后半是 muP 从两条公理出发的完整推导与大规模复现结果。
整个领域真正的瓶颈。困惑度为什么跨模型不可比;多选题打分方式如何改变排名;LLM-as-a-judge 的偏置;Chatbot Arena 的 Bradley-Terry 拟合;数据污染的检测与防御;Agent 类评测为什么更真。
最被低估也最决定成败的一环。Common Crawl 的格式与偏差、HTML 到文本的抽取、PDF 解析;从 C4、The Pile 到 FineWeb、DCLM、Common Pile 的数据集谱系对比;以及版权、许可证与隐私的现实约束。
技术含量最高的一讲。fastText 质量分类与 DSIR 重要性重采样;Gopher / C4 规则清单;MinHash 的 Jaccard 估计与 LSH 分带阈值的完整推导(含最小实现);DoReMi / RegMix 的自动配比;合成数据与模型崩溃。
预训练 → 中期训练 → 后训练的三段式。长上下文扩展与数据退火;SFT 的 loss mask 与 chat template,"少而精"之争;RLHF 全流程:Bradley-Terry 奖励模型、PPO 的 clip 与 KL 项、DPO 从目标函数出发的完整闭式推导。
奖励来自程序化验证器而非人类偏好模型,于是推理能力可以被真正训出来。GRPO 的推导与它受到的批评;DeepSeek-R1 的完整配方;rollout 与训练解耦的基础设施;以及 RL 究竟是"引出"还是"学会"新能力的争论。
图像的三条表示路线(ViT patch / VQ 离散 token / 直接像素);CLIP 的 InfoNCE 与 SigLIP 的 sigmoid 改造;从 LLaVA 式 adapter 到 Chameleon 式早融合的谱系;以及全课程的收束回顾。
Lecture 18(Daniel Selsam)与 Lecture 19(Dan Fu)是客座讲座,课程未公开讲义材料,因此本站不含这两讲。
2. 建议的学习路径
17 讲不是必须线性读完。按目标选路线:
| 你的目标 | 路线 | 可跳过 |
|---|---|---|
| 完整实现一个能训练的 LM | 01 → 02 → 03 → 04 → 07 | 05/06 可以先只看结论 |
| 搞懂性能优化与分布式 | 02 → 05 → 06 → 07 → 08 → 10 | 13–17 |
| 做数据工作 | 01 → 12 → 13 → 14 → 09 | 05–08 |
| 做后训练 / RL | 03 → 10 → 12 → 15 → 16 | 05–08、13–14 |
| 只想建立全局图景 | 01 → 02 → 09 → 12 → 16 | 其余按需查阅 |
3. 关于这份文档
内容整理自 Stanford CS336 (Spring 2026) 的公开讲义材料:Percy 的可执行讲义源码(lecture_*.py)与 Tatsu 的幻灯片(lecture_*.pdf),配图与幻灯片截图来自课程官方仓库。每一讲在忠实覆盖原讲脉络的基础上补充了推导过程、数值例子与实现代码。
原始材料:cs336.stanford.edu · stanford-cs336/lectures。上一届(Spring 2025)的全部录像在 YouTube,内容与本届高度重合,建议对照观看。