跳转至

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(YX)。关注区别。例:LR, SVM, CNN, CRF。
  • 生成模型:学习联合概率分布 P(X,Y)P(X,Y),然后通过贝叶斯定理计算 P(Y∣X)P(YX)。关注数据是如何生成的。例:朴素贝叶斯, HMM, GAN, VAE, Diffusion Model。

第二部分:深度学习与神经网络

请详细解释 Transformer 的核心架构(Self-Attention 与 FFN)。

  • 回答要点:
  • 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 与 Transformer 在处理长文本时的优劣?

  • 回答要点:
  • 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.tracescript 将模型转为静态图,脱离 Python GIL。
  • 方案 2 (ONNX):导出为 ONNX 格式,使用 ONNX Runtime 进行推理,支持跨平台。
  • 方案 3 (TensorRT):针对 NVIDIA GPU 进行极致优化,支持 FP16/INT8 量化。
  • 方案 4 (服务化):使用 Triton Inference Server 或 TorchServe 封装成 API。

模型量化是什么?有哪些类型?

  • 回答要点:
  • 定义:将模型权重和激活从 FP32 映射到 INT8 或 FP16,减少显存占用和计算延迟。
  • 类型:
    • 训练后量化:简单,可能有精度损失。
    • 量化感知训练:在训练中模拟量化误差,精度损失较小。

第六部分:算法与数据结构 (手撕代码常见题)

手写快速排序,并分析时间复杂度和空间复杂度。

  • 回答要点:
  • 复杂度:平均 O(nlog⁡n)O(nlogn),最坏 O(n2)O(n2)(已排序数组且每次选第一个元素作为基准)。
  • 空间:O(log⁡n)O(logn)(递归栈深度)。
  • 核心:选基准,双指针分区,递归左右。

如何判断链表是否有环?找到环的入口。

  • 回答要点:
  • 方法:快慢指针(Floyd 判圈法)。
  • 逻辑:快指针每次两步,慢指针一步。若相遇则有环。相遇后,将慢指针重置到头,快指针留在原地,两者每次一步再次相遇即为入口点。

求二叉树的最大深度(递归与非递归)。

  • 回答要点:
  • 递归:return max(maxDepth(left), maxDepth(right)) + 1
  • 非递归:层序遍历(BFS),每遍历一层深度加 1。

给定一个数组,求 Top K 频繁出现的元素。

  • 回答要点:
  • 方法:
    1. 哈希表统计频率。
    2. 使用最小堆(O(nlog⁡k)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 对齐、隐私保护、偏见消除的关注,表现出作为工程师的社会责任感。