Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 1 讲 · 综合自测卷(100 分 · 建议 60 分钟)

闭卷计时;做完先按文末评分标准自评,再按漏点定位表回查。 范围:本讲 1.1–1.7 与导览。题目与习题集尽量不重叠;凡概念判断题,只写对错不给分,必须给理由或反例。

时间分配建议:第一部分 1212 分钟(每题约 7070 秒)→ 第二部分 1010 分钟 → 第三部分 2525 分钟(每题约 88 分钟,推导题宁慢勿跳步)→ 第四部分 1313 分钟(每题约 66 分钟,写清四项)。留最后 22 分钟只做一件事:回头看第一部分的十条判断里有没有只写了对错的。

阅卷口径(先读,能省不少分)
  • 判断必须带机制词:写「错」不给分,写「错,因为判决面仍是同一个超平面」才拿满。常见的机制词有:超平面、平移自由度、常数熵项、逐元素缩放、中间结果复用、running statistics、插值阈值。
  • 形状先行:凡涉及批量、矩阵乘法的推导,先把每个张量的形状写出来再动手——跳过形状核对的答案从「链条完整」里扣分。
  • 前提不能省:说「通用逼近保证……」,必须跟上「存在性 / 紧集 / 连续函数」这些条件;说「线性缩放规则」,必须跟上「噪声相对稳定 / 步数足够」。
  • 工程题给判据:凡涉及取舍(损失、优化器、归一化、批大小),必须写出验证方式与失败判据,否则第四部分上限 6 分。
  • 开放题四件套:方案 + 理由 + 失败判据 + 验证计划,缺一项扣 2 分(第四部分每题 10 分)。

第一部分 · 概念判断(10 题 × 3 分 = 30 分)

1. 把一个 LL 层全连接网络的每一层都去掉偏置(b≡0b\equiv0),网络表达的函数族不变。

解答

错。 去掉偏置后超平面被迫过原点(每层都是过原点的线性映射),平移自由度丢失;例如「(0,0)(0,0) 归负类、其余归正类」这类问题立刻不可分。给分:判断 1 分 + 理由 2 分(须提到「平移自由度 / 过原点」)。

2. 一次前向 + 一次反向的代价就能得到全部参数梯度,因此反向传播完全不消耗额外显存。

解答

错。 代价部分正确(这正是反向模式自动微分的价值,定理 1.5.2),但反向传播必须保存前向的中间结果(各层激活、门控值),激活显存约 O(L⋅B⋅d)O(L\cdot B\cdot d)——这是训练显存远大于推理显存的主因。缓解手段:激活重计算、混合精度、融合算子(1.5.2 的「内存换速度」)。给分:判断 1 分 + 理由 2 分(指出「需保存中间结果」)。

3. 学习率设得越小,训练越稳定,最终精度一定越高。

解答

错。 学习率过小会让训练「慢得等在原地」,在有限预算内反而停在更差的解;而且它需要与批大小、动量、warmup 联动(例如加动量后有效步长放大 1/(1−β)1/(1-\beta),见 命题 1.6.1)。稳定性的正确理解是「η≤1/β\eta\le1/\beta 是硬上限、下降保证是局部的」(定理 1.5.1),不是越小越好。给分:判断 1 分 + 理由 2 分(须给出「不是越小越好」的依据)。

4. 一个网络在训练集上达到 100% 准确率、验证集 60%,这一定说明模型容量过大。

解答

错。 训练高、验证低确实指向泛化问题,但成因可能是估计误差(数据不足 / 正则不足)也可能是评估问题(数据泄漏、验证集分布不同、指标口径不一致)。按 推论 1.7.1 的框架,应先确认划分与评估流程,再谈容量。给分:判断 1 分 + 理由 2 分(提到「先排除泄漏 / 评估流程」优先)。

5. 交叉熵与 KL 散度都能做分类的损失函数,但两者在优化上并不等价。

解答

错。 在同一数据集上 H(p,q)=KL(p∥q)+H(p)H(p,q)=\mathrm{KL}(p\|q)+H(p),而目标分布的熵 H(p)H(p) 与模型参数无关,故 arg⁡min⁡H(p,qθ)=arg⁡min⁡KL(p∥qθ)\arg\min H(p,q_\theta)=\arg\min\mathrm{KL}(p\|q_\theta),两者优化等价(定理 1.4.3)。注意例外:跨数据集比较绝对值时不可比(H(p)H(p) 不同)。给分:判断 1 分 + 理由 2 分(须给出关系式或「常数熵项」)。

