梯度消失与梯度爆炸
如图所示
对于一个层数比较深的网络,如100层,如果w的参数设置的比1大,最后迭代训练的结果是 wl w l ,将会是一个非常大的数,反之如果w的参数设置的比1小,经过迭代训练之后结果会变得非常小。这种现象就称之为梯度消失与梯度爆炸,这对于神经网络的深度有很大的挑战。
神经网络的权重初始化
针对这一个问题,我们有一个不完善的解决办法。但他可以帮助我们更谨慎的为神经网络选择随机初始化参数。
我们先来看一下只有一个神经元的情况。
如图左侧所示,z是由很多的w组成的,我们希望n越大,w的值越小。其中最合理的方法就是设置为
wi=1n
w
i
=
1
n
其中n表示神经元输出特征数量。
写成代码的形式就是
wi = np.random.randn(shape)*np.sqrt(1/n)
如果你用的ReLu函数的话,那么把1/n改成2/n就可以了。方差设置为2/n效果会更好。
我们通过这样的零均值和归一化处理,虽然没能够解决实际问题,但是这个w的范围设置的更合理了。w不会比1大很多,也不会比1小很多,所以梯度爆炸和消失的程度得到了一定的缓解。
右图显式的是其他函数权重的初始化方式,也是在论文中提出来的,目前还在处于探索阶段。