3 注意力机制与 Transformer 高频面试题

本章聚焦面试中必考的注意力机制与 Transformer 结构问题,涵盖 Self-Attention 计算、多头注意力、位置编码、BERT 与 对比。掌握这些核心原理与工程细节,是进入 AIGC 算法岗位的基石。

Transformer 核心组件对比

组件输入 → 输出关键参数面试关注点
Self-AttentionQ,K,V → 加权求和d_model, d_k, d_v矩阵计算、softmax 梯度、mask
多头注意力拼接多个头 → 线性投影num_heads, 头维度 = d_model/num_heads头的分工、计算效率
位置编码/相对位置 → 加和/拼接频率 w_k = 1/10000^(2k/d)周期性、三角函数设计、RoPE
层归一化对每个样本做标准化gamma, beta与 BN 区别、训练稳定性
输入序列 X 线性投影 Q/K/V Q * Kᵀ Scale + Softmax 加权求和 *V 注意力输出 V 计算复杂度 O(n²·d),n=序列长度,d=特征维度 ⚠️ 关键:scale 因子 √d_k 防止 softmax 梯度消失

1. Self-Attention 中为什么要除以 √d_k?

面试官考察点

  • 是否理解 softmax 的梯度饱和问题
  • 能否量化分析点积方差与维度关系
  • 是否熟悉实际工程中的 scale 设计

回答框架

  1. 拆解:Q*Kᵀ 的每个元素是 d_k 个独立随机变量之和,方差为 d_k。
  2. 影响:方差过大会使 softmax 落入极值区域,梯度接近 0。
  3. 解决:除以 √d_k 将方差标准化为 1,保持梯度稳定。

简短示例回答

假设 Q 和 K 的每个分量是均值为 0、方差为 1 的独立变量,则 Q·Kᵀ 的方差 = d_k。除以 √d_k 后方差降为 1,避免 softmax 输出过于尖锐,使得反向传播梯度衰减——这是训练深层 Transformer 的关键工程技巧。

可能追问:如果 d_k 很小(如 2),是否还需要 scale?答:方差小,但通常仍保留,保持代码统一性。

避坑提醒:不要只说“防止数值过大”,要指出方差与 d_k 的定量关系。也不要说成除以 d_k,是除以 √d_k。

BERT(Encoder-only) 输入: + Segment + Position 双向 Self-Attention(可见全部) MLM + NSP 预训练 输出:每个 的表示 (Decoder-only) 输入: + Position 因果 Mask(只能看左侧) 自回归预测下一个 输出:最后一个 的 logits 核心区别:Attention 方向、输入形式(BERT 有 segment embedding)、训练目标

2. 多头注意力(Multi-Head Attention)为什么有效?每个头是否学到不同模式?

面试官考察点

  • 是否理解多头在表达能力上的增益
  • 能否解释头之间如何共享信息
  • 是否了解实际可视化分析结果

回答框架

  1. 形式:将 Q/K/V 分别投影到 h 个低维子空间(d_model/h),独立计算注意力后再拼接。
  2. 作用:每个头关注不同位置关系(语法、语义、位置等),增加表示维度而不增加计算量平方项。
  3. 证据:可视化表明头确实分化,例如有的头关注句法依赖,有的关注相邻词。

简短示例回答

多头注意力通过将高维空间拆分为多个子空间,每个头仅负责一个低维子空间,既降低了单头参数压力,又允许模型同时捕获不同类型的注意力模式。实验显示某些头学习到语法关系(如动词-主语),其他头则捕捉局部共现。

可能追问:多头是否导致冗余?答:存在一定冗余,但可通过 head pruning 压缩,性能下降有限。

避坑提醒:不要误以为每个头独立训练不同的子集,实际是同一组 QKV 通过不同投影矩阵得到不同子空间。强调“线性投影 + 拼接”而非“切分”。

3. 位置编码为什么要用 sin/cos?相对位置编码(如 RoPE)如何改进?

面试官考察点

  • 是否理解位置与相对位置的区别
  • 能否推导三角函数位置编码的周期性质
  • 是否了解 RoPE 的最新应用(如 LLaMA)

回答框架

  1. sin/cos 优点:每个维度对应不同频率,使得模型能通过线性变换捕捉相对位置,且可外推到更长序列。
  2. RoPE:通过旋转矩阵将位置信息注入 Q/K,使注意力分数仅依赖相对位置,且保持内积对称性。
  3. 效果:RoPE 在长文本任务中优于位置编码,被广泛用于 系列。

简短示例回答

三角函数位置编码利用不同频率的正弦/余弦波构建位置向量,使得任意两个位置之间的相对关系可以通过线性函数近似,有利于模型学习相对距离。RoPE 则在计算 Q 和 K 时对向量进行旋转操作,使得内积直接反映相对位置,无需额外相加,在 LLaMA 中显著提升长程依赖能力。

可能追问:RoPE 对复数域的理解?答:相当于将 d 维向量拆成 d/2 个二维复数,每个旋转角度为 θ·pos。

避坑提醒:不要只说“加上位置编码”,要区分“加在输入层”和“注入注意力计算”两种范式。RoPE 属于后者,不需要额外 embedding。