神经网络初始化
零初始化
通常,将所有权重初始化为零会导致网络无法打破对称性。 这意味着每一层中的每个神经元都将学习相同的东西,并且当你只训练一层的神经网络,且该网络的性能不如线性分类器,例如逻辑回归。
- 权重 W [ l ] W^{[l]} W[l]应该随机初始化以打破对称性。
- 将偏差 b [ l ] b^{[l]} b[l]初始化为零是可以的。只要随机初始化了 W [ l ] W^{[l]} W[l],对称性仍然会被破坏。
随机初始化
为了打破对称性,让我们随机设置权重。 在随机初始化之后,每个神经元可以继续学习其输入的不同特征。
-
当损失一开始很高是因为较大的随机权重值,对于某些数据,最后一层激活函数sigmoid输出的结果非常接近0或1,并且当该示例数据预测错误时,将导致非常高的损失。当 l o g ( a [ 3 ] ) = l o g ( 0 ) log(a^{[3]})=log(0) log(a[3])=log(0)时,损失值达到无穷大。
初始化不当会导致梯度消失/爆炸,同时也会减慢优化算法的速度。
训练较长时间的网络,将会看到更好的结果,但是使用太大的随机数进行初始化会降低优化速度。
-
将权重初始化为非常大的随机值效果不佳。
-
初始化为较小的随机值会更好。
He初始化
- Xavier初始化使用比例因子
sqrt(1./layers_dims[l-1])
来表示权重:建议使用tanh激活层 - He初始化使用
sqrt(2./layers_dims[l-1])
:建议使用的ReLU
激活层 。