-
Notifications
You must be signed in to change notification settings - Fork 36
Expand file tree
/
Copy pathquiz.json
More file actions
62 lines (62 loc) · 2.68 KB
/
Copy pathquiz.json
File metadata and controls
62 lines (62 loc) · 2.68 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
[
{
"question": "在神经网络的语境中,链式法则是什么?",
"options": [
"一条把各层串联起来的规则",
"如果 y = f(g(x)),那么 dy/dx = f'(g(x)) * g'(x)——沿路径把导数相乘",
"一种初始化权重的方法",
"一种对数据分批的技术"
],
"correct": 1,
"explanation": "链式法则让你通过把每一步的局部导数相乘来计算复合函数的导数。反向传播在计算图中系统地应用这一法则。",
"stage": "pre"
},
{
"question": "为什么反向传播比独立计算每个梯度更高效?",
"options": [
"它占用更少内存",
"它在一次反向传播中计算所有梯度,而不是每个参数一次前向传播",
"它只对小网络有效",
"它避免使用链式法则"
],
"correct": 1,
"explanation": "独立计算梯度需要每个参数一次前向传播(对大网络而言是数百万次)。反向传播通过复用前向传播时存储的中间值,在一次反向传播中计算所有梯度。",
"stage": "pre"
},
{
"question": "在反向传播中,累积梯度时为什么用 '+=' 而不是 '='?",
"options": [
"这是一种 Python 约定",
"一个值可能被用于多个运算,因此它的梯度是来自所有路径的梯度之和",
"它防止溢出",
"它让代码运行更快"
],
"correct": 1,
"explanation": "当一个 Value 被用作多个运算的输入时(例如 x 同时用于 x*w1 和 x*w2),它的总梯度是从每个运算回流的梯度之和。使用 += 能正确地累积它们。",
"stage": "post"
},
{
"question": "在深层 sigmoid 网络中,是什么导致了梯度消失问题?",
"options": [
"学习率太小",
"sigmoid 的导数最大值为 0.25,因此梯度会随层数指数级缩小",
"网络的参数太多",
"损失函数选得不好"
],
"correct": 1,
"explanation": "sigmoid 的导数在 z=0 时达到峰值 0.25。每一层最多把梯度乘以 0.25,因此经过 10 层后梯度最多是原始信号的 0.25^10 ≈ 0.000001。",
"stage": "post"
},
{
"question": "为什么拓扑排序在反向传播中很重要?",
"options": [
"它让代码更整洁",
"它确保每个节点的梯度在传播到其子节点之前已被完全累积",
"它加快前向传播",
"它减少内存占用"
],
"correct": 1,
"explanation": "拓扑排序确保我们以正确的顺序处理节点:一个节点的梯度必须先从所有下游路径完全累积,然后才能继续向前传播。没有这种排序,梯度就会不完整。",
"stage": "post"
}
]