第 3 周 · Day 1:期中考试与错题溯源

Transformers and Large Language Models · Week 3 · Day 1。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

时长 6–7 小时:真题(1.5h 作答 + 0.5h 对答案)· 自编模拟卷(1.5h)· 错题溯源与补漏(2h)· §3 补漏三讲(1h)

考试范围 Lecture 1–4,也就是第 1–2 周的全部内容,外加第 0 周打下的基础。

配套代码 w3day1_checks.py(纯 numpy):标签平滑的最优解与硬标签下 logit 的无界增长、推测解码的接受-拒绝规则(精确与蒙特卡洛)和期望产出、PagedAttention 的显存利用率、模拟卷全部计算题的标准答案

今天的目标:在闭卷、计时的条件下做一次真实检验;把每一道错题定位到具体的章节并重学;补上前两周讲得不够的三个考点(标签平滑、推测解码、PagedAttention)。


§0 今天怎么安排

学习计划的原话是:“闭卷、计时、手写。做完再对答案。错的每一题回到对应讲次重看那一段。这是第一次真实检验,别自欺欺人。”

时段做什么要点
上午 1.5h2025 期中真题(§1)闭卷,手机放到另一个房间,严格 90 分钟
0.5h对答案、给自己打分选择题直接对;简答题按官方答案的要点逐条给分,没写到的要点不给分
下午 1.5h本文的模拟卷(§C)同样闭卷计时。它覆盖的考点和真题互补,计算题多一些
0.5h对模拟卷答案(§D)
2h错题溯源(§2)每道错题找到对应小节,重读、重推,写进疑问清单
1h补漏三讲(§3)真题里出现过、但前两周只提了一句的三个点

先考试,后读 §3。 §3 的内容就是考点,先读了等于提前看答案。

今天要用到的旧结论:全部。这正是期中的意义。


§1 考试是什么样的

2025 年秋季学期的期中卷和答案在课程主页公开:

结构:90 分钟、100 分、闭卷(不许带笔记、电脑、手机,不许用 AI)。四个部分对应四讲,每部分 25 分:8 道选择题 + 2 道简答题。

部分对应选择题涉及简答题的类型
1Lecture 1 Transformer分词、word2vec、RNN、注意力、归一化写出公式并解释各部分的作用;解释一个训练技巧的目的
2Lecture 2 Transformer 变体位置编码、BERT、架构、RoPE、稀疏注意力、掩码比较几种架构;解释一种机制和它的好处
3Lecture 3 LLM定义、MoE、KV Cache 与推理系统、采样与温度定义一个训练问题并给出对策;从几个维度比较解码策略
4Lecture 4 训练预训练目标、数据、SFT、LoRA、混合精度、FlashAttention、ZeRO解释一个训练阶段的目标与难点;解释一个算法的核心思想与收益

从结构里能读出的三件事:

  1. 简答题考的是”为什么”:几乎每道都是”是什么 + 为什么这样设计 + 带来了什么”。这正是我们四拍写法(动机 → 直觉 → 推导 → 意义与代价)要训练的东西。§A 给了一个答题模板。
  2. 选择题覆盖面很广,会考到前两周只一笔带过的点。§3 补了其中最可能出现的三个。
  3. 计算量不大,但要会估算:KV Cache、参数量、显存这类题目在我们的模拟卷里多放了几道,因为面试也最爱问。

注意:课程主页上 2026 年的新版大纲已经调整了讲次(例如把强化学习提前、增加了系统与智能体两讲)。我们的学习计划沿用 2025 版的九讲顺序,期中也用 2025 版的真题。


§2 错题溯源表

每道错题,按下表找到对应的小节。重读不够,要合上书把那一段的推导重写一遍(学习计划”执行纪律”第 1 条)。

2.1 Lecture 1:Transformer 基础

考点去哪里看
one-hot 的问题、分布式表示Week 0 Day 3 §1
word2vec:skip-gram、负采样、噪声分布的 0.75 次方Week 0 Day 3 §3.1–3.5
GloVe 与”两派是一回事”Week 0 Day 3 §4
分词:为什么不用词、不用字符;BPEWeek 0 Day 3 §7;Week 1 Day 2 §6
WordPiece、Unigram、SentencePieceWeek 1 Day 2 §6.2–6.4
RNN、BPTT、梯度消失的谱半径条件Week 0 Day 4 §2
LSTM 的三个门、为什么能缓解梯度消失Week 0 Day 4 §3.3–3.4
Seq2Seq 的信息瓶颈、teacher forcingWeek 0 Day 4 §4
注意力的诞生、Q/K/V 的来历Week 0 Day 4 §5
缩放点积注意力、为什么除以 dk\sqrt{d_k}Week 1 Day 1 §2.1;Week 0 Day 4 §5.5
为什么要三个投影;置换等变Week 1 Day 1 §1.4–1.5
掩码:因果与 paddingWeek 1 Day 1 §3
多头:为什么是切分而不是复制Week 1 Day 1 §4
复杂度、显存、为什么训练能并行Week 1 Day 1 §5
LayerNorm、RMSNorm、Pre-LN vs Post-LNWeek 0 Day 2 §4.3–4.5;Week 1 Day 2 §2
FFN 与键值记忆、为什么 4 倍Week 1 Day 2 §1
dropout 放在哪;标签平滑Week 1 Day 2 §2.4;今天 §3.1

