深度学习与 AI 面试题
深度学习与 AI 面试题
简介
深度学习是人工智能领域的核心技术,通过多层神经网络从数据中自动学习特征表示,已在计算机视觉、自然语言处理、语音识别等领域取得了突破性进展。本文整理了深度学习面试中的高频问题,涵盖神经网络基础、卷积神经网络(CNN)、循环神经网络(RNN)、Transformer 架构以及训练优化策略等核心知识点,帮助候选人系统性地准备 AI 相关面试。这些问题不仅考察理论理解,更关注工程实践中的判断力和经验积累。
特点
神经网络基础
1. 什么是深度学习?与传统机器学习有什么区别?
深度学习是机器学习的一个子集,使用多层(深层)神经网络从原始数据中自动学习层次化的特征表示。与传统机器学习的核心区别:
特征工程方面,传统机器学习需要人工设计和选择特征(如 SIFT、HOG),深度学习通过端到端学习自动提取特征。例如在图像分类中,传统方法需要手工设计边缘检测、纹理特征等,而 CNN 自动从原始像素中学习到从低级(边缘)到高级(语义)的特征层次。
数据量方面,深度学习通常需要大量标注数据才能发挥优势,传统方法在小数据集上可能更有效。例如 SVM 在只有几百个样本时可能优于深度网络,但在百万级数据上深度网络的优势明显。
计算资源方面,深度学习依赖 GPU 等高性能计算硬件进行训练。一个中等规模的模型训练可能需要数小时到数天的 GPU 时间。
模型复杂度方面,深度学习模型参数量可达数百万甚至数千亿,远超传统模型。GPT-3 有 1750 亿参数,而传统的逻辑回归可能只有几十个参数。
性能上限方面,在大数据和大模型场景下深度学习的表现通常优于传统方法。ImageNet 分类任务中,传统方法最好成绩约 74%,而 ResNet 达到了 96% 以上。
2. 激活函数的作用是什么?常见的激活函数有哪些?
激活函数的作用是给神经网络引入非线性,使其能够学习复杂的非线性映射关系。如果没有激活函数,多层神经网络等价于一个线性变换(矩阵乘法的组合仍然是线性变换),无法拟合复杂函数。
常见激活函数对比:
| 激活函数 | 公式 | 输出范围 | 优点 | 缺点 |
|---|---|---|---|---|
| Sigmoid | 1/(1+e^(-x)) | (0, 1) | 输出可解释为概率 | 梯度消失、非零中心 |
| Tanh | (ex-e(-x))/(ex+e(-x)) | (-1, 1) | 零中心化 | 梯度消失 |
| ReLU | max(0, x) | [0, +inf) | 计算简单、缓解梯度消失 | Dead ReLU 问题 |
| Leaky ReLU | max(0.01x, x) | (-inf, +inf) | 解决 Dead ReLU | 需要调超参 |
| GELU | x*Phi(x) | (-inf, +inf) | 平滑、Transformer 标配 | 计算稍复杂 |
| Swish | x*sigmoid(x) | (-inf, +inf) | 某些场景优于 ReLU | 计算稍复杂 |
选择建议:隐藏层默认使用 ReLU;Transformer 模型使用 GELU;二分类输出层使用 Sigmoid;多分类输出层使用 Softmax(配合 CrossEntropyLoss);需要零中心化时使用 Tanh。
3. 什么是梯度消失和梯度爆炸?如何解决?
梯度消失是指在反向传播过程中,梯度值随着层数增加呈指数衰减,导致底层参数几乎无法更新。常见原因:Sigmoid/Tanh 激活函数的导数最大值分别为 0.25 和 1,多层连乘后梯度趋近于零。例如 100 层网络中,每层梯度乘以 0.25,最终梯度接近 0。
梯度爆炸是指梯度值在反向传播中指数增大,导致参数更新过大,模型无法收敛。常见于 RNN 处理长序列时。
解决方案:
- 使用 ReLU 及其变体:导数恒为 1 或接近 1,不会导致梯度衰减
- 残差连接(ResNet 的核心创新):梯度可以通过捷径直接回传,不经过中间层的乘法运算
- BatchNorm/LayerNorm:稳定各层的输入分布,使梯度更稳定
- 合适的权重初始化:He 初始化(适合 ReLU)、Xavier 初始化(适合 Sigmoid/Tanh)
- 梯度裁剪(Gradient Clipping):限制梯度范数,
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0) - LSTM/GRU:替代普通 RNN,通过门控机制解决长序列的梯度问题
4. 什么是反向传播算法?它是如何工作的?
反向传播(Backpropagation)是训练神经网络的核心算法,用于高效计算损失函数对每个参数的梯度。
工作原理分三个阶段:
- 前向传播:输入数据逐层经过线性变换和激活函数,最终输出预测值并计算损失
- 反向传播:利用链式法则从输出层向输入层逐层计算损失函数对各层参数的偏导数
- 参数更新:使用优化器(如 SGD、Adam)根据梯度和学习率更新模型参数
链式法则的应用是关键:如果 y = f(g(x)),则 dy/dx = (dy/df) * (df/dg) * (dg/dx)。在 100 层网络中,输出层对第一层参数的梯度是这 100 层各自导数的乘积。这就是为什么梯度消失/爆炸问题如此突出。
PyTorch 的 autograd 模块通过计算图自动完成反向传播,记录每个操作的梯度计算方式,调用 .backward() 时按逆序计算梯度。
CNN 相关
5. 卷积神经网络(CNN)的核心组件有哪些?
CNN 的核心组件包括:
卷积层使用可学习的滤波器(kernel/filter)在输入特征图上滑动进行卷积运算,提取局部特征。参数共享(同一滤波器在所有位置共享权重)大大减少了参数量。例如 3x3 卷积核只有 9 个参数(加上偏置 10 个),却能提取丰富的局部模式。
池化层对特征图进行下采样。最大池化(Max Pooling)取窗口内最大值,平均池化取均值。池化降低空间维度,增加平移不变性,减少参数量。但现代架构(如 ResNet)中逐渐用步长卷积替代池化。
全连接层将特征展平后进行分类或回归输出,通常放在网络末端。
批归一化层(Batch Normalization)对每个 mini-batch 的特征进行归一化,加速训练并起到正则化效果。训练时使用 batch 统计量,推理时使用训练阶段累积的滑动均值和方差。
经典 CNN 架构演进:LeNet(1998,手写数字)-> AlexNet(2012,ImageNet 突破)-> VGGNet(更深的网络)-> GoogLeNet/Inception(多尺度特征)-> ResNet(残差连接,深度突破)-> EfficientNet(自动搜索最优结构)-> Vision Transformer(ViT,Transformer 替代 CNN)。
6. 什么是感受野(Receptive Field)?如何计算?
感受野是指输出特征图上的一个像素点在输入图像上映射的区域大小,即该像素"看到"的输入区域。
感受野的计算公式:RF_i = RF_{i-1} + (kernel_size_i - 1) * stride_product,其中 stride_product 是前面所有层步长的乘积。
增大感受野的方式:
- 增大卷积核:如 7x7 卷积(但参数量大)
- 增加网络深度:多层 3x3 卷积叠加,两个 3x3 等价于一个 5x5 感受野,但参数更少(18 vs 25)
- 空洞卷积(Dilated Convolution):在卷积核元素之间插入空洞,不增加参数量即可扩大感受野
- 池化层:通过下采样间接触发感受野增长
实际意义:深层网络的特征图虽然分辨率低,但每个像素的感受野很大,能够"看到"输入图像的大部分区域,因此具有更强的语义信息。
7. ResNet 的残差连接为什么有效?
ResNet 的残差连接(Shortcut/Skip Connection)将输入直接加到卷积层的输出上:output = F(x) + x。
有效性体现在四个方面:
解决梯度消失:梯度可以通过残差连接直接传递到浅层,不经过中间层的乘法运算。即使 F(x) 的梯度很小,由于恒等映射的梯度为 1,总梯度不会消失。
降低学习难度:网络只需学习残差
F(x) = H(x) - x(目标与输入的差值),而不是直接学习完整的映射H(x)。残差通常比完整映射更容易学习。恒等映射容易实现:如果最优解就是输入本身(即不需要变换),只需让
F(x) = 0即可。而普通网络要学习恒等映射,需要所有权重矩阵恰好构成单位矩阵,这非常困难。允许构建极深网络:ResNet-152 甚至更深的网络可以成功训练,而普通网络在加深后反而会出现退化问题(Degradation Problem,不是过拟合导致的训练误差增大)。
8. 什么是 1x1 卷积?有什么作用?
1x1 卷积(Pointwise Convolution)的卷积核大小为 1x1,在空间维度上不做卷积操作,仅在通道维度上进行线性组合。
主要作用:
- 改变通道数量:将 256 通道降为 64 通道以减少计算量,或从 64 通道升为 256 通道
- 增加非线性:1x1 卷积后接激活函数,相当于在通道维度上增加了一层非线性变换
- 跨通道信息融合:学习不同通道特征的最优组合权重
- 瓶颈结构(Bottleneck):先用 1x1 卷积降维,再用 3x3 卷积提取特征,最后用 1x1 卷积升维恢复通道数。例如 ResNet-50 的 Bottleneck 模块:256 -> 64 -> 64 -> 256,计算量相比直接用 3x3 卷积减少了约 8 倍
RNN 相关
9. RNN 的问题是什么?LSTM 是如何改进的?
标准 RNN 的问题:梯度消失/爆炸导致难以学习长距离依赖关系;实际应用中只能记住约 10-20 个时间步的信息。这是因为在反向传播中,梯度需要经过多个时间步的矩阵乘法,如果最大特征值小于 1,梯度指数衰减。
LSTM(Long Short-Term Memory)通过引入门控机制解决这个问题:
- 遗忘门(Forget Gate):决定上一时刻的细胞状态
C_{t-1}有多少需要保留。输出 0 到 1 之间的值,0 表示完全遗忘,1 表示完全保留。 - 输入门(Input Gate):决定当前输入有多少信息需要写入细胞状态。
- 输出门(Output Gate):决定细胞状态有多少信息需要输出为隐藏状态。
LSTM 的细胞状态通过加法操作(而非 RNN 的乘法操作)传递梯度,使得梯度可以更稳定地在长序列中传播。这就像一条信息高速公路,梯度可以直接流过而不被多次乘法衰减。
GRU(Gated Recurrent Unit)是 LSTM 的简化版本,将遗忘门和输入门合并为更新门(Update Gate),参数更少(LSTM 约 4 倍于 GRU),训练更快,在多数任务上效果接近。
10. 什么是序列到序列(Seq2Seq)模型?
Seq2Seq 模型由编码器(Encoder)和解码器(Decoder)两个 RNN/LSTM 组成,用于处理输入和输出长度不固定的序列转换任务(如机器翻译、文本摘要)。
编码器逐步读取输入序列,将信息压缩到固定长度的上下文向量(Context Vector)中;解码器根据上下文向量逐步生成输出序列。
Seq2Seq 的瓶颈问题:整个输入序列的信息需要压缩到一个固定长度的向量中,长序列的信息会丢失。例如翻译一个 100 个词的句子到一个 512 维向量,信息密度过高。
注意力机制(Attention)解决了这个问题:解码器在每一步生成时都会"关注"输入序列的所有位置,通过计算相似度权重动态获取相关信息,不再依赖单一上下文向量。注意力机制是 Transformer 架构的基础。
Transformer 相关
11. Transformer 的自注意力机制(Self-Attention)是如何工作的?
自注意力机制的核心公式为:Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) * V
工作过程分为五步:
- 将输入序列的每个位置通过三个线性变换得到查询向量 Q(Query)、键向量 K(Key)和值向量 V(Value)
- 计算 Q 和 K 的点积得到注意力分数,表示每个位置对其他位置的关注程度
- 除以
sqrt(d_k)防止分数过大导致 softmax 梯度消失 - 通过 softmax 将分数归一化为注意力权重(和为 1)
- 将权重与 V 加权求和得到每个位置的输出
自注意力的优势:
- 能够直接捕捉序列中任意两个位置之间的关系(无论距离多远)
- 可以并行计算所有位置(不像 RNN 必须顺序计算)
- 灵活的注意力权重让模型能聚焦于最相关的信息
12. Transformer 中的多头注意力(Multi-Head Attention)有什么作用?
多头注意力将 Q、K、V 分别通过多组不同的线性变换投影到多个子空间,在每个子空间独立计算注意力,然后将结果拼接并线性变换输出。
多头注意力的作用:
- 允许模型同时关注不同位置的不同表征子空间的信息
- 不同注意力头可以学习到不同类型的关系(如语法关系、语义关系、位置关系等)
- 相比单头注意力,多头注意力能捕获更丰富、更多样化的特征
Transformer 论文中使用 8 个注意力头,在大模型中头的数量更多(如 GPT-3 使用 96 个头)。头数不是越多越好,每个头的维度 d_k = d_model / num_heads 不能太小,否则表达能力不足。
13. Transformer 中的位置编码(Positional Encoding)为什么需要?
由于自注意力机制本身是置换不变的(permutation invariant),即打乱输入序列的顺序不会影响注意力计算的输出,这意味着 Transformer 天然无法感知序列的位置信息。
位置编码通过为每个位置添加一个位置向量来解决这个问题。原始 Transformer 使用正弦/余弦函数生成位置编码:PE(pos, 2i) = sin(pos / 10000^(2i/d)),PE(pos, 2i+1) = cos(pos / 10000^(2i/d))。
这种编码的优势:对于任意固定偏移 k,PE(pos+k) 可以表示为 PE(pos) 的线性函数,模型可以学习相对位置关系;可以推广到训练时未见过的序列长度。
现代模型中也使用可学习的位置编码(如 BERT、GPT)或旋转位置编码(RoPE,LLaMA 等现代模型使用)。
14. BERT 和 GPT 的架构有什么区别?
BERT 使用 Transformer 的编码器部分,采用双向注意力机制,每个位置可以同时看到前后所有位置的信息。预训练任务为 MLM(随机遮蔽 15% 的词并预测)和 NSP(下一句预测)。适合文本理解任务(分类、NER、问答)。
GPT 使用 Transformer 的解码器部分,采用因果(单向)注意力机制,每个位置只能看到它之前的 token。预训练任务为自回归语言建模(预测下一个 token)。适合文本生成任务。
核心区别是注意力方向:BERT 双向理解、GPT 单向生成。GPT 随着参数量增大展现了涌现能力(Emergent Abilities),这解释了为什么 GPT-4 能做到小模型做不到的事情。
15. 什么是大语言模型(LLM)的涌现能力?
涌现能力(Emergent Abilities)是指模型在规模较小时不具备,但当模型参数量、训练数据量或计算量增长到某个阈值后突然出现的能力。
典型的涌现能力包括:少样本学习(Few-shot Learning,通过少量示例学习新任务);思维链推理(Chain-of-Thought Reasoning,逐步推理解决复杂问题);指令遵循(Instruction Following,理解并执行自然语言指令);代码生成和调试能力;数学推理和逻辑分析。
这一现象也解释了为什么 GPT-4 等大模型能展现出小模型不具备的通用智能特征。但涌现能力的存在也有争议——部分研究者认为它可能是评估指标选择的结果,而非真正的"突然出现"。
训练优化相关
16. 常见的正则化方法有哪些?如何防止过拟合?
防止过拟合的正则化方法:
L1 正则化(Lasso)在损失函数中加入权重绝对值之和,倾向于产生稀疏权重,可用于特征选择。
L2 正则化(Ridge/Weight Decay)加入权重平方之和,倾向于让权重均匀变小,防止某个权重过大。PyTorch 中通过 optim.AdamW(model.parameters(), weight_decay=1e-4) 实现。
Dropout 在训练时随机丢弃一定比例的神经元(如 p=0.5),等效于训练多个子网络的集成。推理时不使用 Dropout。
数据增强通过对训练数据施加随机变换(翻转、旋转、裁剪、颜色抖动、MixUp、CutMix 等)增加数据多样性。
早停法(Early Stopping)在验证集性能不再提升时停止训练,防止过拟合训练集。
深度学习中最常用的组合是 Weight Decay + Dropout + Data Augmentation + Early Stopping。
17. 常见的优化器有哪些?如何选择?
常见优化器对比:
| 优化器 | 核心机制 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| SGD | 梯度下降 | 泛化好 | 收敛慢 | 追求极致精度 |
| SGD+Momentum | 加动量项 | 加速收敛 | 需调超参 | 图像分类 |
| Adam | 自适应学习率 | 不用精细调参 | 泛化可能略差 | 默认首选 |
| AdamW | 解耦权重衰减 | Transformer 标配 | - | NLP、Transformer |
选择建议:大多数场景优先尝试 AdamW(学习率 1e-4~1e-5),配合 Cosine Annealing 学习率调度。追求极致性能时使用 SGD + Momentum(学习率 1e-1~1e-2),但需要更精细的调参。
18. 学习率调度策略有哪些?
常见学习率调度策略:
- Warmup + Cosine Decay:先用少量 step 从 0 线性增大到初始学习率,再用余弦曲线衰减到接近 0。这是 Transformer 训练的标配策略。
- Step LR:每 N 个 epoch 乘以衰减因子(如 0.1)
- ReduceLROnPlateau:监控验证集指标,当指标不再改善时降低学习率
- Cyclic LR:学习率在最小值和最大值之间周期性变化
Warmup 的作用:训练初期模型参数随机,大的学习率可能导致训练不稳定,Warmup 阶段帮助模型建立较好的初始方向。
19. 什么是迁移学习?在深度学习中如何应用?
迁移学习是将在一个任务(源域)上训练好的模型知识迁移到另一个相关任务(目标域),从而减少目标域所需的训练数据和训练时间。
深度学习中的迁移学习方法:
特征提取(Feature Extraction):冻结预训练模型的全部卷积层参数,只训练新添加的全连接分类层,适合小数据集(如只有几百到几千张标注图片)。
微调(Fine-tuning):在预训练模型基础上使用较小的学习率(如 1e-5)继续训练部分或全部层,适合中等规模数据集。通常冻结底层(通用特征),微调高层(任务特定特征)。
预训练模型是迁移学习成功的关键:ImageNet 上的 ResNet/ViT、NLP 领域的 BERT/GPT。这些模型已经学习了丰富的特征表示,微调只需少量数据即可适配新任务。
20. 模型推理优化有哪些方法?
模型推理优化方法:
模型压缩:
- 量化(Quantization):将 FP32 权重转为 INT8/INT4,减少计算量和内存。INT8 量化通常精度损失很小(<1%),但推理速度提升 2-4 倍。
- 剪枝(Pruning):移除不重要的权重或通道,稀疏化模型。
- 知识蒸馏(Knowledge Distillation):用大模型(教师模型)指导小模型(学生模型)训练。
计算优化:
- 算子融合(Operator Fusion)将多个层合并为一个计算核
- 使用 TensorRT、ONNX Runtime 等推理引擎优化计算图
硬件加速:GPU 推理、NPU/TPU 专用加速器
服务优化:使用 Triton Inference Server、vLLM 等专业推理服务框架,支持并发请求调度和 GPU 内存管理。vLLM 的 PagedAttention 技术将 KV Cache 管理效率提升了数倍。
优点
缺点
21. 什么是注意力机制中的 KV Cache?为什么重要?
KV Cache 是 Transformer 推理时的关键优化技术。在自回归生成过程中,每生成一个新 token,都需要计算它对所有之前 token 的注意力分数。如果每次都重新计算所有历史 token 的 K 和 V,计算量会随序列长度线性增长。
KV Cache 的做法是在生成第一个 token 时计算所有 token 的 K 和 V 并缓存,后续生成新 token 时只需计算新 token 的 Q、K、V,将新的 K、V 追加到 Cache 中,然后用新的 Q 与整个 KV Cache 计算注意力。
KV Cache 的空间占用:对于 LLaMA-7B(32 层,32 个注意力头,head_dim=128),序列长度 2048,KV Cache 大小约为 2 * 32 * 32 * 128 * 2048 * 2 bytes(FP16) = 1GB。这是 LLM 推理内存瓶颈的主要原因之一。
vLLM 的 PagedAttention 技术通过虚拟内存和分页管理优化了 KV Cache 的内存使用,允许在 GPU 内存中存储更多序列,提升推理吞吐量。
22. 什么是 LoRA(Low-Rank Adaptation)?原理是什么?
LoRA 是一种参数高效的微调方法,核心思想是在预训练模型的权重矩阵旁注入可训练的低秩分解矩阵,只训练这些新增的小矩阵而冻结原始权重。
原理:对于原始权重矩阵 W0(d x d),LoRA 添加两个低秩矩阵 A(d x r)和 B(r x d),其中 r << d(如 r=8 或 r=16)。前向传播时:h = W0 * x + B * A * x。训练时只更新 A 和 B,参数量从 dd 降低到 2d*r。
以 LLaMA-7B 为例,全量微调需要更新 70 亿参数,而 LoRA(r=16)只需更新约 400 万参数(减少 99.9%)。多个 LoRA 适配器可以共享同一个基础模型,切换时只需替换 LoRA 权重,非常适合多任务场景。
23. 什么是 RAG(Retrieval-Augmented Generation)?
RAG(检索增强生成)是一种将外部知识库与 LLM 结合的技术,解决 LLM 的知识过时和幻觉问题。
工作流程:1) 用户提问 → 2) 将问题向量化 → 3) 在向量数据库中检索相关文档 → 4) 将检索到的文档作为上下文拼接到 Prompt 中 → 5) LLM 基于上下文生成回答。
RAG 的关键组件:
- 文档切分(Chunking):将长文档切分为适当大小的片段(通常 256-512 tokens)
- 向量嵌入(Embedding):使用 Embedding 模型(如 text-embedding-ada-002)将文本转为向量
- 向量数据库(Vector DB):Milvus、Pinecone、Chroma、FAISS 等,存储和检索向量
- 重排序(Reranking):对检索结果进行精排,提高相关性
RAG vs 微调:RAG 适合知识密集型任务(如企业知识库问答),更新成本低(只需更新文档);微调适合改变模型行为风格或特定格式输出,更新成本高(需要重新训练)。两者也可以结合使用。
24. 什么是 Vision Transformer(ViT)?与 CNN 有什么区别?
Vision Transformer(ViT)将 Transformer 架构应用于图像分类任务,将图像切分为固定大小的 patch(如 16x16),每个 patch 展平后作为序列的一个 token,加上位置编码后输入 Transformer Encoder。
与 CNN 的核心区别:
- 归纳偏置:CNN 有平移不变性和局部性假设(卷积核滑动),ViT 没有这些假设,需要更多数据来学习这些关系
- 数据量依赖:ViT 在大数据集(如 ImageNet-21K、JFT-300M)上预训练后效果超过 CNN,但在小数据集上不如 CNN
- 全局视野:ViT 从第一层就能看到全局信息(通过自注意力),CNN 需要深层网络才能获得大感受野
- 可扩展性:ViT 随模型规模增大性能持续提升,CNN 到一定深度后提升变慢
现代趋势:Swin Transformer 引入了滑动窗口注意力,在 ViT 的全局建模能力和 CNN 的局部高效性之间取得平衡。
25. 什么是对比学习(Contrastive Learning)?
对比学习是一种自监督学习方法,通过拉近相似样本(正例)和推开不相似样本(负例)来学习特征表示。无需人工标注数据,是目前自监督学习最成功的方法之一。
代表方法:
- SimCLR:通过数据增强构造正例对,使用 NT-Xent(Normalized Temperature-scaled Cross Entropy)损失函数。核心思想是同一张图片的不同增强视图应该接近,不同图片的视图应该远离。
- MoCo(Momentum Contrast):使用动量编码器维护负例队列,解决大 batch size 的依赖问题。
- CLIP(Contrastive Language-Image Pre-training):OpenAI 提出的视觉-语言对比学习方法,同时学习图像和文本的联合表示。能实现零样本图像分类、图文匹配等任务。
对比学习在工业中的应用:异常检测(用正常样本训练,检测与正常特征差异大的样本)、小样本分类(用预训练的特征提取器+少量标注数据微调)。
26. LLM 推理优化有哪些关键技术?
量化(Quantization):
- INT8 量化:权重从 FP32 转为 INT8,精度损失通常 < 1%,推理速度提升 2-4 倍
- INT4 量化(GPTQ、AWQ):更激进的压缩,精度损失稍大,但推理速度和内存占用优势明显
- 量化方式:训练后量化(PTQ,直接量化已训练模型)和量化感知训练(QAT,训练时模拟量化)
KV Cache 优化:
- PagedAttention(vLLM):虚拟内存管理 KV Cache,减少碎片化
- Multi-Query Attention(MQA):多个 Query Head 共享一组 Key/Value Head,减少 KV Cache 大小
- GQA(Grouped Query Attention):MQA 的折中方案,平衡性能和内存
推测解码(Speculative Decoding):
- 用小模型快速生成候选 token,大模型并行验证
- 大模型一次接受多个 token 时,相当于一次性生成了多个 token,提升吞吐量
Flash Attention:
- 减少注意力计算中的内存读写(HBM 到 SRAM)
- 计算复杂度不变,但实际运行速度提升 2-4 倍
27. 什么是混合专家模型(Mixture of Experts, MoE)?
MoE 是一种通过稀疏激活来扩展模型容量的技术。核心思想:模型包含多个"专家"(Expert)网络,每个 token 只激活部分专家,而非所有专家都参与计算。
架构组成:
- 路由器(Router/Gating Network):根据输入 token 决定激活哪些专家。通常基于 Softmax 计算每个专家的权重,选择 Top-K 个专家
- 专家(Expert):独立的 FFN(Feed-Forward Network),每个专家处理不同的知识领域
- Top-K 路由:每个 token 只被发送到 K 个专家(通常 K=2),而非所有专家
MoE 的优势:
- 在不增加推理计算量的前提下,大幅增加模型参数量(如 Mixtral 8x7B 总参数 47B,但每次推理只激活 13B)
- 训练效率和推理效率的平衡
- 不同专家可以学习不同领域的知识
MoE 的挑战:
- 负载均衡:路由器可能偏向某些专家,导致专家利用不均
- 训练难度:路由器的训练需要特殊技巧(如负载均衡损失函数)
- 推理显存:所有专家参数仍需加载到 GPU 显存中
28. 什么是 Prompt Engineering 中的 Chain-of-Thought(CoT)?
Chain-of-Thought(思维链)是一种通过引导模型逐步推理来提升复杂问题解决能力的提示技术。
核心思想:在 Prompt 中提供推理步骤的示例(Few-shot CoT),或直接要求模型"逐步思考"(Zero-shot CoT),让模型显式地展示推理过程,而非直接给出答案。
// Zero-shot CoT 示例
"如果一家商店的利润是成本的 20%,成本是销售额的 60%,
利润是 12000 元,请问销售额是多少?请逐步推理。"
// Few-shot CoT 示例(在 Prompt 中提供推理示例)
"Q: 罗杰有 5 个网球。他又买了 2 罐网球,每罐 3 个。他现在有多少个网球?
A: 罗杰一开始有 5 个网球。他买了 2 罐,每罐 3 个,共 6 个。
5 + 6 = 11。答案是 11。"CoT 的变体:
- Self-Consistency:多次采样推理路径,选择最一致的答案
- Tree-of-Thought (ToT):将推理过程组织为树状结构,支持回溯和探索
- ReAct:结合推理(Reasoning)和行动(Acting),模型可以调用工具获取信息后继续推理
29. 如何评估 LLM 的生成质量?
LLM 的评估维度和方法:
自动评估指标:
- Perplexity(困惑度):衡量模型对测试集的预测能力,越低越好
- BLEU/ROUGE:衡量生成文本与参考文本的重叠度(机器翻译/摘要任务)
- Pass@k:衡量代码生成任务中 k 次尝试内通过测试的比例
人工评估维度:
- 有用性(Helpfulness):回答是否解决了用户的问题
- 真实性(Truthfulness):回答是否事实正确(减少幻觉)
- 无害性(Harmlessness):回答是否包含有害内容
- 流畅性(Fluency):语言是否自然流畅
基准测试(Benchmarks):
- MMLU:多学科知识理解(57 个学科)
- HumanEval:代码生成(函数级)
- GSM8K:数学推理(小学数学应用题)
- C-Eval:中文综合能力评估
- Arena(LMSYS Chatbot Arena):人类偏好排名(Elo 评分系统)
30. 深度学习在工业缺陷检测中的常见问题有哪些?
数据问题:
- 样本不均衡:正常样本远多于缺陷样本。解决方案:数据增强(旋转、翻转、添加噪声)、过采样(SMOTE)、Focal Loss 损失函数
- 标注成本高:需要人工标注缺陷位置和类型。解决方案:半监督学习(先用无标注数据预训练,再微调)、主动学习(模型自动筛选最有价值的样本让人标注)
- 数据多样性不足:生产环境的光照、角度、背景变化无法完全模拟。解决方案:合成数据(3D 渲染、GAN 生成)、域适应(Domain Adaptation)
模型问题:
- 误检(False Positive):将正常特征误判为缺陷。解决方案:提高置信度阈值、后处理(连通域分析过滤小区域)、加入负样本训练
- 漏检(False Negative):缺陷未被检测出来。解决方案:多尺度检测、集成多个模型、降低置信度阈值(但会增加误检)
- 新缺陷类型:出现训练集中没有的缺陷类型。解决方案:持续学习、异常检测(AutoEncoder、One-Class SVM)
部署问题:
- 实时性要求:产线速度快,推理延迟必须低。解决方案:模型量化(INT8)、模型剪枝、使用 TensorRT 部署
- 硬件资源有限:产线工控机 GPU 性能有限。解决方案:模型蒸馏(用大模型教小模型)、边缘计算芯片(如 Jetson、RK3588)
- 模型迭代更新:新产品或新缺陷需要重新训练。解决方案:建立模型版本管理、A/B 测试新模型、灰度发布
31. 什么是 AutoEncoder?如何用于异常检测?
AutoEncoder(自编码器)是一种无监督学习模型,由编码器(Encoder)和解码器(Decoder)组成。编码器将输入压缩为低维潜在表示(Latent Representation),解码器从潜在表示重建输入。训练目标是最小化输入和重建输出之间的差异。
用于异常检测的原理:使用大量正常样本训练 AutoEncoder,使其学会重建正常数据的特征。当输入异常样本时,重建误差会显著增大。通过设定重建误差阈值来检测异常。
# PyTorch 实现简单的 AutoEncoder
import torch
import torch.nn as nn
class AutoEncoder(nn.Module):
def __init__(self, input_dim, latent_dim):
super().__init__()
# 编码器
self.encoder = nn.Sequential(
nn.Linear(input_dim, 256),
nn.ReLU(),
nn.Linear(256, 128),
nn.ReLU(),
nn.Linear(128, latent_dim)
)
# 解码器
self.decoder = nn.Sequential(
nn.Linear(latent_dim, 128),
nn.ReLU(),
nn.Linear(128, 256),
nn.ReLU(),
nn.Linear(256, input_dim)
)
def forward(self, x):
z = self.encoder(x)
return self.decoder(z)
# 异常检测流程:
# 1. 用正常样本训练 AutoEncoder
# 2. 计算验证集的重建误差分布(MSE)
# 3. 设定阈值(如均值 + 3*标准差)
# 4. 推理时:如果重建误差超过阈值,判定为异常AutoEncoder 的变体:
- Denoising AutoEncoder(DAE):给输入添加噪声,训练去噪能力,泛化更好
- Variational AutoEncoder(VAE):潜在空间服从高斯分布,可以生成新样本
- Convolutional AutoEncoder:使用卷积层替代全连接层,适合图像数据
总结
深度学习与 AI 面试题涵盖了神经网络基础、CNN、RNN、Transformer 以及训练优化的核心知识体系。从激活函数、反向传播等基础概念到 Transformer 架构和大语言模型的前沿发展,这些知识点构成了 AI 工程师的核心能力基础。建议在学习理论的同时注重实践,通过实际训练模型和阅读经典论文来加深对算法原理的理解。
这组题真正考什么
- AI 面试题通常在考你是否能把术语和工程落地连起来。
- 很多题目的关键不在模型名字,而在数据、评估和成本权衡。
- 答题时如果能提到失败场景和安全边界,会更有深度。
60 秒答题模板
- 先解释概念本身。
- 再说它解决什么问题和有什么限制。
- 最后补工程落地时的指标、成本或风险点。
容易失分的点
- 只记英文缩写,不会中文解释。
- 只谈效果,不谈评估和成本。
- 把不同模型或不同阶段混为一谈。
刷题建议
- 把模型原理、训练方法、评估方式和工程落地分层复习。
- 回答 AI 题时尽量同时提到数据、模型、效果和成本。
- 对热门术语要准备"是什么、解决什么问题、有什么限制"三个层次。
高频追问
- 这个方法在效果、延迟和成本上的权衡是什么?
- 如果模型输出不稳定,你会从哪些环节开始排查?
- 这个概念在企业落地时最容易踩的坑是什么?
复习重点
- 把每道题的关键词整理成自己的知识树,而不是只背原句。
- 对容易混淆的概念要做横向比较,例如机制差异、适用边界和性能代价。
- 复习时优先补"为什么",其次才是"怎么用"和"记住什么术语"。
面试作答提醒
- 避免只背英文缩写,尽量用一句中文把核心机制讲明白。
- 说效果时最好带上评估方式或具体指标。
- 不确定的模型细节可以明确说明假设前提。
