第4章 Transformer基础原理(高频问题与回答框架)
知识结构:Transformer核心组件与面试要点
| 组件 | 核心作用 | 常考面试问题 |
|---|---|---|
| 自注意力(Self‑Attention) | 捕获序列内全局依赖 | 为何要除以 √dₖ? mask 如何实现? |
| 多头注意力(Multi‑Head) | 多视角特征子空间学习 | 头数如何选?拼接后为何要线性变换? |
| 位置编码(Positional Encoding) | 注入序列顺序信息 | 正余弦编码 vs 可学习编码优劣?相对位置? |
| 前馈网络(FFN) | 非线性特征变换 | 激活函数选择?两层线性中间维度为何放大? |
| 残差连接 + 层归一化 | 防止梯度消失,加速训练 | LayerNorm vs BatchNorm?Pre‑Norm vs Post‑Norm? |
面试问答卡片(第4章高频6题)
Q1: 请解释Transformer自注意力机制的计算过程。
- 考察点:对核心公式的理解,缩放因子的必要性,是否熟悉矩阵运算。
- 回答框架:
- 输入 X 经过三个不同线性变换得到 Q、K、V。
- 计算注意力分数:Q·Kᵀ / √dₖ(dₖ 为 K 的维度)。
- 可选 Mask 屏蔽未来位置(Decoder)。
- Softmax 归一化得到权重矩阵。
- 加权求和:权重 × 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: 为什么要使用多头注意力?如何将多个头的输出合并?
- 考察点:多头设计的动机,拼接与线性变换机制,并行理解。
- 回答框架:
- 单头注意力只能捕获一个子空间的依赖,多头可使模型关注不同位置、不同语义信息。
- 每个头独立计算自注意力,输出维度为 head_dim = d_model / h。
- 将所有头输出在最后一维拼接(concat),得到 d_model 维向量。
- 经过一个线性层(无偏置常用)做最终投影。
- 示例回答:“多头允许模型在不同表示子空间学习信息。假设 h=8,每个头计算自注意力得到 (B,L,64) 的输出,然后按最后一个维度拼接为 (B,L,512),再用线性层 Wo 投影到最终输出。这样每个头可以关注不同距离、不同语义的交互。” (约100字)
- 可能追问:“头数增大一定更好吗?为什么?” “每个头的参数是独立吗?”
- Tip:回答时可举例说明不同头可能关注“语法关系”或“语义相似性”,体现深度理解。
Q3: Transformer 为什么使用 LayerNorm 而不是 BatchNorm?
- 考察点:两种归一化的区别,序列模型特殊性,训练稳定性。
- 回答框架:
- BatchNorm 对 batch 维度计算均值和方差,受 batch size 影响,且对变长序列需特殊处理(不同长度位置统计不同)。
- LayerNorm 对每个样本的特征维度计算,与 batch 无关,天然适合变长序列。
- LayerNorm 保持序列内相对尺度,利于梯度传播。
- Transformer 中 LayerNorm 一般放在残差连接之后(Post‑Norm)或之前(Pre‑Norm)。
- 示例回答:“Transformer 处理变长序列,BatchNorm 需要对齐长度且受 batch 大小影响,而 LayerNorm 对每个 的特征维度独立归一化,不受序列长度和 batch 影响。另外 LayerNorm 在残差网络中更稳定,因此被选用。现在常用 Pre‑LayerNorm 使训练更稳定。” (约110字)
- 可能追问:“Pre‑Norm 和 Post‑Norm 哪个更好?为什么?”
- 避坑:不要只说“LayerNorm 用于 NLP”,要解释根本原因——序列建模中 batch 维度统计不可靠。
Q4: Transformer 中的位置编码是如何工作的?为什么需要?
- 考察点:对序列顺序重要性的认识,编码实现方式,正弦余弦的特性。
- 回答框架:
- 自注意力本身是置换不变的(permutation invariant),必须额外注入位置信息。
- 原版使用正余弦编码:pos 和偶数/奇数维度分别用 sin/cos 不同频率。
- 特点:值在 [-1,1] 之间,可以外推至更长序列,不同频率区分不同位置。
- 现代模型常用可学习位置编码(如 BERT)或相对位置编码(如 RoPE)。
- 示例回答:“Transformer 缺少顺序信息,因此加入位置编码。原版用正余弦公式生成固定编码:PE(pos, 2i)=sin(pos/10000^(2i/d)),PE(pos, 2i+1)=cos(...)。这种编码使模型能通过线性变换学到相对位置关系,并支持外推。实际应用中也可学习位置嵌入。” (约110字)
- 可能追问:“RoPE 和正余弦编码的区别?” “为什么相对位置编码更适合长文本?”
- Tip:回答时提及“外推能力”是关键得分点,可举例说明 T5 的相对位置偏置。
Q5: Transformer 的编码器和解码器有什么区别?
- 考察点:整体架构理解,交叉注意力,自回归生成。
- 回答框架:
- 编码器:堆叠自注意力 + FFN,每个位置能关注整个输入序列(双向)。
- 解码器:含自注意力(带 causal mask)、交叉注意力(Key/Value 来自编码器)、FFN。
- 交叉注意力使得解码器在生成时参考输入序列,自注意力保证自回归(只能看过去)。
- 等只使用解码器部分,去掉交叉注意力。BERT 只使用编码器。
- 示例回答:“编码器采用双向自注意力,每个 能看到整个输入。解码器包含带 mask 的自注意力(防止看到未来)和交叉注意力,其中 Q 来自自身,K、V 来自编码器输出。这样解码器在生成每个 时既考虑已生成序列,也利用输入信息。” (约100字)
- 可能追问:“为什么 只用解码器也能做理解?交叉注意力去掉后如何对齐?”
- 避坑:注意区分“编码器-解码器结构”和“仅解码器结构”,不要混淆 causal mask 的作用范围。
Q6: 请解释 Transformer 中 Q、K、V 的含义和维度关系。
- 考察点:对注意力机制的最基本概念理解,是否清楚线性变换的作用。
- 回答框架:
- Q(Query):当前查询,表示当前需要检索的内容。
- K(Key):被检索的键,与 Q 计算相似度。
- V(Value):实际携带的信息,被加权后提供输出。
- 输入 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 内容),面试官通常喜欢这种通俗解释。