梯度消失:
    通常神经网络所用的激活函数是sigmoid函数,梯度最大是0.25,当输入x很大或者很小时,梯度趋于零,许多层相乘后最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新,这就是梯度消失
    梯度爆炸:
    梯度爆炸就是由于初始化权值过大,前面层会比后面层变化的更快,就会导致权值越来越大,梯度爆炸的现象就发生了。同样是层数多引起的问题。

    解决方法:
    1,优化激活函数,譬如将sigmold改为relu,避免梯度消失
    2,对于RNN,可以通过梯度截断,避免梯度爆炸
    3,可以通过添加正则项,避免梯度爆炸
    4,使用LSTM等自循环和门控制机制,避免梯度消失

    让训练更稳定:
    把乘法变加法:resnet,lstm
    归一化:梯度归一化,梯度剪裁,把梯度强行放在一个范围内
    合理的权重初始化和激活函数:
    1,权重初始化,在合理值区间里随机初始参数,xavier初始化成均值为零,方差为固定值
    2,激活函数,用relu也是因为在一些区间接近f(x)=x,满足上面的要求