深度学习基础 面试题
深度学习面试题:反向传播、优化器与训练技巧
深度学习基础题看起来简单,但面试官会一层层往下问:梯度消失怎么办 → 残差为什么能缓解 → BN 在推理时和训练时有什么不同 → 小 batch 时 BN 为什么会崩。答到第三层就开始分人。
这个方向在考什么
- 反向传播与梯度:链式法则、梯度消失/爆炸的成因与三种缓解手段
- 归一化:BN / LN / GN 的区别,以及各自适合什么场景(batch 大小、序列长度)
- 优化器:SGD 动量、Adam 的二阶矩估计、为什么大模型常用 AdamW
- 训练技巧:初始化、学习率 warmup、dropout 与 weight decay 的交互
最常见的几个坑
- BN 只背"加速收敛",答不出推理时用的是滑动统计量
- 把梯度消失全归因于 sigmoid,讲不出深度与连乘的关系
- AdamW 与 Adam 的区别说不清(weight decay 是否进梯度)
七天准备路线
- 第 1 天手推两层网络的反向传播,能解释每个矩阵的维度
- 第 2 天归一化专场:BN/LN/GN 的计算维度与适用场景画成表
- 第 3 天优化器专场:从 SGD 推到 Adam,再说清 AdamW 改了什么
- 第 4 天准备一个"训练不收敛"的真实排查过程
- 第 5-7 天按方向刷题,重点练"为什么"而不是"是什么"
深度学习基础高频面试题
- 请说明 BatchNorm 和 LayerNorm 的计算方式有什么不同?在同一个 batch 里,BN 的统计量是怎么算出来的、推理时又用的是什么? · 校招
- 手写版:请推导一下自注意力的计算过程,并说明为什么要除以 sqrt(d_k)?如果不除会出什么问题? · 1-3 年
- 训练一个深度学习模型时,loss 突然变成 NaN,你会按什么顺序排查?请给出你的排查清单。 · 1-3 年
- 为什么深层网络需要残差连接?它解决了什么问题?换个角度问:残差结构为什么能让梯度更好地传回去? · 校招
- Dropout 在训练和推理阶段的行为分别是什么?为什么推理时要乘一个系数?它和 BatchNorm 一起用时有什么坑? · 1-3 年
- 显存不够时你会怎么办?请按"最小改动到最大改动"排序给出你的方案。 · 3-5 年
- 你的模型离线指标很好但线上效果很差,你会从哪些角度排查?请按优先级说。 · 3-5 年
- 梯度裁剪是解决什么问题的?按值裁剪和按范数裁剪有什么区别?裁剪阈值你会怎么定? · 1-3 年
- 模型参数量、FLOPs、显存占用、推理延迟这四个指标之间是什么关系?为什么参数量小的模型有时反而更慢? · 3-5 年
- 你手写了一个两层全连接网络(输入 784 → 隐层 256 + ReLU → 10 类 softmax 交叉熵)和完整的前向/反向传播,但训练完全不收敛。你打算用数值梯度检验(有限差分)来确认反向传播写对了。请具体说明:你用什么误差度量判断"通过"、epsilon 取多大、用 float32 还是 float64、用多少参数和多少条样本做检验、要不要关掉随机性;以及如果解析梯度和数值梯度在 1e-2 量级对不上,你如何定位到是哪一层、哪个公式写错了。 · 3-5 年
- 你在训练一个40层Transformer,PyTorch DDP多机多卡,混合精度。固定数据子集和随机种子后,loss前100步正常下降,之后部分卡突然出现NaN,其他卡继续下降。团队有人建议全局学习率减半,有人建议加梯度裁剪,有人建议用gradient checkpointing。作为训练负责人,你会怎样切分定位问题、决定短期止血和长期改动?请给出具体排查顺序、验证实验和取舍标准。 · 5 年以上
- 一个两层网络:z = W1·x,a = ReLU(z),y = W2·a,损失 L = ½‖y − t‖²。请写出 ∂L/∂W2 和 ∂L/∂W1 的表达式(写清每个因子的形状,以及要不要转置),并回答:如果某个样本的 z 的每个分量都小于 0,这个样本对 W1 的梯度是多少?为什么? · 校招
- 一个 30 层的全连接网络(每层 512 维),输入特征已标准化,激活用 sigmoid,训练 loss 几乎不动、底层梯度范数接近 0。团队给了两个方案:(A) 把 sigmoid 换成 ReLU;(B) 保留 sigmoid,但在每个线性层后加 BatchNorm。请从梯度连乘的角度定量说明梯度消失的机制,并判断这两个方案哪个更可能解决问题、为什么。 · 3-5 年
- 新推荐模型把ReLU换成GELU/SiLU后,离线AUC提升,但线上推理延迟和成本超预算30%。你们只有两周上线窗口和有限A/B流量。作为算法负责人,如何决定是否上线、怎么设计实验和回退方案?请给出具体判断标准和拆分动作。 · 5 年以上
- Sigmoid 在 |z| 很大时导数接近 0,ReLU 在 z<0 时导数等于 0,这两者都常被说成「会导致梯度消失」。请分别说明它们各自在什么输入情况下让上游梯度变小或变 0,并指出这两种情况对深层网络的后果有什么本质区别。 · 校招
- 一个 20 层、每层 512 维的全连接网络(激活 ReLU,没有任何归一化层),你用标准正态 N(0,1) 初始化全部权重,训练第一步就出现激活值逐层指数放大、loss 变成 NaN。请说明:(1) Xavier 与 He 初始化的方差公式差在哪;(2) 为什么 ReLU 网络应该用 He 而不是 Xavier;(3) 如果给每层都加上 LayerNorm,初始化的讲究还需要那么严格吗? · 3-5 年
- 你们训练一个100层、带残差和LayerNorm的稀疏大模型,发现去掉warmup后前1k step loss直接爆掉;加warmup能稳但训练变慢。团队有人提出换Xavier初始化,有人坚持用He,有人建议把最后一层zero-init。作为负责人,你会怎么定初始化策略,为什么,以及如何验证? · 5 年以上
- 一个 20 层的 ReLU 全连接网络,每层 fan_in = 512。有人把所有 W 用标准差 0.01 的高斯分布初始化。请估算前向传播时第 k 层的激活方差大致怎么随层数变化,并解释为什么 He 初始化取 Var(w) = 2/fan_in 而不是 1/fan_in——这个 2 是从哪来的? · 校招
- 一个用 BatchNorm 的 CNN 分类模型,batch size = 256 时正常收敛;现在因为显存限制把 batch 降到 8,训练 loss 抖动明显、验证精度掉 3~4 个点。请说明小 batch 下 BatchNorm 具体坏在哪(至少两点),并给出两个可行的替代或缓解方案,分别说清代价。 · 3-5 年
- 一个在线图像服务要把BatchNorm改成LayerNorm/GroupNorm,因为batch size从256降到4后指标崩了;改后吞吐下降20%,历史checkpoint不兼容。作为负责人,如何决定是否改、怎么迁移、怎么和业务方沟通? · 5 年以上
共 75 道,这里列出前 20 道。 去题库检索
针对你的简历,生成一套这个方向的题
题目会挂回你简历里的项目,并按真实面试顺序追问。