- 梯度消失出现的原因经常是因为网络层次过深,以及激活函数选择不当,比如sigmoid函数。
- 梯度爆炸出现的原因也是网络层次过深,或者权值初始化值太大。
- 综合来看,这两种梯度问题产生的原因可以归结为网络深度,以及反向传播带来的遗留问题。
- 反向传播基于的是链式求导法则。如果导数小于1,那么随着层数的增多,梯度的更新量会以指数形式衰减,结果就是越靠近输出层的网络层参数更新比较正常,而靠近输入层的网络层参数可能基本就不更新。这就是梯度消失而如果导数值大于1,那么由于链式法则的连乘,梯度更新量是会成指数级增长的。这就是梯度爆炸。
- 那么在训练过程中,如何判断是发生了梯度消失或者梯度下降呢?
- 观察随着训练轮数的增加,权值更新的情况
https://blog.csdn.net/qq_25737169/article/details/78847691
二、如何解决梯度消失、梯度爆炸
1、对于RNN,可以通过梯度截断,避免梯度爆炸
2、可以通过添加正则项,避免梯度爆炸
3、使用LSTM等自循环和门控制机制,避免梯度消失,参考:https://www.cnblogs.com/pinking/p/9362966.html
4、优化激活函数,譬如将sigmold改为relu,避免梯度消失
- 观察随着训练轮数的增加,权值更新的情况
梯度消失,梯度爆炸及表现
最新推荐文章于 2024-06-09 22:11:16 发布