Applied Scientist · ML Breadth

Amazon ML:梯度消失/爆炸,Activation 与初始化怎样影响它?

链式乘积、sigmoid饱和、ReLU死区与方差传播,区分norm clipping和结构修复。

题目重点:链式乘积、sigmoid饱和、ReLU死区与方差传播,区分norm clipping和结构修复。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 讨论多层/多时间步链式梯度,实际症状还受数据、loss、归一化/优化器和精度影响。
  • 不把任一activation/init公式当所有层/架构保证;fan-in/out、激活与残差结构须匹配。

解题路线

  1. 反传沿路径乘局部导数/矩阵Jacobian,奇异值长期小于或大于1可导致幅值衰减/增长;多路径残差可提供更直接信号,但不是所有Jacobian都一个标量。
  2. sigmoid/tanh饱和时导数近0;ReLU正半轴导数1有助减轻饱和,但负半轴0可能dead units,leaky variants改变该特性。不能说ReLU永不消失/爆炸。
  3. 初始化试图让激活/梯度方差在层间合理:常见零均值Xavier方差2/(fan-in+fan-out),针对ReLU的He fan-in方差2/fan-in(标准差要开方);这些依赖独立/分布等简化,模型有归一化/attention/残差时需实际监控。
  4. 监控分层激活/grad norm、非有限位置、dead-unit比例与update/weight比,先定位从哪层/哪步失真。排查异常batch、loss scale、学习率及dtype,不只盲目换激活。
  5. 残差、归一化、适配初始化/门结构可缓和传播;爆炸可用q123全局norm clipping限制传入optimizer的梯度,消失不能靠clip恢复信息。NaN也不能简单裁成有限。
  6. 做小模型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尺度为何不能任意增大?

技术参考

✓已复制微信号!