6. 在 Adam 里把 L2 正则加进损失,与在 AdamW 里设置同样的权重衰减,训练得到的解完全相同。

解答

错。 L2 项进入梯度后被逐元素除以 v^t+ϵ\sqrt{\hat v_t}+\epsilon,衰减强度取决于各坐标的梯度历史;AdamW 的衰减是更新后的独立一步,对所有坐标施加同一相对衰减 ηtλ\eta_t\lambda。二者在 SGD 下才严格等价(定理 1.6.1)。给分:判断 1 分 + 理由 2 分。

7. 因为 BatchNorm 与 LayerNorm 都是在做「归一化」,所以在 Transformer 里用 BN 替换 LN 不会带来问题。

解答

错。 二者的差别在统计量覆盖的集合 S\mathcal S:BN 跨批 + 空间统计,与批大小耦合、变长序列上统计量会漂移、推理 batch=1 时只能用 running statistics,造成训练-推理不一致;LN 对每个 token 独立统计,与批大小、序列长度都无关且训练推理一致。结构约束决定选择,不是「效果差不多」(定理 1.7.2、1.7.4)。给分:判断 1 分 + 理由 2 分(须给出至少一条结构理由)。

8. 既然「参数越多越容易过拟合」,那模型效果不好时应当优先减小参数量。

解答

错。 双下降说明参数量本身既不是过拟合的充分条件也不是必要条件(定理 1.7.3):越过插值阈值后,梯度下降的隐式偏好(范数小、平滑的解)反而让测试误差二次下降。效果不好应先按「近似 / 估计 / 优化」三类误差分类,再决定加容量还是加正则。给分:判断 1 分 + 理由 2 分(提到双下降或隐式偏好)。

9. 梯度裁剪能保证训练不发散,因此开了裁剪就可以放心把学习率调大。

解答

错。 裁剪限制的是单步位移的上限(g←g⋅min⁡(1,c/∥g∥2)\boldsymbol g\leftarrow\boldsymbol g\cdot\min(1,c/\lVert\boldsymbol g\rVert_2)),它防的是长程梯度尖峰、低精度溢出前兆与异常样本;它不改变损失曲面的曲率,因此不能把「η≤1/β\eta\le1/\beta」这个上限抬高。学习率过大仍然会在裁剪下震荡(1.6.6、定理 1.5.1)。给分:判断 1 分 + 理由 2 分。

10. 用测试集做早停是标准做法,因为测试集最能反映真实性能。

解答

错。 测试集只能用于最终报告且只应使用一次;用它做早停等于把测试集信息泄漏进模型选择,报告指标系统性偏高(定义 1.7.1、1.7.8 错误 1)。早停应使用验证集,并保存验证损失最佳的权重。给分:判断 1 分 + 理由 2 分。

第二部分 · 填空与简答(5 题 × 4 分 = 20 分)

11. 设计输入 x∈R4\boldsymbol x\in\mathbb R^{4}、隐藏层 6 个单元、输出 2 个 logits 的单隐藏层网络(含偏置):不需要运行代码,写出每一层的输出形状与该层参数量(B=8B=8),并给出总参数量。

解答

输入 8×48\times4;Linear(4,6) → 8×68\times6,参数 4×6+6=304\times6+6=30;激活(逐元素)→ 8×68\times6,参数 00;Linear(6,2) → 8×28\times2,参数 6×2+2=146\times2+2=14。总参数量 =44=44,与 BB 无关(方法 1.2.1)。给分:形状 2 分(错一处扣 1)+ 参数量与总数 2 分。

12. 写出单个神经元的前向公式,并说明 w\boldsymbol w、bb、ϕ\phi 各控制什么;再说明为什么层数一多就必须显式加入 ϕ\phi。

解答

z=wTx+bz=\boldsymbol w^{\mathrm T}\boldsymbol x+b(预激活)、a=ϕ(z)a=\phi(z)。ww 管各输入的重要性、bb 管激活门槛(平移自由度)、ϕ\phi 管输出形态与值域。层数一多必须加 ϕ\phi:若 ϕ\phi 为恒等,则 LL 层复合仍是仿射映射 x∏lW(l)+⋯\boldsymbol x\prod_l W^{(l)}+\cdots,表达能力与单层相同而参数量更多(定理 1.2.1)。给分:公式与三符号 2 分 + 退化论证 2 分。

