第4章 Transformer基础原理(高频问题与回答框架)

知识结构:Transformer核心组件与面试要点

组件核心作用常考面试问题
自注意力(Self‑Attention)捕获序列内全局依赖为何要除以 √dₖ? mask 如何实现?
多头注意力(Multi‑Head)多视角特征子空间学习头数如何选?拼接后为何要线性变换?
位置编码(Positional Encoding)注入序列顺序信息正余弦编码 vs 可学习编码优劣?相对位置?
前馈网络(FFN)非线性特征变换激活函数选择?两层线性中间维度为何放大?
残差连接 + 层归一化防止梯度消失,加速训练LayerNorm vs BatchNorm?Pre‑Norm vs Post‑Norm?
Self‑Attention 计算流程 & 追问节点 输入 X (B,L,d) Q,K,V 线性变换 score = Q·Kᵀ/√dₖ Softmax (可选 Mask) 加权求和 → 输出 Z 多头拼接 + 线性 ❓ 为什么要除 √dₖ? ❓ Mask 怎么对 decoder 做? ❓ 多头头数怎么选? ❓ 残差 + LayerNorm 位置?

面试问答卡片(第4章高频6题)

Q1: 请解释Transformer自注意力机制的计算过程。

  • 考察点:对核心公式的理解,缩放因子的必要性,是否熟悉矩阵运算。
  • 回答框架:
    1. 输入 X 经过三个不同线性变换得到 Q、K、V。
    2. 计算注意力分数:Q·Kᵀ / √dₖ(dₖ 为 K 的维度)。
    3. 可选 Mask 屏蔽未来位置(Decoder)。
    4. Softmax 归一化得到权重矩阵。
    5. 加权求和:权重 × V 得到输出。
  • 示例回答:“自注意力计算:输入 X (B,L,d) 乘以 Wq、Wk、Wv 得 Q、K、V。然后计算 Score = Q·Kᵀ / √dₖ,目的是避免点积过大使 softmax 梯度过小。对 decoder 施加 causal mask 使 t 时刻只能看到之前位置。最后 softmax 后与 V 加权求和,得到每个位置的上下文表示。” (约120字)
  • 可能追问:“为什么除以 √dₖ 而不是其他?” “attention 矩阵维度多大?”
  • 避坑:不要忘记解释缩放因子的数学原因(方差平衡),另外注意区分 encoder 和 decoder 的 mask 差异。

Q2: 为什么要使用多头注意力?如何将多个头的输出合并?

  • 考察点:多头设计的动机,拼接与线性变换机制,并行理解。
  • 回答框架:
    1. 单头注意力只能捕获一个子空间的依赖,多头可使模型关注不同位置、不同语义信息。
    2. 每个头独立计算自注意力,输出维度为 head_dim = d_model / h。
    3. 将所有头输出在最后一维拼接(concat),得到 d_model 维向量。
    4. 经过一个线性层(无偏置常用)做最终投影。
  • 示例回答:“多头允许模型在不同表示子空间学习信息。假设 h=8,每个头计算自注意力得到 (B,L,64) 的输出,然后按最后一个维度拼接为 (B,L,512),再用线性层 Wo 投影到最终输出。这样每个头可以关注不同距离、不同语义的交互。” (约100字)
  • 可能追问:“头数增大一定更好吗?为什么?” “每个头的参数是独立吗?”
  • Tip:回答时可举例说明不同头可能关注“语法关系”或“语义相似性”,体现深度理解。

Q3: Transformer 为什么使用 LayerNorm 而不是 BatchNorm?

  • 考察点:两种归一化的区别,序列模型特殊性,训练稳定性。
  • 回答框架:
    1. BatchNorm 对 batch 维度计算均值和方差,受 batch size 影响,且对变长序列需特殊处理(不同长度位置统计不同)。
    2. LayerNorm 对每个样本的特征维度计算,与 batch 无关,天然适合变长序列。
    3. LayerNorm 保持序列内相对尺度,利于梯度传播。
    4. Transformer 中 LayerNorm 一般放在残差连接之后(Post‑Norm)或之前(Pre‑Norm)。
  • 示例回答:“Transformer 处理变长序列,BatchNorm 需要对齐长度且受 batch 大小影响,而 LayerNorm 对每个 的特征维度独立归一化,不受序列长度和 batch 影响。另外 LayerNorm 在残差网络中更稳定,因此被选用。现在常用 Pre‑LayerNorm 使训练更稳定。” (约110字)
  • 可能追问:“Pre‑Norm 和 Post‑Norm 哪个更好?为什么?”
  • 避坑:不要只说“LayerNorm 用于 NLP”,要解释根本原因——序列建模中 batch 维度统计不可靠。

