四种权重初始化方法:
- 把w初始化为0
- 对w随机初始化
- Xavier initialization
- He initialization
- 把w初始化为0:
缺点:
- 因为如果把w初始化为0,那么每一层的神经元学到的东西都是一样的(输出是一样的)。
- 在梯度回传阶段,同一层内的所有神经元都是相同的,这样的话神经网络就没有意义了,相当于每一层只有一个神经元。因为在前项传播时,同层的所有神经元都相同,w也相同,在回传计算的梯度时,w的梯度也相同,同层内的神经元同步更新,数值都一样。
- 对w随机初始化
缺点:假如,x和a均服从(0,1)分布,随着网络变身,输出的数据的方差会变大,导致后面的层爆掉。如下,每项x都与a中的512个数相乘,得到的数据分布为(0, 255),偏差很大。解决:
为了使得输入输出数据分布一致,对于每个a,除以512如下
如果单纯的没有激活函数,上述方法可以保证输入输出分布一致,但是在加入激活函数后,上述办法无法解决,从而有了Xavier 初始化
- Xavier initialization
在我们假设的100层网络的每一层之后添加一个双曲正切激活函数,然后看看当我们使用我们自己的权值初始化方案时发生了什么,其中层权值按1/√n.进行缩放。可以看出(0,1)+缩放在加入激活函数的情况下,无法实现输入输出数据分布一致,从而提出了Xavier 初始化
其中,nᵢ是传入网络连接的数量叫“扇入”,nᵢ₊₁是从那层出去的网络连接的数量,也被称为“扇出”。
缺点:
Xavier初始化可以解决关于0对称且在[-1,1]内部有输出(如softsign和tanh)的激活函数,但是cv中常用的relu激活函数,不是关于0对称的,做了一下实验发现均方值为√512/√2,导致输入输出分布也不一致
- He initialization
使用relu时,发现均方值为√512/√2,为了变为1,在初始化a时,先乘√2/√512,就得到了he 初始化参考:
神经网络中的权值初始化:从最基本的方法到xavier、he初始化方法一路走来的历程参考:
深度学习中神经网络的几种权重初始化方法