2.2 Lecture 2:Transformer 变体与技巧

考点去哪里看
正弦位置编码、相对位移是旋转、投影后失效Week 1 Day 2 §3.3–3.6
可学习的绝对位置编码Week 1 Day 2 §3.7
RoPE 的推导与性质Week 1 Day 5 §2
长度外推:PI、NTK、YaRN、ALiBiWeek 1 Day 5 §3
编码器、解码器与三种架构Week 1 Day 2 §4
KV Cache、MQA、GQAWeek 1 Day 4 §1–2
稀疏注意力(滑动窗口、全局 token)、线性注意力Week 1 Day 6 §1–2
FlashAttentionWeek 1 Day 6 §3
BERT:MLM 的 80/10/10、NSP、微调Week 1 Day 6 §4.2–4.4
BERT 变体、为什么不能直接生成Week 1 Day 6 §4.6–4.7

2.3 Lecture 3:大语言模型

考点去哪里看
LLM 的定义、为什么 decoder-onlyWeek 2 Day 1 §1
缩放律、ChinchillaWeek 2 Day 1 §2–3
MoE:路由、总参数 vs 激活参数Week 2 Day 2 §1–2
路由坍缩与负载均衡损失、容量因子、z-lossWeek 2 Day 2 §3
KV Cache 的显存公式与 rooflineWeek 1 Day 4 §1.4–1.5
PagedAttention、推测解码Week 1 Day 4 §1.6、§4;今天 §3.2–3.3
贪心、beam search、长度归一化Week 2 Day 3 §1
温度、top-k、top-p、min-p、重复惩罚Week 2 Day 3 §2;Week 0 Day 5 §5
上下文长度的代价、迷失在中间Week 2 Day 3 §3
提示、ICL、CoT、自洽性Week 2 Day 3 §4–5

2.4 Lecture 4:训练

考点去哪里看
预训练目标、数据清洗与去重、数据混合Week 2 Day 4 §1;Week 2 Day 1 §1.2
loss spikeWeek 2 Day 4 §2
FP16 vs BF16、混合精度、fp32 主权重Week 2 Day 4 §3
显存账、梯度检查点、梯度累积Week 2 Day 4 §4;Week 0 Day 1 §9
DDP、ZeRO、FSDP、TP、PPWeek 2 Day 4 §5
量化Week 2 Day 5
SFT(指令微调)、chat template、只在回答上算 lossWeek 2 Day 6 §1
LoRA、QLoRAWeek 2 Day 6 §3–4

2.5 怎么记录

每道错题写一行,放进疑问清单:

[真题 3.2] 选了 B,应为 D。错因:把"总参数"当成了"激活参数"。
回到 Week 2 Day 2 §2.2 重推了一遍 Mixtral 的计数。一句话结论:显存看总参数,算力看激活参数。

错因要分类:概念没懂 / 推导不熟 / 记混了 / 审题错。前两类必须回去重学;第三类做一张对比表;第四类练习时刻意放慢读题。


§3 补漏三讲

3.1 标签平滑(label smoothing)

动机:交叉熵用 one-hot 目标时,最优解是正确类概率等于 1,也就是正确类的 logit 比其他类大无穷多。模型会一直把 logit 往外推,变得过度自信。

做法:把目标换成 q=(1−ε)⋅onehot+ε/Vq=(1-\varepsilon)\cdot\text{onehot}+\varepsilon/V。原始 Transformer 用了 ε=0.1\varepsilon=0.1(Week 1 Day 2 §4.1 的配置表)。

推导:交叉熵 H(q,p)=−∑iqilog⁡piH(q,p)=-\sum_iq_i\log p_i 对 logits 的梯度是 p−qp-q(Week 0 Day 1 推过 ∑iqi=1\sum_iq_i=1 的情形)。令它为 0 得 p=qp=q:最优解就是平滑后的目标本身。于是正确类与其他类的 logit 差是一个有限值

