-
Notifications
You must be signed in to change notification settings - Fork 70
Expand file tree
/
Copy pathquiz.json
More file actions
64 lines (64 loc) · 4.48 KB
/
Copy pathquiz.json
File metadata and controls
64 lines (64 loc) · 4.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
{
"questions": [
{
"stage": "pre",
"question": "你的模型输出形状为 (N, C) 的原始 logits。你写了 `loss = cross_entropy(softmax(logits), y)`。哪里出错了?",
"options": [
"没问题——这是正确的 API",
"cross_entropy 内部会再次应用 softmax,于是你实际上计算了 softmax(softmax(logits)),产生近乎均匀的概率和无用的梯度",
"cross_entropy 会因为形状抛出 ValueError",
"准确率恰好下降 1/C"
],
"correct": 1,
"explanation": "PyTorch 的 cross_entropy 期望原始 logits——它在内部融合了 log_softmax 和 NLL 以保证数值稳定。先应用 softmax 会得到 softmax(softmax(x)),把 logits 压向均匀,使梯度几乎为零。训练损失在几步内看起来还合理,然后就停滞了。永远要传入原始 logits。"
},
{
"stage": "pre",
"question": "你评估一个 10 类分类器,得到 92% 的准确率。类别 0 有 9,000 个样本;类别 1-9 共享 1,000 个样本(各约 111 个,总计 10,000 个)。这个总数掩盖了什么?",
"options": [
"什么都没掩盖——准确率就是准确率",
"模型可能对每个输入都预测类别 0 也仍能得 90%(9000/10000);剩下的 2% 可能来自任何其他类别。每个类别的精确率/召回率才能告诉你真实情况",
"验证损失算错了",
"模型一定在过拟合"
],
"correct": 1,
"explanation": "在 9000/1000 的划分下(总计 10,000 个样本、90/10 的不平衡),总是预测多数类就能得到 9000/10000 = 90% 的准确率。92% 这个数字可能掩盖了九个少数类各自约 20% 的准确率。每个类别的精确率、召回率、F1 和混淆矩阵才是揭示这一点的诊断手段,这就是为什么仅凭聚合准确率永远不足以证明可以上线一个分类器。"
},
{
"stage": "post",
"question": "Mixup 用插值后的软目标(如 lambda * y_i + (1-lambda) * y_j)取代独热标签。这为什么有助于泛化?",
"options": [
"它使有效批大小翻倍",
"模型被迫在类别之间产生平滑的预测,而不是去记忆硬性的独热目标,这同时改善了校准度和测试准确率",
"它让你能用更大的学习率训练",
"它保证训练损失为零"
],
"correct": 1,
"explanation": "针对硬性独热目标训练会把每个训练点处的 logits 推得任意尖锐,这损害校准度并诱发过拟合。Mixup 对输入和标签的凸组合迫使分类器在训练点之间表现平滑,这对自然图像类别是一个合理的先验,能在不增加数据的情况下持续改善测试准确率。"
},
{
"stage": "post",
"question": "在 CIFAR-10 上你把 `RandomCrop(32, padding=4, padding_mode='zeros')` 换成 `padding_mode='reflect'`。为什么这里 reflect 更好?",
"options": [
"reflect 填充更快",
"零填充会产生模型会学着依赖的硬性黑边;reflect 填充镜像边缘像素,使增强后的裁剪看起来像自然照片",
"reflect 填充改变了输出尺寸",
"批归一化要求使用 reflect 填充"
],
"correct": 1,
"explanation": "零填充的裁剪有可见的黑边,会把关于裁剪位置的信息泄漏进特征。网络可以学会去看角落,从而隐式地撤销这次增强。reflect 填充镜像真实内容,因此每次裁剪看起来仍像自然图像,网络无法在增强上作弊。"
},
{
"stage": "post",
"question": "你训练了一个分类器,混淆矩阵显示大多数错误是把类别 3 预测成类别 5、把类别 5 预测成类别 3。最有影响力的下一步是什么?",
"options": [
"在所有类别上均匀地增加更多训练数据",
"增大批大小",
"查看一批令模型混淆的类别 3 和类别 5 图像;这两个类别可能确实存在歧义、被标错,或在视觉上相似,需要有针对性的增强或重新标注训练集",
"把 SGD 换成 Adam"
],
"correct": 2,
"explanation": "混淆矩阵集中在某一对非对角元素上,意味着失败模式是特定的。正确的做法是检查那些图像:你往往会发现标错的数据、几乎重复的类别,或模型尚未学到的某种简单不变性。当失败如此局部化时,一刀切式的改动(更多数据、新优化器)很少有帮助。"
}
]
}