-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathquiz.json
More file actions
64 lines (64 loc) · 3.13 KB
/
Copy pathquiz.json
File metadata and controls
64 lines (64 loc) · 3.13 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": "微积分中的链式法则陈述了什么?",
"options": [
"和的导数等于各导数之和",
"复合函数的导数等于各自导数的乘积",
"乘积的积分等于各积分的乘积",
"只有线性函数才能求导"
],
"correct": 1,
"explanation": "对于 y = f(g(x)),链式法则给出 dy/dx = f'(g(x)) * g'(x)。你把链条上每个环节的导数相乘。这是反向传播的数学基础。"
},
{
"stage": "pre",
"question": "什么是计算图?",
"options": [
"损失随训练步数变化的曲线图",
"一个有向图,其中节点是运算,边在前向传播时携带数值、在反向传播时携带梯度",
"展示神经网络架构的示意图",
"用于存储训练数据的图数据库"
],
"correct": 1,
"explanation": "计算图表示一次计算中的运算序列。数据在图中向前流动,反向传播时梯度则向后流动。"
},
{
"stage": "post",
"question": "为什么 PyTorch 使用反向模式自动微分(反向传播)而不是前向模式?",
"options": [
"反向模式在数值上更准确",
"反向模式在一次反向传播中计算所有梯度,而前向模式每个输入变量都需要一次传播——神经网络有数百万个输入但只有一个损失输出",
"反向模式占用更少的内存",
"前向模式无法处理非线性函数"
],
"correct": 1,
"explanation": "神经网络有数百万个权重输入,但只产生一个标量损失。反向模式总共只需一次反向传播。前向模式每个权重都需要一次传播——数百万次传播——这使其不切实际。"
},
{
"stage": "post",
"question": "在 Value 类自动微分引擎中,为什么 backward 函数累积梯度时用 '+=' 而不是 '='?",
"options": [
"为了对多个样本的梯度求平均",
"因为一个被用于多个运算的值会从每个运算获得梯度贡献,这些贡献必须相加",
"为了防止梯度发生数值溢出",
"因为 Python 在闭包中不支持 '=' 运算符"
],
"correct": 1,
"explanation": "当一个值参与多个运算时(例如 x 同时用于 x*y 和 x+z),它的总梯度是所有传入梯度贡献之和。使用 '=' 会覆盖先前的贡献。"
},
{
"stage": "post",
"question": "什么是梯度检查,什么时候应该使用它?",
"options": [
"检查梯度是否低于某个阈值以防止梯度爆炸",
"将自动微分梯度与数值有限差分梯度进行比较,以验证反向传播的正确性",
"检查训练时所有参数是否都收到了非零梯度",
"在训练过程中监控梯度大小以检测梯度消失"
],
"correct": 1,
"explanation": "梯度检查通过 (f(x+h) - f(x-h)) / 2h 计算数值导数,并将其与自动微分梯度进行比较。在向你的自动微分引擎添加新运算或排查训练失败时使用它。"
}
]
}