-
Notifications
You must be signed in to change notification settings - Fork 111
Expand file tree
/
Copy pathquiz.json
More file actions
78 lines (78 loc) · 3.22 KB
/
Copy pathquiz.json
File metadata and controls
78 lines (78 loc) · 3.22 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
{
"lesson": "44-cosine-lr-warmup",
"title": "顶点课 44 —— Cosine 学习率 + 线性 Warmup",
"questions": [
{
"stage": "pre",
"question": "为什么 cosine-with-warmup schedule 从零开始,而不是从 lr_max 开始?",
"options": [
"因为 lr_max 在 step 0 是非法的。",
"前一千步更新很不稳定;从零线性升到 lr_max 让优化器在运行估计稳定之前保持较小的有效步长。",
"因为 Adam 要求这样做。",
"随意的传统。"
],
"correct": 1,
"explanation": "Warmup 把脆弱的早期更新控制在较小幅度;否则模型要么发散要么停滞。"
},
{
"stage": "check",
"question": "为什么 schedule 用一个关于 step 的单一函数来实现,而不是三段拼接?",
"options": [
"单函数更短。",
"拼接式 schedule 在 lr_max 第一次被修改时就会丢失一个边界;单函数始终求值同一个封闭形式表达式,在 warmup 和 total 端点处保持连续。",
"Linter 要求这样做。",
"随意的。"
],
"correct": 1,
"explanation": "lr(warmup_steps) 和 lr(total_steps) 处的连续性由封闭形式自然保证。"
},
{
"stage": "check",
"question": "step > total_steps 时 schedule 会怎样?",
"options": [
"抛出异常。",
"钉在 lr_min;schedule 不做外推,需要延长训练的 trainer 会显式修改 total_steps。",
"返回 nan。",
"循环回绕。"
],
"correct": 1,
"explanation": "钉住下限让超出的 trainer 停在一个有据可查的状态,而不是直接崩溃。"
},
{
"stage": "check",
"question": "为什么要在学习率旁边记录 gradient L2 norm?",
"options": [
"看起来好看。",
"Norm 是训练健康的另一半信号:发散的 run 会在 loss 之前先让 norm 飙升;过于激进的 peak 会表现为 warmup 之后 norm 一直居高不下。",
"Adam 要求这样做。",
"传统。"
],
"correct": 1,
"explanation": "一起记录能让有问题的 schedule 在训练时而非事后被发现。"
},
{
"stage": "post",
"question": "为什么在生产中把 warmup_steps 配成 total_steps 的百分比?",
"options": [
"百分比更简洁。",
"适合 2 万步 run 的固定 warmup 步数在 2 亿步 run 里几乎等于没有 warmup;百分比(通常 1-3%)随训练时长自动缩放。",
"随意偏好。",
"硬件要求。"
],
"correct": 1,
"explanation": "绝对 warmup 步数在不同训练时长下表现不一致。"
},
{
"stage": "post",
"question": "为什么生产中通常设非零的 lr_min?",
"options": [
"Adam 要求非零。",
"接近 lr_max 10% 的下限让优化器在长尾阶段继续学习;lr_min 设为零会产出一条看起来漂亮但模型并没有训完的曲线。",
"数值稳定性。",
"向后兼容。"
],
"correct": 1,
"explanation": "Schedule 的尾部正是后期精细调整落地的地方;把它归零就浪费了这些信号。"
}
]
}