🚀 生成基模团队面试题全集

涵盖 Transformer · 训练范式 · 推理优化 · 视觉生成 · 多模态 · 系统设计 · 强化学习 · 代码题

130+
面试题
17
核心模块
2025
最新版本
🧠一、Transformer 架构原理
1
请描述 Transformer 的整体架构,Encoder 和 Decoder 有何区别?
高频原理

Transformer 由 Encoder 栈(原始论文 6 层)和 Decoder 栈(6 层)组成。

Encoder 每层包含:

  • 多头自注意力(Multi-Head Self-Attention)
  • 前馈神经网络(FFN,两层线性 + ReLU/GeLU)
  • 残差连接 + Layer Normalization

Decoder 每层多一个 Cross-Attention 子层,额外关注 Encoder 输出;自注意力使用 Causal Mask(下三角掩码)防止"偷看未来"。

现代主流变体:GPT/LLaMA 是 Decoder-Only(去掉 Encoder 和 Cross-Attention);T5/BART 保留完整 Encoder-Decoder。

💡 面试要点:Decoder-Only 更适合生成任务(逐 token 自回归),Encoder 更适合理解/分类。
2
自注意力(Self-Attention)的计算公式是什么?为什么要除以 √d_k?
高频原理
$$\text{Attention}(Q,K,V)=\text{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right)V$$

为什么除以 √d_k?

QK 点积结果的方差约为 d_k(若 Q、K 各分量均值 0、方差 1),随 d_k 增大,点积绝对值变大,softmax 进入极度饱和区(梯度消失)。除以 √d_k 将方差归一化为 1,使 softmax 在可训练区间工作。

💡 推导:若 q_i, k_i ~ N(0,1),则 q·k = Σq_i·k_i,方差 = d_k,标准差 = √d_k。
3
多头注意力(Multi-Head Attention)的作用?为什么不用单头?
高频原理

多头注意力将 d_model 维度划分为 h 个子空间,每个 head 独立计算注意力后拼接:

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

优点:

  • 多空间建模:不同 head 捕获不同类型的依赖(语法/语义/位置)
  • 打破对称性:单头 attention 矩阵可能退化为近对称,泛化差
  • 计算量相当:每个 head 的 d_k = d_model/h,总计算量与单头相同
4
Transformer 的位置编码方案有哪些?RoPE 的原理是什么?
高频原理
方案原理代表模型
绝对正弦位置编码sin/cos 固定公式叠加到 Embedding原版 Transformer
可学习绝对位置编码Embedding 表可训练BERT、GPT-2
相对位置编码(ALiBi)在 attention score 上加线性偏置BLOOM
RoPE旋转矩阵编码相对位置,作用于 Q/KLLaMA、GPT-NeoX

RoPE 原理:对位置 m 的 query 向量分量 (x_{2i}, x_{2i+1}) 进行旋转变换:

$$\begin{bmatrix}x_{2i}\cos(m\theta_i)-x_{2i+1}\sin(m\theta_i)\\x_{2i}\sin(m\theta_i)+x_{2i+1}\cos(m\theta_i)\end{bmatrix},\quad\theta_i=10000^{-2i/d}$$

两个位置 m、n 的内积只与相对位置 m−n 有关,天然建模相对位置,且可外推到更长上下文(配合 YaRN/NTK 插值)。

5
Pre-LayerNorm 与 Post-LayerNorm 的区别?为何现代 LLM 普遍用 Pre-LN?
原理

Post-LN(原始 Transformer):残差后才 normalize,梯度在深层容易爆炸,训练不稳定。

Pre-LN(GPT-2/LLaMA):每个子层输入先 normalize,梯度路径稳定,可直接训练深层模型,无需 warm-up 也能收敛。

RMSNorm(进一步简化):去掉均值项,只做方差归一化,更快,LLaMA 使用。

$$\text{RMSNorm}(x)=\frac{x}{\text{RMS}(x)}\cdot\gamma,\quad\text{RMS}(x)=\sqrt{\frac{1}{n}\sum_i x_i^2}$$
6
Transformer 的时间复杂度是多少?有哪些降低注意力复杂度的方法?
原理

标准自注意力时间复杂度为 O(n²·d),n 为序列长度,空间也是 O(n²)(存储 Attention 矩阵)。

方法复杂度思路
Sparse AttentionO(n√n)只关注局部+全局少数 token
Linear AttentionO(n·d)核函数近似,不存完整矩阵
FlashAttentionO(n²·d) 计算,O(n) IO分块计算,减少 HBM 访问
GQA(Group Query Attn)-多个 Q head 共享 K/V head,减显存
MLA(Multi-head Latent)-低秩压缩 KV,DeepSeek 使用
7
MoE(混合专家)模型的原理?训练和推理各有什么挑战?
原理

MoE 在 FFN 层用多个"专家网络"替代单一 FFN,通过 Router(门控网络)为每个 token 选 Top-K 个专家激活:

$$\text{output}=\sum_i g_i(x)\cdot\text{Expert}_i(x),\quad g=\text{TopK}(\text{Softmax}(Wx))$$

优点:参数量大但计算量可控(每 token 只激活部分专家),如 Mixtral-8×7B 有 47B 参数但每 token 激活 12B。

训练挑战:

  • 负载不均衡:部分专家被频繁选择(热门专家),需加辅助损失均衡负载
  • 通信开销:分布式训练中专家分散在不同设备,all-to-all 通信昂贵

推理挑战:需要将所有专家权重加载到显存或频繁 IO。DeepSeek-V3 使用 Expert Parallelism 缓解。

8
FFN(前馈网络)的结构演变?GLU/SwiGLU/GeGLU 是什么?
高频FFNLLaMA

1. 标准 FFN(原始 Transformer)

由两层全连接 + 激活函数组成:

$$\text{FFN}(x) = W_2 \cdot \text{ReLU}(W_1 x + b_1) + b_2$$

其中 $W_1 \in \mathbb{R}^{d_{ff} \times d}$,$W_2 \in \mathbb{R}^{d \times d_{ff}}$,典型设置 $d_{ff} = 4d$。

2. GLU(Gated Linear Unit)变体

引入门控机制,让网络自适应选择信息通道:

$$\text{FFN}_{\text{GLU}}(x) = (W_1 x \odot \sigma(W_{\text{gate}} x)) \cdot W_2$$

其中 $\odot$ 为逐元素乘法,$\sigma$ 为 sigmoid 门控。

3. SwiGLU(LLaMA / PaLM 使用)

将 sigmoid 门替换为 Swish 激活($\text{Swish}(x) = x \cdot \sigma(x)$):

$$\text{SwiGLU}(x) = (W_1 x \odot \text{Swish}(W_{\text{gate}} x)) \cdot W_2$$

4. GeGLU

将门控函数换为 GELU:

$$\text{GeGLU}(x) = (W_1 x \odot \text{GELU}(W_{\text{gate}} x)) \cdot W_2$$

5. 参数量对比

变体参数矩阵参数量说明
标准 FFN$W_1, W_2$$2 \times d \times 4d = 8d^2$两层全连接
GLU/SwiGLU/GeGLU$W_1, W_{\text{gate}}, W_2$$3 \times d \times \frac{8d}{3} \approx 8d^2$三个矩阵,用 $\frac{8d}{3}$ 作中间维度
💡 LLaMA 系列使用 $d_{ff} = \frac{8d}{3}$(向上取整到 256 的倍数),保持与标准 FFN 总参数量一致。

6. 为什么 GLU 变体更好?

  • 门控机制增强特征选择能力:gate 分支学习"哪些特征应该通过"
  • 更好的梯度流:相比单一 ReLU,门控可避免 dying neuron
  • 实验验证:Noam Shazeer (2020) 论文 "GLU Variants Improve Transformer" 证明 SwiGLU 在几乎所有任务上优于标准 FFN
# PyTorch 实现 SwiGLU FFN
class SwiGLU_FFN(nn.Module):
    def __init__(self, d_model, d_ff):
        super().__init__()
        self.w1 = nn.Linear(d_model, d_ff, bias=False)
        self.w_gate = nn.Linear(d_model, d_ff, bias=False)
        self.w2 = nn.Linear(d_ff, d_model, bias=False)
    
    def forward(self, x):
        return self.w2(F.silu(self.w_gate(x)) * self.w1(x))
⚠️ 注意:SwiGLU 中 Swish 和 SiLU 是同一个函数 $x \cdot \sigma(x)$,PyTorch 中用 F.silu()
9
GQA(Grouped Query Attention)和 MQA(Multi-Query Attention)的详细原理?
高频Attention推理优化

1. MHA(Multi-Head Attention)— 基线

$h$ 个独立的 Q/K/V head,每个 head 有独立的投影矩阵:

$$Q_i = xW_i^Q,\quad K_i = xW_i^K,\quad V_i = xW_i^V \quad (i=1,...,h)$$

2. MQA(Multi-Query Attention)

$h$ 个 Q head,但 只有 1 组 K/V(所有 Q head 共享同一组 K 和 V):

$$Q_i = xW_i^Q,\quad K = xW^K,\quad V = xW^V$$

优点:KV Cache 缩小 $h$ 倍。缺点:表达能力下降。

3. GQA(Grouped Query Attention)

$h$ 个 Q head,$g$ 组 K/V(每 $h/g$ 个 Q head 共享一组 K/V):

$$Q_i = xW_i^Q,\quad K_j = xW_j^K,\quad V_j = xW_j^V \quad (j = \lfloor i \cdot g / h \rfloor)$$

GQA 是 MHA($g = h$)和 MQA($g = 1$)的泛化。

4. KV Cache 大小对比

方法KV Cache 大小(每层)典型模型
MHA$2 \times h \times d_{\text{head}} \times \text{seq}$GPT-3, LLaMA-1
MQA$2 \times 1 \times d_{\text{head}} \times \text{seq}$Falcon, PaLM
GQA$2 \times g \times d_{\text{head}} \times \text{seq}$LLaMA-2 70B (g=8)

总 KV Cache = 上述值 × $L$(层数)× batch_size × bytes_per_element

5. 具体例子

模型头数 hKV 组数 g方法KV Cache 压缩比
LLaMA-2 7B3232MHA
LLaMA-2 70B648GQA
Falcon-40B641MQA64×
Mistral-7B328GQA

6. 从 MHA 转换到 GQA 的方法

训练好的 MHA 模型可以通过 mean pooling 将多个 KV head 合并为一组:

$$W_j^K = \frac{1}{h/g} \sum_{i \in \text{group}_j} W_i^K$$

合并后继续 fine-tune 一小段即可恢复性能(LLaMA-2 论文方法)。

💡 面试要点:GQA 在 quality 和 inference speed 之间取得了最佳平衡,是目前生产级 LLM 的标配方案。
10
MLA(Multi-head Latent Attention)的原理?DeepSeek-V2/V3 的核心创新?
DeepSeekKV压缩

1. 动机

即使使用 GQA,KV Cache 仍然很大。以 LLaMA-2 70B 为例:

$$\text{KV Cache per token} = 2 \times L \times g \times d_{\text{head}} = 2 \times 80 \times 8 \times 128 = 163,840 \text{ 参数}$$

MLA 的目标:将 KV Cache 压缩到更小的隐变量,不受 head 数量限制。

2. 核心思想:低秩压缩

将每个 token 的 KV 压缩到一个低维隐变量 $c_t$:

$$c_t = W^{DKV} \cdot h_t \quad \text{其中 } c_t \in \mathbb{R}^{d_c},\; d_c \ll n_h \times d_h$$

推理时只需缓存 $c_t$,需要时再解压回完整的 K 和 V:

$$K_t = W^{UK} \cdot c_t, \quad V_t = W^{UV} \cdot c_t$$

3. 完整流程(DeepSeek-V2)

  1. 压缩:$c_t^{KV} = W^{DKV} h_t$($d_c = 512$,原始 KV 维度可能是 $n_h \times d_h = 128 \times 128 = 16384$)
  2. 缓存:推理时只存 $c_t^{KV}$,大小仅 $d_c$ 维
  3. 解压:Attention 计算时 $K = W^{UK} c_t^{KV}$,$V = W^{UV} c_t^{KV}$
  4. Q 侧也压缩:$c_t^Q = W^{DQ} h_t$,$Q = W^{UQ} c_t^Q$(但 Q 不需要缓存)

4. RoPE 兼容问题与 Decoupled RoPE

RoPE 需要作用在 K 上,但压缩后的 $c_t$ 无法直接应用 RoPE。DeepSeek 的解决方案:

$$K_t = [W^{UK} c_t^{KV} ;\; \text{RoPE}(W^{KR} h_t)]$$

即额外学习一个小的 $W^{KR}$ 投影(维度很小,如 64),专门承载位置信息。缓存时额外存储这个 RoPE 部分。

5. 对比 GQA vs MLA

维度GQAMLA
压缩方式共享 KV head(离散分组)低秩投影(连续压缩)
压缩比灵活性受 $g$ 限制(g=1,2,4,8...)$d_c$ 可连续调节
缓存大小/token/层$2 \times g \times d_h$$d_c + d_{\text{rope}}$
DeepSeek-V2 实际$512 + 64 = 576$(vs MHA 的 16384)
表达能力受限于 group 粒度更高(低秩近似全 KV)
💡 MLA 使 DeepSeek-V2 的 KV Cache 仅为 MHA 的 ~3.5%,同时保持了接近 MHA 的质量。
⚠️ 面试追问:MLA 的额外计算成本在解压 $W^{UK}, W^{UV}$,但这可以被高效 kernel 优化(矩阵乘法 vs 内存读取 trade-off)。
11
Attention 的变体:Sliding Window、Dilated、Cross Attention 的区别和用途?
AttentionMistral效率

1. Full Attention(标准自注意力)

$$\text{Attn}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \quad \text{复杂度 } O(n^2)$$

每个 token 关注序列中所有其他 token。适合短序列,但长序列成本极高。

2. Sliding Window Attention(Mistral/Longformer)

每个 token 只关注其前后 $W$ 个 token:

$$\text{Attn}_i = \text{softmax}\left(\frac{Q_i K_{[i-W:i]}^T}{\sqrt{d_k}}\right) V_{[i-W:i]} \quad \text{复杂度 } O(n \times W)$$

信息可通过多层传播:$L$ 层后的有效感受野 = $L \times W$。

3. Dilated Attention

间隔采样关注位置(类似空洞卷积),扩大感受野而不增加计算:

$$\text{关注位置} = \{i - d, i - 2d, i - 3d, ...\} \quad (d = \text{dilation rate})$$

可与 sliding window 组合使用(Longformer 策略)。

4. Cross Attention

Q 来自一个序列(decoder),K/V 来自另一个序列(encoder):

$$Q = H_{\text{dec}} W^Q, \quad K = H_{\text{enc}} W^K, \quad V = H_{\text{enc}} W^V$$

用途:Encoder-Decoder 架构(T5、BART)、多模态(图像 token → 文本 decoder)。

5. Prefix Attention(Prefix Tuning)

前 $p$ 个 prefix token 可被所有位置看到(不受 causal mask 限制),实现 soft prompt:

$$\text{Mask}[i][j] = \begin{cases} 1 & j \leq p \text{ (prefix)} \\ 1 & j \leq i \text{ (causal)} \\ 0 & \text{otherwise} \end{cases}$$

6. 全面对比

Attention 类型复杂度感受野典型模型适用场景
Full$O(n^2)$全局GPT-3, LLaMA短/中等序列
Sliding Window$O(n \cdot W)$局部 $W$Mistral, Longformer长序列
Dilated$O(n \cdot W/d)$$W \times d$Longformer (global+local)超长文档
Cross$O(n \cdot m)$全局跨序列T5, FlamingoEnc-Dec / 多模态
Prefix$O(n^2)$prefix 全局Prefix Tuning高效微调
Sparse (BigBird)$O(n \cdot \sqrt{n})$局部+全局+随机BigBird长文档理解
💡 Mistral 的实现技巧:用 sliding window + KV cache rolling buffer,超过窗口的 KV 自动丢弃,显存恒定。
12
Transformer 中的激活函数演变?ReLU → GELU → Swish → SiLU?
激活函数原理

1. ReLU(Rectified Linear Unit)

$$\text{ReLU}(x) = \max(0, x)$$
  • 优点:计算简单,无梯度消失(正区间)
  • 缺点:dying neuron 问题 — 一旦输入为负,梯度永远为 0,神经元"死亡"

2. GELU(Gaussian Error Linear Unit)

$$\text{GELU}(x) = x \cdot \Phi(x) = x \cdot \frac{1}{2}\left[1 + \text{erf}\left(\frac{x}{\sqrt{2}}\right)\right]$$

近似公式(实际使用):

$$\text{GELU}(x) \approx 0.5x\left(1 + \tanh\left[\sqrt{\frac{2}{\pi}}\left(x + 0.044715x^3\right)\right]\right)$$

直觉:用概率(标准正态 CDF)来"软性截断"输入,越大的输入越可能通过。

3. Swish / SiLU(Sigmoid Linear Unit)

$$\text{Swish}(x) = \text{SiLU}(x) = x \cdot \sigma(x) = \frac{x}{1 + e^{-x}}$$

自门控(self-gating):输入本身决定自己的通过程度。

4. 性质对比

性质ReLUGELUSiLU/Swish
平滑性不平滑(0 处不可导)平滑平滑
负区间输出恒为 0接近 0(非零)接近 0(可为负)
梯度阶跃函数连续连续
计算成本最低中等中等
Dying neuron

5. 为什么 GELU/SiLU 更好?

  • 平滑非零梯度:负输入区域仍有微小梯度,避免 dying neuron
  • 概率化截断:不是硬截断(ReLU),而是软性选择
  • 自门控特性(SiLU):自动根据输入大小调整通过率
  • 实验验证:在大规模预训练中始终优于 ReLU

6. 各模型使用情况

模型激活函数位置
原始 TransformerReLUFFN
BERT / GPT-2GELUFFN
GPT-3GELUFFN
LLaMA / LLaMA-2/3SiLU (in SwiGLU)FFN gate
PaLMSiLU (in SwiGLU)FFN gate
Mistral / MixtralSiLU (in SwiGLU)FFN gate
GemmaGELU (in GeGLU)FFN gate
💡 现代 LLM 基本不再单独用 ReLU,而是搭配 GLU 结构使用 SiLU 或 GELU 作为门控函数。
13
Transformer 的参数量和 FLOPs 如何计算?
高频工程计算

1. 参数量公式(Decoder-Only,如 LLaMA)

Embedding 层:

$$P_{\text{embed}} = V \times d$$

其中 $V$ 为词表大小,$d$ 为隐藏维度。

每层 Attention:

$$P_{\text{attn}} = 4 \times d^2 \quad \text{(Q/K/V/O 四个投影矩阵各 } d \times d\text{)}$$

若使用 GQA($g$ 组 KV),则:$P_{\text{attn}} = d^2 + 2 \times g \times d_h \times d + d^2 = 2d^2 + 2gd_h d$

每层 FFN(SwiGLU):

