一、为什么会发生梯度消失或者梯度爆炸
目前优化神经网络的方法一般都是BP,根据损失函数计算的误差通过梯度进行反向传播,来修正神经网络参数。反向传播要用链式法则,就是连乘,梯度将以指数形式传播很容易导致消失和爆炸。
梯度消失:如果神经网络层数比较深,或者激活函数选择不合适,如sigmoid,它的梯度都小于0.25,会导致梯度消失。
梯度爆炸:如果神经网络层数比较深,或初始化权重值比较大,都会导致梯度爆炸。
二、如何解决
1.权重正则化,通过对网络权重做正则化来防止其过拟合,通过正则化项来限制网络权重大小,可以一定程度防止网络爆炸。如L1和L2
2.选择Relu这种激活函数,他的导数在正数区域恒为1.
3.BN,对输出进行规范化,消除了权重参数放大缩小带来的影响,进而解决了梯度消失和爆炸的影响。
4.加入残差网络
反向传播时的梯度和W权重和X数据都有关,权重正则化解决W,BN解决X。