美文网首页deeplearning.ai
为什么多层神经网络的权重初始化是 paramete

为什么多层神经网络的权重初始化是 paramete

作者: 2e07917c964c | 来源:发表于2018-12-26 17:10 被阅读0次

问题:

在deeplearning.ai的课程1『神经网络与深度学习』中的第4周的编程作业『Building your Deep Neural Network: Step by Step』中,为什么多层神经网络的权重初始化是
parameters["W" + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) / np.sqrt(layers_dims[l-1])? 即:W^{[l]} = np.random.randn(shape) * np.sqrt(\frac{1}{n^{[l-1]}} )。其中,W^{[l]}是第l层网络的权重,n^{[l-1]}是第l-1层的神经元数量。

为什么不是parameters["W" + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * 0.01?

答案:

1、在课程2『改善深层神经网络:超参数调试、正则化以及优化』中第一周的第11讲『神经网络的权重初始化』中有详细解释:
2、只有2层及以下神经网络的权重初始化才是*0.01,而多层神经网络都要 /np.sqrt(layers_dims[l-1]),即要除以其前一层神经元数量的平方根。
2、原因:因为Z^{[l]} = \sum\limits_{i = 1}^{n^{[l-1]}} W^{[l](i)}A^{[l-1](i)},我们希望初始时Z^{[l]}要足够小,不能太大,否则会进入激活函数的饱和区使得梯度下降很慢,产生梯度消失。 但是如果第l-1层神经元数量n越大,那么W^{[l]}值必须设置越小,所以某层W值一定要同它的输入神经元数(即前一层神经元数)挂钩,因此才会有:W^{[l]} = np.random.randn(shape) * np.sqrt(\frac{1}{n^{[l-1]}} )

总结:

1、Xavier初始化:如果激活函数是tanh函数,初始化时:也是要乘以np.sqrt(\frac{1}{n^{[l-1]}} ),这叫Xavier初始化。在一篇论文中提到出了这个。而bengio提出的初始化方法是乘以np.sqrt(\frac{2}{n^{[l-1]+n^{[l]}}} )
2、He初始化:如果激活函数是relu函数,初始化时:是要乘以np.sqrt(\frac{2}{n^{[l-1]}} ),因为它的方差是这个,这种初始化叫He初始化。

相关文章

网友评论

    本文标题:为什么多层神经网络的权重初始化是 paramete

    本文链接:https://www.haomeiwen.com/subject/bhohlqtx.html