Day 3: 参数初始化

2019-11-17  本文已影响0人  andyjkt

神经网络参数初始化

神经网络结构图

神经网络的参数主要是权重(weights):W, 和偏置项(bias):b

1) 0初始化

不管是哪个神经元,它的前向传播和反向传播的算法都是一样的,如果初始值也一样的话,不管训练多久,它们最终都一样,都无法打破对称(fail to break the symmetry),那每一层就相当于只有一个神经元,最终L层神经网络就相当于一个线性的网络,如Logistic regression

因此,我们决不能把所有参数初始化为0,同样也不能初始化为任何相同的值,因为我们必须“打破对称性”

2)随机初始化

b不用随机初始化,因为w随机之后,已经打破对称,b就一个常数,无所谓了

random.rand()是在0~1之间随机,random.randn()是标准正态分布中随机,有正有负

np.zeros(())这里是两个括号,random.randn()是一个括号

sigmoid函数

(1)放大版随机初始化(w*10)

效果不好,因为sigmoid函数中间的斜率大,两边的斜率小还趋于零。所以当我们把随机的值乘以10了之后,我们的初值会往两边跑,那么我们的梯度下降就会显著变慢,可能迭代半天,才下降一点点

(2)缩小版随机初始化(w/10)

我们把w都除以10,实际上就接近0了,深度学习中我们认为参数越大,模型越复杂;参数越小,模型越简单。所以除以10之后,参数太小了,模型就too simple了,效果当然不好。

3) 何氏初试法(He Initialization)

在我们随机初始化了之后,乘以

,这样就避免了参数的初始值过大或者过小

W = np.random.randn(num_of_dim[l],num_of_dim[l-1])*np.sqrt(2/num_of_dim[l-1]) # W的维度是(当前层单元数,上一层单元数)

推荐针对使用ReLU激活函数的神经网络使用的

4) Xavier Initialization

推荐给sigmoid的Xavier Initialization


参考文献

上一篇下一篇

猜你喜欢

热点阅读