$$P_{\text{ffn}} = 3 \times d \times d_{ff} \quad \text{(三个矩阵: } W_1, W_{\text{gate}}, W_2\text{)}$$

每层 RMSNorm:

$$P_{\text{norm}} = 2d \quad \text{(两个 RMSNorm,各 } d \text{ 参数)}$$

总参数量(简化,$d_{ff} = 4d$,标准 FFN):

$$P_{\text{total}} \approx Vd + L \times (4d^2 + 2 \times d \times 4d) = Vd + 12Ld^2$$

对于大模型,Embedding 占比很小,总参数 ≈ $12Ld^2$

2. FLOPs 公式

每 token 前向 FLOPs:

$$\text{FLOPs}_{\text{forward}} \approx 2N \quad \text{(N = 参数量)}$$

直觉:每个参数做一次乘法和一次加法 ≈ 2 FLOPs。

训练总 FLOPs(前向 + 反向 + 激活重计算):

$$\text{FLOPs}_{\text{train}} \approx 6ND$$

其中 $N$ = 参数量,$D$ = 训练 token 数。系数 6 = 前向(2) + 反向(4)。

3. 具体例子:LLaMA 系列

模型$d$$L$$h$$d_{ff}$总参数量训练 token训练 FLOPs
LLaMA-7B40963232110086.7B1T~4×10²²
LLaMA-13B512040401382413B1T~7.8×10²²
LLaMA-70B819280642867270B2T~8.4×10²³

4. 参数分布(以 LLaMA-7B 为例)

组件参数量占比
Token Embedding32000 × 4096 = 131M~2%
Attention (所有层)32 × 4 × 4096² = 2.1B~32%
FFN (所有层)32 × 3 × 4096 × 11008 = 4.3B~65%
RMSNorm + lm_head~131M~2%
💡 FFN 占据了约 2/3 的参数量!这也是为什么 MoE(混合专家)主要作用在 FFN 层。
⚠️ 面试常见追问:"7B 模型 FP16 需要多少显存?" 答:7B × 2 bytes = 14 GB(仅模型权重)。
14
Embedding 层的设计:Tied Embeddings、Rotary Embedding 应用位置?
Embedding设计

1. Word Embedding + Position Embedding

原始 Transformer 使用加法组合:

$$h_0 = \text{WordEmbed}(x) + \text{PosEmbed}(pos)$$

其中 Word Embedding 为可学习的 $V \times d$ 矩阵,Position Embedding 有两种:

  • 绝对位置编码(正弦/余弦 或 可学习):加到 input embedding 上
  • 相对位置编码(RoPE、ALiBi):注入到 attention 计算中

2. Tied Embeddings(权重绑定)

输入 Token Embedding($W_E$)和输出 lm_head($W_{LM}$)共享权重:

$$\text{logits} = h_L \cdot W_E^T \quad \text{(而非独立的 } W_{LM}\text{)}$$

为什么 Tie?

  • $W_E$:token → 向量空间(编码语义)
  • $W_{LM}$:向量空间 → token 概率(解码语义)
  • 两者本质都是 token ↔ 向量空间的映射,共享可减少参数且正则化

节省参数量:$V \times d$(如 32000 × 4096 = 131M)。

3. LLaMA 为什么不 Tie?

  • vocab 扩展时输入/输出可能需要不同维度
  • Untied 给予两端独立学习能力,可能提升性能
  • 大模型中 embedding 参数占比很小(~2%),节省不明显
  • 部分实验表明 untied 在大规模预训练中效果更好
模型是否 Tied说明
BERT / GPT-2✅ Tied经典做法,节省参数
T5✅ TiedEncoder-Decoder 共享
LLaMA 1/2/3❌ Untied独立 lm_head
Mistral❌ Untied同 LLaMA
Qwen-2✅ Tied节省参数
Gemma✅ TiedGoogle 风格

4. RoPE 的应用位置

RoPE 不作用在 embedding 层,而是在每层 attention 的 Q 和 K 上:

$$Q_m' = R_m Q_m, \quad K_n' = R_n K_n$$

这样 $Q_m'^T K_n' = Q_m^T R_m^T R_n K_n = Q_m^T R_{n-m} K_n$,自动编码相对位置 $n-m$。

5. Token Embedding 的初始化策略

  • 标准正态 $\mathcal{N}(0, 0.02^2)$(GPT-2 style)
  • 均匀分布 $U(-\sqrt{1/d}, \sqrt{1/d})$(PyTorch 默认)
  • 截断正态(避免极端值)
💡 面试要点:Tied embedding 在参数效率和性能间的 trade-off 取决于模型规模和 vocab 大小。
15
Transformer 训练中的学习率调度策略有哪些?
高频训练优化

1. Warmup + Cosine Decay(最主流)

$$\text{lr}(t) = \begin{cases} \text{lr}_{\max} \times \frac{t}{T_{\text{warmup}}} & t \leq T_{\text{warmup}} \\ \text{lr}_{\min} + \frac{\text{lr}_{\max} - \text{lr}_{\min}}{2}\left(1 + \cos\left(\frac{\pi (t - T_{\text{warmup}})}{T - T_{\text{warmup}}}\right)\right) & t > T_{\text{warmup}} \end{cases}$$

2. Warmup + Linear Decay

$$\text{lr}(t) = \text{lr}_{\max} \times \left(1 - \frac{t - T_{\text{warmup}}}{T - T_{\text{warmup}}}\right) \quad \text{for } t > T_{\text{warmup}}$$

简单但效果略逊于 cosine。GPT-3 论文使用此方案。

3. WSD(Warmup-Stable-Decay)— DeepSeek-V3

三阶段策略:

$$\text{lr}(t) = \begin{cases} \text{lr}_{\max} \times \frac{t}{T_w} & \text{Phase 1: Warmup (}t \leq T_w\text{)} \\ \text{lr}_{\max} & \text{Phase 2: Stable (}T_w < t \leq T_s\text{)} \\ \text{lr}_{\max} \times (1 - \frac{t - T_s}{T_d - T_s})^2 & \text{Phase 3: Decay (}t > T_s\text{)} \end{cases}$$

优势:Stable 阶段可灵活延长训练而无需预先确定总步数。

4. Warmup 的必要性

  • 初始阶段参数随机,梯度方向不稳定且范数大
  • 大 lr + 不稳定梯度 → loss spike → 训练崩溃
  • Warmup 让模型先"热身",参数进入合理区域后再用全力学习
  • Adam 优化器的二阶矩估计需要几步才能稳定

5. 典型超参数

超参典型值说明
Warmup steps2000约为总步数的 0.1%-1%
Peak lr3×10⁻⁴AdamW,取决于模型大小
Min lrpeak/10 = 3×10⁻⁵Cosine 最低点
Weight decay0.1LLaMA 标配
Adam β(0.9, 0.95)LLM 常用

6. Batch Size Warmup 与 LR Warmup 的关系

  • 有些训练先用小 batch 再逐步增大(batch size warmup)
  • 效果类似 lr warmup:初期低有效学习率 = 小 batch × 低 lr
  • 可以减少初期浪费的计算(小 batch 少算 token,但梯度方差大)
  • DeepSeek-V3 使用 batch size 从 3072 → 15360 逐步增加
# PyTorch CosineAnnealingWarmRestarts with Warmup
from torch.optim.lr_scheduler import LambdaLR
import math

def get_cosine_schedule_with_warmup(optimizer, warmup_steps, total_steps, min_lr_ratio=0.1):
    def lr_lambda(step):
        if step < warmup_steps:
            return step / warmup_steps
        progress = (step - warmup_steps) / (total_steps - warmup_steps)
        return min_lr_ratio + (1 - min_lr_ratio) * 0.5 * (1 + math.cos(math.pi * progress))
    return LambdaLR(optimizer, lr_lambda)
⚠️ 注意:lr 过大的症状 = loss spike / NaN;lr 过小的症状 = loss 下降过慢 / 欠拟合。
16
Dropout 在现代 LLM 中还用吗?为什么 LLaMA 去掉了 Dropout?
正则化LLaMA训练

1. 原始 Transformer 中的 Dropout

Vaswani et al. (2017) 在三个位置使用 dropout(rate = 0.1):

  • Attention dropout:softmax 后的注意力权重
  • FFN dropout:FFN 隐藏层激活后
  • Residual dropout:残差连接中子层输出加回前
$$\text{output} = x + \text{Dropout}(\text{SubLayer}(x))$$

2. 现代大模型为什么去掉 Dropout?

原因解释
数据量极大训练数据 1-15T tokens,模型只见过一次,过拟合风险极低
BF16 数值问题Dropout mask 的随机性与混合精度训练的数值精度冲突
训练不稳定大模型 + dropout 的随机性组合导致梯度方差过大
正则化需求减少模型参数量极大时,本身就有隐式正则化效果
确定性更好去掉后前向计算确定,便于 debug 和复现

3. 不使用 Dropout 的主流模型

模型Dropout正则化替代
GPT-3 (175B)❌ 0.0Weight decay
LLaMA 1/2/3❌ 0.0Weight decay 0.1
Mistral/Mixtral❌ 0.0Weight decay
DeepSeek-V2/V3❌ 0.0Weight decay + z-loss
PaLM❌ 0.0Weight decay + z-loss

4. 何时仍然需要 Dropout?

  • 小模型(<1B):参数有限,数据可能复用多次
  • 数据有限的 fine-tuning:如只有几千条数据的 SFT,需要防过拟合
  • 分类/NLU 微调:BERT-style 任务,数据远少于模型容量
  • 推荐在 LoRA fine-tuning 中使用 dropout(LoRA 论文建议 0.05)

5. 替代正则化方法

  • Weight Decay:$L_2$ 正则,惩罚大权重,LLM 标配(通常 0.1)
  • Data Augmentation:更多/更好的数据本身就是最好的正则化
  • Z-loss:$\lambda \cdot \log^2 Z$,稳定 softmax 的 log partition function
  • Gradient Clipping:限制梯度范数(间接防止过拟合不稳定)
💡 面试结论:预训练阶段不用 Dropout;微调阶段根据数据量决定(数据少则加 dropout 0.05-0.1)。
17
Transformer 中残差连接(Residual Connection)的作用和深层分析?
残差梯度深入

1. 基本原理

$$y = x + F(x)$$

梯度直接从输出流向输入,不经过 $F$:

$$\frac{\partial y}{\partial x} = I + \frac{\partial F(x)}{\partial x}$$

即使 $\frac{\partial F}{\partial x} \to 0$,梯度仍有 $I$(恒等项),不会消失。

2. 深度分析

(a)指数多子网络的集成

$L$ 层残差网络等价于 $2^L$ 个不同深度子网络的集成(Veit et al., 2016):

$$y = x + F_1(x) + F_2(x + F_1(x)) + ... \approx \sum_{\text{subset}} \text{各子路径}$$

这使得网络对单层删除具有鲁棒性。

(b)Pre-LN + Residual 使各层贡献近似独立

$$x_{l+1} = x_l + F_l(\text{LN}(x_l))$$

由于 LN 将输入归一化,各层的 $F_l$ 接收的输入量级相似,贡献近似独立。

(c)Identity shortcut 保证梯度下限

$$\frac{\partial \mathcal{L}}{\partial x_l} = \frac{\partial \mathcal{L}}{\partial x_L} \cdot \prod_{k=l}^{L-1}\left(I + \frac{\partial F_k}{\partial x_k}\right)$$

展开后每一项都包含直连的 $I$ 路径。

3. Post-LN vs Pre-LN

结构公式特点
Post-LN$\text{LN}(x + F(x))$原始 Transformer;训练不稳定但收敛精度可能更高
Pre-LN$x + F(\text{LN}(x))$LLaMA 等现代模型;训练更稳定,梯度范数更均匀
$$\text{Post-LN: } x_{l+1} = \text{LN}(x_l + F_l(x_l))$$ $$\text{Pre-LN: } x_{l+1} = x_l + F_l(\text{LN}(x_l))$$

4. DeepNet — 训练超深网络(微软,2022)

引入 $\alpha$ 缩放因子使 1000 层训练成为可能:

$$x_{l+1} = \alpha \cdot x_l + F_l(x_l)$$

其中 $\alpha > 1$(如 $(2L)^{1/4}$),让残差路径占主导,子层贡献被缩小。

同时配合 $\beta$-初始化:子层输出权重初始化为 $\beta \cdot \mathcal{N}(0, \sigma^2)$,$\beta < 1$。

5. 残差在 Transformer 中的应用位置

  • Attention 子层:$x + \text{Attn}(\text{LN}(x))$
  • FFN 子层:$x + \text{FFN}(\text{LN}(x))$
  • 每层两次残差连接,$L$ 层共 $2L$ 次
⚠️ 面试追问:"如果删掉残差连接会怎样?" 答:深层梯度迅速消失,训练几乎无法收敛;浅层(2-3层)可能还行,但 32+ 层必须有残差。
18
Softmax 的数值稳定性问题?实际实现中如何处理?
数值计算实现FlashAttention

1. 问题:数值溢出

朴素 softmax:

$$\text{softmax}(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}$$

当 $x_i$ 较大时,$e^{x_i}$ 会溢出:

  • FP16:$e^{11.09} = 65504$(最大值),$x > 11$ 即 overflow → Inf
  • BF16:$e^{88.7}$ 即 overflow
  • FP32:$e^{88.7}$ 即 overflow

2. Safe Softmax(标准解决方案)

利用 softmax 的平移不变性:$\text{softmax}(x) = \text{softmax}(x - c)$

$$\text{softmax}(x_i) = \frac{e^{x_i - \max(x)}}{\sum_j e^{x_j - \max(x)}}$$

减去最大值后,最大指数为 $e^0 = 1$,永远不会 overflow。

# Safe softmax 实现
def safe_softmax(x):
    x_max = x.max(dim=-1, keepdim=True).values
    exp_x = torch.exp(x - x_max)
    return exp_x / exp_x.sum(dim=-1, keepdim=True)

3. Online Softmax(FlashAttention 核心算法)

传统方法需要三遍扫描:

  1. 第一遍:计算 $m = \max(x)$
  2. 第二遍:计算 $\sum e^{x_i - m}$
  3. 第三遍:计算 $\frac{e^{x_i - m}}{\sum e^{x_j - m}}$

Online Softmax 实现一遍扫描(Milakov & Gimelshein, 2018):

$$\text{维护 running } m_j = \max(m_{j-1}, x_j)$$ $$\text{维护 running } d_j = d_{j-1} \cdot e^{m_{j-1} - m_j} + e^{x_j - m_j}$$

当新块到来时,需要修正之前的结果:

$$O_{\text{new}} = O_{\text{old}} \cdot \frac{e^{m_{\text{old}}}}{e^{m_{\text{new}}}} \cdot \frac{d_{\text{old}}}{d_{\text{new}}} + \frac{e^{x_{\text{new}} - m_{\text{new}}}}{d_{\text{new}}} \cdot V_{\text{new}}$$

FlashAttention 利用 Online Softmax 实现分块计算:

# FlashAttention 伪代码(核心循环)
m_i = -inf   # running max
l_i = 0      # running sum
O_i = 0      # running output

for block_j in K_blocks:
    S_ij = Q_i @ K_j.T / sqrt(d)
    m_new = max(m_i, S_ij.max())
    
    # 修正之前的结果
    correction = exp(m_i - m_new)
    l_new = l_i * correction + exp(S_ij - m_new).sum()
    O_i = O_i * (l_i * correction / l_new) + (exp(S_ij - m_new) / l_new) @ V_j
    
    m_i = m_new
    l_i = l_new

4. Log-Sum-Exp Trick(loss 计算)

计算 $\log \sum e^{x_i}$(如 cross-entropy loss 中的 log-partition):

$$\log \sum_i e^{x_i} = m + \log \sum_i e^{x_i - m} \quad (m = \max_i x_i)$$

避免先算 $\sum e^{x_i}$(可能 overflow)再取 log。

💡 FlashAttention 的核心创新不是数学上的新发现,而是将 online softmax 与 GPU SRAM 分块完美结合,避免了对 HBM 的重复读写。
⚠️ 面试要点:attention score 在 FP16 下 $QK^T/\sqrt{d}$ 很容易超过 11(尤其序列长时),safe softmax 是必须的。
19
Transformer 中的初始化策略?为什么不同层需要不同的初始化?
初始化muP深入

1. Xavier / Glorot 初始化(2010)

目标:保持前向和反向传播中信号方差不变。

$$W \sim \mathcal{N}\left(0, \frac{2}{\text{fan\_in} + \text{fan\_out}}\right) \quad \text{或均匀 } U\left(-\sqrt{\frac{6}{\text{fan\_in} + \text{fan\_out}}}, \sqrt{\frac{6}{\text{fan\_in} + \text{fan\_out}}}\right)$$

适用于线性激活 / tanh / sigmoid。

2. Kaiming / He 初始化(2015)

针对 ReLU 修正(ReLU 会将一半输出置零):

$$W \sim \mathcal{N}\left(0, \frac{2}{\text{fan\_in}}\right)$$

保证每层输出方差 = 输入方差(考虑 ReLU 的因子 2)。

3. GPT-2 的残差层缩放

问题:$L$ 层残差累加后方差增长为 $L$ 倍。解决:

$$W_{\text{output}} \sim \mathcal{N}\left(0, \frac{0.02}{\sqrt{2L}}\right)$$

对每层 Attention 和 FFN 的输出投影层($W_O$ 和 $W_2$)做缩放,使残差路径方差增长被控制。

4. muP(Maximal Update Parameterization)

核心目标:使超参数(尤其学习率)可以从小模型迁移到大模型。

参数类型标准参数化 (SP)muP
Embedding$\mathcal{N}(0, 1)$$\mathcal{N}(0, 1)$(不变)
Hidden layers$\mathcal{N}(0, 1/d)$$\mathcal{N}(0, 1/d)$,lr × $1/d$
Output layer$\mathcal{N}(0, 1/d)$$\mathcal{N}(0, 1/d)$,lr × $1/d$
学习率缩放所有层相同 lr不同层 lr ∝ $1/\text{width}$

关键洞察:SP 下最优 lr 随宽度变化;muP 下最优 lr 与宽度无关。

5. 为什么 Attention 输出层需要特殊初始化?

  • Attention 输出 + FFN 输出通过残差累加 $2L$ 次
  • 如果每次加入的方差都是 $O(1)$,输出方差 = $O(L)$,导致后面层的梯度不稳定
  • 解决:输出投影初始化方差 ∝ $1/L$(或 $1/\sqrt{2L}$)

6. DeepSeek 的 Zero Init for Output Projection

$$W_O^{(l)} = 0 \quad \text{(初始化为零矩阵)}$$

效果:训练初始时每层贡献为 0($F(x) = 0$),网络退化为恒等映射 $y = x$。随着训练逐渐学习有意义的变换。

优势:

  • 初始 loss = 纯 embedding 的 loss(可预测的起点)
  • 训练极稳定,不需要复杂的 warmup
  • 与 Pre-LN 配合效果最好

7. 实践总结

