神经网络中的参数的初始化

神经网络中的参数初始化

任何网络在训练之前,都需要经过参数初始化,在神经网络中,权重初始化方法对模型的收敛速度和性能有着至关重要的影响。因此,本文就来讨论一下常见的集中权重初始化方法。

  1. 将W初始化为0或同一常数
    似乎在很多时候,我们都习惯将参数初始化为0 ,但在神经网络中,我们不仅不能都初始化为0,而且不能初始化为同一常数。
    在这里插入图片描述
    我们以这幅图为例来看,如果我们将W均初始化为同一常数(包括0),那么每个神经元都将在你的输入数据上做相同的操作(注意,不一定是所有的神经元都死亡,因为还有b),输出相同的值,并得到相同的梯度,然后将会用相同的方式更新,最后我们将会得到完全相同的神经元,这显然不是我们想要的,我们希望得到是不同的特征。
  2. 将W初始化为很小或很大的随机数
    在否定了同一数值这种初始化形式后,人们又想到了应该将W初始化为一个随机数矩阵,这样就可以打破参数对称问题,但即使是随机数,也要注意,不能是过大或过小的随机数。
    如果权值的初始值过大,每层输出的均值和标准差如下所示
    W = 1.0*np.random.randn(D,H)

在这里插入图片描述
在这里插入图片描述

  • 由上图可看出,所有的tanh函数输出不是1就是-1,这意味着所有传递的数值都过于饱和了。因为w过大,正向传播后的数值就会变得非常大。那么在反向传播中计算的梯度就会趋向0,然后使得我们的网络无法工作,即使训练时间加长,损失函数也根本不会变,因为所有的神经元都饱和了,无法进行反向传播,权值得不到更新,也就是出现了梯度消失的现象;

如果权值的初始值过小,每层输出的均值和标准差如下所示

W = 0.01*np.random.randn(D,H)

在这里插入图片描述
在这里插入图片描述

  • 由图片中可看出,一开始输入的均值是0,标准差是1,在前向传播的过程中,我们观察经过10层网络之后的情况,我们使用的是tanh函数,tanh函数关于原点对称的,所以均值会归于0左右;再看方差,一开始是1,在接下来的层中,逐步下降,很快降至0。分析柱状图,第一张是合理的,我们的数据处于-1到1之间,随后这些数据分布开始“坍塌”,最终只分布在0上。造成这种现象的原因是,输入X是小量数值,那么w的梯度也是小量数值,w*x的激活函数计算出的结果对梯度的叠加是无影响的,在反向传播过程中,通过链式法则不断的乘w,最终得到的梯度非常小,几乎为0,这时就出现了梯度弥散(消失)的问题。
  1. Xavier初始化
    为了解决上述问题,后来又提出了Xavier算法,其核心思想是,好的初始化应该使得各层的激活值和梯度的方差在传播过程中保持一致,这个被称为Glorot条件。为了做到这一点,对激活函数也有条件:
    (1) 激活函数是线性的,至少在0点附近,而且导数为1。
    (2) 激活值关于0对称。
    这两个都不适用于sigmoid函数和ReLU函数,而适合tanh函数,其公式及推导过程如下:
    在这里插入图片描述
    实现方法及每层输出的均值如标准差如下
W = np.random.randn(fan_in, fan_out) / np.sqrt(fan_in)

在这里插入图片描述
在这里插入图片描述
由此可以看出,每一层的分布都很好。但是这只适用于tanh函数,如果使用ReLU函数,每次实际上只有大约一半的神经元被激活,相当于只有一半的输入有效,所以在进行参数缩放的时候除以2。

W = np.random.randn(fan_in, fan_out) / np.sqrt(fan_in / 2)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值