神经网络初始化权重方法

神经网络参数的初始化

  对于神经网络中的参数,如权重和偏置,往往我们需要初始化,最常规的方法就是正态分布初始化这些参数,但是采用什么均值和方差的正态分布初始化参数却是需要仔细考虑的。
  上一篇博文讲述了如何防止网络训练在最后一层出现饱和,导致参数更新缓慢的问题,就是使用了交叉熵损失函数,但是这只能对输出层有效,对于其他层却还是有可能出现这个问题。

(1)未合理初始化带来的问题

  假如所有参数采用均值为0,标准差为1的正态分布初始化,假如输入是【0,1】之间,对于第一层神经元,我们有Z=w*x+b,假设输入x个数为1000个,其中500个为1,500为0,对于第一层神经元输入z就有分布为均值为0,标准差为√501 ≈ 22.4 的⾼斯分布,如下图:
在这里插入图片描述
  可以看到,|Z|可以很大,对于sigmoid函数,这会使得其处于饱和区,即此时sigmoid的导数很小,如下图:
在这里插入图片描述
所以,如果单纯的采用上面那种初始化方法,就会使网络处于饱和,训练缓慢。

(2)解决办法

  为了让神经网络的输入值处于sigmoid函数的变化率大的0附近部分区域,我们就需要新的参数初始化方法,假如需要神经元输入(Z)分布为均值为0,方差为1,我们就可以对参数W采用均值为0,方差为1/n的高斯随机分布初始化(这里n为网络的输入特征数量,也即是上面x的个数),而对于偏置b,由于对其网络训练影响不大(这里有经验表明),所以还是可以使用均值为0,方差为1。所以最后神经元输入Z为均值为0,方差为2的正态分布,基本都落在sigmoid函数变化率较大的区域,加快了网络训练,防止饱和。

(3)总结

  可以看到,上面初始化主要是针对sigmoid函数的特性,假如是使用relu函数这样的激活函数,我认为就不太讲究这种初始化方法,因为不存在饱和的问题,所以初始化方法需要根据具体情况,比如激活函数选择,网络尺寸等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值