模型初始化策略
GPT-2$\mathcal{N}(0, 0.02)$,输出层 $/\sqrt{2L}$
LLaMA$\mathcal{N}(0, 0.02)$,RMSNorm 初始化为 1
DeepSeek-V2部分层 zero init
Cerebras-GPT (muP)宽度自适应初始化 + 自适应 lr
💡 面试关键:初始化不只是"让训练开始",它决定了训练动态的稳定性,尤其对深层和大模型至关重要。
20
Transformer 与 RNN/LSTM 的本质区别?为什么 Transformer 取代了 RNN?
高频对比Mamba

1. 并行性

$$\text{RNN: } h_t = f(h_{t-1}, x_t) \quad \text{(严格顺序依赖)}$$ $$\text{Transformer: } H = \text{Attn}(X W^Q, X W^K, X W^V) \quad \text{(全序列并行)}$$

Transformer 在训练时可以对序列内所有位置同时计算,GPU 利用率极高。

2. 长距离依赖

  • RNN:信息需要通过 $O(n)$ 步传递,梯度指数衰减(vanishing gradient)
  • LSTM:通过 cell state 缓解,但仍是 $O(n)$ 路径
  • Transformer:Attention 直接连接任意两个位置,路径长度 $O(1)$
$$\text{信号传播路径长度: RNN=}O(n), \text{ Transformer=}O(1)$$

3. 训练效率

维度RNN/LSTMTransformer
前向传播顺序 $O(n)$ 步并行一次完成
反向传播BPTT 顺序展开完全并行
GPU 利用率低(顺序瓶颈)高(矩阵乘法)
训练吞吐慢 10-100×基准

4. 推理效率(Transformer 的弱点)

维度RNN/LSTMTransformer
每步推理计算$O(d^2)$(恒定)$O(n \cdot d)$(随序列增长)
状态大小$O(d)$(固定 hidden state)$O(n \cdot d)$(KV Cache 线性增长)
生成第 n 个 token$O(1)$ 额外成本$O(n)$ 额外成本

5. 新一代架构:试图结合两者优势

Mamba (S4/SSM 系列):

$$h_t = \bar{A} h_{t-1} + \bar{B} x_t, \quad y_t = C h_t$$
  • 训练时可以展开为卷积(并行)
  • 推理时用递推($O(1)$ per step,像 RNN)
  • 选择性机制(input-dependent $\bar{A}, \bar{B}$)模拟 attention 的动态性

RWKV:

  • 线性 attention 变体 + time decay
  • 训练并行(矩阵形式),推理递推(RNN 形式)

6. 全面对比表

特性TransformerRNN/LSTMSSM (Mamba)
训练并行度✅ 完全并行❌ 顺序✅ 卷积并行
训练复杂度$O(n^2 d)$$O(n d^2)$$O(n d)$
推理每步$O(n d)$$O(d^2)$$O(d^2)$ (状态固定)
长距离建模✅ 强($O(1)$ 路径)❌ 弱(梯度衰减)⚡ 中等(选择性)
状态/内存$O(n)$ KV Cache$O(1)$ hidden state$O(1)$ 状态
GPU 友好度✅ 矩阵乘法❌ 循环依赖✅ scan/conv
In-context learning✅ 强❌ 弱⚡ 有限
可解释性中(attention map)
代表模型GPT-4, LLaMAELMo, 旧 NMTMamba-2, Jamba

7. 为什么 Transformer 最终胜出?

  1. GPU 硬件适配:矩阵乘法是 GPU 最擅长的操作
  2. Scaling Law:Transformer 的性能随规模可预测地提升
  3. In-context Learning:注意力机制天然支持 few-shot
  4. 工程生态:FlashAttention、vLLM 等优化使 Transformer 推理也越来越快
💡 面试关键观点:Transformer 用空间(KV Cache)换时间和质量;Mamba 试图用状态压缩找回 RNN 的内存效率,同时保留训练并行性。目前混合架构(Jamba = Transformer + Mamba)可能是未来方向。
⚠️ 追问:"Mamba 能否完全替代 Transformer?" 目前看不能 — 在需要精确 recall 和 in-context learning 的任务上,纯 SSM 仍逊于 Transformer。
📚二、预训练原理与技术
8
语言模型预训练的目标函数是什么?Causal LM 与 Masked LM 有何区别?
高频原理

Causal LM(自回归,GPT 系列):给定前 t−1 个 token,预测第 t 个 token。损失为交叉熵:

$$\mathcal{L}=-\sum_t\log P(x_t\mid x_1,\ldots,x_{t-1})$$

Masked LM(BERT):随机 mask 15% token,预测被 mask 的词;双向注意力,不能直接做生成。

Causal LMMasked LM
注意力方向单向(左到右)双向
适合任务文本生成、对话理解、分类、NER
代表模型GPT、LLaMA、QwenBERT、RoBERTa
9
预训练的 Scaling Law 是什么?如何指导训练计算量分配?
原理

OpenAI Scaling Law(Kaplan et al.):模型 Loss 与模型参数量 N、数据量 D、计算量 C 之间满足幂律关系。

Chinchilla Scaling Law(Hoffmann et al.):在固定计算预算 C 下,最优分配是 N ≈ D(参数量约等于 token 数),即 1B 参数需约 20B tokens。

$$N^*=\sqrt{\frac{C}{6}},\quad D^*=\sqrt{6C}$$

实践指导:不要一味扩大模型,同等算力下同比增加数据和参数更优。LLaMA 系列有意"欠训练参数"但"过训练数据",以获得更强推理效率比。

10
预训练的数据工程:如何进行数据清洗、去重和质量筛选?
原理

主要流程:

  1. 语言检测:fastText 识别语种,过滤低质量混合语言
  2. 规则过滤:去除广告、乱码、重复符号;过滤极短/极长文档
  3. MinHash 去重:局部敏感哈希(LSH)+Jaccard 相似度,去除近重复文档(n-gram 级别)
  4. 质量打分:用小型分类器(如 fastText 训练)筛选高质量内容(Wikipedia 风格)
  5. 毒性过滤:基于关键词词典或分类器去除有害内容
💡 CC-Net、Dolma、RedPajama 均开源了完整数据清洗管道。
11
什么是 Tokenizer?BPE、WordPiece、SentencePiece 各有何特点?
高频原理
算法核心思路代表模型
BPE(Byte Pair Encoding)迭代合并最高频字节对,自底向上构建词表GPT-2、Qwen、Llama
WordPiece类 BPE,但合并标准是最大化语言模型似然BERT
SentencePiece + Unigram基于 Unigram 语言模型的统计分词,与语言无关T5、mBART

中文特点:字粒度 tokenize 词表小但序列长;子词方案更灵活,现代模型通常混合 Byte-level BPE,将任意字节都能编码(无 UNK)。

12
大模型分布式训练的并行策略有哪些?各自解决什么瓶颈?
高频原理
策略解决问题通信量
数据并行(DP)吞吐量不够,单卡能放下整个模型梯度 AllReduce
张量并行(TP)单层参数太大单卡放不下(如 FFN、Attn 分列并行)每层 AllReduce
流水线并行(PP)层数太多,按层切分到不同设备micro-batch P2P
序列并行(SP)超长序列,Attention 的 N² 显存按序列切分
ZeRO(DeepSpeed)优化器状态/梯度/参数显存Stage 1/2/3 可选

实际大规模训练(如 GPT-4)通常是 DP × TP × PP 三维混合并行。

🎯三、后训练与对齐技术
13
SFT(有监督微调)的流程是什么?数据格式有何要求?
高频原理

SFT 流程:在预训练基座上,用指令-回答对继续训练,教模型"遵从指令"。

  1. 构建高质量指令数据:<System><Human><Assistant> 三元组格式
  2. 只对 Assistant 回答部分计算 loss,System/Human 部分 mask 掉
  3. 通常训练 1~3 个 epoch,学习率 1e-5 ~ 2e-5,防止过拟合

数据质量 > 数量:InstructGPT 仅用 1.3 万条高质量人工标注,效果远超低质量百万条数据。

⚠️ 注意:SFT 容易导致灾难性遗忘,通常加入少量预训练数据混合训练。
14
RLHF 的完整流程?奖励模型如何训练?PPO 在其中的作用?
高频原理

三阶段流程:

  1. SFT:基座 → 指令微调模型
  2. RM(奖励模型)训练:收集同一 prompt 下多个回答的人类偏好排序,用 BradleyTerry 模型训练:
    $$\mathcal{L}_\text{RM}=-\log\sigma\!\left(r(y_w)-r(y_l)\right)$$
    y_w 为人类更偏好的回答,y_l 为较差回答
  3. PPO 强化学习优化:用 RM 打分作为 reward,用 PPO 更新策略模型,同时加 KL 散度惩罚防止偏离 SFT 模型:
    $$R=r_\theta(x,y)-\beta\cdot\mathrm{KL}(\pi_\theta\|\pi_\text{ref})$$
💡 PPO 的 clip 机制防止策略更新过大:L_CLIP = min(r_t·A_t, clip(r_t, 1-ε, 1+ε)·A_t)
15
DPO(Direct Preference Optimization)与 RLHF 有何区别?优缺点是什么?
高频原理

DPO 绕过了显式奖励模型和 PPO,直接用偏好数据优化策略模型:

$$\mathcal{L}_\text{DPO}=-\log\sigma\!\left(\beta\log\frac{\pi_\theta(y_w\mid x)}{\pi_\text{ref}(y_w\mid x)}-\beta\log\frac{\pi_\theta(y_l\mid x)}{\pi_\text{ref}(y_l\mid x)}\right)$$
RLHF+PPODPO
是否需要 RM
训练稳定性较难,超参多简单,类 SFT
效果灵活性更高略逊但工程简单
计算成本高(4 个模型同时在线)低(2 个模型)
💡 2024 趋势:GRPO(DeepSeek-R1 使用)去掉 Critic 模型,进一步简化。
16
LoRA 的原理是什么?QLoRA 有何改进?
高频原理

LoRA(Low-Rank Adaptation):冻结原始权重 W₀,在其旁边并联两个低秩矩阵 A(d×r)和 B(r×d):

$$W=W_0+\Delta W=W_0+BA,\quad r\ll d$$

推理时合并 ΔW,无额外延迟。训练参数量仅为原始的 0.1%~1%。

QLoRA:将基础模型用 NF4(4-bit Normal Float)量化存储,LoRA 权重用 BF16 训练,通过双重量化分页优化器实现在单卡 48GB 上微调 65B 模型。

LoRAQLoRA
基础模型精度FP16/BF16NF4 量化
显存需求~2×基础比 LoRA 少 50%+
精度损失极小略有损失
17
Chain-of-Thought(CoT)原理?如何让模型具备推理能力?
原理

CoT 通过在 prompt 中提供逐步推理示例,引导模型输出中间推理步骤,显著提升复杂推理任务(数学、逻辑)的准确率。

  • Few-shot CoT:在 prompt 中给几个"问题+思维链+答案"示例
  • Zero-shot CoT:直接在 prompt 后加"Let's think step by step"
  • Self-Consistency:对同一问题采样多条推理路径,多数票选结果
  • 训练时蒸馏:用 CoT 数据做 SFT,让模型内化推理能力(o1 / R1 路线)
💡 DeepSeek-R1 通过 GRPO 强化学习,让模型在无示例情况下自发涌现长思维链。
四、推理加速与优化
18
KV Cache 的原理?为什么能加速自回归推理?
高频原理

自回归推理中,每步生成新 token 时,旧 token 的 Key 和 Value 计算结果不变,KV Cache 缓存这些结果,避免重复计算。

无 KV Cache:生成第 t 个 token 需对前 t 个 token 重新计算 attention,总复杂度 O(n²)。

有 KV Cache:每步只计算新 token 的 Q,用缓存的 K/V,每步 O(n),总复杂度 O(n²) → 每步 O(n)。

显存代价:KV Cache 大小 = 2 × layers × n_heads × d_head × seq_len × precision,长序列时可能超过模型本身显存。

💡 优化:MQA(Multi-Query Attention)让所有 Q head 共享同一套 KV,大幅减少 KV Cache。
19
FlashAttention 的核心思想?解决了什么问题?
高频原理

问题:标准 Attention 需要将 n×n 的注意力矩阵写入 HBM(GPU 高带宽内存),IO 成为瓶颈。

FlashAttention 思想:分块计算 + Online Softmax

  1. 将 Q/K/V 按行分块,每块加载到 SRAM(片上缓存)
  2. 用 Online Softmax 算法(Milakov & Gimelshein)逐块更新 softmax,无需存完整矩阵
  3. 计算完整 Attention 但 只写回最终输出 O,中间矩阵不写 HBM

效果:计算量不变(仍 O(n²)),但 IO 降到 O(n),实测 2~4× 加速,显存从 O(n²) 降到 O(n)。

20
vLLM 的 PagedAttention 原理?如何提升推理服务吞吐量?
高频原理

问题:传统 LLM 服务为每个请求预分配最大长度的 KV Cache,造成大量显存碎片和浪费(利用率 <20%)。

PagedAttention:借鉴操作系统虚拟内存分页思想:

  • KV Cache 按固定大小 Block(如 16 tokens)分配
  • 通过 Block Table 映射逻辑块→物理块(类似页表)
  • Block 支持多请求写时复制(CoW)共享(prefix sharing)

效果:显存碎片几乎为 0,支持 Continuous Batching(不同长度请求动态合并),吞吐量提升 2~24×。

21
模型量化(INT8/INT4)的原理?PTQ 与 QAT 的区别?
原理

量化原理:将浮点权重/激活映射到低精度整数:

$$x_q=\mathrm{round}\!\left(\frac{x}{\text{scale}}\right)+z_p,\quad\text{scale}=\frac{x_{\max}-x_{\min}}{2^b-1}$$
INT8INT4
显存压缩~4×(vs FP32)~8×
精度损失极小中等,需仔细校准
硬件支持广泛需 A100/H100 Tensor Core

PTQ(Post-Training Quantization):训练后直接量化,不需重新训练,速度快但精度可能有损。代表:GPTQ、AWQ。

QAT(Quantization-Aware Training):训练时模拟量化误差,精度更高,但需要训练成本。

💡 AWQ 的思路:权重中少量"显著权重"保持高精度,其余量化 → 比 GPTQ 更好保留模型能力。
22
投机解码(Speculative Decoding)的原理是什么?
原理

用小模型(草稿模型)快速生成 k 个候选 token,再用大模型并行验证,接受/拒绝每个 token:

  1. 小模型(草稿模型)自回归生成 k 个 token(快)
  2. 大模型对 k+1 个位置并行 forward(一次)
  3. 按接受率公式(rejection sampling)决定接受哪些 token
  4. 拒绝的位置重采样,从该位置继续

效果:大模型的期望加速比取决于小模型与大模型的对齐程度,通常 2~3×,且不改变输出分布(与大模型完全一致)。

🎨五、生成模型(扩散/VAE/GAN)
23
扩散模型(Diffusion Model)的前向和反向过程是什么?
高频原理

前向过程(加噪):逐步向数据 x₀ 添加高斯噪声,经 T 步后趋近标准高斯分布:

$$q(x_t\mid x_{t-1})=\mathcal{N}\!\left(x_t;\sqrt{1-\beta_t}\,x_{t-1},\beta_t I\right)$$

任意时刻可直接采样:

$$x_t=\sqrt{\bar\alpha_t}\,x_0+\sqrt{1-\bar\alpha_t}\,\varepsilon,\quad\varepsilon\sim\mathcal{N}(0,I),\quad\bar\alpha_t=\prod_s(1-\beta_s)$$

反向过程(去噪):学习神经网络 ε_θ(x_t, t) 预测噪声,逐步去噪恢复 x₀:

$$\mathcal{L}=\mathbb{E}\!\left[\|\varepsilon-\varepsilon_\theta(x_t,t)\|^2\right]$$
💡 DDPM(Ho et al. 2020)是奠基性工作;DDIM 通过确定性采样大幅减少采样步数(1000→50步)。
24
Stable Diffusion 的架构?Latent Diffusion Model(LDM)的核心思想?
高频原理

LDM 核心思想:在 VAE 的隐空间(Latent Space)而非像素空间做扩散,大幅减少计算量。

SD 主要组件:

  • VAE Encoder/Decoder:图像 → 4×64×64 latent(压缩因子 8)
  • U-Net(去噪网络):在 latent 空间预测噪声,backbone 含 ResBlock + Cross-Attention
  • CLIP Text Encoder:文本提示 → 条件向量,通过 Cross-Attention 注入 U-Net
  • Scheduler:控制去噪步数和采样策略(DDIM、DPM-Solver)
💡 Classifier-Free Guidance(CFG):训练时随机丢弃条件(无条件/有条件各半),推理时加权:ε = ε_uncond + w·(ε_cond − ε_uncond),w 越大图像越符合 prompt。
25
VAE 的原理?ELBO 损失由哪两部分组成?
原理

VAE 用 Encoder 将输入 x 编码为隐变量 z 的概率分布(均值 μ 和方差 σ²),再用 Decoder 从 z 重建 x,通过重参数化技巧实现可微分采样。

ELBO 损失:

$$\mathcal{L}=\mathbb{E}_{q(z|x)}[\log p(x|z)]-\mathrm{KL}(q(z|x)\|p(z))$$
  • 重建项:−E[log p(x|z)],使 Decoder 重建准确
  • KL 散度项:使编码分布接近先验 N(0,I),保证隐空间结构性

重参数化技巧:z = μ + σ·ε(ε ~ N(0,I)),使梯度可以流过采样步骤。

26
GAN 的原理?训练不稳定的原因及改进方法?
原理

GAN 包含 生成器 G判别器 D,博弈训练:

$$\min_G\max_D\;\mathbb{E}[\log D(x)]+\mathbb{E}[\log(1-D(G(z)))]$$

训练不稳定原因:

  • 模式崩溃:G 只生成少数样本以骗过 D
  • 梯度消失:D 太强时,G 的梯度接近 0
  • 非收敛振荡:G/D 交替更新可能循环震荡

改进:

  • WGAN:用 Wasserstein 距离替代 JS 散度,Lipschitz 约束(梯度裁剪/梯度惩罚)
  • StyleGAN:映射网络 + AdaIN,控制不同层次的风格
  • 渐进式训练:从低分辨率逐渐增大,稳定训练
27
Flow Matching 与扩散模型的关系?有何优势?
原理

Flow Matching 直接学习从噪声到数据的确定性速度场(ODE),而非 SDE(扩散模型):

$$\frac{dx}{dt}=v_\theta(x,t),\quad t:0\to 1$$

训练目标:让模型预测的速度场与简单插值路径(如线性路径)的速度一致:

$$\mathcal{L}=\mathbb{E}\!\left[\|v_\theta(x_t,t)-(x_1-x_0)\|^2\right],\quad x_t=(1-t)x_0+t\cdot x_1$$

优势:

  • 训练目标更简单直接,无需复杂噪声调度
  • 可用更少步数(8~16 步)生成高质量图像
  • Stable Diffusion 3、FLUX、字节 Wan 等均使用
