先这样答
梯度消失和爆炸都来自反向传播中的梯度连乘。激活函数的导数小于一时,多层连乘会让梯度逐渐趋近于零,这就是梯度消失。权重过大,或者反向传播链路过长,梯度会被指数放大,这就是梯度爆炸。
这个问题在 RNN 中尤其严重。因为 RNN 会沿时间步反复传播梯度,链路容易变长。梯度消失会让前面的信息难以学习,梯度爆炸会让训练过程不稳定。面试中先讲清楚梯度连乘,再区分两种结果。
解决方法要针对两种问题一起看。可以换成 ReLU 系激活函数。可以加入残差连接,让梯度拥有恒等通路。可以使用归一化层,用 BN 或 LN 稳定分布。梯度爆炸时可以做梯度裁剪,直接截断过大的梯度。RNN 还可以使用 LSTM 的门控结构来抗梯度消失。Transformer 依靠残差连接加 Pre-norm,同时防止梯度消失和梯度爆炸。
面试官会怎么追问
-
「为什么 RNN 特别容易出现梯度消失和爆炸?」 RNN 会沿时间步反复进行反向传播。时间步越多,梯度连乘链路越长。导数偏小时容易消失,权重偏大时容易爆炸。
-
「残差连接为什么能缓解这个问题?」 残差连接提供了一条恒等通路。梯度可以沿这条通路传播,不必完全依赖每一层变换的梯度连乘。这样可以同时缓解消失和爆炸。
-
「Transformer 为什么使用残差加 Pre-norm?」 残差连接提供恒等通路。Pre-norm 使用归一化层稳定分布。两者结合,可以同时防止梯度消失和梯度爆炸。
回答的坑
- 只说梯度会变小或变大,却不说明反向传播中的梯度连乘,原因解释不完整。
- 只列出梯度裁剪这一种方法,无法覆盖梯度消失,也没有回答 RNN 和 Transformer 的处理方式。
同系列的题
—— 本题完 ——