-
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) · 2.87 KB
/
Copy pathquiz.json
File metadata and controls
64 lines (64 loc) · 2.87 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": "float32 能表示的数值大致范围是多少?",
"options": [
"±65,504",
"±3.4e38",
"±1.8e308",
"±1.0e10"
],
"correct": 1,
"explanation": "float32 有 8 位指数,范围约为 ±3.4e38。float16 限制在 ±65,504,而 float64 可达 ±1.8e308。"
},
{
"stage": "pre",
"question": "为什么在浮点运算中 0.1 + 0.2 不等于 0.3?",
"options": [
"Python 把所有小数四舍五入为整数",
"0.1 和 0.2 无法在二进制浮点中精确表示",
"CPU 的加法电路有 bug",
"0.3 不是合法的浮点数"
],
"correct": 1,
"explanation": "0.1 在二进制中是一个无限循环小数(就像十进制中的 1/3)。float32 会把它截断,因此存储的值约为 0.100000001490116。累积的误差使得求和结果与 0.3 不同。"
},
{
"stage": "post",
"question": "在稳定版 softmax 的实现中,为什么要在取指数之前减去 max(logits)?",
"options": [
"它使输出概率更均匀",
"它通过确保最大的指数为 0 来防止 exp() 溢出",
"它把 logits 从 float16 转换为 float32",
"它把 logits 归一化为零均值"
],
"correct": 1,
"explanation": "减去 max(logits) 后,最大值为 0,exp(0) = 1,不会溢出。所有其他值都是负数,因此它们的指数小于 1。所得概率在数学上与朴素版本完全相同。"
},
{
"stage": "post",
"question": "在用中心有限差分做梯度检查时,如果步长 h 太小(例如 1e-15)会发生什么?",
"options": [
"近似变得更准确",
"灾难性抵消会破坏结果,因为 f(x+h) 和 f(x-h) 几乎相同",
"函数求值变得更快",
"梯度自动变为零"
],
"correct": 1,
"explanation": "当 h 极小时,f(x+h) 和 f(x-h) 仅在最后几位有效数字上不同。相减会抵消高位数字,只剩下大部分是舍入噪声。通常较好的取值是 h = 1e-5 到 1e-7。"
},
{
"stage": "post",
"question": "为什么神经网络训练通常更偏向使用 bfloat16 而非 float16?",
"options": [
"bfloat16 有更多尾数位,精度更高",
"bfloat16 拥有与 float32 相同的指数范围,无需损失缩放即可避免大激活值溢出",
"bfloat16 比 float16 占用更少内存",
"bfloat16 比 float16 受到更多 GPU 架构的支持"
],
"correct": 1,
"explanation": "bfloat16 有 8 位指数(与 float32 相同,范围可达 3.4e38),而 float16 只有 5 位指数(最大约 65,504)。训练过程中,激活值和梯度可能超过 65,504,导致 float16 溢出。bfloat16 无需损失缩放即可处理这种情况。"
}
]
}