z正确−z其他=log⁡1−ε+ε/Vε/V.z_{\text{正确}}-z_{\text{其他}}=\log\frac{1-\varepsilon+\varepsilon/V}{\varepsilon/V}.

w3day1_checks.py 第 1 组(V=5V=5,ε=0.1\varepsilon=0.1,从 0 开始梯度下降):

步数10100100010000100000
硬标签:logit 差3.746.198.5110.8213.12
标签平滑:logit 差3.243.833.833.833.83

硬标签下,logit 差每多训练 10 倍就再涨约 2.3(ln⁡10\ln10),永远不停;标签平滑收敛到 log⁡(0.92/0.02)=3.829\log(0.92/0.02)=3.829。V=32000V=32000 时这个上限是 12.57。

意义与代价:

  • 收益:模型不再过度自信,校准更好,常常泛化也更好。
  • 代价:它故意不去拟合真实的 one-hot。即使模型完美地学会了平滑目标,在确定性标签上的 NLL 也有 −log⁡(1−ε+ε/V)-\log(1-\varepsilon+\varepsilon/V) 的下限(V=32000V=32000、ε=0.1\varepsilon=0.1 时约 0.105 nats;上表的 V=5V=5 时是 0.083),困惑度会变差。Transformer 原论文的原话大意是:“这会伤害困惑度,但提高了准确率和 BLEU。”
  • LLM 预训练一般不用:数据量极大,过拟合不是主要矛盾(和 dropout 的理由一样,Week 1 Day 2 §2.4)。

3.2 推测解码(speculative decoding)

动机:batch 1 的解码受访存限制(Week 1 Day 4 §1.5)。每出一个 token 都要把几十 GB 权重从显存读一遍,算力大部分闲着。如果大模型一次前向能验证好几个位置,读一遍权重就能出好几个 token。

直觉:让一个便宜的小模型 qq 先连续猜 kk 个 token,大模型 pp 用一次前向同时算出这 kk 个位置、再加上后面一个位置的分布(共 k+1k+1 个,相当于一次长度为 kk 的 prefill),然后逐个决定接受还是拒绝。

规则(Leviathan et al. 2023;Chen et al. 2023):对小模型猜的 token xx,

  1. 以概率 min⁡ ⁣(1, p(x)/q(x))\min\!\big(1,\ p(x)/q(x)\big) 接受;
  2. 一旦拒绝,从 norm(max⁡(0, p−q))\text{norm}\big(\max(0,\ p-q)\big) 里重新采一个 token,丢掉后面的猜测;
  3. 如果 kk 个全被接受,大模型那次前向在第 k+1k+1 个位置的分布白送一个 token。

推导:输出分布恰好是 pp。 记 α=∑xmin⁡(p(x),q(x))\alpha=\sum_x\min(p(x),q(x)),它是接受概率。注意 ∑xmax⁡(0,p(x)−q(x))=1−α\sum_x\max(0,p(x)-q(x))=1-\alpha,所以重采分布是 max⁡(0,p−q)/(1−α)\max(0,p-q)/(1-\alpha)。于是

P(输出=x)=q(x)min⁡ ⁣(1,p(x)q(x))⏟=min⁡(p(x), q(x))+(1−α)⋅max⁡(0, p(x)−q(x))1−α=min⁡(p,q)+max⁡(0,p−q)=p(x).P(\text{输出}=x)=\underbrace{q(x)\min\!\Big(1,\frac{p(x)}{q(x)}\Big)}_{=\min(p(x),\,q(x))}+(1-\alpha)\cdot\frac{\max(0,\,p(x)-q(x))}{1-\alpha}=\min(p,q)+\max(0,p-q)=p(x).

这是拒绝采样的一个变体。它不是近似:输出分布与只用大模型完全相同。 第 2 组:解析的输出分布与 pp 的最大差 5.6×10−175.6\times10^{-17};蒙特卡洛 20 万次,经验分布与 pp 的 TV 距离 0.0029(在抽样误差之内)。

每次大模型前向产出几个 token:若每个猜测独立地以概率 α\alpha 被接受,产出数是”连续接受的个数 + 1”:

E[产出]=1+α+α2+⋯+αk=1−αk+11−α.\mathbb E[\text{产出}]=1+\alpha+\alpha^2+\cdots+\alpha^k=\frac{1-\alpha^{k+1}}{1-\alpha}.

α\alpha \ kk1248模拟(k=4k=4)
0.61.601.962.312.472.309
0.81.802.443.364.333.362
0.91.902.714.106.134.088

