最近面试中遇到的八股文 - 大模型/算法篇
目录
1. Transformer: Post-Norm vs Pre-Norm
Pre Norm vs Post Norm
Pre Norm: 在attention前先layer norm;残差路径保持更"干净直通"。
Post Norm: 在attention后,残差+layer norm(Transformer原结构)。
影响
Pre Norm: 先把输入"标准化",再喂给子层;残差路径保持更"干净直通"。反向传播时至少有一条"恒等映射"的梯度通路(残差x直接传),深层堆起来也不太容易梯度消失/爆炸,所以大模型/深层Transformer普遍更偏向Pre-Norm。
Post Norm: 的每个子层输出都会再经过LN(·)。这会让梯度每层都要穿过LN的雅可比,深层时更容易出现训练不稳定、需要更小学习率/更精细warmup。
2. 位置编码
传统正余弦函数位置编码
使用正弦和余弦函数生成位置编码,具有良好的相对位置关系和可外推性。
RoPE (Rotary Position Embedding)
旋转位置编码,通过复数旋转的方式将位置信息注入到注意力计算中。
3. Layer Norm vs RMS Norm vs Batch Norm
用于处理层与层之间的归一化。
BatchNorm
训练时:分别对C个维度,在所有样本内求均值和方差→得到C个均值和方差→T(b, s, c)再分别对每个通道标准化(缩放系数和偏置是为了缓解标准化分布时有损失)
推理时:均值和方差随训练不断更新;遵循动量更新准则,作为全局的变量。
应用:常用于CV领域
缺点:训练、推理存在不一致;bs过小会导致训练时不稳定。
LayerNorm
对每一个样本(不同的颜色层)求均值和方差,一共有B个均值和方差。
特点:LN训练推理一致;不受bs影响。
应用:常用NLP领域,句子的padding长度不同用batch norm会导致计算不稳定。(为什么Transformer用LayerNorm?)
RMSNorm
是LayerNorm的一个简单变体,减少运算量。不需要同时计算均值和方差,而只需要计算均方根Root Mean Square。
4. Mask Attention
为什么需要mask attention模块?为什么只有decoder第一个模块需要?如何实现的?
- 为什么需要:在自回归生成任务中,当前位置不能看到未来的token,否则会造成信息泄露
- 为什么只有decoder第一个模块:Decoder需要自回归生成,而Encoder可以同时看到所有输入
- 如何实现:通过将上三角矩阵置为负无穷大,使得softmax后这些位置的权重为0
5. Attention 缩放因子
为什么是÷√(d_k),而不是d_k?推导全过程
背景:对于随机变量x,方差定义为Var(x) = E[x²] - (E[x])²
关键点:
- 点积的期望值为:E[q·k] = 0(假设均值为0)
- 期望值的平方为:(E[q·k])² = 0
- 点积的方差为:Var(q·k) = E[(q·k)²] = d_k(假设每个维度方差为1)
6. Softmax 手撕
防止溢出的方法
减去最大值(标准)
对每个向量做x = x - max(x),因为 softmax(x) == softmax(x - c)
logsumexp(x)
数值稳定的对数 softmax 计算
手撕MHA,加KV Cache
Multi-Head Attention的KV Cache优化:在自回归生成时,缓存之前计算过的K和V,避免重复计算。
attention计算量大如何优化?
- MQA (Multi-Query Attention): 多个head共享同一个K和V
- GQA (Grouped-Query Attention): 多个head分组共享K和V
- Flash Attention: 通过IO感知的精确注意力算法,减少HBM访问
7. 优化器与微调方法
Adam 和 Momentum / RMSProp 的关系
- Momentum: 只用一阶矩 mt(方向平滑)
- RMSProp: 只用二阶矩 vt(步长自适应)
- Adam: 两者合体 + 偏差矫正(更稳)
常用的微调方法
1. 全量微调
从预训练权重继续训练。优点很明显,缺点:容易过拟合或遗忘通用能力
Catastrophic Forgetting如何解决?
- Mix-in: "新任务数据"与"通用/原始分布数据"混着训
- Holdout: 维护通用能力测试set,监控新任务&通用能力的loss
- 早停
2. 参数高效微调 (PEFT)
冻结大部分基座参数,只训练很少新增参数。
2.1 LoRA / QLoRA
原理:学习一个增量矩阵ΔW,并且强行让它是低秩的。就像给大矩阵打一个"轻量补丁"。
LoRA: 在注意力/MLP的线性层上加低秩增量矩阵,只训练这些低秩参数。
QLoRA: 把基座权重量化到4-bit等低比特,仍用LoRA训练(训练更省显存)。
2.2 Adapter
在每层插入小瓶颈网络(adapter block),只训练adapter。
LoRA & Adapter 区别:
- Adapter(瓶颈小网络): 在每个Transformer block插入一个小模块:down-proj (d→r) → 非线性 → up-proj (r→d),带残差加回去。像在每层旁边加个"小旁路网络",专门学任务增量。
- LoRA(低秩权重增量): 不改网络拓扑,而是在某些线性层权重上做低秩分解增量:W' = W + ΔW,其中ΔW = B @ A,只训练A/B。不直接动大矩阵W,而是用一个"低秩补丁"去修正它。
2.3 Prefix-Tuning / Prompt-Tuning / P-Tuning v2
不改模型权重或只训练一小段"软提示"(连续向量前缀),用于引导注意力。
3. 训练方法:SFT
(instruction, input → output) 的监督数据做交叉熵训练
实践里常见组合:(继续预训练)→ SFT(常用LoRA/QLoRA)→ 对齐(DPO等)
4. 偏好对齐
- 4.1 RLHF (PPO): SFT后训练奖励模型(RM),再用强化学习优化
- 4.2 DPO / IPO / KTO / ORPO: 用成对偏好数据(chosen vs rejected)直接优化对比目标
8. MOE & DeepSpeed
MOE 混合专家模型
关键:
- 1. 稀疏MoE层,代替Transformer中的FFN层,作为若干专家
- 2. 门控路由判断不同的token前往不同的专家,一个token可以被发往多个专家
- 3. 负载均衡:门控网络往往倾向于主要激活相同的几个专家,所以训练时引入了一个辅助损失,平衡了专家之间的选择
案例:Switch Transformer, 通过MoE层共享参数。模型训练中的多卡并行、模型训练卡通信等相关知识。
DeepSpeed
DeepSpeed提供了多种大模型训练优化技术,包括:
- ZeRO: 零冗余优化器,分片优化器状态、梯度和参数
- 3D并行: 数据并行、张量并行、流水线并行的组合
- 混合精度训练: FP16/BF16训练减少显存占用
9. 其他知识点
AUC & ROC相关计算
ROC曲线:真正例率(TPR) vs 假正例率(FPR)
AUC:ROC曲线下面积,衡量模型分类性能的指标
搜推基础知识
搜索与推荐系统的核心算法和技术栈
损失函数理解
Comments NOTHING