深度学习中,我们会听到梯度消失梯度爆炸。这指的是梯度变得极小或极大。

为什么在深层次网络中,才容易发生梯度消失梯度爆炸呢?这带来什么负面的影响?该怎么样来避免这种极端情况?

梯度消失梯度爆炸的原因

考虑一种极端情况,假设我们有一个层数很深的神经网络(L层),每层只有一个神经元,且激活函数g(z)=z。
* 如果权重都是0.5,则最终输出y就是0.5的L次方乘以x,可见这个值会随L增加而递减到非常小
* 如果权重都是1.5,则最终输出y就是1.5的L次方乘以x,可见这个值会随L增加而递增到非常大

这就是深层次网络中,网络层次对输出值影响巨大的基本原理。
* 权重矩阵只要比单位阵稍微大一点,在深层次网络中,激活函数将会成指数级递增
* 权重矩阵只要比单位阵稍微大一点,在深层次网络中,激活函数将会成指数级递减

推理到损失函数(导数、梯度)的计算中,也是一样的。

梯度消失梯度爆炸的影响

梯度消失梯度爆炸会导致模型的训练变得复杂:
* 不容易收敛,梯度下降算法会花费很长时间
* 梯度下降算法的收敛步长非常小

如何避免梯度消失梯度爆炸

权重矩阵的初始值,不能比1大很多,也不能比1小很多。所以,初始化权重值的大小设置合理,就不容易发生梯度消失梯度爆炸

根据研究,我们可以用下面的值来初始化权重

np.random.randn(_shape_)*np.sqrt(1/n)