Q4: Transformer 中的位置编码是如何工作的?为什么需要?

  • 考察点:对序列顺序重要性的认识,编码实现方式,正弦余弦的特性。
  • 回答框架:
    1. 自注意力本身是置换不变的(permutation invariant),必须额外注入位置信息。
    2. 原版使用正余弦编码:pos 和偶数/奇数维度分别用 sin/cos 不同频率。
    3. 特点:值在 [-1,1] 之间,可以外推至更长序列,不同频率区分不同位置。
    4. 现代模型常用可学习位置编码(如 BERT)或相对位置编码(如 RoPE)。
  • 示例回答:“Transformer 缺少顺序信息,因此加入位置编码。原版用正余弦公式生成固定编码:PE(pos, 2i)=sin(pos/10000^(2i/d)),PE(pos, 2i+1)=cos(...)。这种编码使模型能通过线性变换学到相对位置关系,并支持外推。实际应用中也可学习位置嵌入。” (约110字)
  • 可能追问:“RoPE 和正余弦编码的区别?” “为什么相对位置编码更适合长文本?”
  • Tip:回答时提及“外推能力”是关键得分点,可举例说明 T5 的相对位置偏置。

Q5: Transformer 的编码器和解码器有什么区别?

  • 考察点:整体架构理解,交叉注意力,自回归生成。
  • 回答框架:
    1. 编码器:堆叠自注意力 + FFN,每个位置能关注整个输入序列(双向)。
    2. 解码器:含自注意力(带 causal mask)、交叉注意力(Key/Value 来自编码器)、FFN。
    3. 交叉注意力使得解码器在生成时参考输入序列,自注意力保证自回归(只能看过去)。
    4. 等只使用解码器部分,去掉交叉注意力。BERT 只使用编码器。
  • 示例回答:“编码器采用双向自注意力,每个 能看到整个输入。解码器包含带 mask 的自注意力(防止看到未来)和交叉注意力,其中 Q 来自自身,K、V 来自编码器输出。这样解码器在生成每个 时既考虑已生成序列,也利用输入信息。” (约100字)
  • 可能追问:“为什么 只用解码器也能做理解?交叉注意力去掉后如何对齐?”
  • 避坑:注意区分“编码器-解码器结构”和“仅解码器结构”,不要混淆 causal mask 的作用范围。

Q6: 请解释 Transformer 中 Q、K、V 的含义和维度关系。

  • 考察点:对注意力机制的最基本概念理解,是否清楚线性变换的作用。
  • 回答框架:
    1. Q(Query):当前查询,表示当前需要检索的内容。
    2. K(Key):被检索的键,与 Q 计算相似度。
    3. V(Value):实际携带的信息,被加权后提供输出。
    4. 输入 X 维度 (B, L, d_model);Q/K/V 通过不同线性层得到维度 (B, L, d_k) 或 (B, L, d_v)。通常在多头中 d_k = d_v = d_model / h。
  • 示例回答:“Transformer 中,Q 是当前 的查询向量,K 是各 的键,V 是各 的值。通过 Q·Kᵀ 计算注意力权重,再对 V 加权求和得到输出。维度上,输入是 d_model,每个头使用的 Q/K 维度为 d_k,V 为 d_v,通常 d_k = d_v = d_model/h。h 为头数。” (约120字)
  • 可能追问:“为什么 Q 和 K 维度可以不同?实际实现中通常相同是为了矩阵运算方便吗?”
  • 加分项:可以类比信息检索系统(Query 搜索、Key 索引、Value 内容),面试官通常喜欢这种通俗解释。