一:自注意力Self-Attention自测题¶
来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247483719&idx=1&sn=ced3333c83a8bafb598f8a9f1a4fe6df&chksm=f01eb23ec7693b28facc73412ea8fbad73f879fa85376326570248a49bb95373b75b73d09826#rd
覆盖范围¶
-
self-attention 的直观含义和 Transformer 中的作用
-
Query、Key、Value 的来源、含义和矩阵形状
-
scaled dot-product attention 的完整计算流程
-
softmax、缩放因子、mask、加权求和的作用
-
causal mask 与 padding mask 的区别
-
multi-head attention 的动机、公式和张量变换
-
self-attention 的时间复杂度、空间复杂度和并行性
-
从公式到 PyTorch 伪代码的实现细节
-
面试中常见的追问、易错点和白板推导
一、基础概念题¶
-
请用 1 分钟解释什么是 self-attention。它解决了序列建模里的什么问题?
-
self-attention 中的 “self” 体现在哪里?它和普通 attention、cross-attention 有什么区别?
-
在 Transformer 里,一个 token 的输出表示为什么需要依赖序列中其他 token?
-
Query、Key、Value 分别代表什么?请用检索系统或问答系统类比解释。
-
为什么 Q、K、V 都可以从同一个输入 X 通过不同线性变换得到?为什么不直接用 X 做注意力?
-
scaled dot-product attention 的公式是什么?请解释公式中每一项的作用。
-
为什么用 QK^T 计算相关性?点积大意味着什么?点积注意力和余弦相似度有什么关系?
-
为什么要除以 sqrt(d_k)?如果不做缩放,softmax 和梯度会出现什么问题?
-
为什么要对 attention score 做 softmax?softmax 是沿哪个维度做的?
-
为什么最终输出是 attention weights 对 V 的加权和,而不是对 Q 或 K 的加权和?
-
self-attention 本身是否知道 token 的顺序?如果不知道,Transformer 如何引入位置信息?
-
self-attention 和 RNN、CNN 相比,在长距离依赖建模上有什么优势和代价?
二、公式推导与张量形状题¶
-
给定输入 X 的 shape 为
[B, T, d_model],单头 self-attention 中 W_Q、W_K、W_V 的常见 shape 是什么?Q、K、V 的 shape 是什么? -
在单头 attention 中,QK^T、softmax 后的 attention weights、最终输出 O 的 shape 分别是什么?
-
给定
B=2, T=4, d_model=8, num_heads=2,且d_head=4,请写出 multi-head attention 中从 X 到输出的每一步 shape。 -
为什么 attention weight 矩阵通常是
[T, T]?第 i 行、第 j 列分别表示什么含义? -
对一个长度为 4 的序列,请画出不带 causal mask 的 attention score 矩阵,以及 decoder causal mask 后允许关注的位置。
-
如果 QK^T 得到的 score 为
[2, 1, 0],softmax 后三个位置的权重大致有什么相对关系?这说明 attention 在做什么? -
如果 attention weights 的每一行没有归一化为 1,会带来什么问题?
-
如果把 softmax 放在乘 V 之后,会发生什么概念性错误?
-
在 batch 训练中,不同样本长度不同。padding token 如何影响 attention?应该如何处理?
-
attention mask 的 shape 通常如何与
[B, H, T_q, T_k]的 attention score 进行广播?
三、mask 与自回归生成题¶
-
decoder-only 语言模型为什么必须使用 causal mask?
-
causal mask 为什么通常是下三角矩阵?请写出长度为 5 时允许关注的位置。
-
causal mask 是在 softmax 前加,还是 softmax 后乘?为什么?
-
mask 中为什么常用
-inf或很大的负数,而不是 0? -
padding mask 和 causal mask 的目的分别是什么?二者可以同时存在吗?
-
训练 decoder-only LM 时已经用了 causal mask,为什么仍然可以并行计算整段序列?
-
推理时如果一次只生成一个新 token,新 token 的 Q、K、V 分别如何参与 attention?
-
如果 causal mask 写反了,会出现什么训练或评测异常?
四、多头注意力题¶
-
multi-head attention 相比 single-head attention 的核心动机是什么?
-
请写出 multi-head attention 的公式,并解释 concat 和 W_O 的作用。
-
为什么多头注意力通常把
d_model切成多个d_head,而不是每个 head 都使用完整的d_model? -
num_heads越多一定越好吗?head 数太多可能带来什么问题? -
不同 attention head 是否一定学到可解释的语言结构?面试中应该如何谨慎回答?
-
multi-head attention 中最常见的 shape bug 是什么?请举例说明。
五、复杂度与并行性题¶
-
self-attention 的时间复杂度和空间复杂度是多少?请分别说明和
T、d_model的关系。 -
当序列长度 T 翻倍时,attention score 矩阵的计算量和显存大约如何变化?
-
为什么 Transformer 比 RNN 更容易并行训练?
-
self-attention 的主要瓶颈是什么?长上下文场景为什么会更困难?
-
对比 RNN、CNN、self-attention:它们在长距离依赖、并行性、路径长度上的区别是什么?
-
如果面试官问“self-attention 是不是一定比 RNN 好”,你会如何回答?
六、代码实现与调试题¶
-
请写出 scaled dot-product attention 的 PyTorch 风格伪代码,要求包含 QK^T、缩放、mask、softmax、dropout、乘 V。
-
torch.matmul(Q, K.transpose(-2, -1))中为什么转置的是最后两个维度? -
在 PyTorch 中,为什么通常用
masked_fill(mask == 0, -inf)处理 mask? -
mixed precision 下使用
-inf或很大负数时要注意什么? -
attention dropout 应该作用在哪里?它和普通 residual dropout 有什么区别?
-
如果模型输出出现 NaN,attention 相关实现中有哪些排查点?
-
如果 attention weights 几乎是均匀分布,可能有哪些原因?
-
如果 attention weights 极端 one-hot,可能有哪些原因和风险?
七、白板推导与面试追问题¶
-
请从输入 token embedding 开始,完整讲一遍 self-attention 如何得到每个位置的新表示。
-
面试官让你只用一句话解释 self-attention,你会怎么说?
-
面试官追问:“Q、K、V 只是三个线性层,为什么能学到语义关系?”你如何回答?
-
面试官追问:“如果所有 token 都能互相看,会不会信息泄漏?”你如何区分 encoder 和 decoder 的情况?
-
面试官追问:“attention score 高是否代表模型真的在解释这个 token?”你如何回答?
-
请设计一个最小数值例子,说明某个 token 如何通过 attention 聚合另一个 token 的信息。
-
如果要手写一个最小 Transformer block,self-attention 前后还需要哪些模块配合?
-
为什么 self-attention 输出后还要经过 output projection W_O?
-
请解释“attention 是内容寻址的动态加权聚合”这句话。
-
对第一天学习内容做一次总结:self-attention 的核心流程、核心公式、核心优势、核心限制分别是什么?
八、加分追问¶
-
self-attention 和 cross-attention 在机器翻译 encoder-decoder Transformer 中分别出现在哪里?
-
decoder-only 模型中,为什么 self-attention 加 causal mask 后就可以做 next token prediction?
-
为什么 attention 需要位置编码配合?如果去掉位置编码会发生什么?
-
为什么说 self-attention 的 attention weights 是输入相关的动态权重,而 CNN 卷积核是训练后固定的局部权重?
-
请解释 PyTorch
scaled_dot_product_attention接口中的is_causal和attn_mask各自适合什么场景。 -
如果让你在面试中实现 attention,你会如何验证自己的实现是正确的?
预览时标签不可点<div class="