意义与代价:小模型一次前向的时间是大模型的 cc 倍时,加速比约为 E[产出]/(kc+1)\mathbb E[\text{产出}]/(kc+1)。c=0.05c=0.05 时:α=0.8\alpha=0.8、k=4k=4 约 2.80 倍,最优 k=8k=8 约 3.09 倍;α=0.6\alpha=0.6 时最多约 1.92 倍。

  • α\alpha 决定一切:小模型要和大模型足够像(同一家族、同一个分词器)。代码、格式化文本这种可预测的内容 α\alpha 高,收益大。
  • 大 batch 时收益变小:batch 大了解码本来就不再是访存瓶颈(Week 1 Day 4 §1.5)。
  • 变体:不用单独的小模型,而是在大模型上加几个预测头(Medusa)、用 n-gram 查表猜(prompt lookup)等。

3.3 PagedAttention

动机:服务时每个请求的 KV Cache 最终有多长事先不知道。按最大长度预分配,大部分空间被”可能会生成、其实没生成”的 token 占着(Week 1 Day 4 §1.6)。

做法(Kwon et al. 2023,vLLM):借用操作系统的虚拟内存分页,把 KV Cache 切成固定大小的块(比如 16 个 token 一块),每条序列维护一张块表,按需分配。注意力内核按块表去不连续的地址读 K、V。

w3day1_checks.py 第 3 组:Llama-2-7B 每个 token 的 KV 是 0.5 MiB,给 KV 留 40 GiB,共能放 81,920 个 token。请求长度的中位数 399、均值 533、上限 2048:

分配方式同时服务的请求数显存里真正存了 KV 的比例
按最大长度 2048 预分配4026.0%
分页,每块 16 个 token约 15198.6%
分页,每块 64 个 token约 14594.6%

意义:并发数提高了近 4 倍,而吞吐量几乎正比于并发数(解码是访存受限的,batch 越大越划算)。块表还带来一个额外的好处:多条序列可以共享同一段前缀的块(并行采样 nn 个回答、beam search、共享的系统提示),写入时才复制(copy-on-write)。第 6 天的测试时缩放会大量用到”同一个提示采样很多次”,这个特性直接决定了成本。


§A 答题方法

A.1 简答题的模板

几乎每道简答题都能套这四步,和我们写文档的四拍一致:

  1. 是什么:一句话定义,能写公式就写公式。
  2. 为什么需要它:它解决了什么问题,不用它会怎样。
  3. 怎么做到的:关键机制,一两个要点。
  4. 代价 / 局限:它换掉了什么。

例:“解释 FlashAttention 的核心思想和它的实际好处。”

是什么:一种精确计算注意力的算法,结果与标准实现相同(不是近似)。为什么:标准实现要把 T×TT\times T 的打分矩阵写进显存再读出来,长序列时显存占用 O(T2)O(T^2),而且注意力的瓶颈是访存不是计算。怎么做到:分块(tiling),每次把 Q、K、V 的一块读进片上 SRAM,用 online softmax 边算边更新最大值和归一化常数,不物化完整矩阵;反向时重算注意力矩阵,只存每行的 logsumexp。好处与代价:显存从 O(T2)O(T^2) 降到 O(T)O(T),速度提升数倍,使长上下文训练可行;代价是反向多了重算的计算量,以及需要为硬件专门写内核。

A.2 选择题

  • 先排除明显错的。四个选项里通常有一个”听起来对但混淆了概念”的,比如把”省显存”说成”省计算”(GQA)、把”总参数”说成”激活参数”(MoE)。
  • 注意绝对化的措辞:带”总是""完全""不可能”的选项多半是错的,除非它说的正是一个精确结论(例如”FlashAttention 不改变数学结果”是对的)。
  • 计算题先估数量级:KV Cache、显存、参数量,先写出公式里每一项的数量级,再算。

A.3 时间分配

每部分 22 分钟左右:选择题约 10 分钟(每题一分多钟),两道简答题各约 6 分钟。卡住的题先跳过,全部做完再回来。


§B 实操

  1. 做 2025 期中真题(1.5h,闭卷、计时、手写),对答案打分。
  2. 做本文 §C 的模拟卷(1.5h,同样的条件),对照 §D 打分。
  3. 错题溯源(2h):每道错题按 §2 找到小节,合上书重推一遍,按 §2.5 的格式记录。
  4. 跑 w3day1_checks.py,读 §3 的补漏三讲,自己推一遍推测解码的”输出分布恰好是 pp”。
  5. 自评:两份卷子的总分各是多少?哪一讲失分最多?如果某一讲失分超过 40%,明天开始新内容之前先花半天补那一讲(学习计划:“允许延期,不允许跳过”)。

