跳转至

一:自注意力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 的时间复杂度和空间复杂度是多少?请分别说明和 Td_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_causalattn_mask 各自适合什么场景。

  • 如果让你在面试中实现 attention,你会如何验证自己的实现是正确的?

            预览时标签不可点
    

    <div class="