权重初始化

权重初始化

权重初始化指的是在神经网络开始训练之前预先设定值的过程,那么问题来了

为什么权重需要初始化呢?

如果权重不初始化,全部为0,那么每个神经节点的值均相同,因此在反向传播时,每个权重的梯度为输入该节点的输入x与上一层的梯度乘积,因此相等,则神经网络每个神经节点同等更新,不具有差异性

是否可以用高斯分布来初始化权重?

当然可以,
1)我们首先想到的是用小随机数来初始化权重,如0.01,这样,可以打破0初始值的对称性,但是,小初始值也存在一个问题,在神经网络层数少的情况下没有问题,但是层数一旦比较深,那么梯度传递到最初的几层时会趋近于0,因为w权重的梯度为输入x,与上一层的梯度乘积,不断将梯度乘以很小的数,会使其消失。
2)那么是可以换大随机数初始化呢?比如1,显然不行,之前在sigmoid和tanh激活函数时提到,如果权重过大,会造成梯度饱和的现象,这主要是由于在这两个函数中,值域趋于正负1时,梯度趋近于0
除此之外,简单的用0.01或者1这样的值来随机产生权重还存在这样的问题,即在数据规模不同的情况下,方差数据分布的方差也不同,数据量越大,方差越大,而神经网络本质上就是学习数据的分布情况。因此,在初始化时,我们应该使用1/sqrt(n)来校准,其中n为输入数据的规模。

还可以稀疏初始化

为了打破0初始化的对称性,又不想初始化所有权重,我们可以让每个神经元稀疏的初始化少量数目的权重,通常情况下,我们取10

偏置初始化

除了权重,还有偏置,偏置的通常情况下没有权重初始化那么重要,我们一般用0处理,也有人指出,我们应该用很小的数值初始化,以便于在激活函数为Relu时尽快被激活,但是实验中,这样做的结果并不总是理想的。

Relu的初始化方式

使用1/sqrt(n)来校准,对于tanh函数有效,但是对于Relu并不好,这主要是因为max函数令方差减半因此应该用sqrt(2/n)来校准。

batch normalization

对于以上繁琐的初始化过程,loffe和Szegedy提出了batch normalization的方法,该层是在全连接层和激活函数之间添加,我们可以这样考虑,我们都希望输入是零中心化和归一化数据,但是经过了每层之后,输入的分布会发生变化,这样将会对后续层的学习产生影响,如果在权重之后加入这样的层,使数据分布依旧为零中心化和归一化的,是不是对后续的学习会有帮助呢?但是单纯的将分布拉回来也存在着这样一个问题,前一层好不容易学习出来的分布,被强行拉回,对最后的结果到底有利还是有弊呢,因此这里,在归一化之后,尝试重构原来的分布,而重构的参数gamma和beta是学习得到的,当gamma为输入数据的标准差且beta为均值时,就恢复了之前的分布。所以从某种意义上,也是归一化分布与学习到分布的一种博弈选择。同样,该层也可以在图像处理领域,也可以用于卷积层之后。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值