§C 模拟卷(90 分钟,闭卷)

这份卷子是按真题的结构自己出的,和真题的考点互补,计算题比真题多。选择题都是单选。

第一部分:Transformer 基础

1.1 BPE 分词器训练时,每一步做的是: (A) 把出现次数最少的字符合并进相邻的 token (B) 把语料中出现次数最多的相邻 token 对合并成一个新 token (C) 删除使语料似然下降最少的 token (D) 按词频从高到低直接把整词加入词表

1.2 skip-gram 负采样中,噪声分布取 U(w)0.75U(w)^{0.75} 而不是 U(w)U(w),主要是为了: (A) 让训练更快收敛 (B) 相对地提高低频词被采为负样本的机会 (C) 保证梯度无偏 (D) 让词向量归一化

1.3(计算)q,k∈R64q,k\in\mathbb R^{64} 的各分量独立、均值 0、方差 1。q⊤kq^\top k 的标准差是多少?如果不除以 dk\sqrt{d_k},会发生什么?

1.4(计算)logits 为 [2,1,0][2,1,0],分别写出温度 T=0.5T=0.5、11、22 时 softmax 的结果(保留两位小数),并说明温度的作用。

1.5 LSTM 相比普通 RNN 能缓解梯度消失,最关键的原因是: (A) 用了 sigmoid 门 (B) 细胞状态沿时间的更新是加法,遗忘门接近 1 时梯度几乎不衰减 (C) 参数更多 (D) 用了 tanh 激活

1.6 关于 LayerNorm,正确的是: (A) 在 batch 维上归一化,所以推理时需要统计量的滑动平均 (B) 对每个 token 在特征维上归一化,与 batch 大小无关 (C) RMSNorm 在它基础上增加了减均值的步骤 (D) Pre-LN 把 LayerNorm 放在残差相加之后

1.7(简答)写出缩放点积注意力的公式,说明 Q、K、V 各自的角色,以及为什么需要三个不同的投影而不是直接用输入 XX。

1.8(简答)什么是标签平滑?它对模型的 logits 和困惑度分别有什么影响?

第二部分:Transformer 变体与技巧

2.1 关于正弦位置编码,正确的是: (A) 位置 t+kt+k 的编码可以由位置 tt 的编码经过一个只依赖 kk 的线性变换得到 (B) 加到词嵌入上之后,注意力打分仍然只依赖相对位置 (C) 它必须通过训练学习 (D) 它不能用于解码器

2.2 BERT 的 MLM 对被选中的 15% 位置,80% 替换成 [MASK]、10% 替换成随机 token、10% 保持不变。保留”随机替换”和”不变”是为了: (A) 加快训练 (B) 缓解预训练与微调的不一致(微调时没有 [MASK]),让模型对每个位置都要保持好的表示 (C) 做数据增强以防过拟合 (D) 满足 NSP 任务的需要

2.3(计算)RoPE 用 d=128d=128、base =10000=10000。最高频和最低频的那对维度,分别转一整圈需要多少个位置?据此解释:为什么在 4096 长度上训练的模型,直接用在 32k 长度上会出问题,而且问题出在哪些维度?

2.4 在 Transformer 解码器里实现因果掩码,正确的是: (A) softmax 之后把未来位置的权重置 0 再重新归一化,与 softmax 前加 −∞-\infty 完全等价,也没有数值问题 (B) 在 softmax 之前给未来位置的打分加 −∞-\infty(或很大的负数) (C) 把未来位置的 value 置 0 (D) 只在推理时需要

2.5 Longformer 这类”滑动窗口 + 少数全局 token”的注意力,序列长 TT、窗口 ww 时的复杂度是: (A) O(T2)O(T^2) (B) O(Tw)O(Tw) (C) O(Tlog⁡T)O(T\log T) (D) O(w2)O(w^2)

2.6 GQA(分组查询注意力)相比 MHA: (A) 减少了注意力打分的计算量 (B) 减少了 KV Cache 的显存和解码时的访存,查询头数不变 (C) 减少了查询头数 (D) 只在训练时起作用

2.7(简答)比较 encoder-only、encoder-decoder、decoder-only 三类架构:各自的注意力掩码、预训练目标、典型任务和代表模型。

2.8(简答)解释 RoPE 的机制,以及它相比可学习的绝对位置编码的优点。

第三部分:大语言模型

3.1 下列哪一条不是现代 LLM 几乎都用 decoder-only 的理由: (A) 每个位置都有训练信号 (B) 生成与预训练的形式一致 (C) 双向注意力在理解任务上一定更差 (D) 结构简单、KV Cache 好用、缩放性质好

