-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathquiz.json
More file actions
78 lines (78 loc) · 3.2 KB
/
Copy pathquiz.json
File metadata and controls
78 lines (78 loc) · 3.2 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": "33-multihead-self-attention",
"title": "顶点课 33 —— Multi-Head Self-Attention",
"questions": [
{
"stage": "pre",
"question": "为什么高效的 self-attention block 用一个输出 3*D 特征的单线性层?",
"options": [
"它强制 Q、K、V 之间共享权重",
"它在数学上等价于三个 Linear(D, D) 层,但只跑一次 matmul",
"它避免了使用 causal mask",
"它减少了模型参数量"
],
"correct": 1,
"explanation": "把三个 (D, D) 的投影矩阵叠成一个 (3D, D) 的矩阵,输出完全一致,但前向传播只需一次对加速器友好的 matmul。"
},
{
"stage": "check",
"question": "d_model、n_heads 和 d_head 之间是什么关系?",
"options": [
"d_head = d_model * n_heads",
"d_head = d_model + n_heads",
"d_head = d_model // n_heads,且 d_model 必须能被 n_heads 整除",
"d_head 与 d_model 无关"
],
"correct": 2,
"explanation": "该 block 把 d_model 均匀分配给各个 head。d_model % n_heads == 0 这个约束在构造时强制检查。"
},
{
"stage": "check",
"question": "scaled dot-product attention 的缩放因子用的是什么值?",
"options": [
"sqrt(d_model)",
"sqrt(d_head)",
"sqrt(n_heads)",
"sqrt(seq_len)"
],
"correct": 1,
"explanation": "分数要除以 sqrt(d_head),即 matmul 收缩的那个 head 维度。这样可以让分数的方差在 d_head 增大时保持有界。"
},
{
"stage": "check",
"question": "causal mask 如何保证位置 t 不能 attend 到位置 t+1?",
"options": [
"将未来位置的 key 乘以零",
"在 softmax 之前将上三角的 score 设为负无穷",
"从输入中移除未来的 token",
"为未来位置使用不同的 attention head"
],
"correct": 1,
"explanation": "将未来 entry 设为 -inf,softmax 就会给它们分配零权重。过去和当前位置保留有效的权重分布。"
},
{
"stage": "post",
"question": "为什么 block 在合并 head 之后还要接一个 Linear(D, D) 的输出投影?",
"options": [
"让模型能够跨 head 混合信息",
"匹配模型的词表大小",
"将激活值归一化到均值为零",
"autograd 需要它来追踪梯度"
],
"correct": 0,
"explanation": "没有输出投影的话,各 head 的输出只能在更后面的层才能组合。这个投影让 block 在同一步内就有一个地方来混合 head 的信息。"
},
{
"stage": "post",
"question": "shape 为 (B, H, T, T) 的 attention weight 矩阵告诉你什么?",
"options": [
"每个 head 有多少参数",
"对于每个 batch 元素、每个 head,每个 query 位置 attend 到了哪些 key 位置",
"query 和 value 向量之间的余弦相似度",
"下一个 token 的输出 logits"
],
"correct": 1,
"explanation": "per-head 矩阵中第 t 行是 query 位置 t 在 key 位置上的分布。检查它就能看到每个 head 在关注哪里。"
}
]
}