引入
在深度学习中,我们会听到梯度消失
与梯度爆炸
。这指的是梯度
变得极小或极大。
为什么在深层次网络中,才容易发生梯度消失
与梯度爆炸
呢?这带来什么负面的影响?该怎么样来避免这种极端情况?
梯度消失
与梯度爆炸
的原因
考虑一种极端情况,假设我们有一个层数很深的神经网络(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)