梯度消失和梯度爆炸的原因:
1.深度网络:神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新,这就是梯度消失。
梯度爆炸就是由于初始化权值过大,前面层会比后面层变化的更快,就会导致权值越来越大,梯度爆炸的现象就发生了。
网络层之间的梯度(值大于 1.0/值小于1)重复相乘导致的指数级增长会产生梯度爆炸/梯度消失。
2.采用了不合适的激活函数:通常神经网络所用的激活函数是sigmoid函数,这个函数有个特点,就是能将负无穷到正无穷的数映射到0和1之间,并且对这个函数求导的结果是f′(x)=f(x)(1−f(x))。因此两个0到1之间的数相乘,得到的结果就会变得很小了。
解决方法:
1.与训练加微调
2.梯度剪切,正则化
3.采用relu,leakrelu等激活函数
4.batchnorm
5.残差结构