闭卷计时;做完先按文末评分标准自评,再按漏点定位表回查。
范围:本讲导览与 2.1–2.8。题目与习题集尽量不重叠;概念判断题只写对错不给分,必须给理由或反例。
时间分配建议:第一部分 15 分钟(每题约 90 秒)→ 第二部分 10 分钟 → 第三部分 25 分钟(每题约 8 分钟,推导题宁慢勿跳步)→ 第四部分 8 分钟 → 留 2 分钟只做一件事:回头看第一部分的十条判断里有没有只写了对错的。
阅卷口径(先读,能省不少分)
- 判断必须带机制词:写「错」不给分;写「错,因为 softmax 沿键维归一化,按查询维会改变语义」才拿满。常见机制词有:连乘雅可比、谱半径、加法通道、键维、−∞、置换等变、中间显存、掩码族、总参数 vs 激活参数。
- 形状先行:凡涉及矩阵乘法与显存的推导,先把每个张量的形状(或字节数)写出来再动手;跳过形状核对的答案从「链条完整」里扣分。
- 前提不能省:说「dk」必须跟上「独立零均值单位方差」的假设;说「RoPE 只依赖相对位移」必须跟上「缩放前分数」与「不承诺外推」。
- 工程题给判据:凡涉及取舍(显存、采样、路由、位置编码),必须写出验证方式与失败判据,否则第四部分每题上限 6 分。
- 开放题四件套:方案 + 理由 + 失败判据 + 验证计划,缺一项扣 2 分。
判断对错,并给出一句话理由或反例。
1. batch 内把序列 pad 到等长是必要的;pad 位置的损失不屏蔽也没有关系,因为求平均时它们会被自然摊薄。
解答
错。 pad 位置既不是数据也不该产生梯度;不屏蔽会让模型花容量学「预测 pad」,并把损失均值拉向容易的位置——序列任务里最常见的隐性偏差来源(2.1.6)。给分:判断 1 分 + 理由 2 分(须提到「pad 位置产生梯度 / 污染损失统计」)。
2. 因为 RNN 的参数量与序列长度无关,所以它天然能处理任意长序列,不需要其他手段。
解答
错。 「参数与 T 无关」只保证形状上能接住任意长度(一致性),不保证学得动:梯度要穿过 T 次状态转移(连乘 ⇒ 消失 / 爆炸),而且所有历史必须压进固定 dh 维状态(有损摘要)。长序列还需要门控、裁剪、合理的窗口切分与初始化(定理 2.2.1、定理 2.2.3)。给分:判断 1 分 + 理由 2 分(须区分「形状可接」与「可训练 / 可记忆」)。
3. LSTM 的状态是一对 (ht,ct);框架的 output 里只有各步 h,cn 单独返回。
解答
对。 ct 是内部长期记忆(不对外输出),ht=ot⊙tanh(ct) 是读出部分;接口上 nn.LSTM 返回 (output, (h_n, c_n)),做状态传递或检查点恢复时两个都要带上(定义 2.3.1、2.3.8 错误 3)。给分:判断 1 分 + 理由 2 分(须指出 c_n 不在 output 里)。
4. 因果掩码必须在 softmax 之前加入。
解答
对。 掩码要把未来位置的权重精确置零,只有 −∞ 经 exp 之后才是 0;加在 softmax 之后只是把权重改小、行和不再为 1、输出尺度被破坏。另外要用 −∞ 或该 dtype 的 finfo.min(加 0 等于不掩码),并处理「整行全被掩码」时的 NaN(定义 2.4.5)。给分:判断 1 分 + 理由 2 分(须给出「−∞ ⇒ 精确置零」或「行和」其中一条)。
5. 在 d 与序列长度都固定时,把多头注意力的头数 H 从 8 增到 32,参数量不变。
解答
对。 每头三个投影共 3ddh,H 头合计 3d(Hdh)=3d2,加 WO 的 d2 与偏置 4d,得 4d2+4d——与 H 无关(定理 2.5.1)。但参数量相同不等于表达相同:H 改变的是归纳偏置,代价是 dh=d/H 变小与 reshape / 转置的访存开销上升。给分:判断 1 分 + 理由 2 分(须写出 4d2 的来历或指出代价)。
6. 某个位置在某一行的注意力权重是 0.9,因此它对输出的贡献一定最大。
解答
错。 输出是 PV:权重只决定取多少,取到的内容由 V 的行决定(权重与贡献之间隔着 V);残差与后续层会稀释该头的结果;而且 softmax 权重之和恒为 1,一个位置上升必然压低其他位置——「权重高」可能是「别的候选被削弱」的结果(2.4.7)。给分:判断 1 分 + 理由 2 分(须给出「隔着 V」或「归一化耦合」之一)。
7. FlashAttention 是精确注意力,并且它的 FLOPs 与标准注意力相同。
解答
对。 它用分块 + 在线 softmax(运行最大值与指数和的重缩放递推)把中间矩阵留在片上内存,输出与整块 softmax 数学等价(差别只有浮点舍入,故要求 FP32 累积统计量);乘加次数 4BHT2dh 不变——省的是 T×T 矩阵的 HBM 读写与存放(定理 2.6.4)。给分:判断 1 分 + 理由 2 分(须同时提到「等价」与「FLOPs 不变」)。
8. RoPE 让注意力分数只依赖相对位移,所以训练长度之外的位移同样可靠。
解答
错。 内积只依赖相对位移是表示层面的性质(⟨Rmq,Rnk⟩=⟨q,Rn−mk⟩,定理 2.6.3);外推时高频维度的相位会绕圈(混叠),分数分布相对训练区间系统性偏移,扩大上下文通常要额外做位置插值 / 频率缩放。「公式成立」不等于「训练后会外推」。给分:判断 1 分 + 理由 2 分(须提到相位混叠或「表示 ≠ 学习保证」)。
9. KV cache 的显存随批大小 B 与上下文长度 T 线性增长,随键值头数 nkv 线性增长;GQA 把每个 token 的缓存按 H/nkv 下降。
解答
对。 公式为 2LBTnkvdh×2 字节(FP16),三项都是线性;GQA 让每 g 个查询头共享一组 KV(nkv=H/g),缓存与读取带宽按 g 倍下降,质量损失通常很小——这是 2023 年以来开源大模型的常见默认(方法 2.5.3、方法 2.6.2)。给分:判断 1 分 + 理由 2 分(须给出公式或 H/nkv 的来源)。
10. O(T) 的线性注意力 / SSM 在任何序列长度上都比 O(T2) 的稠密注意力更快。
解答
错。 渐近阶只描述大 T 行为:稠密注意力是矩阵乘(GPU 最擅长的算子),而扫描 / 逐元素 / 状态读出类实现常是访存受限的;在中小 T 上线性方案更慢是常见现象,只有 T 远大于某个由实现与硬件决定的交叉点,渐近优势才兑现(2.7.11 第 6 条、例 2.7.1)。任何「线性更快」的论断都必须附上 T、硬件与实现。给分:判断 1 分 + 理由 2 分。
11. 某模型在留出集上的平均交叉熵为 1.8 nat。(a) 它的困惑度是多少(保留两位小数)?(b) 若词表 V=50,均匀分布基准的交叉熵与困惑度各是多少?(c) 这个 PPL 说明什么、不说明什么?
解答
(a) PPL=e1.8≈6.05。(b) 均匀分布下 H=ln50≈3.912、PPL=50;6.05≪50 说明模型明显好于随机猜测。(c) 说明「给定真实前缀,下一个 token 的平均不确定性约等于 6 个等概率候选」;不说明生成质量、不说明自由跑时误差不会累积——困惑度只与「给定真实前缀的一步预测」有关,与采样策略无关(定理 2.8.1、2.8.6)。给分:(a) 1 分;(b) 1 分(两项各 0.5);(c) 2 分(须同时写出「说明」与「不说明」)。
12. 以「跨 n 步的梯度衰减到 10−7 以下视为被吞掉」为判据,求单步伸缩率 ρ=0.95 与 ρ=0.99 的有效记忆跨度 n⋆;并说明 ρ=0.98 与 0.99 在 1000 步尺度上的差别。
解答
n⋆=log10ρ−7:ρ=0.95⇒n⋆≈314 步;ρ=0.99⇒n⋆≈1604 步。1000 步尺度上:0.981000=10−8.77≈1.7×10−9(已在地板之下),而 0.991000=10−4.36≈4.3×10−5(仍有约 0.004%,比前者高四个数量级)——门值每靠近 1 一点点,记忆跨度就成倍拉长,这也是 定理 2.3.1 说「门值离 1 有多远决定它能记多久」的算术含义。给分:两个 n⋆ 各 1 分 + 量级对比 2 分。
13. 取 dx=100、dh=200:(a) 写出循环单元的「基准块」大小并算出朴素 RNN、GRU、LSTM 的参数量(含单组偏置);(b) 用框架实现(每个门各挂 bias_ih 与 bias_hh)数值会变成多少?倍数是否改变?
解答
(a) 基准块 dhdx+dh2+dh=200×100+200×200+200=20,000+40,000+200=60,200;朴素 RNN 60,200、GRU 3×60,200=180,600、LSTM 4×60,200=240,800(倍数 1:3:4)。(b) 每门再多一组 dh=200 的偏置:60,400 ⇒ RNN 60,400、GRU 181,200、LSTM 241,600;倍数仍是 3 与 4,差别只在偏置项(例 2.3.1、方法 2.3.1)。给分:(a) 3 分(基准块 1 分 + 三个数各约 0.67);(b) 1 分。
14. L=32 层、H=32 头、dh=128、批 B=4、上下文 T=16384、FP16。(a) 写出 KV cache 的算式并算 MHA 的大小;(b) GQA(每 4 个查询头共享 1 组,nkv=8)与 MQA(nkv=1)各是多少?
解答
(a) 2⋅L⋅B⋅T⋅nkv⋅dh×2 字节 =2×32×4×16384×32×128×2=3.44×1010 字节 =32 GiB。(b) GQA:nkv 从 32 降到 8,缓存按 4 倍下降到 8 GiB;MQA:nkv=1,1 GiB。对照:KV cache 与 B、T、nkv 都线性相关,而分数矩阵(BHT2)与 nkv 无关——这正是 GQA 治第三笔账、不治第一笔账的原因(方法 2.5.3、例 2.6.1)。给分:(a) 2 分(算式 1 + 数值 1);(b) 2 分(两档各 1)。
15. 某步的 logits 为 z=(3.0, 1.0, 0.0, −2.0)。(a) 写出 τ=1 的 softmax 分布(三位小数);(b) 取 top-p=0.9,给出核 S、重新归一化后的概率与被丢弃的质量;(c) 若把 τ 调大,同样的 p 下核会变大还是变小?为什么?
解答
(a) 指数项 (20.086, 2.718, 1.000, 0.135),分母 23.939 ⇒ p^=(0.839, 0.114, 0.042, 0.006)。(b) 降序累积:0.839、0.953(首次跨过 0.9,该候选保留)、0.994、1.000 ⇒ S={1,2};重归一化 (0.881, 0.119);丢弃质量 =1−0.953=0.047。(c) 变大:温度把分布摊平后,需要更多候选才能凑够同样的概率质量——核采样因此「模型确信时自动收窄、模型犹豫时自动放宽」(定义 2.8.3、定义 2.8.4、例 2.8.1)。给分:(a) 1 分;(b) 2 分(核 0.5 + 概率 1 + 丢弃质量 0.5);(c) 1 分。
16.(10 分) 取标量直觉 ht=tanh(wht−1+c)。(a) 推导 ∂ht/∂ht−n 并给出由 ∣w∣ 控制的界(写出每一步);(b) 取 ρ=0.95 与 ρ=1.05,填 n=10,50,100 的量级表;(c) 求出两者的「跨多少步」会分别跌破 10−7(衰减)与涨到 107(爆炸);(d) 用 (c) 的结果说明「裁剪治爆炸、门控治消失」分别改的是公式里的哪一项。
解答
(a) 由 zk=whk−1+c、hk=tanh(zk) 得单步雅可比 Jk=∂hk−1∂hk=wϕ′(zk);链式法则逐段相乘:
∂ht−n∂ht=k=t−n+1∏twϕ′(zk)=wnk∏ϕ′(zk) ⟹ ∂ht−n∂ht≤∣w∣n (tanh: ∣ϕ′∣≤1).
(b)
| ρ |
n=10 |
n=50 |
n=100 |
| 0.95 |
0.599 |
0.0769 |
5.92×10−3 |
| 1.05 |
1.63 |
11.5 |
131.5 |
(c) 衰减:n⋆=log100.95−7≈314 步;爆炸:log101.057≈169 步(中间量从 1 涨到 107)。
(d) 裁剪作用在更新之前:g←g⋅min(1,c/∥g∥),把爆炸方向的单步位移压回阈值内(ρ>1 那一侧的安全网),但它不改变连乘结构。门控改的是公式本身:把状态更新写成 ct=ft⊙ct−1+it⊙c~t,于是 ∂ct/∂ct−1=diag(ft)——既不含 W、也不含 ϕ′,且因子严格在 (0,1) 内(只衰减、不放大),并且「保留多久」成了可学、可条件化的门值(定理 2.2.3、定理 2.3.1、方法 2.2.2)。
评分:(a) 3 分(单步雅可比 1 + 连乘 1 + 界 1);(b) 2 分(两行各 1,数值错一处扣 0.5);(c) 2 分(两式各 1);(d) 3 分(裁剪 1 + 门控两项改动 2)。
17.(10 分) 取 dk=dv=2、T=3:
Q=K=120101,V=10050105.
(a) 写出分数矩阵 S=QKT;(b) 写出 S/dk 与逐行 softmax 后的 P(三位小数);(c) 求输出 O=PV,并解释为什么第一行恒为 (5,5);(d) 若不缩放,第 1、2 行的分布会怎样变化?
解答
(a) 每个查询分别与三行键做内积:
S=221240101.
(b) 2≈1.414,
2S=1.4141.4140.7071.4142.82800.70700.707,P≈0.4010.1870.4010.4010.7680.1980.1980.0450.401.
(以第 1 行为例:e1.414=4.113、e0.707=2.028,分母 4.113+4.113+2.028=10.255,故 4.113/10.255=0.401。)
(c)
O≈5.0002.0946.0175.0007.9063.983.
第一行恒为 (5,5) 不是巧合:q1=(1,1) 与 k1=(1,1)、k2=(2,0) 的内积相同(都是 2),与 k3=(0,1) 的内积是 1,因此该行权重必形如 (a,a,b) 且 2a+b=1;而值向量的前两行之和恰好是第三行的两倍((10,0)+(0,10)=2(5,5)),于是
av1+av2+bv3=2av3+bv3=(2a+b)v3=v3=(5,5).
输出被强制坍缩到 v3,与 a 取多少(也就是与温度)无关——这正是 例 2.4.1 里「键高度相关时权重怎么变都不改变输出」的同一现象。
(d) 不缩放时第 1 行变为约 (0.422,0.422,0.155)、第 2 行变为约 (0.117,0.867,0.016)——分布更尖锐(第 2 行的最大权重从 0.768 升到 0.867)。本例 dk=2 差异还不大;dk=512 时分数标准差约 22.6,softmax 会被推到接近 one-hot、梯度随之消失(定理 2.4.1)。
评分:(a) 2 分;(b) 2 分(缩放 1 + softmax 1,逐行错一处扣 0.5);(c) 4 分(数值 2 + 对称性解释 2);(d) 2 分(数值 1 + 与 dk 的联系 1)。
18.(10 分) L=32、H=32、dh=128、B=1、FP16。(a) 写出长上下文三笔账的公式与各自对 T 的增长阶;(b) 求 T=8192→65536 时三笔账的具体数值(T 乘 8,各涨几倍);(c) 指出哪一笔最先撞墙、为什么;(d) 三种手段(不物化中间矩阵 / KV 压缩 / 序列并行)各治哪一笔,各自的代价是什么?
解答
(a) ① 分数 / 权重矩阵(单层、若物化):元素数 B⋅H⋅T2、显存 BHT2×2 字节,O(T2);② 注意力 FLOPs(前向):≈4BHT2dh,O(T2d);③ KV cache(整模型、推理):2LBTnkvdh×2 字节,O(T)(常数大)。
(b) 以 T=8192 为基准(①=4 GiB、②=1.1 TFLOP、③=4 GiB,见 方法 2.6.1):T 乘 8 ⇒ ① 与 ② 各乘 82=64,即 ① =256 GiB、② =70.4 TFLOP;③ 只乘 8,即 32 GiB。
(c) 最先撞墙的是①(单层分数矩阵的显存):它是 O(T2) 且 T=65536 时单层就 256 GiB,远超单卡容量;紧随其后的是 ③(KV cache,推理时随 B 继续放大,长上下文下可达权重显存的数倍)。显存问题先于算力问题出现:② 的 FLOPs 虽然也乘 64,但算力可以靠分块与并行流水填满,而显存是硬上限(2.6.6、例 2.6.1)。
(d) ① 不物化中间矩阵(FlashAttention / SDPA):治第①笔,代价是反向要重算块分数(FLOPs 不变,换的是访存与显存);② KV 压缩(GQA / MQA、KV 量化、滑窗与淘汰):治第③笔,GQA / 量化基本不改变可见范围、相对安全,而滑窗 / 淘汰永久丢弃信息、要按任务是否可以忍受「不能精确回忆远处内容」来选;③ 序列并行(Ring Attention / Ulysses / Megatron 序列并行):不减算术量,只摊薄每卡显存,代价是通信(环状 P2P、all-to-all)与整除约束(方法 2.6.2、2.6.9)。
评分:(a) 3 分(三式各 1,须含增长阶);(b) 3 分(三值各 1);(c) 2 分(指出①或③并说明「显存先于算力」);(d) 2 分(三种手段与代价各约 0.67)。
19.(10 分) 一个字符级音乐生成模型:训练损失降到 0.2(logV≈3.4),但自由跑生成三步之内开始复读,且把温度升高后重复率反而下降。请给出 (a) 诊断顺序(至少四步,每步附可观测判据);(b) 其中哪些步骤属于「模型没学好」、哪些属于「评估或采样口径问题」;(c) 失败判据;(d) 验证计划。
解答
(a) 诊断顺序与判据:① 分离两种模式——同时报告 teacher-forced 损失与自由跑损失的差值,差值大小就是 exposure bias 的量级(判据:自由跑损失显著高于训练损失);② 查掩码与错位——若有 Transformer 分支,关掉因果掩码重训一次对比(判据:损失异常低而生成崩坏);确认标签是「用 xt 的输出预测 xt+1」(写成预测自己时损失降得异常快、生成只会复读);③ 查过拟合——比较训练集与留出集 PPL(判据:留出集 PPL 先降后升或远高于训练集,同时重复率上升);④ 查采样组合——固定初始片段,只改一个参数各生成三段(判据:τ 过小 + 强截断直接制造复读;把 τ 调到 0.8∼1.2、top-p∈[0.9,0.95] 后重复率应下降而音高分布仍接近训练集);⑤ 查窗口长度——把窗口从 16 调到 64(判据:主题再现开始出现,说明之前只是学不到段落级结构)。
(b) 属于模型 / 训练的是 ①②③⑤(掩码、标签配对、过拟合、序列长度);属于评估或采样口径的是 ④,以及「用训练集 PPL 选模型」「只报 teacher-forced 损失」这两类报告习惯(2.8.7 第 6、7、8、9 条)。
(c) 失败判据:① 自由跑损失与训练损失差距持续扩大(exposure bias 主导);② 调好采样参数后重复率仍高于训练集自身的 n-gram 基线;③ 留出集 PPL 与生成质量同时恶化(过拟合已发生);④ 窗口加长后主题再现仍不出现(长程结构确实没学到)。
(d) 验证计划:每次只改一个变量(掩码 / 窗口 / 采样),固定种子与初始片段各生成三段并盲听对比;报告三种温度下的重复率、音高分布距离与留出集 PPL,并附均匀分布基准 logV 与训练集自身的 n-gram 基线(2.8.6、定理 2.8.1)。
评分:(a) 4 分(四步以上、每步有判据);(b) 2 分(分类正确);(c) 2 分(可测量);(d) 2 分(单变量 + 基线对照)。
20.(10 分) 同事把某个注意力头可视化后说:「这个头专门盯着句首 token,所以模型在做句法分析。」请给出 (a) 你会要求补充的实验证据(至少四条,写清每条看什么);(b) 每条证据的失败判据;(c) 一个可在小规模上落地的验证方案。
解答
(a) 需要补充的证据:① 消融——屏蔽该头(输出置零或把它从 WO 的对应块里移除)后,句法敏感任务(主谓一致、依存距离)的指标是否显著下降?② 跨初始化稳定性——换 2∼3 个随机种子重训,同样「盯句首」的模式是否重现(若每次重训模式都不同,说明它是可替代的冗余);③ 与梯度归因对照——用输入梯度 / 输入 × 梯度(或归因积分)看该位置是否真的对输出有主导贡献;④ 合成任务验证——构造有可判定因果结构的任务(例如「必须复制第 3 个 token」「按括号配对」),看该头是否真的承担所声称的功能;⑤(可选)权重 ≠ 贡献的检查——该位置的 V 行本身是否接近零、或在下游被投影到「无用子空间」(2.4.7)。
(b) 失败判据:① 消融后指标变化在噪声范围内(该头可被替代,不足以承载唯一解释);② 跨种子的头功能不一致(模式不稳定);③ 梯度归因显示该位置贡献占比很小、或与权重排序不一致;④ 合成任务上该头表现与随机头无差别;⑤ 权重高但 V 行近乎为零(贡献远小于权重)。
(c) 验证方案:在一个小 Transformer(如 2.8.3 的 TinyTransformer)上跑一个可判定的合成任务(复制 / 排序 / 括号配对),用 3 个种子各训练一次;对每个头做消融并记录指标;把「权重图 — 梯度归因 — 消融影响」三张表并列,只有三者一致时才接受「该头承担某功能」的说法。要点是:注意力权重是有用的调试信号,不是解释证据(2.4.7、2.6.1 的诊断口径)。
评分:(a) 4 分(四条各 1);(b) 3 分(判据可判定);(c) 3 分(合成任务 + 多种子 + 三方对照)。
| 部分 | 题量 | 分值 | 给分要点 |
| 一 · 概念判断 | 10 | 30 | 判断 1 分 + 理由 / 反例 2 分;只写对错得 1 分;理由缺「机制词」按半对给 1 分 |
| 二 · 填空简答 | 5 | 20 | 结果正确 2 分 + 关键说明 2 分;数值或形状错一处扣 0.5–1 分 |
| 三 · 推导计算 | 3 | 30 | 首行 / 公式 3 分 + 链条完整 4 分 + 前提与讨论 3 分;只写结论最多 3 分 |
| 四 · 开放题 | 2 | 20 | 方案具体 4 分 + 判据可测量 4 分 + 验证计划 2 分;缺失败判据上限 6 分 |
段位换算:≥90 优秀(可以给同学讲清整讲主线);75−89 良好(能独立写序列模型与显存估算);60−74 及格(需补推导与工程账);<60 回到对应节的「即时自测」与习题集重做。
自评纪律:① 判断理由必须包含关键机制词(如「连乘雅可比」「谱半径」「键维」「置换等变」「掩码族」「总参数 vs 激活参数」),否则按半对给 1 分;② 推导题凡跳过形状或字节数核对的,从「链条完整」里扣 1 分;③ 工程题只写结论不写判据的,该题上限 6 分;④ 凡出现「O(T) 一定更快」「MoE 省显存」「RoPE 无限外推」这类无条件断言,倒扣 1 分。
最后一句:本卷的目的不是打分,而是把你以为会的地方暴露出来。凡有「写得出来但讲不清机制」的题,回到对应节的 intuition 与 回忆卡当天再练一遍;连续两轮仍错的条目,写进勘误与补注第四节的待核实条目单独跟踪。