-
Notifications
You must be signed in to change notification settings - Fork 36
Expand file tree
/
Copy pathquiz.json
More file actions
64 lines (64 loc) · 4.34 KB
/
Copy pathquiz.json
File metadata and controls
64 lines (64 loc) · 4.34 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": "你为一个接近 ImageNet 分布的新任务准备了 500 张带标签图像。哪种方案最合理?",
"options": [
"从零训练一个 ResNet-50",
"冻结一个 ImageNet 预训练的主干网络,只训练一个新的线性头",
"用相同的大学习率微调每一层",
"忽略预训练权重;小数据集最好配小模型"
],
"correct": 1,
"explanation": "用 500 张图像,你没有足够的信号从零训练一个深层网络,也无法在不破坏预训练特征的情况下安全地端到端微调所有层。冻结主干、只训练一个新头(线性探针)直接利用预训练特征,是小型、近域数据集的标准做法。"
},
{
"stage": "pre",
"question": "为什么一个 ImageNet 预训练网络的早期卷积层能很好地迁移到医学图像,尽管 ImageNet 不包含 X 光片?",
"options": [
"PyTorch 会自动重新初始化早期层",
"早期层编码通用的视觉基元——边缘、方向、对比度——这些几乎在任何视觉领域都共享;只有后期层才特化到 ImageNet 类别",
"ImageNet 暗中包含医学数据",
"只有领域匹配时迁移才有效"
],
"correct": 1,
"explanation": "类 Gabor 滤波器和简单纹理检测器是早期 CNN 层在任何自然图像语料上学到的特征。它们反映了光照、阴影和边缘的统计规律,这些在摄影、医学影像、显微和卫星数据中都成立。后期层逐渐特化,这就是为什么微调要聚焦于最后几个块。"
},
{
"stage": "post",
"question": "在用差异化学习率端到端微调时,为什么早期层的学习率应该比后期层小?",
"options": [
"早期层的参数更少",
"早期层编码你想保留的通用特征;后期层编码必须改变的任务专有特征;早期层用较小的学习率可防止特征漂移和灾难性遗忘",
"PyTorch 要求逐层学习率才能保证正确性",
"早期层用较小的学习率能加快训练"
],
"correct": 1,
"explanation": "早期层已经编码了正确的视觉基元;你希望只做微小更新以保留这些特征。后期层则需要向新任务移动。对整个模型使用单一学习率会迫使两端都做出妥协而受损。差异化学习率让每个阶段以自己的节奏移动,这是微调在实验上的最佳平衡点。"
},
{
"stage": "post",
"question": "你在一个含 800 张灰度图像(复制到 3 通道)的 10 类医学数据集上微调一个 ResNet。准确率是 10%(10 类的随机水平)。最可能的原因是什么?",
"options": [
"你用错了损失函数",
"BatchNorm 的运行统计量来自 ImageNet 的 RGB 照片,与灰度医学分布严重不匹配,因此前几个 BN 层产生噪声并向前传播",
"ResNet 无法处理灰度输入",
"800 张图像对任何迁移学习来说都太少了"
],
"correct": 1,
"explanation": "BatchNorm 保留着来自 ImageNet 的 running_mean 和 running_var。在一个小型、分布偏移的数据集上,这些缓冲量在短暂的微调中永远来不及充分适应,BN 会用错误的统计量来归一化激活。解决办法:冻结 BN 统计量、改用 GroupNorm,或在目标数据集上做一次仅更新 BN 的预热以预训练 BN 统计量。"
},
{
"stage": "post",
"question": "你比较了两次运行:(a) 在冻结的 ImageNet 主干上做线性探针,准确率 82%;(b) 端到端微调,准确率 78%。你应该得出什么结论?",
"options": [
"微调没有帮助;上线线性探针",
"微调结果低于线性探针几乎总是一个训练 bug——学习率太高、BN 处理不当,或调度器/优化器配置错误;在对迁移下任何结论之前先去诊断",
"数据集太大",
"预训练权重很差"
],
"correct": 1,
"explanation": "微调应该总是优于或持平线性探针,因为线性探针是主干学习率为 0 的微调特例。如果微调更差,说明流水线正在主动破坏预训练特征。修复办法是降低主干学习率、采用差异化学习率或冻结 BN——而不是放弃微调。"
}
]
}