13. 某 8 层网络全部使用 Sigmoid 隐藏激活,反向传播中梯度跨过这 8 层时至少被乘上什么因子?给出数值量级;并说明这个上界为什么与数据、学习率无关。

解答

至少乘 ∏l=18max⁡zσ′(z)=(1/4)8=1/65536≈1.5×10−5\prod_{l=1}^{8}\max_z\sigma'(z)=(1/4)^{8}=1/65536\approx1.5\times10^{-5}(定理 1.3.1)。与数据 / 学习率无关的原因:该上界只来自 σ′(z)=σ(z)(1−σ(z))≤1/4\sigma'(z)=\sigma(z)(1-\sigma(z))\le1/4 这一结构性不等式(在 z=0z=0 取等),而链式法则要求逐层连乘;实际梯度还会因权重谱范数与输入尺度不同而更小或更大,但上界不变。给分:因子 2 分 + 数值 1 分 + 结构性理由 1 分。

14. 写出 Adam 与 AdamW 的更新式各一行,并用一句话说明二者的差别在 SGD 下为什么消失。

解答

Adam(含 L2):梯度取 gt+λθt−1\boldsymbol g_t+\lambda\theta_{t-1} 后 θt=θt−1−ηm^tv^t+ϵ\theta_t=\theta_{t-1}-\eta\dfrac{\hat{\boldsymbol m}_t}{\sqrt{\hat{\boldsymbol v}_t}+\epsilon};AdamW:θt=θt−1−ηtm^tv^t+ϵ−ηtλθt−1\theta_t=\theta_{t-1}-\eta_t\dfrac{\hat{\boldsymbol m}_t}{\sqrt{\hat{\boldsymbol v}_t}+\epsilon}-\eta_t\lambda\theta_{t-1}。SGD 下差别消失:SGD 的更新是 −ηg-\eta\boldsymbol g,没有 v^\sqrt{\hat v} 这个逐元素缩放,两种写法都化简为 θ←(1−ηλ)θ−ηg\theta\leftarrow(1-\eta\lambda)\theta-\eta\boldsymbol g,严格等价(定理 1.6.1)。给分:两式各 1 分 + SGD 等价性 2 分。

15. 某 ReLU 网络每层宽度 d=256d=256,若所有权重都用 std=0.01 的正态初始化,预判前向激活尺度会怎样变化?应改用哪个公式、增益是多少(给出该层参数的标准差)?

解答

每层方差增益约 d σw2=256×10−4=2.56×10−2d\,\sigma_w^2=256\times10^{-4}=2.56\times10^{-2},即每层衰减约 39 倍,多层叠加后前向信号下溢、反向梯度同量级衰减。应改用 Kaiming:Var⁡(w)=2/din=2/256=7.8125×10−3\operatorname{Var}(w)=2/d_{\text{in}}=2/256=7.8125\times10^{-3},即 std ≈ 0.0884(nn.init.kaiming_normal_(w, nonlinearity='relu'))。给分:衰减因子与结论 2 分 + 公式与数值 2 分。

第三部分 · 推导与计算(3 题 × 10 分 = 30 分)

16.(10 分) 三层 MLP(L=3L=3,批大小 BB),记 Z(l)=A(l−1)W(l)+1b(l)T\boldsymbol Z^{(l)}=\boldsymbol A^{(l-1)}W^{(l)}+\mathbf 1\boldsymbol b^{(l)\mathrm T}、A(l)=ϕ(Z(l))\boldsymbol A^{(l)}=\phi(\boldsymbol Z^{(l)})。 (a) 写出 δ(3)\boldsymbol\delta^{(3)} 与 δ(2)\boldsymbol\delta^{(2)} 的表达式; (b) 写出 ∂L/∂W(2)\partial\mathcal L/\partial W^{(2)} 与 ∂L/∂W(1)\partial\mathcal L/\partial W^{(1)},并逐步核对形状; (c) 说明为什么只需要一趟反向就能得到全部三层的参数梯度。

解答

(a) 输出层:δ(3)=∂L∂A(3)⊙ϕ′(Z(3))∈RB×d3\boldsymbol\delta^{(3)}=\dfrac{\partial\mathcal L}{\partial\boldsymbol A^{(3)}}\odot\phi'(\boldsymbol Z^{(3)})\in\mathbb R^{B\times d_3};回传一层:δ(2)=(δ(3)W(3)T)⊙ϕ′(Z(2))∈RB×d2\boldsymbol\delta^{(2)}=\bigl(\boldsymbol\delta^{(3)}W^{(3)\mathrm T}\bigr)\odot\phi'(\boldsymbol Z^{(2)})\in\mathbb R^{B\times d_2}(激活的雅可比是对角矩阵,VJP 退化为逐元素乘)。

