一、初始化
权值初始化对网络优化至关重要。早年深度神经网络无法有效训练的一个重要原因就是早期人们对初始化不太重视。
如何理解权值的初始化非常重要?对于新手而言,我们可以按照自己的理解,随意取个初始化的方法,比如,假设现在输入层有1000个神经元,隐藏层有1个神经元,输入数据x为一个全为1的1000维向量,采取高斯分布来初始化权重矩阵w,偏置b取0。令w服从均值为0、方差为1的正太分布,x全为1,b全为0,输入层一共1000个神经元,所以输出的y服从的是一个均值为0、方差为1000的正太分布。生成20000万个y并查看其均值、方差以及分布图像:
上一节我们讲过,激活函数中常用的一种,sigmoid,如果忘了请回顾一下。从分布中可见,y有可能是一个远小于-1或者远大于1的数,通过激活函数(比如sigmoid)后所得到的输出会非常接近0或者1,也就是隐藏层神经元处于饱和的状态。所以当出现这样的情况时,在权重中进行微小的调整仅仅会给隐藏层神经元的激活值带来极其微弱的改变。而这种微弱的改变也会影响网络中剩下的神经元,然后会带来相应的代价函数的改变。结果就是,这些权重在我们进行梯度下降算法时会学习得非常缓慢。所以,让输出y处在0附近,即均值|y|≈0,效果最佳。从这个例子可见一斑,我们为什么要进行权重的初始化操作。
我们介绍几个适用于深度神经网络的初始化方法。
初始化的基本思想:方差不变,即设法对权值进行初始化,使得各层神经元的方差保持不变,从而不会发生前向传播爆炸和反向传播梯