AI技术面试总结问题
第一部分:机器学习基础
过拟合和欠拟合分别是什么?如何解决?
- 回答要点:
- 过拟合:模型在训练集上表现很好,但在验证集/测试集上表现差(学到了噪声)。解决方案:增加数据量、数据增强、降低模型复杂度、正则化(L1/L2)、早停法、Dropout、集成学习。
- 欠拟合:模型连训练集都拟合不好(模型过于简单)。解决方案:增加特征、增加模型复杂度(更多层/神经元)、减少正则化参数。
L1 正则化和 L2 正则化的区别是什么?为什么 L1 能产生稀疏解?
- 回答要点:
- L2 (Ridge):权重衰减,使权重趋近于 0 但不等于 0,解是圆形的约束区域。
- L1 (Lasso):使权重趋近于 0 且容易等于 0,解是菱形的约束区域。
- 原因:L1 的等高线与约束区域的交点更容易在坐标轴上(即某些维度权重为 0),从而产生稀疏性,可用于特征选择。
什么是偏差与方差的权衡?
- 回答要点:
- 偏差:模型预测值与真实值的偏离程度(欠拟合主导)。
- 方差:模型在不同训练集上预测结果的变动程度(过拟合主导)。
- 权衡:模型越复杂,偏差越低,方差越高。我们需要找到总误差最小的平衡点。
请解释梯度消失和梯度爆炸的原因及解决方法。
- 回答要点:
- 原因:深层网络中,链式求导时连续乘以小于 1 的梯度导致消失(如 Sigmoid 饱和区);连续乘以大于 1 的梯度导致爆炸。
- 解决:
- 使用 ReLU 及其变体(Leaky ReLU)。
- 合理的权重初始化(Xavier, He initialization)。
- 批归一化。
- 残差结构(ResNet)。
- 梯度裁剪(针对爆炸)。
生成模型和判别模型的核心区别是什么?请举例。
- 回答要点:
- 判别模型:直接学习决策边界 P(Y∣X)P(Y∣X)。关注区别。例:LR, SVM, CNN, CRF。
- 生成模型:学习联合概率分布 P(X,Y)P(X,Y),然后通过贝叶斯定理计算 P(Y∣X)P(Y∣X)。关注数据是如何生成的。例:朴素贝叶斯, HMM, GAN, VAE, Diffusion Model。
第二部分:深度学习与神经网络
- 回答要点:
- Self-Attention:通过 Q,K,VQ,K,V 矩阵计算注意力权重。公式:Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V)=softmax(dkQKT)V。
- 作用:捕获全局依赖关系,解决 RNN 的长距离遗忘和 CNN 的局部感受野问题。
- FFN (前馈网络):通常包含两层线性层和一个激活函数(如 ReLU),用于非线性变换和特征增强。
- 位置编码:由于自注意力本身是置换不变的,需要加入位置信息。
Batch Normalization 和 Layer Normalization 的区别?
- 回答要点:
- BN:在批次维度上进行归一化。依赖 Batch Size,不适合变长序列(如 NLP)。
- LN:在特征维度上进行归一化。不依赖 Batch Size,适合 RNN/Transformer。
- 应用:CV 多用 BN,NLP 多用 LN(Transformer 使用 Pre-LN 结构更稳定)。
训练一个深度学习模型时,如果 Loss 不下降,你会如何排查?
- 回答要点:
- 数据检查:标签是否有错?数据是否归一化?是否存在数据泄露?
- 模型配置:学习率是否过大(Loss 震荡)或过小(几乎不变)?
- 代码逻辑:检查梯度是否为 0(梯度消失)或 NaN。
- 基线测试:先在小数据集(如 100 条)上过拟合,如果能过拟合说明模型容量够;如果不能,说明模型结构或代码有 Bug。
什么是激活函数?为什么需要非线性?ReLU 相比于 Sigmoid 的优点?
- 回答要点:
- 非线性:如果没有非线性,多层神经网络等价于单层线性变换,无法拟合复杂函数。
- ReLU 优点:计算简单(max(0,x))、缓解梯度消失(正区间导数为 1)、产生稀疏性。
- 缺点:Dead ReLU 问题(神经元死亡)。解决:Leaky ReLU。
如何解决样本不平衡问题?
- 回答要点:
- 数据层面:欠采样(多数类)、过采样(少数类,如 SMOTE 算法)。
- 算法层面:调整损失函数(Focal Loss、设置 class_weight)、改变阈值(不用 0.5,用 PR 曲线找最优)、使用 AUC/PR 作为评估指标(不用准确率)。
第三部分:自然语言处理 (NLP) 与大模型
请简述 BERT 的预训练任务。
- 回答要点:
- MLM (Masked Language Model):随机 mask 掉 15% 的 token,让模型预测被 mask 的词。其中 80% 替换为 [MASK],10% 替换为随机词,10% 保持不变。
- NSP (Next Sentence Prediction):判断两句话是否为连续的上下文关系(用于理解句子间关系)。
什么是 LLM 的涌现能力?以及常见的微调方法有哪些?
- 回答要点:
- 涌现:当模型规模超过某个阈值(如 10B-100B 参数),突然出现小模型不具备的复杂能力(如上下文学习、推理)。
- 微调:
- Full Fine-tuning:更新全部参数,成本高。
- PEFT (参数高效微调):
- LoRA:在原始权重旁路插入低秩矩阵,只训练该矩阵,推理时无额外延迟。
- Prefix Tuning:在输入前添加可训练的连续向量。
如何缓解大模型生成内容中的“幻觉”问题?
- 回答要点:
- 检索增强生成:结合外部知识库检索相关内容作为上下文。
- 提示词工程:要求模型“不确定时请说不知道”。
- 采样策略:调整温度参数(降低随机性)。
- 事实核查:训练专门的奖励模型或使用外部工具进行校验。
- 回答要点:
- RNN:无法并行,存在梯度消失,难以捕获长距离依赖。
- LSTM:通过门控机制缓解了梯度消失,但依然无法并行,且计算复杂度 O(n)O(n)。
- Transformer:完全并行,通过自注意力直接捕获长距离依赖,复杂度 O(n2)O(n2),长文本时显存压力大(需借助 Sparse Attention 或 LongNet 等优化)。
第四部分:计算机视觉 (CV)
请简述 CNN 中感受野的概念,以及如何增大感受野?
- 回答要点:
- 定义:特征图上的一个像素点对应原图上的区域大小。
- 方法:增加网络深度(堆叠卷积层)、使用空洞卷积、使用更大的卷积核或池化层。
ResNet 的核心思想是什么?为什么能训练这么深?
- 回答要点:
- 核心:残差连接,让网络学习映射 H(x)=F(x)+xH(x)=F(x)+x。
- 原理:当最优解接近恒等映射时,网络只需将残差 F(x)F(x) 逼近 0,这比直接拟合恒等映射更容易。它有效解决了深层网络中的梯度消失和退化问题。
目标检测中,YOLO 系列和 Faster R-CNN 的核心区别是什么?
- 回答要点:
- Faster R-CNN:两阶段检测器。先通过 RPN 生成候选框,再对候选框进行分类回归。精度高,速度较慢。
- YOLO:单阶段检测器。将检测视为回归问题,直接在网格上预测边界框和类别。速度极快,适合实时场景。
数据增强有哪些常见手段?在图像分类和目标检测中应用有何不同?
- 回答要点:
- 常见:翻转、旋转、裁剪、缩放、色彩抖动、MixUp、CutMix。
- 区别:
- 分类:可以随意改变像素位置和颜色,标签不变。
- 检测:几何变换必须同步修改标注框的坐标。
第五部分:模型部署与工程化 (MLOps)
训练集、验证集、测试集的作用分别是什么?
- 回答要点:
- 训练集:用于训练模型参数(权重)。
- 验证集:用于调整超参数、选择模型、早停。不能参与反向传播。
- 测试集:用于最终评估模型的泛化能力,只能使用一次。
什么是 K 折交叉验证?在什么情况下使用?
- 回答要点:
- 方法:将数据分为 K 份,每次取 K-1 份训练,1 份验证,循环 K 次取平均指标。
- 使用场景:数据量较小时,为了更稳定地评估模型性能,避免验证集划分的偶然性。
训练好的 PyTorch 模型如何部署到生产环境?
- 回答要点:
- 方案 1 (TorchScript):使用
torch.jit.trace 或 script 将模型转为静态图,脱离 Python GIL。
- 方案 2 (ONNX):导出为 ONNX 格式,使用 ONNX Runtime 进行推理,支持跨平台。
- 方案 3 (TensorRT):针对 NVIDIA GPU 进行极致优化,支持 FP16/INT8 量化。
- 方案 4 (服务化):使用 Triton Inference Server 或 TorchServe 封装成 API。
模型量化是什么?有哪些类型?
- 回答要点:
- 定义:将模型权重和激活从 FP32 映射到 INT8 或 FP16,减少显存占用和计算延迟。
- 类型:
- 训练后量化:简单,可能有精度损失。
- 量化感知训练:在训练中模拟量化误差,精度损失较小。
第六部分:算法与数据结构 (手撕代码常见题)
手写快速排序,并分析时间复杂度和空间复杂度。
- 回答要点:
- 复杂度:平均 O(nlogn)O(nlogn),最坏 O(n2)O(n2)(已排序数组且每次选第一个元素作为基准)。
- 空间:O(logn)O(logn)(递归栈深度)。
- 核心:选基准,双指针分区,递归左右。
如何判断链表是否有环?找到环的入口。
- 回答要点:
- 方法:快慢指针(Floyd 判圈法)。
- 逻辑:快指针每次两步,慢指针一步。若相遇则有环。相遇后,将慢指针重置到头,快指针留在原地,两者每次一步再次相遇即为入口点。
求二叉树的最大深度(递归与非递归)。
- 回答要点:
- 递归:
return max(maxDepth(left), maxDepth(right)) + 1。
- 非递归:层序遍历(BFS),每遍历一层深度加 1。
给定一个数组,求 Top K 频繁出现的元素。
- 回答要点:
- 方法:
- 哈希表统计频率。
- 使用最小堆(O(nlogk)O(nlogk))或快速选择算法(O(n)O(n) 平均)。
第七部分:开放性问题与场景题
如果你负责一个 AI 项目,数据量很少(如只有 1000 张图),你会怎么做?
- 回答要点:
- 数据增强:使用强数据增强(RandAugment)。
- 迁移学习:使用 ImageNet 预训练模型,冻结底层,只微调顶层。
- 合成数据:利用 GAN 或扩散模型生成数据。
- 传统方法:如果数据极少,考虑使用传统的机器学习方法(如 SVM + 手工特征)或 Few-shot Learning 框架。
解释一下 AUC-ROC 曲线。在多分类问题中如何使用?
- 回答要点:
- ROC:横轴 FPR(假阳率),纵轴 TPR(真阳率)。
- AUC:曲线下的面积,表示随机取一个正样本和一个负样本,模型将正样本排在负样本前面的概率。AUC 对类别不平衡不敏感。
- 多分类:通常使用 One-vs-Rest 策略,计算每个类别的 AUC 后取平均。
线上服务中,模型推理延迟过高怎么办?
- 回答要点:
- 模型层面:模型剪枝、量化(FP16/INT8)、知识蒸馏(用小模型代替大模型)。
- 工程层面:开启 Batch Inference(动态 Batching)、使用 TensorRT 或 ONNX Runtime 加速、使用更快的后端(如 Triton)、增加缓存(Redis)避免重复计算。
你对 AGI 的看法?如何看待 AI 的安全性和可控性?
- 回答要点:
- 这是一个开放性问题,考察视野和价值观。
- 建议:承认 AGI 是长期目标(目前的 LLM 更多是记忆和 Pattern Matching,缺乏真正的因果推理)。同时强调对 AI 对齐、隐私保护、偏见消除的关注,表现出作为工程师的社会责任感。