第4章 Transformer与注意力机制深度讲解
本章聚焦Transformer与注意力机制的面试高频问题,涵盖自注意力的数学原理、多头注意力实现、位置编码、代码实现细节及工程优化。以下为注意力机制的核心计算流程,面试时按此顺序回答可清晰展现推理链路。
- 输入映射:将序列每个位置映射为 Query、Key、Value 向量。
- 相似度计算:Query 与所有 Key 做点积(或加性)得到注意力分数。
- 缩放:除以 √dₖ 防止梯度消失。
- Softmax 归一化:将分数转为概率权重。
- 加权求和:权重与 Value 加权得到输出。
面试问答卡片
- 面试问题
- 请详细解释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 参数。