3.2 MoE 训练中出现”路由坍缩”时,最直接的对策是: (A) 增加专家数 (B) 加负载均衡辅助损失,或给路由加噪声、设容量上限 (C) 降低学习率 (D) 把 top-2 改成 top-1

3.3(计算)一个 70B 模型:80 层、GQA 8 组 KV 头、dk=128d_k=128、bf16。每个 token 的 KV Cache 多大?batch 32、序列长 8192 时一共多大?

3.4(计算)推测解码中,小模型每个猜测被接受的概率为 0.8,每次猜 4 个。大模型每次前向平均产出几个 token?这种方法会改变输出的分布吗?为什么?

3.5(计算)Mixtral 8x7B:32 层、d=4096d=4096、每个专家是 SwiGLU(dff=14336d_{ff}=14336)、8 个专家选 2 个、注意力是 GQA(8 组 KV 头,dk=128d_k=128)、词表 32000、输入输出嵌入不共享。估算总参数和每个 token 的激活参数,说明”8x7B”为什么不是 56B 的推理成本。

3.6 对一个尖锐的分布,温度从 1 调到 3(先除温度、再截断)。下列哪种截断策略保留的候选数会从几个暴涨到几百个: (A) top-k(k=50k=50) (B) top-p(p=0.9p=0.9) (C) min-p(pmin⁡=0.1p_{\min}=0.1) (D) 都不能

3.7(简答)什么是 MoE 的路由坍缩?它为什么会发生?给出至少两种缓解方法并解释原理。

3.8(简答)从多样性、质量、计算量三个维度比较贪心解码、beam search、温度采样和 top-p 采样。为什么 beam search 在开放式生成上效果差?

第四部分:训练

4.1 同样的数据量,decoder-only 的下一个 token 预测比 BERT 的 MLM 拿到更多训练信号,是因为: (A) 它的模型更大 (B) 每个位置都有损失,而 MLM 只在约 15% 的位置上有 (C) 它用了更大的学习率 (D) 它不需要分词

4.2 关于 BF16 与 FP16,正确的是: (A) BF16 精度更高 (B) BF16 的指数位与 FP32 相同,范围大,一般不需要 loss scaling;但尾数只有 7 位,所以优化器更新要在 fp32 主权重上做 (C) FP16 的范围更大 (D) 两者都不需要 fp32 主权重

4.3(计算)用 bf16 混合精度 + AdamW 全量微调一个 6.74B 的模型,不算激活,参数、梯度和优化器状态一共需要多少显存?逐项写出每个参数的字节数。

4.4(计算)同一个模型在 8 张卡上用 ZeRO-2 和 ZeRO-3,每张卡的参数状态各是多少?

4.5(计算)给 Llama-2-7B(32 层,d=4096d=4096)的 WqW_q、WvW_v 加 r=16r=16 的 LoRA,一共多少个可训练参数?

4.6(计算)标准注意力在 h=32h=32、T=8192T=8192、bf16、batch 1 时,一层的注意力矩阵占多少显存?FlashAttention 存什么来代替它?

4.7(计算)算力预算 102210^{22} FLOPs。按 Chinchilla 的”每个参数约 20 个 token”和 C≈6NDC\approx6ND,模型该多大、用多少 token?

4.8(简答)指令微调(SFT)的目标是什么?数据格式上要注意什么?有哪些难点?

4.9(简答)解释 FlashAttention 的核心思想和实际好处。


§D 模拟卷详解

计算题的数字都来自 w3day1_checks.py 第 4 组。每题后面是溯源的位置。

第一部分

1.1 B。 BPE 就是反复合并最频繁的相邻对(Week 0 Day 3 §7.3)。C 是 Unigram 的做法(Week 1 Day 2 §6.3)。

1.2 B。 0.75 次方把分布”压平”,低频词被采为负样本的相对概率上升,高频词下降(Week 0 Day 3 §3.5)。

1.3 q⊤k=∑i=164qikiq^\top k=\sum_{i=1}^{64}q_ik_i,每项方差为 1,独立相加,方差 64,标准差 8。不除的话,打分的尺度随 dkd_k 增长,softmax 饱和成近似 one-hot,梯度几乎为 0(Week 0 Day 4 §5.5;Week 1 Day 1 §2.1)。

1.4 T=0.5T=0.5:[0.87, 0.12, 0.02];T=1T=1:[0.67, 0.24, 0.09];T=2T=2:[0.51, 0.31, 0.19]。温度除在 logits 上:T<1T<1 让分布更尖,T>1T>1 更平;T→0T\to0 退化成 argmax(Week 2 Day 3 §2.2)。

