第4章 Transformer与注意力机制深度讲解

本章聚焦Transformer与注意力机制的面试高频问题,涵盖自注意力的数学原理、多头注意力实现、位置编码、代码实现细节及工程优化。以下为注意力机制的核心计算流程,面试时按此顺序回答可清晰展现推理链路。

  1. 输入映射:将序列每个位置映射为 Query、Key、Value 向量。
  2. 相似度计算:Query 与所有 Key 做点积(或加性)得到注意力分数。
  3. 缩放:除以 √dₖ 防止梯度消失。
  4. Softmax 归一化:将分数转为概率权重。
  5. 加权求和:权重与 Value 加权得到输出。
输入 Q,K,V 点积相似度 缩放÷√dₖ Softmax 加权求和输出 面试回答框架:从输入到输出,分步骤解释注意力机制 每个步骤突出“为什么”和“如何实现”

面试问答卡片

面试问题
请详细解释Transformer中的自注意力机制(Scaled Dot-Product Attention)是如何工作的?
面试官考察点
  • 是否理解Self-Attention的数学推导与几何意义
  • 能否清晰拆解缩放、Mask等细节
  • 是否了解复杂度及与RNN的区别
回答框架
先定义Q/K/V来源,然后逐步骤说明计算流程,最后强调缩放原因和并行优势。
简短示例回答
自注意力将输入通过三个线性层得到Q、K、V。计算Q与K的点积,除以√dₖ防止softmax梯度消失,再通过softmax得到权重,最后与V加权求和。所有位置并行计算,复杂度O(n²d)。
可能追问
  • 为什么缩放因子选择√dₖ而不是其他值?
  • Self-Attention与Cross-Attention的区别?
  • 如何处理变长序列的padding?
避坑提醒
不要忽略缩放原因(大维度下点积方差大),不要说成“为了避免softmax饱和”——实际是控制方差。同时要说明mask在decoder中的应用。
面试问题
为什么Transformer需要位置编码?有哪些常见的实现方式?
面试官考察点
  • 是否理解自注意力的置换不变性缺陷
  • 能否对比位置编码与相对位置编码的优缺点
  • 是否了解RoPE等最新方法
回答框架
先说明自注意力对位置不敏感,然后列举位置编码(三角函数/可学习),再引出相对位置编码和RoPE。
简短示例回答
自注意力是置换不变的,无法利用单词顺序。解决方式有:位置编码(如Sinusoidal或可学习Embedding),相对位置编码(如T5的bias),旋转位置编码RoPE(通过旋转矩阵注入相对位置信息)。
可能追问
  • 三角函数编码为什么能表示相对位置?
  • 可学习位置编码在长序列上泛化性如何?
  • RoPE的旋转矩阵如何实现?
避坑提醒
不要只说“加上一个向量”就结束;要提到位置编码与词嵌入相加的位置(在进入Transformer之前或每层之前)。另外,BERT使用的是可学习位置编码,但长度为512,超出则需截断。
面试问题
在Transformer中,多头注意力机制的作用是什么?如何实现的?
面试官考察点
  • 是否理解多头注意力如何增强模型表达能力
  • 能否解释投影和拼接的细节
  • 是否了解头数对性能的影响
回答框架
先讲单头注意力的局限性(只能关注一种关系),然后说明多头通过不同投影学习不同子空间表示,最后拼接并线性投影。
简短示例回答
多头注意力将Q、K、V分别线性投影到h个子空间,每个头独立计算注意力,最后拼接结果并经过线性层。这样模型能同时关注不同位置的不同表征子空间,提升模型容量。
可能追问
  • 头数通常设置为多少?越大越好吗?
  • 如何保证多头之间的多样性?
  • 多头注意力与分组卷积的联系?
避坑提醒
不要误以为每个头单独学习整个序列;实际上每个头的维度是dₘₒₕₐₗ/h,计算量相同。面试时强调“总计算量与单头相近”是加分点。还要说明Google中默认h=8。

💡 面试加分建议:回答注意力机制时,顺手写出公式 Attention(Q,K,V)=softmax(QKᵀ/√dₖ)V,并用手势比划矩阵乘法维度,展现对细节的掌控。同时在代码实现时,优先使用 PyTorch 的 nn.MultiheadAttention,但要理解其内部 key_padding_mask 和 attn_mask 参数。