Skip to content

Transformer 高频面试问答

本文件用于秋招技术面试口头表达训练,不承担完整原理正文职责。

详细原理参见:

  • 02_AI/Transformer/01_transformer-foundation.md
  • 02_AI/Transformer/02_attention.md
  • 02_AI/Transformer/03_transformer-block.md

1. Transformer 相比 RNN 为什么更适合并行训练?

RNN 在序列维度存在递归依赖:

ht=f(xt,ht1)

后一个位置依赖前一个位置的计算结果。

Transformer 使用 Self-Attention,可以将整段已知序列组织成矩阵运算,同时计算各位置的表示。

因此训练阶段不同 token position 之间具有更好的并行计算能力。

需要区分:Decoder-only 模型训练时可以并行处理已知序列中的多个位置,但自回归生成时仍然需要逐 token 生成。


2. Token ID 为什么不能直接作为连续数值特征?

Token ID 本质上只是词表索引。

例如 173174 数值接近,并不意味着对应 token 在语义上接近。

Embedding 将离散 Token ID 映射到可学习的连续向量空间:

tokenixiRdmodel

3. Transformer 为什么需要位置信息?

Self-Attention 本身主要根据表示之间的匹配关系进行信息交互,并没有天然编码完整的序列顺序信息。

因此需要额外引入位置表示,使模型能够感知 token 顺序、位置和距离关系。


4. WQ,WK,WV 与 Q/K/V 有什么区别?

WQ,WK,WV

是模型的可学习参数。

当前输入 X 经过这些参数得到:

Q=XWQ,K=XWK,V=XWV

所以 Q/K/V 是当前 Forward 中动态产生的 activation。

参数长期保存,Q/K/V 随输入动态变化。


5. 每个 Token 是否拥有独立的 WQ,WK,WV

不是。

同一个 Attention Head 内的所有 token 共享同一组投影参数。

虽然使用相同参数,但由于各 token 的 hidden representation 不同,得到的 q/k/v 也不同。


6. Q、K、V 分别负责什么?

Q 与 K 用于计算 token 间的信息路由权重:

αij=softmaxj(qikjTdk)

V 承载实际被路由和聚合的内容:

oi=jαijvj

Q/K 决定从哪里获取多少信息,V 决定真正获取什么信息。


7. 为什么 K 和 V 要分开?

用于判断“某个位置是否值得关注”的表示,不一定等于“关注以后应该传递什么内容”的表示。

因此 K 和 V 使用不同的可学习投影,使匹配与内容传递可以分别学习。


8. 为什么 Attention 要除以 dk

在经典简化假设下:

qk=i=1dkqiki

其方差大约随 dk 增长,因此标准差约为 dk

如果不缩放,维度增大后 Attention logits 的尺度容易变大,使 Softmax 分布过度尖锐并进入饱和区域。

因此:

QKTdk

用于稳定 logits 的数值尺度。


9. QKT 的维度是什么?

如果:

Q,KRn×dk

则:

QKTRn×n

(i,j) 个元素表示第 i 个 Query 与第 j 个 Key 的匹配分数。


10. Causal Mask 的作用是什么?

Decoder 自回归生成时,当前位置不能访问未来 token。

因此在 Softmax 前将未来位置的 Attention Score 设为 ,使这些位置经过 Softmax 后权重为 0。

如果训练阶段没有 Causal Mask,模型会读取未来真实 token,产生未来信息泄漏。


11. Multi-Head Attention 的意义是什么?

不同 Head 使用不同的 Q/K/V 投影参数,因此可以在不同表示子空间中形成不同的信息路由与内容表示。

Multi-Head Attention 不是将同一个 Attention 重复计算多次,而是在多个可学习子空间中并行建模不同的信息交互模式。


12. Attention 输出 O 是什么?

对于一个 Head:

O=AttentionWeights×V

其中每个 oi 都是第 i 个 token 聚合可访问上下文后的新表示。

它不是用于“更新 V”的参数操作,而是 Attention 子层产生的 contextualized representation。


13. Concat 后为什么还需要 WO

不同 Head 输出首先通过 Concat 拼接:

C=Concat(head1,,headh)

再通过:

CWO

重新组合不同 Head 的特征,并将结果投影回统一的 hidden representation 空间。


14. Residual Connection 为什么重要?

Residual:

y=x+F(x)

使子层可以学习对当前表示的增量修正,同时保留原始信息。

从梯度角度:

yx=I+Fx

因此存在较直接的 identity path,有助于深层模型中的信息与梯度传播。


15. Pre-Norm 与 Post-Norm 有什么区别?

Post-Norm:

Norm(X+F(X))

Pre-Norm:

X+F(Norm(X))

Pre-Norm 在子层前进行归一化,同时 Residual Path 保持更加直接,因此现代深层 Transformer 和大语言模型中更加常见。


16. FFN 在 Transformer 中负责什么?

Attention 主要负责不同 token 之间的信息通信。

FFN 对每个位置已经上下文化的 hidden representation 独立进行非线性特征计算。

text
Attention → 跨 token 通信
FFN       → token 内部计算

17. 为什么 FFN 需要非线性?

如果:

y=W2W1x

则可以写成:

y=Wx

多层线性变换仍然等价于一个线性变换。

加入 ReLU、GELU、SiLU 等非线性后,网络无法再整体合并成一个固定线性或仿射映射,从而获得更复杂的函数表达能力。


18. 为什么 Bias 不能代替非线性激活?

因为:

W2(W1x+b1)+b2

可以整理为:

Wx+b

仍然只是一个仿射变换。

真正产生非线性的是激活函数。


19. FFN 为什么通常先升维再降维?

典型 FFN:

dmodeldffdmodel

先映射到更大的中间特征空间进行非线性特征加工,再投影回 residual stream 所需的 dmodel


20. 一个 Pre-Norm Transformer Block 的完整数据流是什么?

首先对当前 hidden representation 归一化,再通过多个 Attention Head 完成跨 token 的信息路由与聚合;各 Head 的结果拼接后经 WO 重新融合,并通过 Residual 与原始表示相加。随后再次归一化,由 FFN 对每个位置已经上下文化的表示进行非线性特征计算,最后经过第二次 Residual 得到当前 Block 的输出。


Quick Calculation Checks

A. Matrix Shape

若:

Q,KR100×64

则:

QKTR100×100

B. Head Dimension

若:

dmodel=512,h=8

经典 MHA 中:

dhead=64

C. Causal Visibility

对于 3 个 token 的 Decoder Self-Attention:

text
T1 → T1
T2 → T1, T2
T3 → T1, T2, T3

Mistakes:

05_Mistakes/AI.md