1.5 B(Week 0 Day 4 §3.4)。

1.6 B。 A 说的是 BatchNorm;RMSNorm 是去掉减均值;Pre-LN 把归一化放在子层之前(Week 0 Day 2 §4.2–4.5)。

1.7 Attention(Q,K,V)=softmax(QK⊤/dk)V\text{Attention}(Q,K,V)=\text{softmax}(QK^\top/\sqrt{d_k})V。Q 是”我要找什么”,K 是”我能被怎样找到”,V 是”被找到后我提供什么内容”。三个投影的理由:打分需要非对称(ii 关注 jj 不等于 jj 关注 ii),而 XX⊤XX^\top 是对称的,且每个词最关注自己;“用来匹配的特征”和”要传递的内容”应该分开;投影还能把维度降到 dkd_k(Week 1 Day 1 §1.4)。

1.8 见今天 §3.1。要点:目标换成 (1−ε)⋅onehot+ε/V(1-\varepsilon)\cdot\text{onehot}+\varepsilon/V;最优 logit 差有限(V=32000V=32000、ε=0.1\varepsilon=0.1 时 12.57),防止过度自信、改善校准;代价是 NLL 有下限(约 0.105 nats),困惑度变差。

第二部分

2.1 A。 pt+k=Rkptp_{t+k}=R_kp_t(Week 1 Day 2 §3.4)。B 错:加到词嵌入上、再经过 WQW_Q、WKW_K 投影后,打分里混进了绝对位置(Week 1 Day 2 §3.6),这正是 RoPE 的动机。

2.2 B(Week 1 Day 6 §4.2)。

2.3 第 ii 对维度的角频率 θi=base−2i/d\theta_i=\text{base}^{-2i/d}。最高频一对(i=0i=0)转一圈要 2π≈6.32\pi\approx6.3 个位置;最低频一对的波长 2π⋅base(d−2)/d≈54,4102\pi\cdot\text{base}^{(d-2)/d}\approx54{,}410 个位置。训练长度 4096 时,低频维度连一圈都没转完,只见过很小一段角度;在 32k 上它们会转到训练时从未见过的角度,模型没学过怎么解读。高频维度在训练中已经转了很多圈,没问题。所以 PI、NTK-aware、YaRN 都主要在处理低频维度(Week 1 Day 5 §3.1–3.4)。

2.4 B。 A 的前半句在数学上成立(置 0 再重新归一化,等于只在允许的位置上做 softmax),错在”没有数值问题”:未来位置的打分若远大于允许位置,减去最大值之后允许位置的权重会下溢成 0,重新归一化就是 0/0;而且未来位置白白参与了计算。加法掩码在 softmax 之前一步到位(Week 1 Day 1 §3.3)。

2.5 B(Week 1 Day 6 §1.1)。

2.6 B。 GQA 省的是 K、V 的头数,查询头数不变,打分的计算量也不变(Week 1 Day 4 §2.5)。

2.7 encoder-only:双向注意力(只有 padding 掩码),MLM 预训练,擅长分类、抽取、检索,代表 BERT、RoBERTa。encoder-decoder:编码器双向、解码器因果 + 交叉注意力,跨度破坏或翻译目标,擅长输入输出差异大的条件生成(翻译、摘要),代表 T5、BART。decoder-only:因果掩码,下一个 token 预测,擅长生成,也能通过提示做理解任务,代表 GPT、Llama(Week 1 Day 2 §4.3;Week 2 Day 1 §1.2)。

2.8 对位置 mm 的 qq、kk 的每一对维度,按角度 mθim\theta_i 旋转;两个旋转后向量的内积只依赖相对位置 m−nm-n。优点:打分天然只依赖相对位置、不引入参数、作用在每一层的 Q、K 上(不会像加性编码那样在投影后失去相对性)、和 KV Cache 兼容(缓存的是旋转后的 K)、可以通过 PI/NTK/YaRN 做长度扩展(Week 1 Day 5 §2)。

第三部分

3.1 C。 双向注意力在理解任务上常常更好,这不是 decoder-only 胜出的理由;其余三条都是(Week 2 Day 1 §1.2)。

3.2 B(Week 2 Day 2 §3.1–3.3)。

3.3 2×80×8×128×22\times80\times8\times128\times2 字节 =320=320 KiB/token;×32×8192\times32\times8192 个 token == 80 GiB(Week 1 Day 4 §1.4)。

3.4 (1−0.85)/(1−0.8)=(1-0.8^5)/(1-0.8)= 3.36 个。不改变:接受-拒绝规则保证输出分布恰好是大模型的分布(今天 §3.2 的推导)。

