一个 18 层的残差网络,block 结构从 post-activation(conv-BN-ReLU 之后再与 shortcut 相加)改成 pre-activation(shortcut 是干净的恒等映射)后训练更稳定。请写出残差块反向传播中 ∂L/∂x 的表达式,说明恒等项为什么关键;并回答:如果在 shortcut 上加 1×1 卷积,或者在残差分支最后一层做零初始化,分别会对梯度传播产生什么影响?
面试官在考什么
是否真正理解残差连接起作用的是恒等通路的梯度,而不是笼统的"缓解梯度消失";并能在改结构时判断恒等通路是否被破坏。
回答框架 · 前两步
- y = x + F(x),则 ∂L/∂x = ∂L/∂y · (I + ∂F/∂x)。那个 I 保证梯度至少原样传回上一层,不会被 ∂F/∂x 的小值连乘抹掉。
- 深层堆叠时 (I + ∂F/∂x) 的连乘展开中总存在"全部走恒等路径"的项 = I,因此梯度不会随深度指数衰减——这正是 identity mapping 重要的原因,而不是"残差连接神奇地解决了消失"。
还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。
延伸阅读
想看这个方向的整体准备路线? 进入「深度学习基础」方向页
同一能力域的其他题
- 请说明 BatchNorm 和 LayerNorm 的计算方式有什么不同?在同一个 batch 里,BN 的统计量是怎么算出来的、推理时又用的是什么?
- 为什么深层网络需要残差连接?它解决了什么问题?换个角度问:残差结构为什么能让梯度更好地传回去?
- Dropout 在训练和推理阶段的行为分别是什么?为什么推理时要乘一个系数?它和 BatchNorm 一起用时有什么坑?
- 你手写了一个两层全连接网络(输入 784 → 隐层 256 + ReLU → 10 类 softmax 交叉熵)和完整的前向/反向传播,但训练完全不收敛。你打算用数值梯度检验(有限差分)来确认反向传播写对了。请具体说明:你用什么误差度量判断"通过"、epsilon 取多大、用 float32 还是 float64、用多少参数和多少条样本做检验、要不要关掉随机性;以及如果解析梯度和数值梯度在 1e-2 量级对不上,你如何定位到是哪一层、哪个公式写错了。
- 你在训练一个40层Transformer,PyTorch DDP多机多卡,混合精度。固定数据子集和随机种子后,loss前100步正常下降,之后部分卡突然出现NaN,其他卡继续下降。团队有人建议全局学习率减半,有人建议加梯度裁剪,有人建议用gradient checkpointing。作为训练负责人,你会怎样切分定位问题、决定短期止血和长期改动?请给出具体排查顺序、验证实验和取舍标准。
- 一个两层网络:z = W1·x,a = ReLU(z),y = W2·a,损失 L = ½‖y − t‖²。请写出 ∂L/∂W2 和 ∂L/∂W1 的表达式(写清每个因子的形状,以及要不要转置),并回答:如果某个样本的 z 的每个分量都小于 0,这个样本对 W1 的梯度是多少?为什么?