题目重点:链式乘积、sigmoid饱和、ReLU死区与方差传播,区分norm clipping和结构修复。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 讨论多层/多时间步链式梯度,实际症状还受数据、loss、归一化/优化器和精度影响。
- 不把任一activation/init公式当所有层/架构保证;fan-in/out、激活与残差结构须匹配。
解题路线
- 反传沿路径乘局部导数/矩阵Jacobian,奇异值长期小于或大于1可导致幅值衰减/增长;多路径残差可提供更直接信号,但不是所有Jacobian都一个标量。
- sigmoid/tanh饱和时导数近0;ReLU正半轴导数1有助减轻饱和,但负半轴0可能dead units,leaky variants改变该特性。不能说ReLU永不消失/爆炸。
- 初始化试图让激活/梯度方差在层间合理:常见零均值Xavier方差2/(fan-in+fan-out),针对ReLU的He fan-in方差2/fan-in(标准差要开方);这些依赖独立/分布等简化,模型有归一化/attention/残差时需实际监控。
- 监控分层激活/grad norm、非有限位置、dead-unit比例与update/weight比,先定位从哪层/哪步失真。排查异常batch、loss scale、学习率及dtype,不只盲目换激活。
- 残差、归一化、适配初始化/门结构可缓和传播;爆炸可用q123全局norm clipping限制传入optimizer的梯度,消失不能靠clip恢复信息。NaN也不能简单裁成有限。
- 做小模型gradient check与固定batch训练,再对真实长度/深度消融。检查梯度为None(断图)与有限极小(数值/机制)差别,optimizer清grad时序也会造成假象。
手动走一遍
简化100步每步导数0.5,乘积约7.89e−31;每步1.5则约4.07e17。真实矩阵链更复杂,但说明长期连乘可极端变化;把阈值裁小无法把前一个极小梯度变大。
规模与取舍
记录全梯度norm O(P),逐层统计按参数/激活规模;复杂Jacobian谱诊断比norm更贵,通常先低成本监控再针对异常层。初始化一次O(P),无免费泛化保证。
易错点与追问
容易失分的边界
- ReLU保证不消失。
- clip解决梯度消失/NaN。
- Xavier/He不看激活。
- None梯度与数值小混淆。
- 只看全局norm不定位层。
继续深挖
- pre-LN/post-LN为何可能影响稳定性?
- RNN谱半径与非线性导数怎样共同作用?
- dead ReLU如何和输入分布联系?
- 残差branch尺度为何不能任意增大?
技术参考
- He 初始化原论文:rectifier匹配初始化方法参考。
- Glorot/Xavier 原论文:方差传播/初始化方法参考。