(b) ∂L∂W(2)=A(1)Tδ(2)\dfrac{\partial\mathcal L}{\partial W^{(2)}}=\boldsymbol A^{(1)\mathrm T}\boldsymbol\delta^{(2)},形状 (d1×B)(B×d2)=d1×d2(d_1\times B)(B\times d_2)=d_1\times d_2 ✓;∂L∂W(1)=A(0)Tδ(1)\dfrac{\partial\mathcal L}{\partial W^{(1)}}=\boldsymbol A^{(0)\mathrm T}\boldsymbol\delta^{(1)},其中 δ(1)=(δ(2)W(2)T)⊙ϕ′(Z(1))\boldsymbol\delta^{(1)}=\bigl(\boldsymbol\delta^{(2)}W^{(2)\mathrm T}\bigr)\odot\phi'(\boldsymbol Z^{(1)}),形状 (d0×B)(B×d1)=d0×d1(d_0\times B)(B\times d_1)=d_0\times d_1 ✓;偏置梯度一律沿批维求和 ∂L/∂b(l)=∑i=1Bδi:(l)\partial\mathcal L/\partial\boldsymbol b^{(l)}=\sum_{i=1}^{B}\boldsymbol\delta^{(l)}_{i:}(定理 1.5.3)。

(c) 因为误差信号是递推的:δ(l)\boldsymbol\delta^{(l)} 只依赖 δ(l+1)\boldsymbol\delta^{(l+1)},同一条链上每一层的参数梯度都能用已经算出的 δ(l)\boldsymbol\delta^{(l)} 与保存的前向激活相乘得到。反向模式一次传播给出对全部输入(全部参数)的导数,代价 O(m⋅图规模)O(m\cdot\text{图规模})、这里 m=1m=1(标量损失),所以一趟就够;前向模式则需要对每个参数各传播一次,即 PP 次(定理 1.5.2)。核心机制是中间结果复用——与动态规划同构。

评分:(a) 3 分(每式 1.5 分,须含输出层与回传两式);(b) 4 分(两式各 1.5 分 + 形状核对 1 分);(c) 3 分(递推依赖 1 分 + 代价对比 1 分 + 复用 / 动态规划 1 分)。

17.(10 分) 某层权重梯度矩阵为 G=(3.0−4.000)\boldsymbol G=\begin{pmatrix}3.0&-4.0\0&0\end{pmatrix}。 (a) 求 ∥G∥2\lVert\boldsymbol G\rVert_2; (b) 取裁剪阈值 c=2.0c=2.0,求裁剪后的梯度; (c) 若训练中从不触发裁剪,你会怎么处理?若频繁触发又说明什么? (d) 为什么说「裁剪只限制单步位移,不放宽学习率上限」?

解答

(a) ∥G∥2=32+(−4)2+0+0=5.0\lVert\boldsymbol G\rVert_2=\sqrt{3^2+(-4)^2+0+0}=5.0。

(b) 因子 min⁡(1, c/∥G∥2)=min⁡(1,0.4)=0.4\min(1,\ c/\lVert\boldsymbol G\rVert_2)=\min(1,0.4)=0.4,故裁剪后 G′=0.4G=(1.2−1.600)\boldsymbol G'=0.4\boldsymbol G=\begin{pmatrix}1.2&-1.6\\0&0\end{pmatrix},此时 ∥G′∥2=2.0\lVert\boldsymbol G'\rVert_2=2.0(恰好等于阈值)。

(c) 从不触发 → 可以去掉裁剪以节省一次全参数归约的开销(但要继续监控梯度范数,阈值应随训练规模变化重估)。频繁触发 → 说明阈值过小或学习率过大、也可能是数据里存在异常样本;应打印裁剪前的梯度范数(clip_grad_norm_ 的返回值)并对照损失曲线(1.6.6)。

(d) 因为裁剪改变的是这一步的位移上限,不改变损失曲面在当前位置的最大曲率;而步长的硬上限 η≤1/β\eta\le1/\beta 来自 β\beta-Lipschitz 光滑性(定理 1.5.1)。学习率仍过大时,裁剪只能把每步「压回阈值内」,参数会在谷底两侧来回震荡而无法收敛。