28
DDIM 相比 DDPM 做了哪些改进?其采样过程是确定性的吗?
高频原理

DDPM 的马尔科夫链定义了展开后验概率 q(x₁:T|x₀),采样是随机的。DDIM 将前向过程重定义为一类非马尔科夫零方差过程:

$$x_{t-1}=\sqrt{\bar\alpha_{t-1}}\!\left(\frac{x_t-\sqrt{1-\bar\alpha_t}\,\varepsilon_\theta(x_t,t)}{\sqrt{\bar\alpha_t}}\right)+\sqrt{1-\bar\alpha_{t-1}}\,\varepsilon_\theta(x_t,t)$$

当 η=0 时采样过程完全确定性,同一初始噪声 x_T 永远得到相同输出。

优势:

  • 采样步数可从 1000 降至 20~50 步,速度提升 20-50×
  • 确定性采样利于图像编辑(interpolation):在 latent 空间线性插值即可得到语义过渡
  • 共享训练好的 DDPM 权重,无需重训练
29
Classifier-Free Guidance (CFG) 的原理与作用?为什么提高 CFG Scale 会导致图像过饱和?
高频原理

CFG 公式:

$$\varepsilon_\text{guided}=\varepsilon_\text{uncond}+w\cdot(\varepsilon_\text{cond}-\varepsilon_\text{uncond})$$

w 为 Guidance Scale,等价于在条件方向上拉长梯度。

训练方式:随机以 10%~20% 概率丢弃 condition(设为空字符串),训练同一个 U-Net 同时学有条件/无条件两种路径。

过饱和原因:w 过大时,梯度方向被过度放大,模型强行生成与 condition 最相关且概率最高的像素,导致颜色饱和、细节丢失、artifact 增加。

💡 实践经验:写实图/写实特写 CFG=7~9;艺术插画/海报 CFG=4~6;超过 15 一般就会出现饱和。
30
扩散模型的噪声调度策略(Noise Schedule)有哪些?各自对生成质量有什么影响?
原理
调度公式/特点适用场景
Linear (DDPM)β_t 线性从 1e-4 到 0.02基础实验
Cosine (improved DDPM)ᾱ_t = cos²(πt/2T),低 t 整流冠写效果更轻对称高分辨率图像
EDM (逸收编方)用 σ 直接描述噪声级别,去掉 T 离散概念SD3/FLUX
Linear FlowFlow Matching 的线性路径,最简单直接Wan、Sora 类

调度影响信噪比分布:Cosine 调度在中间时间步保留更多信号,对高分辨率细节生成更友好;过早进入纯噪声会浪费训练容量。

31
图像生成的主流评价指标:FID、IS、CLIP Score 的计算方式与局限性?
高频原理
指标计算方式局限性
FID(Fréchet Inception Distance)InceptionV3 提取真实/生成集的特征,计算两模态高斯分布的 Fréchet 距离依赖 ImageNet 特征空间,对文本-图对齐不敏感
IS(Inception Score)E[KL(p(y|x) || p(y))],高 IS 要求类别明确且多样不衡量图文对齐;弹模式时 IS 也可能很高
CLIP ScoreCLIP 图像-文本余弦相似度对细小细节/属性绑定较弱
DINO/LPIPS真实性/感知相似度需要参考图像
💡 实际评估常用 FID + CLIP Score + 人工评审三者结合。
32
控制生成(ControlNet)的架构设计是什么?训练时为何只训练副本?
高频原理

ControlNet 为平行复制原始 U-Net 的编码器半部(副本),功能:

  1. 原始 U-Net 权重冻结,保留预训练涌现能力
  2. 副本编码器接受额外条件(边缘图/深度图/骨架),通过Zero Convolution(初始化为 0 的 1×1 卷积)将特征逐层加进解码器
  3. Zero Conv 保证训练初期不引入噪声,梯度平稳

为何只训练副本?

  • 可训练参数量仅为全模型的 50%,显存减少
  • 冻结原始 U-Net 防止灾失性遗忘,不危害已有文本生成能力
  • 支持多个 ControlNet 叠加使用
33
LoRA 应用于扩散模型微调时(DreamBooth + LoRA)的流程和注意事项?
原理

DreamBooth 目标:用 3~20 张特定主题图片,让扩散模型学会生成该主题内容。

+ LoRA 流程:

  1. 准备 3~20 张目标图像 + 认罪图像(prior preservation loss 防止过拟合)
  2. 在 U-Net 的 Attention 层插入 LoRA,秩 <rank=4~32>
  3. 训练 loss = diffusion MSE loss + λ · prior loss
  4. 训练 200~500 steps,lr 约 1e-4

常见问题:

  • 语言漂移:过多训练后模型只会生成特定主题而失去泛化 → 加大 prior loss 权重
  • 过拟合:图像并不多时应及时停止 → 评估 validation loss
  • LoRA Rank 选择:写实水平用 r=8;风格过渡用 r=16~32
34
视频生成的 VAE 设计:为什么要在时间维度也进行压缩?如何保证隐空间连贯性?
原理

图像 VAE:仅在空间维压缩(H×W ÷ 8);视频 VAE 额外在时间维压缩(T ÷ 4),进一步降低扩散过程的计算量:

原始视频 $T\times H\times W\;\to$ Latent $\dfrac{T}{4}\times\dfrac{H}{8}\times\dfrac{W}{8}$

时序连贯性保证方法:

  • 3D卷积:在 Encoder/Decoder 里使用 3D Conv 捕捉时空联合特征
  • Temporal Attention:在 latent 序列上做时间轴注意力,支持跨帧建模
  • 帧间光流监督:加入光流一致性损失,强制相邻帧 latent 运动可推)
35
IP-Adapter 和图片提示(Image Prompt)技术的实现原理?
原理

IP-Adapter 实现图片内容作为提示,控制生成图的风格/内容:

  1. CLIP 图像编码器提取图片特征(使用 patch-level embedding,非仅 CLS token)
  2. 新增一个平行的跨注意力子层(Decoupled Cross-Attention):
    $$\text{Attn}=\text{Attn}_\text{text}+\lambda\cdot\text{Attn}_\text{image}$$
    文本 Cross-Attention 和图片 Cross-Attention 分开进行,控制权重 λ 平衡内容/文本影响力
  3. 冻结原始 U-Net,只训练新增 Attention 层和图像投影
💡 IP-Adapter-FaceID 进一步用人脸识别模型提取身份 embedding,实现人脸一致性生成。
👁️六、多模态模型
28
CLIP 的训练方式?为什么能做零样本图像分类?
高频原理

训练:收集 4 亿图文对,用对比学习训练图像编码器和文本编码器:最大化正样本对(配对图文)的余弦相似度,最小化负样本对的相似度。

$$\mathcal{L}=-\frac{1}{N}\sum_i\log\frac{\exp(\mathrm{sim}(I_i,T_i)/\tau)}{\sum_j\exp(\mathrm{sim}(I_i,T_j)/\tau)}$$

零样本分类:将类别名称格式化为 "a photo of a {class}",用文本编码器生成所有类别 embedding,对输入图像计算最近邻,即可在未见过类别上分类。

局限:对细粒度视觉理解(计数、空间关系)弱;对 OCR 文字识别差。

29
视觉语言模型(VLM)如 LLaVA 的架构设计?图像特征如何对齐到语言空间?
高频原理

LLaVA 架构:

  1. 视觉编码器:CLIP ViT 提取图像 patch 特征(如 256 tokens)
  2. 投影层(MLP/Linear):将视觉特征映射到 LLM 的 token embedding 维度(模态对齐)
  3. LLM(Vicuna/LLaMA):将图像 token 与文本 token 拼接后统一处理

训练策略(两阶段):

  • 阶段一:冻结视觉编码器和 LLM,仅训练投影层(图文特征对齐)
  • 阶段二:释放 LLM 进行 SFT,用图文对话数据微调
💡 LLaVA-1.5 用 MLP 替代 Linear 连接层,并加入 ShareGPT4V 高质量数据,大幅提升性能。
30
DiT(Diffusion Transformer)与 U-Net 扩散模型有何区别?
原理

DiT(Peebles & Xie, 2022)用 Transformer 替代 U-Net 作为扩散模型的去噪网络:

  • 图像分块(patchify)为序列,类似 ViT
  • 时间步 t 和条件通过 Adaptive LayerNorm(adaLN-Zero) 注入每层
  • 无 U-Net 的跳连接,结构更简洁

优势:Transformer 的 Scaling Law 更好(计算量→质量),SD3、Flux、Sora 均采用 DiT 架构。

3D DiT(视频生成):对时间+空间维度的 patch 建模,处理时序一致性,用于 Sora/OpenSora 等视频生成。

31
文生视频模型(如 Sora)的技术挑战有哪些?时序一致性如何保证?
原理

主要挑战:

  • 时序一致性:同一物体在不同帧的外观/运动连贯
  • 物理合理性:液体、碰撞等物理现象是否真实
  • 长视频:注意力复杂度 O(T×H×W × …),计算量极大
  • 训练数据:高质量带文字描述的视频数据稀缺

时序一致性技术:

  • 3D 时空注意力(Temporal + Spatial Attention 交错)
  • 视频 VAE 在时序维度压缩(4×空间 + 4×时间)
  • 运动先验:用光流监督或动作条件(ControlNet-like)
🏗️七、系统设计与工程
32
如何设计一个高并发 LLM 推理服务系统?考虑哪些维度?
难题设计

关键设计点:

  • 批处理:Continuous Batching(请求动态合并),不等最长序列完成
  • KV Cache 管理:PagedAttention 消除碎片,Prefix Caching 共享公共前缀
  • 模型并行:TP(Tensor Parallel)拆分 Attention/FFN 到多卡
  • 调度策略:优先级队列(SLA)、抢占式调度(preemption)
  • 流式输出:SSE 或 WebSocket 逐 token 推流
  • 负载均衡:多副本路由,基于 KV Cache 命中率的亲和路由
💡 目标指标:TTFT(首 token 延迟)、TPOT(每 token 时间)、吞吐量(tokens/s)。
33
RAG(检索增强生成)的架构设计?如何评估和优化检索质量?
高频设计

基础 RAG 流程:Query → Retriever(向量检索/BM25)→ 召回 Top-K 文档 → LLM 生成答案

优化方向:

  • 检索端:混合检索(Dense+Sparse),HyDE(用 LLM 生成假设文档做检索),Query 改写
  • 索引端:分层切块(Hierarchical Chunking),元数据过滤,Summary 索引
  • 生成端:Rerank(Cross-Encoder 精排),Long Context 压缩,引用标注

评估指标:RAGAS 框架(Faithfulness 忠实度、Answer Relevancy 答案相关性、Context Precision 上下文精度)。

34
如何评估大语言模型的能力?有哪些权威 Benchmark?
设计
Benchmark考察能力
MMLU多学科知识理解(57 个学科)
GSM8K / MATH数学推理(小学/竞赛级)
HumanEval / LiveCodeBench代码生成
MT-Bench / AlpacaEval指令遵循和对话质量
HELM / BIG-bench综合能力评估
SimpleQA事实性(OpenAI 提出)
⚠️ 注意 Benchmark 污染:测试集数据可能出现在预训练语料中,需用动态/私有测试集补充评估。
35
Agent 系统的设计:Tool Use、Memory、Planning 如何实现?
设计
  • Tool Use:通过 Function Calling 让 LLM 输出结构化 JSON 调用工具(搜索、代码执行、数据库);工具结果注入上下文后继续生成
  • Memory:短期(上下文窗口内)+ 长期(外部向量库/KG);遗忘机制:摘要压缩旧对话
  • Planning:ReAct(推理+行动循环)、Tree-of-Thought(多路径探索)、Self-Refine(自我批评迭代)
  • 多 Agent:AutoGen/CrewAI 等框架,不同角色 Agent 协作(规划者+执行者+评审)
💡 关键挑战:幻觉(Agent 对工具结果的误判)、长任务中的错误累积、安全沙箱。
💻八、代码题(只给出题目,需自行实现)
C1
手写 Scaled Dot-Product Attention
代码高频
📝 手写题 用 PyTorch 实现 scaled_dot_product_attention(Q, K, V, mask=None),包含 softmax 和可选的 causal mask
C2
实现多头注意力 MultiHeadAttention 模块
代码高频
📝 手写题 用 PyTorch nn.Module 实现,参数包含 d_model、num_heads,支持 Q/K/V 线性变换、split heads、concat 和输出投影
C3
实现 RoPE 位置编码
代码
📝 手写题 给定 Q/K 向量(shape: [B, seq_len, n_heads, head_dim]),实现 RoPE 旋转变换,输出应用了位置编码后的 Q/K
C4
实现 BPE Tokenizer 的训练和编码过程
代码
📝 手写题 给定语料,实现 BPE 训练(迭代找最高频字节对并合并),以及 encode(text) 和 decode(ids) 函数
C5
实现 Top-p(Nucleus Sampling)采样
代码
📝 手写题 输入 logits([vocab_size]),实现 Top-p 采样:对概率排序、累积到阈值 p 后将剩余概率设为 -inf,再用 softmax + 多项式采样
C6
实现 LoRA 微调层(LoRALinear)
代码
📝 手写题 继承 nn.Module,冻结原始 weight,添加 A(in_features×r)和 B(r×out_features)低秩矩阵,前向传播为 x@W.T + x@A@B * scale
C7
实现简单的 KV Cache 推理循环
代码
📝 手写题 给定 Transformer decoder,实现带 KV Cache 的 generate 函数:每步只传入新 token,拼接缓存的 K/V,直到生成 EOS 或达到最大长度
C8
实现 DDPM 的前向加噪和 Loss 计算
代码
📝 手写题 给定 x0 和时间步 t,实现 q_sample(x0, t) 函数(按 sqrt_alphas_cumprod 和 sqrt_one_minus 混合噪声),并计算 MSE Loss with noise_pred 和真实 noise
C9
实现 DPO 损失函数
代码
📝 手写题 输入 policy_logprob_chosen, policy_logprob_rejected, ref_logprob_chosen, ref_logprob_rejected 和 beta,实现 DPO loss = -log_sigmoid(beta * (log_ratio_w - log_ratio_l))
C10
用 Python 实现 MinHash 文档去重
代码
📝 手写题 给定一批文本,实现基于 n-gram 的 MinHash 签名生成(k=200 个哈希函数),再用 LSH 分桶,返回 Jaccard 相似度 >0.8 的重复文档对
C11
实现 Beam Search 解码算法
代码
📝 手写题 给定语言模型的 next_token_logits 函数,实现 beam_search(prompt, beam_size=4, max_len=50),维护 beam_size 条候选序列,按累积 log-prob 排序
C12
实现 Flash Attention 分块计算的伪代码(算法理解)
代码难题
📝 手写题 用 NumPy 实现分块 Attention 计算(Bc 列块 + Br 行块),维护运行时 max/sum 用于 Online Softmax,最终输出与标准 Attention 一致
C13
手写 Layer Normalization 前向 + 反向传播
代码
📝 手写题 用 NumPy 实现 LayerNorm.forward(x) 和 LayerNorm.backward(dout),不使用 PyTorch autograd,正确处理 gamma/beta 梯度
🎮九、强化学习基础
RL1
马尔科夫决策过程(MDP)的五元组定义是什么?贝尔曼方程如何推导?
高频原理

