你复现一个分类网络:20 层 plain CNN(3×3 卷积 + BN + ReLU 堆叠)在 CIFAR-10 上训练误差 2%、测试误差 12%。把深度加到 56 层、其余超参完全不变,训练误差变成 8%、测试误差 14%。请给出你的判断:这是什么问题?接下来你会做什么?请说明为什么你的方案能解决它。
面试官在考什么
能不能把『加深反而更差』正确归因到退化(degradation)而不是过拟合或泛泛的梯度消失,并给出对应的结构改动。
回答框架 · 前两步
- 判断为退化问题(degradation):训练误差本身变高,说明不是过拟合(过拟合不会让训练误差升高),也不是单纯『参数太多』
- 机制上不是经典的梯度消失/爆炸——BN 已经缓解了尺度问题,真正的困难是深层网络要学一个恒等映射(或近似恒等映射)很难,多层非线性叠加难以逼近 identity
还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。
延伸阅读
想看这个方向的整体准备路线? 进入「深度学习基础」方向页
同一能力域的其他题
- 某模块原来是单层 7×7 卷积:输入 56×56×64、输出 56×56×64、stride=1、padding=3。现在候选方案是堆 3 个 3×3 卷积(每层通道都是 64→64、stride=1、padding=1)。请回答:两者的感受野是否相同?参数量之比是多少?FLOPs 之比是多少(按乘法次数算即可)?并说明在什么样的场景下这个替换不划算。
- 在一个移动端实时语义分割任务中,输入 512×512,某阶段特征图为 64×64×128,需要下采样到 32×32×128,同时要尽量保留小目标边界。候选方案:A 3×3 stride=2 conv,padding=1;B 2×2 max pooling stride=2;C 3×3 average pooling stride=2;D 先 1×1 conv 把通道降到 64,再 3×3 stride=2 conv 升回 128。你会选哪种?请给出参数/乘加量级、对边界和小目标的影响,以及部署端算子支持/延迟上的取舍。
- 团队里有人提议把线上检测模型 backbone 中所有 MaxPool 全部换成 stride=2 的 3×3 卷积,理由是「池化丢信息、卷积可学习、精度更高」。模型输入 640×640,backbone 下采样 32 倍,当前在端侧 NPU 上单帧 38ms,业务预算是 33ms(30FPS),INT8 量化部署。作为技术负责人,你会批准、有条件批准还是否决?请给出你的判断依据和决策链。
- 一段 backbone 按顺序是:conv3×3 stride2 → conv3×3 stride1 → maxpool2×2 stride2 → conv3×3 stride1(全部 same padding,无空洞)。最后一层输出上一个像素,对应到输入图像上的理论感受野是多少像素?请写出从后往前的推导过程。另外,把第三层的 maxpool2×2 stride2 换成 conv3×3 stride2,感受野变成多少?
- 在一个分割模型中,输入 512×512,backbone 前几层依次为:3×3 s1、3×3 s2、3×3 s1、2×2 maxpool s2、3×3 s1。请计算最后一个 3×3 输出特征图位置的理论感受野。若大目标直径约 200 像素,仅继续堆 3×3 s1 卷积需要多少层?你会怎么改结构,在计算量、特征图分辨率和感受野之间取舍?
- 你负责一个 512×512 输入的缺陷分割任务,目标尺寸跨度极大:小的约 8×8 像素,大的约 300×300 像素。当前 backbone 的理论感受野已经超过 900 像素,但小目标召回长期上不去,大目标边缘也发糊。团队中 A 主张「继续加空洞卷积扩大感受野」,B 主张「感受野早就够了,问题在别处」。你如何判断谁对,并给出下一步方案?