3.5 每个专家 3×4096×143363\times4096\times14336;每层注意力 2×40962+2×4096×10242\times4096^2+2\times4096\times1024,加路由器和两个归一化。总参数 46.7B(精确值 46,702,792,704),激活 12.9B(12,879,925,248)。只有 FFN 是 8 份,注意力和嵌入是共享的,所以远小于 56B;每个 token 只过 2 个专家,计算量接近 13B 的稠密模型。但显存要放下全部 46.7B(Week 2 Day 2 §2.1–2.2)。

3.6 B。 高温把分布拉平,前几个 token 的累积概率远不到 0.9,top-p 要把几百个长尾 token 都放进来才凑够。top-k 固定保留 50 个;min-p 的阈值是 pmin⁡⋅pmax⁡p_{\min}\cdot p_{\max},随分布一起下降,候选数只会温和增加(Week 2 Day 3 §2.1 的表:尖锐分布在 T=3T=3 时 top-p 保留 865 个,min-p 只保留 4 个)。

3.7 定义:少数专家接收了绝大部分 token,其余专家几乎不被使用。原因:正反馈,被选中多的专家训练得更好,打分更高,于是更常被选中。对策:Switch 负载均衡损失 αE∑ifiPi\alpha E\sum_if_iP_i(它的梯度把 token 推离过载的专家);训练初期给路由 logit 加噪声;容量因子限制每个专家接收的 token 数;无辅助损失的偏置均衡(DeepSeek-V3);z-loss 控制路由 logit 的量级以求稳定(Week 2 Day 2 §3)。

3.8 贪心:零多样性、计算最少、容易重复。beam search:零或低多样性,计算约为 beam 宽度倍,在翻译这类”答案集中”的任务上质量高;开放生成上它找到的高概率序列往往平淡、重复甚至很短(搜索的诅咒:人类文本并不是概率最高的那条序列)。温度采样:多样性随温度升高,质量下降,会采到长尾的垃圾 token。top-p:截掉长尾,兼顾多样性与质量,计算与贪心相同(Week 2 Day 3 §1–2)。

第四部分

4.1 B(Week 2 Day 1 §1.2)。

4.2 B(Week 2 Day 4 §3)。

4.3 每个参数:bf16 权重 2 + bf16 梯度 2 + fp32 主权重 4 + Adam 的 mm 4 + vv 4 =16=16 字节。16×6.74×10916\times6.74\times10^9 字节 == 100.4 GiB(Week 2 Day 4 §4.1)。

4.4 ZeRO-2:2Ψ+14Ψ/8=2\Psi+14\Psi/8= 23.5 GiB/卡;ZeRO-3:16Ψ/8=16\Psi/8= 12.6 GiB/卡(Week 2 Day 4 §5.2)。

4.5 32×2×16×(4096+4096)=32\times2\times16\times(4096+4096)= 8,388,608(约 8.4M,原模型的 0.12%)(Week 2 Day 6 §3.3)。

4.6 32×81922×232\times8192^2\times2 字节 == 4 GiB,这还只是一层。FlashAttention 不存这个矩阵,只存每行 softmax 的 logsumexp(O(T)O(T)),反向时分块重算(Week 1 Day 6 §3.4)。

4.7 C=6NDC=6ND、D=20ND=20N ⇒ C=120N2C=120N^2,N=C/120≈N=\sqrt{C/120}\approx 9.1B,D≈D\approx 183B token。(用 Chinchilla 方法 3 拟合的常数直接算,最优 NN 约 5.2B,更偏向小模型、多数据,见 Week 2 Day 1 §3.2 对方法 3 的讨论。)

4.8 目标:把只会续写的预训练模型变成能遵循指令、以助手的方式回应的模型,主要学的是格式和行为,而不是新知识。格式:用 chat template 标出角色和回合边界,结束符要参与训练;loss 只算在回答上。难点:数据质量比数量重要(LIMA 的 1000 条);用新知识做 SFT 会增加幻觉;过拟合与遗忘;多样性(Week 2 Day 6 §1)。

4.9 见 §A.1 的例子。


出关标准

  • 在闭卷、计时的条件下做完 2025 期中真题,并对照答案打分
  • 做完 §C 模拟卷,对照 §D 打分
  • 每一道错题都定位到了具体小节,合上书重推过,并按 §2.5 记录
  • 能推出推测解码”输出分布恰好是 pp“,写出每次前向的期望产出
  • 能解释标签平滑对 logits 和困惑度的影响
  • 能说清 PagedAttention 解决了什么问题,为什么它让并发数大幅提高
  • 失分最多的一讲已经安排了补课时间

疑问清单

← 返回课程目录