评分:(a) 2 分;(b) 3 分(因子 1.5 + 结果 1.5);(c) 3 分(两种情形各 1.5);(d) 2 分。

18.(10 分) 你把批大小从 256 放大到 40964096(学习率按某个规则调整),训练损失正常下降但验证指标反而变差。 (a) 写出本题适用的缩放规则并给出学习率倍数; (b) 列出该规则失效的三类情形,并各给一条判据; (c) 若沿用放大后的学习率,你会同时调整哪两个训练细节,为什么?

解答

(a) 线性缩放规则:批大小乘 kk 时 η′=kη\eta'=k\eta,这里是 k=4096/256=16k=4096/256=16,即学习率放大 16 倍,并通常同步加长 warmup(定理 1.6.2)。

(b) 三类失效情形与判据:① kk 过大(从 256 到 32768 这类跨度)——批内梯度噪声不再近似高斯,判据是改用平方根缩放(η′∝k\eta'\propto\sqrt{k})后曲线是否变好;② 各层参数 / 梯度尺度差异悬殊(深层网络,嵌入层与输出层可差一个数量级)——判据是打印逐层「参数范数 / 梯度范数」比,若相差一个数量级以上考虑 LARS / LAMB 式逐层缩放;③ 训练步数太少——线性缩放的推导要求步数足够多(二阶项可忽略),判据是延长训练后差距是否收窄(定理 1.6.2)。

(c) 至少调整:① warmup 长度(放大学习率后早期统计量更不可靠,需更长的采样时间,否则前几百步容易把参数打进坏区域);② 权重衰减 λ\lambda 与梯度裁剪阈值(λ\lambda 与批大小、训练轮数有关,不能跨配置照搬;裁剪阈值需重估,因为大批下梯度噪声更小、触发频率会变)。

评分:(a) 3 分(规则名 1 + 倍数 1 + 提到 warmup 1);(b) 4 分(三类各 1 分,判据各约 0.33 分,需可测量);(c) 3 分(两项各 1.5 分,须给理由)。

第四部分 · 开放题(2 题 × 10 分 = 20 分)

19.(10 分) 某二分类风控任务:正类(风险)占 0.8%0.8%,1212 万条样本,300300 个特征;团队过去只上报准确率。请给出:(a) 损失与输出层的选择及理由;(b) 指标与阈值选择流程;(c) 失败判据(至少三条,须可测量);(d) 验证计划。

解答

(a) 输出层用单个 logit + BCEWithLogitsLoss(二分类的标准配对,对应伯努利分布;注意不要把概率喂给 BCELoss,见 1.4.10 错误 7);若少数类的难分样本被淹没,改用焦点损失(γ=2\gamma=2,αt\alpha_t 逆频率起步)或类别权重。理由:0.8%0.8\% 正类率下「全判负」即有 99.2%99.2\% 准确率,损失必须直接作用在少数类的概率上(1.4.6)。

(b) 指标改为精确率 / 召回率 / F1 / AUPRC 并附正类占比;阈值不在训练中固定,在验证集上按业务代价扫「误报-召回曲线」选定(例如风控场景常取「召回 ≥0.85\ge0.85 时最小化误报」),只看训练损失无法判断阈值好坏(1.4.9)。

(c) 失败判据:① 验证召回率 <0.85&lt;0.85(先做阈值扫描排除「只是被默认阈值压住」);② 报出的准确率与基线(全判负的 99.2%99.2\%)差距 <0.5&lt;0.5 个百分点 → 该报告无信息量;③ 离线 AUPRC 与线上业务指标的排序不一致(离线更高而线上更差)→ 先查泄漏与口径,而不是调模型;④ 训练损失降到接近零而召回仍低 → 说明标签噪声或类别严重不可分,回到数据侧(方法 1.4.2 的「过拟合一小撮数据」检查)。

(d) 验证计划:按实体 / 时间分组划分(同一用户的多条记录必须同侧;时序数据按时间切分并留 gap);先做「打乱标签重训」泄漏探测;用三个随机种子报告均值与方差;预留一次性测试集做最终评估,并做一次线上样本与验证集的分布对比(方法 1.7.2)。

评分:(a) 2 分;(b) 3 分(指标 + 阈值流程各得一半);(c) 3 分(三条各 1 分,须可测量);(d) 2 分(分组划分 + 泄漏探测)。

20.(10 分) 你要在一个变长序列任务上替换现有归一化层(现用 BatchNorm),并说明运维影响。请给出:(a) 候选方案与选择理由;(b) 训练 / 推理行为差异的账;(c) 失败判据;(d) 验证计划。

解答

(a) 候选:LayerNorm(S\mathcal S 取同一批内样本、跨最后若干特征维)与 RMSNorm(去掉减均值与平移,只用均方根缩放)。理由:变长序列 + 变批 + 推理时 batch=1 的场景下,BN 沿批维统计在语义上不稳定甚至无定义(padding 会污染统计量),而 LN 类对每个 token 独立统计,与批大小、序列长度都无关(1.7.4)。

(b) 训练 / 推理的账:BN 需要累积 running statistics 并在推理时使用,训练期用当前批统计量 → 训练与推理行为不一致,且与批大小耦合;LN 类训练与推理完全一致,不需要额外状态、没有批大小依赖。可选 RMSNorm 的额外收益是省去一次减均值与一次求均值的通信(大模型里可感知),代价是缺少 re-centering——该结论依赖规模与实现,采用前需核实。

(c) 失败判据:① 替换后验证损失不下降或震荡 → 检查是否同步调了学习率(归一化改变可用步长上限,见 定理 1.5.1 与 1.7.4 的曲率论证);② 训练与推理的损失差异显著(用同一批数据在 train() / eval() 两种模式下前向对比)→ 说明切换后仍有状态残留或 Dropout 未关闭;③ 小批量(B≤8B\le8)下表现明显更差 → 说明还在依赖批统计量;④ 长序列上显存 / 速度退化超出预算 → 检查是否误用了带 running statistics 的实现。

(d) 验证计划:固定其他超参、只替换归一化层,做单变量对照(BN / LN / RMSNorm 三组同种子);每组报告验证损失曲线 + 训练-推理一致性检查 + 小批量下的稳定性;结论必须带上完整训练配置(否则不可复现,参见 1.7.5 的实操含义)。

评分:(a) 3 分(方案 + 结构理由);(b) 2 分(训练 / 推理差异);(c) 3 分(四条各约 0.75);(d) 2 分(单变量对照 + 一致性检查)。

评分标准

部分题量分值给分要点
一 · 概念判断1030判断 1 分 + 理由 / 反例 2 分;只写对错得 1 分
二 · 填空简答520结果正确 2 分 + 关键说明 2 分;形状 / 数值错一处扣 1 分
三 · 推导计算330首行或形状 3 分 + 链条完整 4 分 + 前提与讨论 3 分;只写结论最多 3 分
四 · 开放题220方案具体 4 分 + 判据可测量 4 分 + 验证计划 2 分

段位换算:≥90\ge90 优秀(可以给同学讲);75 ⁣− ⁣8975!-!89 良好(能独立写训练代码);60 ⁣− ⁣7460!-!74 及格(需补推导);<60&lt;60 回到对应节的「即时自测」与习题集重做。

自评纪律:① 判断理由必须包含关键机制词(如「超平面」「常数熵项」「v^\sqrt{\hat v}」「running statistics」),否则按半对给 1 分;② 推导题凡是跳过形状核对的,从「链条完整」里扣 1 分;③ 开放题只写方案不写失败判据的,第四部分上限 6 分。

漏点定位表

错题回去读立刻补做
1、21.1.4、1.5.2 的「内存换速度」习题集 A2、B1
3、11、18定理 1.5.1、1.6.6、定理 1.6.2习题集 C5、D3
4、8、10、19推论 1.7.1、定理 1.7.3、1.7.6 的数据泄漏清单习题集 C6、D2、D4
5、14、15定理 1.4.3、定理 1.6.1、方法 1.2.2习题集 B3、B6、C4
6、9定理 1.6.1、1.6.6习题集 C4、C5
7、13、20定理 1.7.2、定理 1.3.1、1.7.4习题集 B6、C3
12、16定理 1.2.1、定理 1.5.3、附录 C.1习题集 B1、B2、C2
17定义 1.5.4、1.6.6习题集 C5

最后一句:本卷的目的不是打分,而是把你以为会的地方暴露出来。凡有「写得出来但讲不清机制」的题,回到对应节的 intuition 与 回忆卡 当天再练一遍;连续两轮仍错的条目,写进勘误与补注第四节的待核实条目单独跟踪。