LLM & Multimodal 面试复习笔记

01: Transformer 与注意力机制

核心主题:Self-Attention、Multi-Head Attention、位置编码、Encoder-Decoder
来源:Happy-LLM 第二章 + Base-LLM 第四章

1. 从 RNN 到 Attention 的动机

RNN 的三大核心问题驱动了 Transformer 的诞生:

Transformer 核心思想

完全基于注意力机制,允许每个 token 直接关注序列中任意位置,实现 $O(1)$ 的信息传递路径和完全并行化计算。

2. Self-Attention 机制

2.1 Q, K, V 投影

输入序列 $X \in \mathbb{R}^{n \times d}$ 通过三个可学习矩阵映射:

$$Q = XW_Q, \quad K = XW_K, \quad V = XW_V$$ $$W_Q, W_K \in \mathbb{R}^{d \times d_k}, \quad W_V \in \mathbb{R}^{d \times d_v}$$

2.2 缩放点积注意力 (Scaled Dot-Product Attention)

$$\text{Attention}(Q,K,V) = \text{softmax}\!\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$

计算步骤:

  1. 计算 $QK^T$:得到 $n \times n$ 的注意力分数矩阵
  2. 除以 $\sqrt{d_k}$:缩放防止数值过大
  3. (可选)应用 Mask:将不允许关注的位置设为 $-\infty$
  4. Softmax:归一化为概率分布
  5. 乘以 $V$:加权求和得到输出

2.3 为什么要除以 $\sqrt{d_k}$?

面试高频题

当 $d_k$ 较大时,$q \cdot k = \sum_{i=1}^{d_k} q_i k_i$ 的方差约为 $d_k$(假设 $q_i, k_i$ 独立同分布,均值0方差1)。

大方差 → softmax 输入值差异极大 → 输出趋近 one-hot → 梯度接近 0。

除以 $\sqrt{d_k}$ 将方差归一化为 1,确保 softmax 工作在梯度敏感区间。

3. Multi-Head Attention

3.1 动机与公式

动机:单一注意力只能捕获一种关系模式;多头可以同时关注不同子空间的不同关系。

$$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)W^O$$ $$\text{where } \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)$$

每个头的维度:$d_k = d_v = d_{model} / h$

3.2 参数量计算

组件参数量
$W_i^Q, W_i^K, W_i^V$ (所有头)$3 \times d_{model} \times d_{model}$
输出投影 $W^O$$d_{model} \times d_{model}$
MHA 总参数$4d_{model}^2$

4. Transformer Block

4.1 Pre-Norm vs Post-Norm

方式公式优劣
Post-Norm (原始) $x = \text{LN}(x + \text{MHA}(x))$ 正则化更强,但深层训练不稳定
Pre-Norm (现代) $x = x + \text{MHA}(\text{LN}(x))$ 梯度传递更稳定,适合深层模型

现代 LLM 统一采用 Pre-Norm(LLaMA, GPT-3 等)。

4.2 前馈网络 (FFN)

$$\text{FFN}(x) = \text{Activation}(xW_1 + b_1)W_2 + b_2$$

原始 Transformer:$d_{ff} = 4 \times d_{model}$,使用 ReLU。现代 LLM 使用 SwiGLU(见第3章)。

5. 位置编码

5.1 正弦位置编码 (Sinusoidal PE)

$$PE(pos, 2i) = \sin\!\left(\frac{pos}{10000^{2i/d_{model}}}\right)$$ $$PE(pos, 2i+1) = \cos\!\left(\frac{pos}{10000^{2i/d_{model}}}\right)$$

性质

5.2 RoPE 旋转位置编码

RoPE 核心思想

将位置信息编码为复数平面的旋转,使得 $q_m \cdot k_n$ 的注意力分数仅依赖相对位置 $m - n$。

为什么要用复数乘法?—— 二维平面旋转

将向量相邻两个维度看作复数的实部和虚部:$x = x_r + i x_i$。乘上单位复数 $e^{i\theta} = \cos\theta + i\sin\theta$:

$$(x_r + i x_i) e^{i\theta}$$

展开后等价于二维旋转矩阵:

$$\begin{pmatrix} x_r' \\ x_i' \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix} \begin{pmatrix} x_r \\ x_i \end{pmatrix}$$

即:向量在二维平面上旋转了角度 $\theta$。不同位置用不同旋转角度 $\theta_m = m \cdot \theta_0$,旋转角度差即为相对距离。

$$q_m' = q_m e^{im\theta}, \quad k_n' = k_n e^{in\theta}$$ $$q_m'^T k_n' = \text{Re}[q_m^T k_n \cdot e^{i(m-n)\theta}]$$

实现方式(逐对维度做二维旋转):

# 频率计算
freqs = 1.0 / (theta ** (torch.arange(0, dim, 2) / dim))
# 应用旋转
xq_out_r = xq_r * cos - xq_i * sin
xq_out_i = xq_r * sin + xq_i * cos

RoPE vs Sinusoidal PE 面试对比

特性Sinusoidal PERoPE
编码类型绝对位置相对位置
作用位置加到输入 embedding加到 Q/K(每层)
长度外推较弱较强(NTK-aware 可进一步增强)
额外参数
使用模型原始 Transformer, BERTLLaMA, Qwen, GPT-NeoX

6. Encoder-Decoder 架构

6.1 Encoder

每一层:Self-Attention + FFN(均带残差 + LN)

6.2 Decoder & Causal Mask

Decoder 使用 Masked Self-Attention:通过上三角 Mask 矩阵阻止关注未来位置。

$$\text{Mask}[i][j] = \begin{cases} 0 & \text{if } j \leq i \\ -\infty & \text{if } j > i \end{cases}$$

实现:将 $-\infty$ 加到注意力分数上,softmax 后变为 0。

6.3 Cross-Attention

Decoder 的第二个注意力层:

作用:让 Decoder 在生成时"查阅"输入序列的信息。

7. 时间复杂度对比

模型每层复杂度序列操作数最大路径长度
Self-Attention$O(n^2 \cdot d)$$O(1)$$O(1)$
RNN$O(n \cdot d^2)$$O(n)$$O(n)$
CNN$O(k \cdot n \cdot d^2)$$O(1)$$O(\log_k n)$

Self-Attention 优势:最短信息传递路径 $O(1)$,但二次复杂度是长序列的瓶颈。

面试要点总结

高频面试题

  1. Transformer 相比 RNN 的优势? 并行计算 + $O(1)$ 信息路径 + 无梯度消失
  2. 为什么要缩放(除以 $\sqrt{d_k}$)? 防止 softmax 饱和,保持梯度流动
  3. Multi-Head 的作用? 不同头捕获不同类型的关系(语法、语义、指代等)
  4. Pre-Norm vs Post-Norm? Pre-Norm 训练更稳定(梯度直通),现代 LLM 标配
  5. Self-Attention 的缺点? $O(n^2)$ 复杂度;无位置感知(需要PE);无归纳偏置
  6. Causal Mask 如何实现? 上三角矩阵填充 $-\infty$,softmax 后自动归零
  7. Transformer 参数量估算? 每层 $\approx 12d^2$(4d^2 MHA + 8d^2 FFN),总 $\approx 12Nd^2$