MDP 五元组:(S, A, P, R, γ)

  • S:状态空间
  • A:动作空间
  • P(s'|s,a):状态转移概率
  • R(s,a):奖励函数
  • γ ∈ [0,1):折扣因子

贝尔曼方程(状态价值函数):

$$V_\pi(s)=\sum_a\pi(a|s)\!\left[R(s,a)+\gamma\sum_{s'}P(s'|s,a)\,V_\pi(s')\right]$$

贝尔曼最优方程:

$$V^*(s)=\max_a\!\left[R(s,a)+\gamma\sum_{s'}P(s'|s,a)\,V^*(s')\right]$$
💡 γ 越接近 1,模型越重视长期收益;γ=0 只看当前奖励(贪心)。
RL2
Model-Free RL 中 Q-Learning 与 SARSA 的区别?为何 Q-Learning 是 off-policy 的?
高频原理

Q-Learning(off-policy):

$$Q(s,a)\leftarrow Q(s,a)+\alpha\!\left[r+\gamma\max_{a'}Q(s',a')-Q(s,a)\right]$$

TD 目标用 max Q(s',·),与行为策略无关,直接估计最优策略价值 → off-policy

SARSA(on-policy):

$$Q(s,a)\leftarrow Q(s,a)+\alpha\!\left[r+\gamma Q(s',a')-Q(s,a)\right]$$

TD 目标用实际执行的下一动作 a'(由当前策略决定)→ on-policy,更保守,学习的是执行策略的价值。

Q-LearningSARSA
策略类型off-policy(学最优)on-policy(学当前策略)
悬崖行走走悬崖边缘(最优但危险)走安全路线
收敛性收敛到 Q*收敛到 Q_π
RL3
策略梯度(Policy Gradient)定理的推导?REINFORCE 算法的核心公式?
高频原理

目标:最大化期望回报 J(θ) = E_τ[R(τ)]。

策略梯度定理:

$$\nabla_\theta J(\theta)=\mathbb{E}_\tau\!\left[\sum_t\nabla_\theta\log\pi_\theta(a_t|s_t)\cdot Q^\pi(s_t,a_t)\right]$$

REINFORCE(Monte Carlo 策略梯度):用完整轨迹的折扣回报 G_t 估计 Q 值:

$$\nabla_\theta J(\theta)\approx\sum_t\nabla_\theta\log\pi_\theta(a_t|s_t)\cdot G_t$$

Baseline 减方差:引入基线 b(通常为状态价值 V(s_t)),减少梯度方差:

$$\nabla_\theta J(\theta)\approx\sum_t\nabla_\theta\log\pi_\theta(a_t|s_t)\cdot\bigl(G_t-b(s_t)\bigr)$$
⚠️ REINFORCE 方差大,样本效率低,实际更多用 Actor-Critic 架构。
RL4
Actor-Critic 框架的原理?A2C 和 A3C 有何区别?
高频原理

Actor-Critic 同时维护:

  • Actor(策略网络 π_θ):负责选动作
  • Critic(价值网络 V_φ):负责评估当前策略的价值,提供 TD 误差作为梯度信号

优势函数(Advantage):

$$A(s,a)=r+\gamma V(s^{\prime})-V(s)$$

Actor 更新:∇_θ log π_θ(a|s) · A(s,a)

A2C(Advantage Actor-Critic)A3C(Asynchronous A3C)
执行方式同步,等所有并行 worker异步,各 worker 独立更新全局网络
硬件需求单机多线程/GPU多 CPU 核心
稳定性更稳定异步噪声大但探索多
RL5
PPO(Proximal Policy Optimization)的核心机制?Clip 函数的作用?
高频原理

PPO 限制每次策略更新的幅度,防止过大更新破坏策略:

重要性权重: r_t(θ) = π_θ(a_t|s_t) / π_θ_old(a_t|s_t)

Clip 目标函数:

$$\mathcal{L}_\text{CLIP}(\theta)=\mathbb{E}_t\!\left[\min\!\left(r_t A_t,\;\mathrm{clip}(r_t,1{-}\varepsilon,1{+}\varepsilon)A_t\right)\right]$$

ε 通常取 0.1~0.2。当 r_t > 1+ε(新策略比旧策略提升过多)时,clip 截断不再获益;当 A_t < 0 时,若 r_t < 1-ε 也被截断,防止过度惩罚。

完整 PPO 损失:

$$\mathcal{L}=\mathcal{L}_\text{CLIP}-c_1\mathcal{L}_\text{VF}+c_2 S[\pi_\theta]$$

其中 L_VF 是 Critic 均方误差,S 是熵正则防止策略过早收敛。

💡 PPO 在 RLHF 中被广泛使用,因为其稳定性好,超参相对较少。
RL6
DQN(Deep Q-Network)解决了哪些经典 Q-Learning 的问题?Experience Replay 和 Target Network 的作用?
高频原理

经典 Q-Learning 用表格存 Q 值,无法处理高维状态。DQN 用神经网络近似 Q 函数,并引入两大技巧:

1. Experience Replay(经验回放):

  • 维护 Replay Buffer 存储历史转换 (s, a, r, s')
  • 每次随机采样 mini-batch 训练,打破样本时序相关性
  • 提高样本利用率,稳定训练

2. Target Network(目标网络):

  • 用独立的旧网络 θ⁻ 计算 TD 目标:y = r + γ·max_a' Q(s',a'; θ⁻)
  • 每隔 C 步将主网络参数复制给目标网络
  • 防止"追逐移动目标"导致训练发散
$$\mathcal{L}(\theta)=\mathbb{E}\!\left[\Bigl(r+\gamma\max_{a'}Q(s',a';\theta^-)-Q(s,a;\theta)\Bigr)^2\right]$$
RL7
探索与利用的权衡(Exploration vs Exploitation)?常用探索策略有哪些?
原理

核心矛盾:利用当前已知最优动作 vs 探索未知动作以发现更好策略。

策略原理适用场景
ε-greedy以概率 ε 随机探索,1-ε 贪心利用;ε 随训练衰减离散动作(DQN)
UCB(上置信界)选择 Q(a) + c·√(ln t / N(a)) 最大的动作,未探索动作 bonus 高Bandit 问题
Boltzmann/Softmax按 exp(Q/τ) 概率采样,温度 τ 控制随机度连续/概率动作
内在奖励好奇心驱动(预测误差/新颖性)作为额外奖励稀疏奖励环境
RL8
GAE(Generalized Advantage Estimation)的原理?为何能在偏差和方差之间取得平衡?
原理

GAE 是多步 TD 优势的指数加权平均:

$$A^{\text{GAE}(\gamma,\lambda)}_t=\sum_{l=0}^{\infty}(\gamma\lambda)^l\delta_{t+l}$$

其中 δ_t = r_t + γ·V(s_{t+1}) − V(s_t) 为单步 TD 误差。

λ 取值等价形式偏差/方差
λ=0A = δ_t(纯 1-step TD)低方差,高偏差
λ=1A = G_t − V(s_t)(Monte Carlo)无偏差,高方差
λ∈(0,1)折中平衡偏差-方差
💡 PPO 通常配合 GAE(λ=0.95, γ=0.99)使用,是目前最稳定的策略梯度实践。
RL9
RLHF 中 RL 的奖励稀疏问题如何解决?KL 散度惩罚的作用是什么?
高频原理

LLM RLHF 中,奖励来自 RM 模型(只在序列末尾给分),属于典型稀疏奖励。

解决方案:

  • 逐 token 分配奖励:将终态奖励均匀或按重要性分摊到每个 token
  • KL 散度惩罚:每步加 −β·KL(π_θ(·|s) || π_ref(·|s)),防止策略偏离 SFT 基准太远

KL 惩罚的三重作用:

  • 防止 reward hacking(模型发现漏洞刷 RM 高分但输出质量差)
  • 保持语言流畅度(SFT 模型已有好的语言生成能力)
  • 稳定训练(避免策略更新过大)
$$R_\text{total}=r_\theta(x,y)-\beta\cdot\mathrm{KL}(\pi_\theta(y|x)\|\pi_\text{ref}(y|x))$$
RL10
GRPO(Group Relative Policy Optimization)与 PPO 的区别?DeepSeek-R1 为何选择 GRPO?
高频原理

GRPO 去掉了 PPO 中的 Critic 网络,改用组内相对奖励估计优势:

  1. 对同一 prompt 采样 G 条回答 {y₁,...,y_G}
  2. 用奖励模型打分 {r₁,...,r_G}
  3. 组内归一化:A_i = (r_i − mean(r)) / std(r)
  4. 用 A_i 代替 PPO 中 Critic 估计的优势
PPOGRPO
Critic 网络需要(同 Actor 大小)不需要
显存需求高(同时加载 4 个模型)低(2 个模型)
优势估计GAE + Critic组内相对排名

DeepSeek-R1 选择 GRPO 的原因:训练超大模型时省去 Critic 可节省约 50% 显存,同时对数学/代码等有客观验证标准的任务,组内相对奖励信号足够稳定。

📐十、常用损失函数公式集
L1
交叉熵损失(Cross-Entropy Loss)
高频分类

二分类(Binary Cross-Entropy / BCE):

$$\mathcal{L}_{\text{BCE}}=-\frac{1}{N}\sum_{i=1}^{N}\left[y_i\log(\hat{y}_i)+(1-y_i)\log(1-\hat{y}_i)\right]$$

多分类(Categorical Cross-Entropy):

$$\mathcal{L}_{\text{CE}}=-\frac{1}{N}\sum_{i=1}^{N}\sum_{c=1}^{C}y_{i,c}\log(\hat{y}_{i,c})$$

其中 $y_{i,c}$ 为 one-hot 标签,$\hat{y}_{i,c}$ 为 softmax 输出的第 c 类概率。

💡 语言模型预训练的 next-token prediction loss 本质就是逐 token 的交叉熵。
L2
均方误差损失(MSE Loss)与平均绝对误差(MAE / L1 Loss)
高频回归

MSE(L2 Loss):

$$\mathcal{L}_{\text{MSE}}=\frac{1}{N}\sum_{i=1}^{N}(y_i-\hat{y}_i)^2$$

MAE(L1 Loss):

$$\mathcal{L}_{\text{MAE}}=\frac{1}{N}\sum_{i=1}^{N}|y_i-\hat{y}_i|$$

Smooth L1 / Huber Loss(结合两者优点):

$$\mathcal{L}_{\text{Huber}}=\begin{cases}\frac{1}{2}(y-\hat{y})^2 & |y-\hat{y}|<\delta \\ \delta\cdot(|y-\hat{y}|-\frac{\delta}{2}) & \text{otherwise}\end{cases}$$
损失对异常值梯度特点适用场景
MSE敏感(平方放大)误差大时梯度大一般回归、扩散模型噪声预测
MAE鲁棒恒定梯度(±1)需要稳健回归的场景
Huber折中小误差平滑,大误差截断目标检测(Faster R-CNN)
L3
KL 散度(Kullback-Leibler Divergence)
高频分布
$$D_{\text{KL}}(P\|Q)=\sum_{x}P(x)\log\frac{P(x)}{Q(x)}=\mathbb{E}_{P}\left[\log\frac{P(x)}{Q(x)}\right]$$

连续形式:

$$D_{\text{KL}}(p\|q)=\int p(x)\log\frac{p(x)}{q(x)}\,dx$$

性质:

  • 非对称:$D_{\text{KL}}(P\|Q) \neq D_{\text{KL}}(Q\|P)$
  • 非负:$D_{\text{KL}} \geq 0$,等号当且仅当 P=Q
  • 不是真正的距离(不满足对称性和三角不等式)

应用:VAE 的正则项、RLHF/PPO 中的策略约束、知识蒸馏。

💡 VAE 中两个高斯分布的 KL 散度有闭式解:$D_{\text{KL}}(\mathcal{N}(\mu,\sigma^2)\|\mathcal{N}(0,1))=\frac{1}{2}(\mu^2+\sigma^2-\ln\sigma^2-1)$
L4
对比损失(Contrastive Loss)与 InfoNCE Loss
高频对比学习

InfoNCE(CLIP / SimCLR 使用):

$$\mathcal{L}_{\text{InfoNCE}}=-\frac{1}{N}\sum_{i=1}^{N}\log\frac{\exp(\mathrm{sim}(z_i, z_i^+)/\tau)}{\sum_{j=1}^{N}\exp(\mathrm{sim}(z_i, z_j)/\tau)}$$

其中 $z_i^+$ 为正样本对,$\tau$ 为温度参数,$\mathrm{sim}$ 通常为余弦相似度。

Triplet Loss:

$$\mathcal{L}_{\text{triplet}}=\max(0,\;d(a,p)-d(a,n)+\text{margin})$$

其中 a=anchor, p=positive, n=negative, d 为欧氏距离。

NT-Xent(Normalized Temperature-scaled Cross Entropy,SimCLR):

$$\ell_{i,j}=-\log\frac{\exp(\mathrm{sim}(z_i,z_j)/\tau)}{\sum_{k=1}^{2N}\mathbb{1}_{[k\neq i]}\exp(\mathrm{sim}(z_i,z_k)/\tau)}$$
💡 温度 τ 越小,分布越尖锐,模型越注重难负样本;τ 越大越平滑。CLIP 的 τ 是可学习参数。
L5
Focal Loss(解决类别不平衡)
检测分类
$$\mathcal{L}_{\text{focal}}=-\alpha_t(1-p_t)^\gamma\log(p_t)$$

其中 $p_t$ 为模型对正确类的预测概率,$\alpha_t$ 为类别权重,$\gamma$ 为聚焦参数(通常取 2)。

核心思想:$(1-p_t)^\gamma$ 调制因子使得易分类样本($p_t$ 接近 1)的损失被大幅衰减,模型更聚焦于难分类样本

γ 值效果
γ = 0退化为标准交叉熵
γ = 2当 $p_t=0.9$ 时,loss 衰减 100×
γ = 5更激进的难样本聚焦
💡 最初由 RetinaNet 提出,用于解决目标检测中前景/背景极度不平衡(1:1000)的问题。
L6
知识蒸馏损失(Distillation Loss)
蒸馏压缩
$$\mathcal{L}_{\text{distill}}=\alpha\cdot T^2\cdot D_{\text{KL}}\!\left(\sigma(z_s/T)\;\|\;\sigma(z_t/T)\right)+(1-\alpha)\cdot\mathcal{L}_{\text{CE}}(y, \hat{y}_s)$$

其中:

  • $z_t$ = Teacher logits,$z_s$ = Student logits
  • $T$ = 温度(通常 2~20),使输出分布更平滑,暴露更多"暗知识"
  • $\sigma$ = softmax 函数
  • $\alpha$ = 平衡软标签与硬标签的权重
  • $T^2$ 因子用于补偿温度升高导致的梯度缩放
💡 LLM 蒸馏中常用 sequence-level KD:Teacher 生成的完整序列作为 Student 的训练目标。
L7
扩散模型损失(Diffusion / Score Matching Loss)
高频生成

DDPM 简化损失(ε-prediction):

$$\mathcal{L}_{\text{simple}}=\mathbb{E}_{t,x_0,\varepsilon}\left[\|\varepsilon-\varepsilon_\theta(x_t,t)\|^2\right]$$

v-prediction 变体(Imagen / SD 2.x):

$$v_t=\sqrt{\bar\alpha_t}\,\varepsilon-\sqrt{1-\bar\alpha_t}\,x_0$$ $$\mathcal{L}_v=\mathbb{E}_{t,x_0,\varepsilon}\left[\|v_t-v_\theta(x_t,t)\|^2\right]$$

Flow Matching 损失:

$$\mathcal{L}_{\text{FM}}=\mathbb{E}_{t,x_0,x_1}\left[\|v_\theta(x_t,t)-(x_1-x_0)\|^2\right]$$
预测目标优势代表
ε(噪声)原始 DDPM 方式,实现简单SD 1.x, DALL·E 2
v(velocity)高信噪比时更稳定Imagen, SD 2.x
x₀(数据)直接预测去噪结果部分加速采样方法
v_θ(速度场)Flow Matching,最简洁SD3, FLUX, Wan
L8
GAN 损失函数变体
生成对抗

原始 GAN(minimax):

$$\mathcal{L}_D=-\mathbb{E}_{x\sim p_{\text{data}}}[\log D(x)]-\mathbb{E}_{z\sim p_z}[\log(1-D(G(z)))]$$ $$\mathcal{L}_G=-\mathbb{E}_{z\sim p_z}[\log D(G(z))]$$

WGAN(Wasserstein 距离):

$$\mathcal{L}_D=\mathbb{E}_{z}[D(G(z))]-\mathbb{E}_{x}[D(x)]$$ $$\mathcal{L}_G=-\mathbb{E}_{z}[D(G(z))]$$

WGAN-GP(梯度惩罚):

$$\mathcal{L}_{\text{GP}}=\lambda\,\mathbb{E}_{\hat{x}}\left[(\|\nabla_{\hat{x}}D(\hat{x})\|_2-1)^2\right]$$

其中 $\hat{x}$ 为真假样本的随机插值点,$\lambda=10$。

Hinge Loss(SAGAN / BigGAN):

$$\mathcal{L}_D=-\mathbb{E}_x[\min(0, -1+D(x))]-\mathbb{E}_z[\min(0, -1-D(G(z)))]$$ $$\mathcal{L}_G=-\mathbb{E}_z[D(G(z))]$$
L9
感知损失(Perceptual Loss / LPIPS)
生成重建
$$\mathcal{L}_{\text{perceptual}}=\sum_{l}\frac{1}{C_lH_lW_l}\|\phi_l(x)-\phi_l(\hat{x})\|_2^2$$

其中 $\phi_l$ 为预训练网络(VGG/DINO)第 $l$ 层的特征图。

LPIPS(Learned Perceptual Image Patch Similarity):

$$\text{LPIPS}(x,\hat{x})=\sum_l\left\|w_l\odot\left(\hat\phi_l(x)-\hat\phi_l(\hat{x})\right)\right\|_2^2$$

$\hat\phi_l$ 为 channel-wise 归一化后的特征,$w_l$ 为学习权重。

用途:VAE decoder 训练、超分辨率、图像修复 —— 比 MSE 更符合人类感知。

💡 Stable Diffusion 的 VAE 训练同时使用 reconstruction loss + perceptual loss + GAN loss(PatchGAN discriminator)。
L10
DPO / RLHF 偏好学习损失
高频对齐

奖励模型(Bradley-Terry):

$$\mathcal{L}_{\text{RM}}=-\mathbb{E}\left[\log\sigma\!\left(r_\theta(x,y_w)-r_\theta(x,y_l)\right)\right]$$

DPO 损失:

$$\mathcal{L}_{\text{DPO}}=-\mathbb{E}\left[\log\sigma\!\left(\beta\log\frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)}-\beta\log\frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)}\right)\right]$$

PPO Clip 目标:

$$\mathcal{L}_{\text{PPO}}=-\mathbb{E}_t\left[\min\!\left(r_t(\theta)A_t,\;\text{clip}(r_t(\theta),1{-}\varepsilon,1{+}\varepsilon)A_t\right)\right]$$

其中 $r_t(\theta)=\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)}$,$A_t$ 为优势函数(GAE 估计)。

💡 GRPO 将 PPO 的 Critic 替换为组内归一化:$A_i = (r_i - \mu_r) / \sigma_r$,显存减半。
L11
CTC Loss(Connectionist Temporal Classification)
序列语音
$$\mathcal{L}_{\text{CTC}}=-\log P(y|x)=-\log\sum_{\pi\in\mathcal{B}^{-1}(y)}\prod_t P(\pi_t|x)$$

其中 $\mathcal{B}^{-1}(y)$ 为所有映射到标签序列 y 的合法对齐路径集合(collapse blank + 重复)。

核心思想:允许模型在输入长度 > 输出长度时,自由选择对齐方式,用动态规划(前向-后向算法)高效求和。

应用场景:语音识别(ASR)、OCR 文字识别、手写体识别。

💡 Whisper 等现代 ASR 模型使用 Encoder-Decoder + CE loss 替代了 CTC,但 CTC 仍广泛用于流式识别和非自回归 ASR。
L12
IoU Loss 系列(目标检测边框回归)
检测回归

IoU Loss:

$$\mathcal{L}_{\text{IoU}}=1-\text{IoU}(B,B^{\text{gt}})=1-\frac{|B\cap B^{\text{gt}}|}{|B\cup B^{\text{gt}}|}$$

GIoU(Generalized IoU):

$$\mathcal{L}_{\text{GIoU}}=1-\text{IoU}+\frac{|C\setminus(B\cup B^{\text{gt}})|}{|C|}$$

$C$ 为包围两个框的最小闭合区域。

CIoU(Complete IoU):

$$\mathcal{L}_{\text{CIoU}}=1-\text{IoU}+\frac{\rho^2(b,b^{\text{gt}})}{c^2}+\alpha v$$

额外考虑中心距离 $\rho$、对角线 $c$、宽高比一致性 $v$。

变体额外考虑代表模型
IoU基础
GIoU非重叠区域YOLO v3+
DIoU中心点距离
CIoU中心距离+宽高比YOLO v5/v8
L13
Label Smoothing Loss
正则分类

将 one-hot 标签 $y$ 替换为平滑标签:

$$y_i^{\text{smooth}}=(1-\epsilon)\cdot y_i+\frac{\epsilon}{C}$$

等价于在交叉熵中混合均匀分布:

$$\mathcal{L}_{\text{LS}}=(1-\epsilon)\cdot\mathcal{L}_{\text{CE}}(y,\hat{y})+\epsilon\cdot\mathcal{L}_{\text{CE}}(u,\hat{y})$$

其中 $u$ 为均匀分布,$\epsilon$ 通常取 0.1。

作用:防止模型对预测过度自信,提升泛化能力,减少过拟合;原始 Transformer 论文中即使用 label smoothing (ε=0.1)。

L14
Dice Loss / Tversky Loss(分割任务)
分割

Dice Loss:

$$\mathcal{L}_{\text{Dice}}=1-\frac{2\sum_i p_i g_i+\epsilon}{\sum_i p_i+\sum_i g_i+\epsilon}$$

其中 $p_i$ 为预测概率,$g_i$ 为 ground truth(0/1)。

Tversky Loss(广义 Dice):

$$\mathcal{L}_{\text{Tversky}}=1-\frac{\sum_i p_i g_i}{\sum_i p_i g_i+\alpha\sum_i p_i(1-g_i)+\beta\sum_i(1-p_i)g_i}$$

$\alpha$ 控制假阳性权重,$\beta$ 控制假阴性权重。当 $\alpha=\beta=0.5$ 时退化为 Dice Loss。

应用:医学图像分割(处理前景极小的情况),语义分割中与 CE 联合使用。

🗃️十一、数据工程与合成数据
D1
合成数据的主流方法有哪些?Self-Instruct 和 Evol-Instruct 的区别?
高频数据

Self-Instruct(Wang et al. 2023):

  1. 从种子指令集(175 条)出发
  2. 用 LLM 生成新指令 → 生成对应输入/输出
  3. 过滤低质量/重复数据,扩充指令池
  4. 循环迭代,最终得到数万条指令数据

Evol-Instruct(WizardLM):

  1. 对已有指令做“进化”操作:加深(更复杂推理)、加宽(更多约束条件)、改写(换领域/场景)
  2. 每轮进化后用 LLM 筛选质量,淘汰退化样本
  3. 逐轮迭代,生成从简单到复杂的梯度数据
Self-InstructEvol-Instruct
核心思路从种子扩展新指令对已有指令做复杂度进化
数据多样性高(广度优先)中(深度优先)
数据难度随机渐进式提升
代表AlpacaWizardLM、WizardCoder
💡 2024-2025 趋势:数据飞轮(Data Flywheel)—— 用模型自身输出 + 验证器筛选循环迭代,持续提升数据质量。
D2
预训练数据的配比策略?不同领域/语言如何分配比例?
高频数据

核心原则:数据配比直接影响模型能力分布,需要根据目标能力精心设计。

典型配比(参考 LLaMA/Qwen 技术报告):

数据源占比作用
网页文本(CC)60~70%通用语言能力
代码10~15%推理能力、结构化输出
学术论文/书籍5~10%知识密度
百科/知识库5%事实性
对话/社交3~5%对话能力
数学3~5%数学推理

多语言配比策略:

  • 按比例采样:按各语言语料量的 α 次方重采样(α=0.3~0.7),平衡大语种和小语种
  • 温度采样:$P(l) \propto n_l^{1/T}$,T 越大分布越均匀
  • 多阶段:先大量英文训练,后期增加目标语言比例(annealing)
💡 关键发现:代码数据比例提升能显著增强模型的逻辑推理和指令遵循能力(即使非代码任务也受益)。
D3
课程学习(Curriculum Learning)在大模型训练中如何应用?
数据

核心思想:按“从易到难”或“从通用到专精”的顺序安排训练数据,模拟人类学习过程。

在 LLM 中的应用形式:

  • 数据质量递进:前期用大量低质量数据学通用模式,后期用高质量数据精炼(LLaMA 3 的“annealing”阶段上采样高质数据)
  • 难度递进:先短序列后长序列(节省计算);先简单任务后复杂任务
  • 领域递进:先通用 → 后专业领域 → 最后指令数据
  • 数据重放:周期性回放早期数据防止灾难性遗忘

实践案例:

  • GPT-4 使用多阶段训练(不同阶段数据质量和难度递增)
  • DeepSeek-V3 在预训练末期用 1.5T 高质量 token 做 annealing
  • 代码模型先学自然语言再学代码(Codex 路线)
D4
数据污染(Data Contamination)如何检测和处理?
数据

什么是数据污染:测试集(benchmark)的数据出现在预训练语料中,导致评估结果虚高。

检测方法:

  • N-gram 匹配:检查训练语料中是否包含 benchmark 的 8-gram 或更长连续片段
  • Perplexity 分析:对 benchmark 样本计算困惑度,异常低的说明可能见过
  • Membership Inference:用模型自身判断是否“记住”了某个样本
  • Canary 方法:在训练集中插入特殊标记,检查模型是否能复现

处理方法:

  • 训练前:对所有已知 benchmark 做去重清洗(LLaMA 3 报告了完整去污流程)
  • 评估时:使用动态/私有测试集(如 LiveCodeBench、SimpleQA)
  • 发布时:明确报告去污方法和残留污染比例
⚠️ GPT-4 技术报告指出即使严格去污,互联网数据中仍可能有间接泄露(改写、翻译等形式)。
D5
多模态数据对齐的质量如何保证?图文配对有哪些挑战?
数据多模态

挑战:

  • alt-text 质量差:网络图片的 alt 描述往往很短或不准确
  • 图文相关性低:很多网页图文只是共现,并非真正描述关系
  • 细粒度描述缺失:缺少空间关系、计数、属性等详细描述

解决方案:

  • CLIP score 过滤:用 CLIP 计算图文相似度,过滤低分样本(DataComp)
  • 重新标注(Recaptioning):用大模型(如 LLaVA/CogVLM)为图片生成高质量长描述
  • 分层数据策略
    - 阶段一:大量粗粒度图文对(LAION-5B 级别)学基础对齐
    - 阶段二:精细图文对(ShareGPT4V、ALLaVA)学细粒度理解
  • 合成数据:用渲染引擎/扩散模型生成带精确标注的图像
💡 InternVL 2 使用动态分辨率 + 高质量重标注数据,在多个 benchmark 上超越 GPT-4V。

Section 12 — 长上下文与记忆机制

Q1: 长上下文外推技术有哪些?YaRN/NTK-Aware/ABF 的原理?

位置编码外推问题:基于 RoPE 的模型在训练长度 L 内学习了位置编码,当推理序列长度 L' > L 时,超出训练分布的位置编码会导致注意力分数异常,模型性能急剧下降。核心挑战是如何让模型在不重新训练的情况下处理更长序列。

NTK-Aware Scaling

核心思想:不直接对位置进行线性插值(会损失高频信息),而是修改 RoPE 的 base frequency,使得高频维度几乎不变、低频维度被压缩。

θ'_i = θ_i · α^(-2i/d)
其中 α = (L'/L)^(d/(d-2)),base' = base · α

💡 NTK-Aware 的优势在于无需微调即可获得一定外推能力,是 "free lunch" 方案的代表。

YaRN(Yet another RoPE extensioN)

分频段处理策略,将 RoPE 的频率维度分为三个区间:

  • 低频维度(波长 > 训练长度):线性插值(Position Interpolation)
  • 高频维度(波长 << 训练长度):保持不变,无需外推
  • 中频维度:NTK 混合插值,平滑过渡

同时引入温度缩放因子 √(1/t) 修正注意力熵的增大问题。

ABF(Adjusted Base Frequency)

DeepSeek 采用的动态调整方案:根据目标长度直接调整 RoPE 的 base 参数,配合少量长序列数据微调。

base_new = base × (target_len / train_len)^(dim / (dim - 2))

Position Interpolation(PI)基础公式

f(x, m) → f(x, m · L/L')
将位置 m 线性缩放到训练长度范围内:m' = m · (L / L')

⚠️ 纯线性插值(PI)会压缩所有频率维度,导致高频位置信息丢失,近距离 token 的区分度下降。这正是 NTK/YaRN 改进的出发点。

方法核心策略是否需要微调外推倍数
Position Interpolation位置线性缩放需少量微调2-4×
NTK-Aware修改 base frequency无需微调2-4×
YaRN分频段 + 温度修正少量微调效果更好4-64×
ABF动态 base 调整需配合长序列训练4-128×

Q2: Ring Attention 和 Striped Attention 的原理?如何实现分布式长序列训练?

序列并行的核心挑战

标准 Self-Attention 需要每个 token 与所有其他 token 交互,当序列长度 N 极大时,单设备无法容纳完整的 KV 矩阵。序列并行(Sequence Parallelism)需要解决:

  • 内存瓶颈:KV cache 随序列长度线性增长
  • 计算依赖:注意力计算需全局 KV 信息
  • 通信开销:设备间传输 KV 块的带宽成本

Ring Attention

核心思想:将序列分为 P 个块(P = 设备数),每个设备持有一个 Q 块,KV 块在设备间以环形拓扑(Ring)传递。

  • 每个设备固定存储自己的 Q 块(Query)
  • KV 块沿环形方向逐步传递,每步计算当前 Q 与收到的 KV 块的局部注意力
  • 使用 Online Softmax(Flash Attention 思路)逐步累积注意力结果
  • 经过 P-1 步传递后,每个设备获得完整注意力输出
设备 i 在第 t 步:
Attention_partial(Q_i, K_{(i+t)%P}, V_{(i+t)%P})
通过 log-sum-exp 合并所有 partial results

Striped Attention

Ring Attention 的改进方案,解决因果注意力(Causal Mask)下的负载不均衡问题:

  • 问题:在 causal mask 下,靠前的 Q 块只能看到很少的 KV,靠后的 Q 块要看全部 KV,导致计算量不均
  • 解决:将序列按 striped(条纹)方式分片 — token i 分配到设备 i % P
  • 这样每个设备持有的 token 在序列中均匀分布,保证每个设备的有效计算量接近相等

通信与计算重叠

关键优化:在计算当前 KV 块的注意力时,同时异步发送/接收下一个 KV 块(double buffering),使通信延迟被计算掩盖。

有效吞吐 ≈ max(T_compute, T_communicate)
当 T_compute ≥ T_communicate 时,通信完全被掩盖

💡 Ring Attention + Flash Attention 的组合使得理论上可以训练任意长序列,内存开销与设备数成反比:O(N/P) per device。

Q3: 稀疏注意力的主流模式?Sliding Window + Global tokens 如何工作?

Longformer / BigBird 模式

经典稀疏注意力的三种组合模式:

  • Local Window:每个 token 只关注周围 w 个 token(滑动窗口)
  • Global Tokens:指定若干 token(如 [CLS])可关注/被关注所有位置
  • Random Attention(BigBird):每个 token 额外随机关注 r 个位置,增加远程连接
复杂度:O(N × (w + g + r)) 其中 w=窗口大小, g=全局token数, r=随机连接数
相比 Full Attention O(N²),当 w+g+r ≪ N 时显著降低

Mistral 的 Sliding Window Attention(SWA)

Mistral 7B 采用的简洁方案:

  • 窗口大小 W=4096,每层只关注最近 W 个 token
  • 多层堆叠后,感受野随层数线性增长:第 k 层理论感受野 = k × W
  • 32 层 × 4096 窗口 = 131K 有效感受野
  • KV Cache 大小固定为 W,不随序列增长

StreamingLLM 与 Attention Sink

Attention Sink 现象:即使在超长序列中,模型对最前面几个 token(尤其是第一个 token)始终分配较高注意力权重,无论这些 token 的语义内容如何。

  • 原因:Softmax 需要一个"垃圾桶"来放置不需要的注意力概率质量
  • StreamingLLM 策略:保留前 k 个 Sink Tokens + 最近的 Window Tokens
  • 支持无限长度流式推理,KV Cache 大小恒定
StreamingLLM Cache = [Sink Tokens (前4个)] + [Recent Window (最近 W 个)]
总缓存大小固定为 4 + W,与输入长度无关
方法复杂度有效感受野适用场景
Full AttentionO(N²)N短序列
Sliding WindowO(N·W)k·W(多层)通用长文本
LongformerO(N·(W+G))N(通过 Global)文档理解
StreamingLLMO(N·W)W + Sink无限流式推理

⚠️ 稀疏注意力模式可能丢失关键的远程依赖信息。对于需要全局推理的任务(如数学证明、长距离共指消解),纯稀疏方案效果有限。

Q4: 外部记忆增强 vs 长上下文:各自的优劣?

RAG vs 长上下文的 Trade-off

维度RAG(外部记忆)长上下文窗口
信息容量理论无限(外部存储)受窗口大小限制(128K-1M)
检索精度依赖检索器质量,可能遗漏全部信息在上下文内,无遗漏
推理成本低(只送相关片段)高(长序列 O(N²) 或 O(N·W))
实时性可随时更新外部库需重新构建上下文
多跳推理困难(需多轮检索)天然支持(信息共存)
部署复杂度需向量数据库 + 检索管线简单,只需长窗口模型

长期记忆方案

  • MemoryBank:为每个用户/对话维护动态记忆库,通过遗忘曲线模拟人类记忆衰减,定期整合与遗忘
  • MemWalker:将长文本构建为树状记忆结构,通过 LLM 自主导航(walk)在记忆树中检索相关信息
  • Memorizing Transformers:引入 kNN 检索层,在注意力计算中融合外部记忆库的 KV 对

上下文压缩技术

  • Gisting:将长 prompt 压缩为少量 "gist tokens",通过训练让模型学会从 gist tokens 恢复原始信息
  • AutoCompressor:递归压缩 — 将前文压缩为 summary vectors,与新文本拼接后再次压缩,支持无限长度
  • ICAE(In-Context Autoencoder):用 LoRA 微调将长上下文编码为固定数量的 memory tokens
压缩比 = 原始 token 数 / 压缩后 token 数
Gisting 典型压缩比: 10-26×
AutoCompressor: 每段压缩为固定 k 个 summary tokens

何时选 RAG vs 长窗口?

💡 决策框架:
• 知识库 > 1M tokens 且频繁更新 → RAG
• 单文档/对话 < 128K 且需要精确推理 → 长窗口
• 需要多跳推理 + 大量背景知识 → 长窗口 + RAG 混合
• 成本敏感场景 → RAG(只检索相关片段,省 tokens)

Q5: KV Cache 压缩技术有哪些?如何在不损失精度的情况下减少缓存?

Token Eviction(淘汰策略)

  • H2O(Heavy-Hitter Oracle):基于累积注意力分数识别"重要 token",只保留 Heavy Hitters + 最近的 Local tokens,淘汰中间低分 token
  • ScissorHands:观察到"重要 token 在不同层/头中保持一致"(Persistence of Importance),据此做跨层联合淘汰决策
  • FastGen:针对不同注意力头采用不同压缩策略(有的头需要全局,有的只需局部)
H2O 缓存策略:KV_cache = Top-k(累积注意力分数) ∪ Recent(最近 w 个 token)
保留比例典型值:20%-40% 即可保持 95%+ 精度

KV Quantization(量化)

  • 对 KV Cache 中的 Key/Value 矩阵进行低精度量化(FP16 → INT8/INT4)
  • KIVI:Key 用 per-channel 量化(沿 head_dim 维度),Value 用 per-token 量化(沿 seq_len 维度)
  • KVQuant:结合 Non-Uniform Quantization + 残差异常值处理
  • 内存节省:INT4 量化可节省 75% KV Cache 内存

KV Merge / Pooling(合并)

  • 将相邻或相似 token 的 KV 向量合并(average pooling / weighted merge)
  • D2O(Dynamic Token Pruning with Merging):淘汰低分 token 前先将其信息合并到邻近保留 token 中
  • CaM(Cache Merging):基于 token 相似度做聚类合并
  • 优势:比单纯淘汰更好地保留全局信息

Shared KV(结构层面的 KV 压缩)

方法KV Head 数参数量KV Cache 大小效果
MHA(Multi-Head)h 个独立 KV Head最大O(h·d·N)基线
MQA(Multi-Query)1 个共享 KV Head最小O(d·N)速度快,质量略降
GQA(Grouped-Query)g 组(1<g<h)中等O(g·d·N)速度与质量平衡
MLA(Multi-head Latent)压缩为低秩 latent中等O(c·N), c≪h·dDeepSeek-V2 方案
MLA 核心:KV 压缩为低秩表示
c_t = W_DKV · x_t (下投影,c_t 维度远小于 K+V 拼接维度)
K_t, V_t = W_UK · c_t, W_UV · c_t (上投影恢复)
缓存只需存 c_t,压缩比 = (d_k + d_v) / d_c ≈ 4-8×

💡 实践建议:多种技术可组合使用。例如 GQA(结构)+ INT4 量化 + H2O 淘汰 三管齐下,可将 KV Cache 压缩 10-20× 而精度损失 < 1%。

⚠️ Token Eviction 策略在需要"回看"早期信息的任务(如长文档 QA、代码补全引用远处定义)中可能导致关键信息被淘汰。建议结合任务特性选择压缩方案。

13. 多模态模型深入

Q1
视觉 Tokenizer 的原理?VQVAE / VQGAN 的区别?
视觉TokenizerVQVAEVQGAN离散化
展开答案

VQVAE 核心流程:Encoder → 量化到码本(codebook)→ Decoder 重建图像

z_q = argminek∈Codebook ‖z_e − e_k‖₂

💡 量化操作是离散的(argmin),不可微分。训练时使用 Straight-Through Estimator (STE):前向走量化路径,反向直接将梯度复制给 encoder 输出。

VQGAN 改进:

  • 在 VQVAE 基础上加入 PatchGAN 判别器(对抗训练)
  • 引入 感知损失(Perceptual Loss,基于 VGG 特征距离)
  • 重建质量显著提升,生成图像更锐利、细节更丰富

应用:

  • LlamaGen:用离散视觉 token 做自回归图像生成,与文本 token 统一建模
  • Chameleon (Meta):统一图文 token 空间,实现真正的 any-to-any 生成
特性 VQVAE VQGAN dVAE (DALL·E)
量化方式 最近邻码本查找 最近邻码本查找 Gumbel-Softmax 松弛
判别器 ❌ 无 ✅ PatchGAN ❌ 无
感知损失 ❌ 无 ✅ VGG-based ❌ 无
重建质量 中等(模糊) 高(锐利) 中等
梯度处理 STE STE Gumbel-Softmax(可微)
典型应用 特征学习 LlamaGen / Parti DALL·E 1

⚠️ 码本坍塌(Codebook Collapse)是常见问题:只有少数 code 被使用。缓解方法包括 EMA 更新、码本重置、更大码本 + 分组量化。

Q2
Unified 多模态模型 vs 拼接式架构?Gemini / GPT-4o 的设计理念?
多模态架构GeminiGPT-4oLLaVA
展开答案

拼接式架构(LLaVA 类):

  • 独立的 Vision Encoder(如 CLIP ViT)提取视觉特征
  • Projection Layer(MLP / Q-Former)将视觉特征映射到 LLM 的 embedding 空间
  • LLM 接收文本 + 投影后的视觉 token 做序列建模
  • 各模块可独立预训练,组装灵活

原生多模态架构(Gemini):

  • 从预训练阶段就混合所有模态(文本、图像、音频、视频)
  • 模型内部天然理解跨模态关系,无需额外对齐阶段
  • 训练成本极高,但跨模态推理能力更强
维度 拼接式(LLaVA / InternVL) 原生多模态(Gemini / GPT-4o)
训练成本 较低(复用已有模型) 极高(从头混合训练)
跨模态推理 受限于投影层瓶颈 深度融合,推理更自然
模态扩展 加 encoder 即可扩展 需重新预训练
信息损失 投影时可能丢失细节 端到端保留
开源友好 ✅ 容易复现 ❌ 难以复现

Any-to-Any 生成(GPT-4o):

  • 单一模型同时支持文本、图像、音频的输入和输出
  • 实时语音对话(无需 ASR → LLM → TTS 管线)
  • 可感知语气、情感、环境音,响应延迟极低(~320ms)

💡 趋势:学术界倾向拼接式(低成本迭代),工业界顶级模型走向原生多模态(性能上限更高)。

Q3
音频模态:Whisper 架构 / 音频 Tokenization / TTS 训练
Whisper音频TokenizationTTS语音合成
展开答案

Whisper 架构:

  • 结构:标准 Encoder-Decoder Transformer
  • 输入:80-channel Mel spectrogram(30s 音频窗口)
  • 多任务训练:语音识别、语种检测、时间戳预测、翻译,通过特殊 token 切换任务
  • 数据:68 万小时弱监督数据,覆盖 99 种语言

音频离散化(Neural Audio Codec):

  • SoundStream / EnCodec:将连续音频波形编码为离散 token 序列
  • 核心技术 — 残差向量量化(RVQ):
RVQ: x → q₁(x) → q₂(x − q̂₁) → q₃(x − q̂₁ − q̂₂) → ...
每层量化残差,多层叠加逼近原始信号
  • EnCodec:8 层 RVQ,每层 1024 码本 → 1.5kbps~24kbps 可变码率
  • 第 1 层捕获语义/内容信息,后续层补充声学细节(音色、韵律)

TTS Pipeline(现代方案):

  • 文本 → 语义 Token(如 HuBERT 提取) → 声学 Token(EnCodec RVQ)→ 波形(Codec Decoder)
  • 语言模型在 token 层做生成,避免直接预测连续波形

代表工作:

  • VALL-E (Microsoft):3 秒语音 prompt → 零样本语音克隆;AR 生成第 1 层 + NAR 并行生成后续层
  • CosyVoice (阿里):Flow Matching + LLM,支持零样本、跨语言、情感控制
  • ChatTTS:细粒度韵律控制,支持笑声、停顿等副语言特征

💡 音频 token 化使得语音/音乐生成可以复用 LLM 的自回归框架,是多模态统一建模的关键一步。

Q4
长视频理解的挑战与方案?时空编码如何设计?
视频理解时空编码视频压缩长序列
展开答案

核心挑战:

  • Token 数爆炸:1 帧 = 256+ token,1 分钟视频(30fps)= 460K+ token,远超 LLM 上下文窗口
  • 时序依赖跨度大:需要关联几分钟甚至几小时前的事件
  • 信息冗余:相邻帧高度相似,大量 token 是重复信息

时空压缩方案:

  • 视频 VAE:空间压缩 8×(H/8 × W/8)+ 时间压缩 4×(每 4 帧→1 个 latent)
  • 关键帧采样:均匀采样 / 场景变化检测 / 动态帧率(信息密度自适应)
  • Token 合并:相邻帧的相似 token 做 average pooling 或 attention pooling

时空注意力设计:

方案 计算方式 优势 劣势
分离式 (Divided) 先空间 Attention → 再时间 Attention 计算高效,O(T·N + T²) 时空交互不够充分
联合式 (Joint 3D) 所有帧的所有 token 做全局 Attention 时空交互最充分 计算量 O((T·N)²) 爆炸
窗口式 (Local) 时空局部窗口内做 Attention 平衡效率与交互 长程依赖受限

Memory-Augmented 方法:

  • MovieChat:维护短期记忆(最近帧)+ 长期记忆(合并历史帧为压缩表示),突破上下文限制
  • MA-LMM (Memory-Augmented LMM):用可学习的 memory bank 存储历史视频信息,在线流式处理长视频
  • LLaMA-VID:每帧仅用 2 个 token 表示(context token + content token),支持 1 小时视频

⚠️ 长视频理解仍是开放问题:现有 benchmark(如 Video-MME Long)显示,即使顶级模型在 >30min 视频上准确率也大幅下降。

Q5
多模态对齐训练策略?分阶段解冻的原因?
多模态训练对齐分阶段解冻SFT
展开答案

三阶段训练范式(以 LLaVA 1.5 为例):

阶段一:模态对齐预训练

  • 🔒 冻结 Vision Encoder + LLM
  • 🔓 只训练 Projector(MLP / Cross-Attention)
  • 数据:~600K 图文对(粗粒度 caption 数据)
  • 目标:让 projector 学会将视觉特征映射到 LLM 能理解的语义空间

阶段二:视觉指令微调

  • 🔓 解冻 LLM(全参数或 LoRA)
  • 🔒/🔓 Vision Encoder 可选解冻(InternVL 解冻效果更好)
  • 数据:~150K~1.2M 高质量指令数据(VQA、对话、推理)
  • 目标:LLM 学会基于视觉信息进行推理和对话

阶段三:高质量 SFT / RLHF

  • 精选高质量数据做最终对齐
  • RLHF / DPO 减少幻觉、提升指令跟随能力
  • 数据:~10K-50K 精标数据
分阶段核心逻辑:
随机初始化的 Projector → 输出噪声特征 → 若同时更新 LLM → 噪声梯度破坏 LLM 已有语言能力
∴ 先固定 LLM,让 Projector 收敛到有意义的映射 → 再解冻 LLM 做细粒度适配

数据量级对比:

阶段 数据量 数据质量 训练目标
阶段一(对齐) 百万级(558K~5M) 粗粒度(短 caption) 学映射关系
阶段二(指令微调) 十万级(150K~1.2M) 高质量(多轮对话、推理) 学视觉推理
阶段三(RLHF) 万级(10K~50K) 精标(人工标注偏好) 减少幻觉、对齐人类偏好

💡 InternVL-2 / Qwen-VL 等最新模型验证:阶段二解冻 Vision Encoder 可进一步提升细粒度视觉理解(OCR、小物体检测),但需要更大 batch size 避免训练不稳定。

⚠️ 常见坑:阶段一数据质量太差(如纯 alt-text)会导致 projector 学到错误映射,后续阶段难以修复 → 建议用 ShareGPT4V 等高质量 caption 数据。

14. 安全与对齐前沿

Q1
Constitutional AI / RLAIF 的原理?如何不用人工标注实现对齐?
AlignmentRLAIFConstitutional AI
显示答案

Constitutional AI(Anthropic):让 AI 用一组"宪法原则"自我评判和修改回答,无需人类逐条标注。

RLAIF:用 AI 生成偏好标注替代人类标注,实现全自动化对齐流程。

核心流程:生成 → 自我批评 → 修改 → AI 标注偏好 → RL 训练
阶段说明
生成模型针对 prompt 生成初始回答
自我批评模型依据宪法原则评估回答是否违规
修改模型根据批评意见重写回答
AI 标注偏好AI 对 (原始, 修改) 对进行偏好排序
RL 训练用 AI 偏好数据训练 Reward Model,再做 RLHF

优势:可扩展性强,不受人工标注瓶颈限制;可覆盖大量场景。

局限:AI 评判可能存在系统性偏差,宪法原则的设计本身仍需人类智慧。
Q2
Red Teaming 与越狱攻击/防御?
SafetyRed TeamingJailbreak
显示答案

常见越狱方式:

  • 角色扮演("假装你是 DAN")
  • 编码绕过(base64 / ROT13 编码恶意指令)
  • 多轮诱导(逐步引导模型突破边界)
  • 对抗前缀 / 后缀

GCG 攻击(Greedy Coordinate Gradient):自动在 prompt 末尾搜索对抗后缀,使模型以 "Sure, here is..." 开头回答有害请求。

攻击类型原理自动化程度迁移性
角色扮演上下文劫持手动
编码绕过输入预处理盲区手动
多轮诱导逐步上下文污染半自动
GCG 对抗后缀梯度优化 token 序列全自动高(可跨模型)
对抗前缀注入覆盖 system prompt手动

防御手段:

  • 输入过滤(Perplexity Detector):对抗后缀通常 perplexity 极高,检测异常输入
  • 安全 RLHF:加强模型拒绝能力,提升 refusal boundary
  • Circuit Breaker:监控模型内部激活异常,发现有害生成前中断
  • System Prompt 强化:加入明确安全约束和角色锁定
Red Teaming 是持续对抗过程:攻击手段不断进化,防御也需迭代更新。
Q3
幻觉(Hallucination)检测与缓解方法?
HallucinationFaithfulnessRAG
显示答案

幻觉类型:

  • 事实性幻觉:生成与世界事实不符的内容(如编造论文、虚假数据)
  • 忠实性幻觉:生成与给定上下文不符的内容(摘要偏离原文)

检测方法:

方法原理适用场景
自洽性检测多次采样同一问题,检查答案一致性开放域 QA
外部知识验证RAG 检索 + NLI Entailment 验证事实核查
不确定性估计Logit entropy / token 概率分布分析实时检测

缓解方法:

  • 训练时:加入 factuality reward(FActScore — 将生成文本拆为原子事实逐条验证)
  • 推理时:DoLa(Decoding by Contrasting Layers)— 对比高层与低层 logits,抑制幻觉 token
  • 架构层面:RAG 接入实时知识库,减少模型依赖参数记忆
幻觉无法完全消除,只能通过多层防线降低频率和影响。
Q4
文本/图像水印(Watermark)的原理?
WatermarkDetectionIP Protection
显示答案

文本水印(Kirchenbauer et al., 2023):

  • 每步用上一个 token 作为种子(seed),通过哈希将词表分为 green listred list
  • 采样时给 green list token 的 logit 加上偏置 δ,使模型倾向选 green token
  • 检测:统计输出中 green token 比例,进行 z-test
z = (|s|G − γT) / √(T · γ · (1 − γ))
其中 |s|G 为输出中 green token 数量,γ 为 green list 比例(通常 0.5),T 为总 token 数。z 值越高,越可能是水印文本。

图像水印:

  • 隐写术:在像素 LSB 中嵌入信息
  • 频域嵌入:在 DCT/DWT 系数中嵌入水印,抗压缩
  • Stable Signature:训练图像生成模型的 decoder 直接嵌入水印,生成即带标记
Trade-off 维度说明
不可见性水印不应影响文本/图像质量
鲁棒性水印应在编辑、压缩、paraphrase 后仍可检测
容量可嵌入信息的比特数
水印的 trade-off:不可见性 vs 鲁棒性 vs 容量,三者难以同时最优。
Q5
Reward Hacking 的表现形式与解决方案?Alignment Tax 是什么?
Reward HackingRLHFAlignment Tax
显示答案

Reward Hacking 典型案例:

  • 冗长空洞:模型学会生成又长又空的回答(RM 偏好长回答 → 长度即分数)
  • 格式/关键词投机:过度使用特定格式(markdown 表格、编号列表)或关键词骗取 RM 高分
  • 谄媚(Sycophancy):迎合用户观点而非给出正确答案,甚至在用户质疑时放弃正确立场

解决方案:

方法原理
多奖励模型集成多个 RM 投票,降低单个 RM 被利用的风险
过程奖励(PRM)对推理每一步打分,而非只看最终结果
加强 KL 约束限制 policy 偏离 base model 的程度,防止极端优化
对抗训练 RM用 RL 模型的输出持续更新 RM,堵住已知漏洞
LRLHF = E[R(y|x)] − β · KL[πθ(y|x) ‖ πref(y|x)]
β 越大,KL 惩罚越强,模型越接近原始分布,Reward Hacking 风险越低,但对齐效果也越弱。

Alignment Tax:

  • 定义:对齐训练(RLHF/安全微调)导致模型部分原始能力下降的现象
  • 典型表现:创造性写作能力下降、少数语言能力退化、代码生成多样性降低
  • 本质:安全与能力的 trade-off — 过度安全限制了模型的表达空间
Alignment Tax 提醒我们:对齐不是免费的。过度对齐可能让模型变得"安全但无用"。

15. 推理时计算(Test-time Compute)

Q1
推理时 Scaling Law 是什么?与训练时 Scaling Law 有何区别?
Scaling LawTest-time Compute推理优化
显示答案 ▼

训练时 Scaling Law

  • 核心思想:增加模型参数量 N、数据量 D、计算量 C 可持续降低 loss
  • Kaplan et al. (2020) / Chinchilla (2022):给定计算预算,最优分配 N 和 D
  • 关系为幂律:L(N,D) ∝ N + D + const

推理时 Scaling Law

  • 核心思想:固定模型权重不变,通过增加推理时的计算量来提升任务正确率
  • 增加推理计算的方式:
    • 更多采样(Best-of-N)
    • 更长的思维链(Chain-of-Thought)
    • 迭代修正(Self-Refinement)
    • 树搜索(MCTS / Beam Search)
P(correct) = 1 − (1 − p)N (Best-of-N 理想上界,独立采样假设)

更一般地:Performance ∝ log(test-time compute) (在一定范围内近似 log-linear)

OpenAI "Let's Verify Step by Step" 结论

  • Process-based supervision(逐步验证)显著优于 Outcome-based supervision
  • 在数学推理任务中,PRM + Best-of-N 可将正确率从 ~50% 提升至 ~78%
  • 验证每一步比只看最终答案更有效地利用推理时计算

计算分配决策

策略适用场景优势
用更大模型广泛任务、知识密集型一次推理即可得到好结果
用更多推理计算推理密集型、可验证任务小模型 + 多次计算可超越大模型单次推理
💡 Snell et al. (2024) 发现:对于困难问题,增加推理时计算比增加模型大小更高效;对于简单问题,大模型一次推理更划算。
Q2
Process Reward Model (PRM) vs Outcome Reward Model (ORM) 的区别?
PRMORMReward Model验证器
显示答案 ▼

核心区别

维度ORM(Outcome RM)PRM(Process RM)
评分粒度仅对最终答案打分对推理的每一步打分
信号类型稀疏信号(只有终点)密集信号(每步反馈)
Credit Assignment差(无法定位错误步骤)好(精确定位出错位置)
训练数据成本低(只需判断答案对错)高(需标注每步正确性)
搜索效率低(必须走完整条路径)高(可提前剪枝错误分支)
典型应用简单 Best-of-N 筛选Beam Search / MCTS 引导

ORM 详解

  • 训练方式:给定问题 + 完整解题过程 + 最终答案,标注答案是否正确
  • 使用方式:生成多个完整解答,用 ORM 对最终答案打分,选分数最高的
  • 局限:即使答案正确,中间推理过程可能有错("凑对答案")

PRM 详解

  • 训练方式:对推理链的每一步标注 {正确, 中性, 错误}
  • 使用方式:在推理过程中逐步评估,可在任何一步发现错误并回溯
  • 最终得分:所有步骤分数的聚合(如最小值或乘积)
ORM score: R(x, y_final) → {0, 1}

PRM score: R(x, y₁, y₂, ..., yₜ) → r₁, r₂, ..., rₜ
最终分数 = min(r₁, ..., rₜ) 或 ∏ rᵢ

PRM 训练数据:Math-Shepherd 方法

  • 问题:人工标注每步正确性成本极高
  • Math-Shepherd 解决方案
    1. 对每一步,从该步开始继续采样多条完整解答
    2. 统计这些续写中最终答案正确的比例
    3. 比例高 → 该步大概率正确;比例低 → 该步可能有错
  • 本质:用 Monte Carlo 估计代替人工标注,自动化 PRM 数据构建

PRM 的核心优势

  • 更好的 Credit Assignment:能精确定位推理链中第几步出错
  • 更高效的搜索:不需要走完整条路径就能判断方向是否正确
  • 更好的泛化:学会评估推理步骤的质量,而非记忆答案模式
⚠️ PRM 的训练成本显著高于 ORM,但在复杂推理任务(数学、编程)中收益也更大。实践中常先用 ORM 做初步筛选,再用 PRM 做精细搜索。
Q3
Best-of-N / MCTS / Beam Search 在 LLM 推理中的应用?
Best-of-NMCTSBeam Search搜索策略
显示答案 ▼

一、Best-of-N(Rejection Sampling)

  • 流程:独立采样 N 条完整推理路径 → 用 Reward Model / Verifier 对每条打分 → 选得分最高的作为最终答案
  • 计算量:N 倍推理成本(线性增长)
  • 效果
    • 随 N 增大,正确率近似 log-linear 增长
    • 但存在饱和效应:N 超过某个阈值后提升边际递减
    • 原因:采样多样性有限,模型 policy 覆盖不到正确答案时 N 再大也无用
  • 优点:实现简单、易并行、无需修改模型
  • 缺点:计算效率低(大量重复无用计算)、无法利用中间步骤信息
Best-of-N 上界:P(至少一条正确) = 1 − (1−p)N
实际效果:Accuracy ≈ a · log(N) + b (log-linear regime)

二、MCTS(蒙特卡洛树搜索)

  • 核心思想:将推理步骤建模为树的节点,每个节点是一个推理步骤,边是可能的下一步
  • 四个阶段
    1. Selection:从根节点出发,用 UCB 公式选择子节点,平衡探索与利用
    2. Expansion:到达叶子节点时,用 LLM 生成新的推理步骤扩展
    3. Simulation:从新节点出发,快速模拟(rollout)到最终答案
    4. Backpropagation:将模拟结果反向传播,更新路径上所有节点的价值估计
  • UCB 公式
UCB(node) = Q(node) / N(node) + c · √(ln N(parent) / N(node))
  • 从 AlphaGo 到 o1 的迁移
    • AlphaGo:Policy Network + Value Network + MCTS 在围棋中超越人类
    • o1 推测:LLM Policy + PRM Value + 树搜索在推理任务中增强
    • 关键差异:LLM 的动作空间远大于围棋,需要 policy 做有效剪枝
  • 优点:理论上计算效率最高,能发现最优推理路径
  • 缺点:实现复杂、需要可靠的 value function、延迟高

三、Beam Search with Verifier

  • 流程
    1. 维护 beam_size 条候选推理路径
    2. 每步对所有候选生成下一步的多种延续
    3. 用 PRM 对每个新步骤打分
    4. 保留得分最高的 beam_size 条路径,剪枝其余
    5. 重复直至所有路径到达终点
  • 与标准 Beam Search 的区别
    • 标准 Beam Search:用 token-level log-prob 打分
    • Verifier-guided:用 step-level PRM 分数打分
  • 优点:比 Best-of-N 高效(提前剪枝),比 MCTS 简单
  • 缺点:贪心策略可能错过全局最优,PRM 偏差会累积
方法计算效率实现复杂度需要的组件适合场景
Best-of-NORM/Verifier简单任务、快速部署
Beam SearchPRM多步推理、可验证任务
MCTSPolicy + Value复杂推理、计算预算充足
💡 实践建议:简单场景用 Best-of-N(N=8~64),中等复杂度用 Beam Search(beam=4~8),极端困难问题考虑 MCTS。关键在于 Verifier/PRM 的质量——搜索策略再好,verifier 不准也白搭。
Q4
自我纠正(Self-Correction)真的有效吗?有哪些争论?
Self-CorrectionSelf-RefineReflexion验证
显示答案 ▼

内在自纠正(Intrinsic Self-Correction)

  • 定义:模型仅依赖自身能力发现错误并修正,无外部反馈
  • 典型做法:生成答案 → 提示"请检查你的答案" → 模型自行修改
  • Huang et al. (2023) "Large Language Models Cannot Self-Correct Reasoning Yet" 核心结论
    • 在没有外部反馈时,Self-Correction 往往降低正确率
    • 模型可能把对的答案"改错"(over-correction)
    • 模型无法可靠区分自己的输出是对是错
  • 根本原因
    • 如果模型第一次就能判断答案对错,为什么第一次不直接给出对的?
    • 自纠正本质上需要一个比生成能力更强的"验证能力"——但同一个模型难以兼具
    • "用同一个有缺陷的推理器来验证自己"是逻辑上的困境

外在自纠正(Extrinsic Self-Correction)

  • 定义:借助外部工具或验证器提供反馈信号
  • 有效的外部信号来源
    • 代码执行:运行代码,报错信息明确指出问题
    • 单元测试:测试通过/失败是无歧义的二进制信号
    • 搜索引擎:fact-check 事实性陈述
    • 数学验证器:形式化证明检查
    • 编译器:语法/类型错误的确定性反馈
  • 关键区别:外部反馈提供了模型自身无法获得的"ground truth"信号

代表性框架

框架机制外部信号效果
Self-Refine生成 → 自我反馈 → 修改(迭代)无(纯内在)开放生成任务有效,推理任务效果存疑
Reflexion执行 → 环境反馈 → 反思 → 重试环境反馈(测试结果等)编程任务显著提升
CRITIC生成 → 工具验证 → 修改搜索/代码执行事实性任务明显改善
Self-Debug生成代码 → 执行 → 根据报错修改代码执行结果编程任务有效

何时 Self-Correction 有效?

  • 有效场景
    • 有明确、自动化的验证信号(代码能跑 / 数学可验证 / 测试能通过)
    • "验证比生成容易"的任务(P ≠ NP 的类比)
    • 错误类型是可定位的(语法错误、类型错误、格式问题)
  • 无效场景
    • 开放性推理(没有标准答案可对照)
    • 模型置信度高但答案错误(幻觉)
    • 需要新知识才能修正的错误
⚠️ 核心洞察:Self-Correction 有效的前提是"验证比生成容易"。对于代码(可执行)和数学(可形式化验证),这一条件成立;对于常识推理和开放性问题,这一条件通常不成立。
Q5
o1/R1 类模型如何训练长思维链推理能力?
o1DeepSeek-R1RLCoTGRPO
显示答案 ▼

两条技术路线

路线方法优点缺点
蒸馏路线用强模型(如 GPT-4/o1)生成 CoT 数据 → SFT 训练简单、快速、稳定天花板受限于教师模型、无法超越数据分布
RL 路线RL(GRPO/PPO)+ Verifier/Reward → 模型自发涌现推理天花板高、可超越训练数据训练不稳定、成本高、需要好的 reward 设计

DeepSeek-R1 训练流程

阶段 1:R1-Zero(纯 RL 实验)

  • 从 DeepSeek-V3-Base 出发,不做任何 SFT
  • 直接用 GRPO 强化学习训练,奖励信号来自 Rule-based Verifier(数学答案对错)
  • 惊人发现:模型自发涌现了 CoT 行为!
    • 学会了分步推理
    • 学会了自我验证("让我检查一下")
    • 学会了回溯("等等,这步有问题")
    • 思维链长度随训练自动增长
  • 问题:语言混杂(中英混搭)、格式混乱、可读性差

阶段 2:R1 完整训练流程

  1. 冷启动 SFT:用少量高质量 CoT 数据做 SFT
    • 目的:建立基本的推理格式和语言规范
    • 数据量:数千条精标 CoT 样本
  2. GRPO 强化学习
    • 奖励信号:正确性(Rule-based)+ 格式规范性
    • 模型学会产生更长、更深入的思维链
    • 关键:不限制 CoT 长度,让模型自由探索
  3. Rejection Sampling + SFT 迭代
    • 用 RL 训练后的模型采样大量推理数据
    • 筛选正确的作为新 SFT 数据
    • 对模型做进一步 SFT 以提升通用能力
GRPO 目标:J(θ) = E[A(s,a) · min(r(θ), clip(r(θ), 1±ε)) − β · KL(π_θ ∥ π_ref)]

其中 r(θ) = π_θ(a|s) / π_old(a|s),A(s,a) 由组内相对排名计算(无需单独的 Critic)

关键发现与涌现能力

  • RL 让模型学会"思考更久"
    • 面对更难的问题,模型自动生成更长的思维链
    • 这是自适应计算的涌现——模型学会了分配更多计算给更难的问题
  • 思维链长度与问题难度正相关
    • 简单问题:几十个 token 的 CoT
    • 困难问题:数千甚至上万 token 的 CoT
    • 这不是人为设定的,是 RL 训练自然涌现的
  • 涌现的推理能力
    • 🔄 反思(Reflection):"我觉得这个方法不太对,换一种思路"
    • ↩️ 回溯(Backtracking):"第3步有问题,回到第2步重新推导"
    • 验证(Verification):"让我代入原方程验证一下答案"
    • 📐 多角度尝试:先试方法A,不行再试方法B
💡 核心启示:RL 的优势在于不受人类示范数据的限制——人类很难写出最优的万字推理链,但 RL 可以让模型自己探索出来。蒸馏路线的天花板是教师模型;RL 路线的天花板是 reward 信号的质量和搜索空间的覆盖。
⚠️ 当前局限:RL 训练长 CoT 主要在可验证任务(数学、编程)上效果显著,对于开放性任务(写作、常识推理)的 reward 设计仍是开放问题。

16. 训练稳定性与工程实战

Q1
Loss Spike 的常见原因与处理方法?
训练稳定性Loss Spike梯度裁剪
查看答案

常见原因

  • 数据质量问题:某个 batch 含异常样本(损坏、标注错误、极端值)
  • 学习率过大:导致梯度爆炸,参数更新幅度过大
  • 数值溢出:FP16 下出现 inf/nan,超出表示范围
  • 数据分布突变:不同领域数据边界处分布剧变

处理方法

  • 梯度裁剪:clip grad norm,通常设为 1.0
  • 数据回溯:检查 spike 前后的训练数据,定位问题样本
  • Checkpoint 回滚:从最近 checkpoint 恢复,跳过问题数据
  • 降低学习率重启:减小 lr 后从 checkpoint 继续训练
  • z-loss 正则化(PaLM 使用):抑制 logits 过大

z-loss 正则化

Lz = 1e-4 × log²(Z)
其中 Z 为 softmax 的归一化因子(logits 的 logsumexp)。z-loss 惩罚过大的 logits,防止数值不稳定。
Loss Spike 不一定需要立即干预——偶尔的小 spike 若能自行恢复是正常现象;但持续或剧烈的 spike 需要及时回滚。
Q2
混合精度训练(FP16/BF16/FP8)的原理?各有什么数值问题?
混合精度FP16BF16FP8
查看答案

三种低精度格式

  • FP16:指数位 5,尾数位 10,范围 ±65504
  • BF16:指数位 8,尾数位 7,范围同 FP32,但精度较低
  • FP8(E4M3 / E5M2):H100+ 支持,分别用于前向计算和梯度

精度格式对比

格式 指数位 尾数位 动态范围 需要 Loss Scaling 典型用途
FP16 5 10 ±65504 ✅ 必须 V100/A100 训练
BF16 8 7 同 FP32 ❌ 不需要 A100/H100 训练(推荐)
FP8 E4M3 4 3 ±448 需要 per-tensor scaling H100 前向计算
FP8 E5M2 5 2 ±57344 需要 per-tensor scaling H100 梯度

Loss Scaling(FP16 必须)

  • 前向时将 loss 乘以 scale factor(放大梯度,避免 underflow)
  • 反向传播后将梯度除以 scale factor(还原真实梯度)
  • Dynamic Loss Scaling:遇到 overflow 则减半 scale,连续 N 步无 overflow 则加倍
scaled_loss = loss × S
grads = backward(scaled_loss)
true_grads = grads / S
BF16 的核心优势:动态范围与 FP32 相同(指数位 8),因此不需要 loss scaling,大幅简化训练流程。目前大模型训练首选 BF16。
Q3
大模型训练的 Checkpoint 策略与故障恢复?
Checkpoint故障恢复Elastic Training
查看答案

Checkpoint 频率

  • 通常每 1000~5000 steps 保存一次
  • 权衡:太频繁浪费 I/O 和存储;太稀疏则故障后回退代价大

Async Checkpoint

  • 异步写入,不阻塞训练(Megatron-LM 实现)
  • 将模型状态拷贝到 CPU/pinned memory,后台线程写入存储
  • 训练继续前进,写入与计算重叠

分布式 Checkpoint

  • 每个 rank 独立保存自己的 shard(避免汇聚到单节点)
  • 支持 resharding:改变并行度后仍可恢复训练(如从 TP=8 变为 TP=4)

故障恢复流程

  1. 检测故障:NCCL timeout / GPU ECC error / 进程崩溃
  2. 从最近 checkpoint 加载:恢复模型参数、优化器状态、scheduler
  3. 快进 data loader:使用确定性 shuffle,跳到正确的数据位置
  4. 跳过或标记问题节点:将故障 GPU/节点从集群中移除

Elastic Training

  • 支持动态增减节点,不中断训练
  • 节点故障时自动缩容继续训练,修复后扩容回来
  • 代表框架:TorchElastic、Varuna
确定性 data loader 是故障恢复的关键——必须能根据 step 数精确重放数据顺序,否则会重复训练或遗漏数据。
Q4
训练监控的关键指标有哪些?如何判断训练是否健康?
训练监控MFUGradient Norm告警
查看答案

核心指标

指标 健康状态 异常信号
Loss 曲线 平滑下降 持续 spike 或上升
Gradient Norm 稳定在某个范围 突然增大 → 不稳定
Learning Rate 与 scheduler 一致 偏离预期曲线
Token Throughput (tokens/s/GPU) 稳定 下降 → 有 straggler
GPU Utilization / MFU MFU > 40% MFU 骤降 → 通信瓶颈/慢节点

高级指标

  • 参数 norm(各层权重大小):异常增长说明训练发散
  • 激活值范围:检测 nan/inf,尤其关注最后几层
  • 梯度中 zero 比例:过高说明 dead neurons(ReLU 死亡)

告警规则

  • grad_norm > 10× 历史均值 → 立即告警
  • loss 连续 100 步上升 → 自动暂停训练
  • MFU < 阈值 → 检查慢节点、网络问题
MFU = 实际 FLOPS / 理论峰值 FLOPS
MFU(Model FLOPS Utilization)是衡量训练效率的黄金指标。GPT-3 训练 MFU 约 46%,PaLM 约 46-57%。MFU 低说明存在通信、内存、或调度瓶颈。
Q5
集群通信拓扑与网络瓶颈?NVLink / InfiniBand / RoCE 对比?
集群通信NVLinkInfiniBand拓扑感知
查看答案

GPU 互联层级

  1. NVLink / NVSwitch:单机内 GPU 互联(H100: 900GB/s per GPU)
  2. InfiniBand / RoCE:机间网络(400Gbps NDR IB)
  3. 以太网:跨机架/跨机房(带宽最低,延迟最高)

互联技术对比

技术 带宽 延迟 范围 典型用途
NVLink (H100) 900 GB/s ~μs 单机内 Tensor Parallelism
InfiniBand NDR 400 Gbps (50 GB/s) ~1-2 μs 机间 Data Parallelism AllReduce
RoCE v2 100-400 Gbps ~2-5 μs 机间 IB 替代(以太网上 RDMA)
以太网 25-100 Gbps ~10-50 μs 跨机架 管理面 / 非关键通信

通信瓶颈分析

  • TP 通信在 NVLink 内完成(低延迟、高带宽,AllReduce 频繁)
  • PP 通信为点对点 P2P(少量激活值数据,延迟敏感)
  • DP 的 AllReduce 走 InfiniBand(大数据量梯度同步,带宽敏感)

拓扑感知并行策略

  • 同一节点内做 TP(需要最高带宽,NVLink 满足)
  • 跨节点做 DP 和 PP(通信量相对较少,IB 可承载)
  • DeepSeek-V3 的 Expert Parallelism 需要大量 All-to-All 通信,对网络拓扑要求极高

网络故障处理

  • 链路闪断:自动重试 + 备用路径切换(多 rail 网络)
  • NCCL timeout:检测超时后标记故障节点,触发 checkpoint 恢复
  • 慢节点检测:监控各节点 AllReduce 完成时间,stragglers 会拖慢整体训练
拓扑感知调度的核心原则:将通信量最大的并行维度放在带宽最高的互联层级上。TP 需要每个前向/反向都做 AllReduce,因此必须放在 NVLink 内。

17. 端侧与高效部署

Q1
模型剪枝(Pruning)的方法?结构化与非结构化剪枝的区别?
Pruning压缩SparseGPTWanda
显示答案 ▾

非结构化剪枝:逐元素置零(SparseGPT / Wanda)

  • 优势:压缩率高,可达 50%~60% 稀疏度几乎无损
  • 劣势:需要稀疏硬件支持(如 NVIDIA A100 Sparse Tensor Core 2:4)才有实际加速

结构化剪枝:移除整行/整列/整层(SliceGPT / ShortGPT / LaCo)

  • 优势:直接减少计算量,无需特殊硬件即可加速
  • 劣势:精度损失可能更大,需要更精细的重要性评估

剪枝粒度层次:

权重级(fine-grained) < 通道级(channel) < 层级(layer)
Wanda 的核心思路:按 |w| × ||x|| 的乘积重要性打分,无需校准数据即可完成剪枝,极其高效。
方法 类型 粒度 是否需要校准数据 硬件要求
SparseGPT 非结构化 权重级 需要少量 稀疏硬件加速
Wanda 非结构化 权重级 不需要 稀疏硬件加速
SliceGPT 结构化 通道级 需要少量 通用硬件
ShortGPT 结构化 层级 需要少量 通用硬件
LaCo 结构化 层级 需要少量 通用硬件
Q2
Prefill 与 Decode 分离部署架构?为什么这样设计?
推理架构Prefill-Decode分离Distserve
显示答案 ▾

Prefill 阶段特点:

  • 计算密集(处理全部 prompt tokens,大矩阵乘法)
  • GPU 利用率高,Compute-bound
  • 延迟要求:TTFT(Time To First Token)

Decode 阶段特点:

  • 显存密集(KV Cache 持续增长)
  • 计算利用率低(每次只算 1 个 token),Memory-bound
  • 延迟要求:TPOT(Time Per Output Token)

分离架构优势:

  • Prefill 机器配高算力卡(如 H100)—— 最大化 FLOPS 利用
  • Decode 机器配大显存卡或多卡分摊 KV Cache —— 最大化显存带宽利用
  • 独立扩缩容,资源利用率更高,避免互相干扰
代表论文:Distserve / Splitwise / TetriInfer —— 均验证了分离部署可显著降低 P99 延迟和成本。

KV Cache 传输:

Prefill Node → KV Cache Transfer (NVLink / RDMA) → Decode Node
KV Cache 传输是该架构的瓶颈之一。对于长 context(如 128K tokens),KV Cache 可达数 GB,需要高带宽互联支撑。
Q3
模型蒸馏在 LLM 中的实践?从大模型蒸馏小模型的 pipeline?
蒸馏Knowledge DistillationSFT黑盒蒸馏
显示答案 ▾

白盒蒸馏(Logit-level):

  • Student 拟合 Teacher 的 logits 分布(KD Loss = KL Divergence)
  • 需要 Teacher 推理完整前向,成本高
  • 保留了 Teacher 的概率分布信息(dark knowledge)
L_KD = KL(softmax(z_T / τ) || softmax(z_S / τ)),τ 为温度系数

黑盒蒸馏(Data-level):

  • Teacher 生成高质量回答 → Student 做 SFT
  • Alpaca / Vicuna 等开源模型的核心方法
  • 更实用、成本低,但丢失 Teacher 的概率分布信息

实践 Pipeline:

  1. 大模型对大量 prompt 生成回答(数据合成)
  2. 质量过滤(Self-consistency / Reward Model 打分)
  3. 小模型 SFT 训练
  4. (可选)小模型 DPO/RLHF 对齐
On-Policy 蒸馏:用 Student 当前输出作为 negative sample,Teacher 输出作为 positive sample,构造偏好对进行 DPO 训练,效果优于纯 SFT。
维度 白盒蒸馏 黑盒蒸馏
信息来源 Teacher logits Teacher 生成文本
是否需要 Teacher 参数 需要 不需要(API 即可)
成本 高(全量前向) 低(只需生成)
信息保留 概率分布完整 仅 argmax 输出
代表工作 MiniLLM, GKD Alpaca, Vicuna, WizardLM
Q4
硬件选型:GPU / TPU / NPU 在 LLM 推理中的差异?
硬件GPUTPUNPU推理选型
显示答案 ▾

NVIDIA GPU(H100 / A100):

  • 生态最成熟,CUDA 工具链完善(vLLM、TensorRT-LLM 等)
  • Tensor Core 支持 FP8 / INT8 / FP16
  • H100:989 TFLOPS (FP8),80GB HBM3,3.35 TB/s 带宽

Google TPU(v5p):

  • 针对矩阵运算优化,大规模互联(ICI,芯片间高速互联)
  • XLA 编译器自动优化,但灵活性较低
  • 优势在大 batch 训练,单卡推理生态弱于 GPU

华为 Ascend NPU(910B):

  • 自主可控需求驱动
  • Da Vinci 架构,支持 INT8 / FP16
  • 生态相对不成熟,算子适配和调试成本较高

选型考虑:

场景 推荐硬件 理由
推理延迟敏感 NVIDIA GPU CUDA 优化成熟,推理框架丰富
大规模训练 Google TPU TCO 可能更低,大规模互联优势
国产化要求 华为 Ascend NPU 自主可控,政策合规
选型不仅看算力峰值,更要看显存带宽(决定 Decode 速度)、互联带宽(决定并行效率)和软件生态(决定开发效率)。
Q5
端侧部署的关键技术?手机/边缘设备跑 LLM 的挑战?
端侧部署手机LLMllama.cpp量化
显示答案 ▾

核心挑战:

  • 内存限制:手机 6~12GB 总内存,模型 + KV Cache 需要 fit 在有限空间内
  • 计算能力有限:手机 GPU/NPU 约 10 TOPS,远低于数据中心卡
  • 功耗/散热约束:持续推理会导致降频

关键技术:

  • 激进量化:INT4 / INT3 甚至 INT2(BitNet 1.58b)
  • 小模型设计:Phi-3-mini / Gemma-2B / Qwen-1.5B
  • 推理引擎优化:llama.cpp / MLC-LLM / ExecuTorch
  • KV Cache 管理:限制最大 context / 动态 eviction(StreamingLLM)

模型架构优化:

  • GQA(Grouped Query Attention)减少 KV Cache 占用
  • 深窄网络 vs 浅宽网络的取舍 —— 窄网络更适合端侧内存约束
  • 知识蒸馏从大模型迁移能力到小模型
端侧模型内存估算:参数量 × 量化位数 / 8 + KV Cache
例:3.8B × 4bit / 8 = 1.9GB 权重 + KV Cache 约 0.5~1GB
典型性能:Phi-3-mini (3.8B) INT4 量化在手机上可达约 15 tokens/s,已可支持实时对话体验。
引擎 特点 支持平台
llama.cpp 纯 C/C++,GGUF 格式,社区活跃 全平台(iOS/Android/PC/Mac)
MLC-LLM TVM 编译优化,Vulkan/Metal 后端 Android/iOS/Web
ExecuTorch PyTorch 官方端侧方案 iOS/Android