1. 引言
现在的 AI 岗位面试,早已不是背几个 API、调几个包就能过关的时代了。面试官们越来越喜欢“扒底裤”——从 Transformer 的注意力机制为什么 work,到反向传播的梯度消失怎么解决,再到部署时 ONNX 和 TensorRT 的优化原理,每一个环节都可能成为追问的焦点。
这篇文章的目标,就是帮你把这些“底层原理”彻底理清。我们不谈虚的,只讲面试中最高频、最硬核的知识点,从模型结构、训练原理、优化技巧到部署落地,一次性讲透。
2. 模型结构:Transformer 为什么是基石?
2.1 自注意力机制(Self-Attention)
面试官最爱问:“请解释一下 Scaled Dot-Product Attention 的公式,以及为什么要除以 sqrt(d_k)?”
公式如下:
Attention(Q, K, V) = softmax(Q * K^T / sqrt(d_k)) * V核心思想:让序列中的每个 token 都能“看到”所有其他 token,从而捕捉长距离依赖关系。
为什么除以 sqrt(d_k):
- 当 d_k 很大时,Q 和 K 的点积结果会变得非常大,导致 softmax 进入梯度极小的饱和区。
- 除以 sqrt(d_k) 可以将方差拉回到 1 左右,保持梯度稳定,让训练更顺畅。
2.2 多头注意力(Multi-Head Attention)
“为什么不用一个头,要用多个头?”
- 单一注意力头:只能学习一种“关系模式”(比如语法关系或语义相似性)。
- 多头机制:将 Q、K、V 分别投影到多个低维子空间,每个头独立学习不同的注意力模式(如位置关系、语义关系、句法关系等),最后拼接起来,让模型表达能力更强。
2.3 位置编码(Positional Encoding)
“Transformer 没有 RNN 的循环结构,怎么知道词的顺序?”
- 使用正弦/余弦函数生成固定位置编码,或者使用可学习的位置编码。
- 正弦编码的优点是:可以外推到比训练时更长的序列,且不同位置的编码可以通过线性变换相互表示。
3. 训练原理:反向传播与优化器
3.1 反向传播(Backpropagation)
面试官:“请手写一个简单的反向传播推导。”
核心是链式法则:从损失函数开始,逐层向前计算梯度,更新每一层的参数。
∂L/∂w = ∂L/∂y * ∂y/∂z * ∂z/∂w- L:损失函数
- y:输出
- z:线性变换结果(z = w*x + b)
- w:权重
3.2 梯度消失与梯度爆炸
“为什么深层网络难训练?”
- 梯度消失:使用 Sigmoid/Tanh 激活函数时,导数在饱和区趋近于 0,多层相乘后梯度指数级衰减,浅层参数几乎不更新。
- 梯度爆炸:权重初始化过大或网络过深,梯度指数级增长,导致参数震荡甚至 NaN。
解决方案:
- 使用 ReLU 及其变体(Leaky ReLU、GELU)。
- 残差连接(Residual Connection):让梯度可以直接“跳过”某些层。
- 层归一化(LayerNorm):稳定每层的输入分布。
- 梯度裁剪(Gradient Clipping):限制梯度最大值。
3.3 优化器进化史
“SGD、Adam、AdamW 有什么区别?”
| 优化器 | 特点 | 适用场景 |
|---|---|---|
| SGD | 简单,收敛稳定,但需要手动调学习率 | 小批量、CV 任务 |
| Adam | 自适应学习率 + 动量,收敛快 | NLP、大模型预训练 |
| AdamW | 修正了 Adam 的权重衰减实现方式,泛化更好 | 大模型微调、LLM 训练 |
AdamW 为什么更好:Adam 把 L2 正则化(权重衰减)和自适应学习率耦合在一起,导致正则化效果被削弱;AdamW 将两者解耦,在更新参数时独立应用权重衰减,效果更稳定。
4. 大模型(LLM)专项面试题
4.1 预训练与微调
“什么是 Pre-training 和 Fine-tuning?”
- 预训练:在海量无标注数据上训练模型,学习通用的语言表示(如 BERT、GPT)。
- 微调:在预训练模型基础上,用少量标注数据适配特定任务(如分类、问答)。
4.2 LoRA(Low-Rank Adaptation)
“大模型微调太贵了,怎么省钱?”
LoRA 的核心思想:冻结预训练权重,在模型层旁插入低秩矩阵(A * B),只训练这些矩阵。
h = W_0 * x + (B * A) * x- 参数量从 d * k 降到 d * r + r * k(r << d, k)。
- 训练完成后,可以将 LoRA 权重合并回原模型,推理时零额外开销。
4.3 推理优化:KV Cache
“为什么大模型推理时,生成第一个 token 最慢?”
- KV Cache:在自回归生成时,将已生成 token 的 Key 和 Value 缓存起来,避免重复计算。
- 第一个 token 需要计算所有位置的 K、V,后续 token 只需计算当前 token 的 K、V,然后拼接缓存,因此第一个 token 最慢。
5. 部署与推理优化
5.1 模型量化
“FP16、INT8 量化是怎么做到的?”
- FP16:将 FP32 的权重和激活值转为 FP16,显存减半,速度提升。
- INT8 量化:将 FP32 映射到 INT8 范围(-128 ~ 127),需要校准数据集计算缩放因子(scale)和零点(zero_point)。
- 量化感知训练(QAT):在训练过程中模拟量化误差,让模型适应低精度,效果优于训练后量化(PTQ)。
5.2 ONNX 与 TensorRT
“ONNX 和 TensorRT 分别解决了什么问题?”
- ONNX:模型交换格式,让模型可以在不同框架(PyTorch、TensorFlow)之间迁移。
- TensorRT:NVIDIA 的推理优化引擎,对模型进行图优化、层融合、精度校准、内存复用等,大幅提升 GPU 推理速度。
典型流程:
PyTorch 模型 → ONNX 导出 → TensorRT 优化 → 部署6. 总结
AI 面试的底层原理,本质上是在考察你对“模型为什么 work”的理解深度。从注意力机制到反向传播,从优化器到量化部署,每一个环节都值得你花时间去推导、去实践。
记住:面试官不是要你背答案,而是想看到你真正理解了这些原理。当你能够用自己的话把“为什么除以 sqrt(d_k)”讲清楚,把“AdamW 比 Adam 好在哪里”说明白,你就已经赢了。
希望这篇文章能帮你理清思路,在面试中游刃有余。