深度学习笔记:1.11 权重初始化

1.11   权重初始化

经过1.10节的分析,我们知道过大或过小的权重设置可能会带来梯度爆炸或消失的问题,严重影响我们计算神经网络的速度,加大神经网络的训练难度。那么应该如何初始化权重呢?如下图所示:

我们用单个神经元举例, 这里同样不考虑b的情况(b=0),这时Z=W1X1+W2X2+...+WnXn,当n很大时,我们希望能够存在较小的Wi,以避免Z过大。面对这个问题,我们的直观想法是希望W的取值能够与n成反比,我们可以通过限制W的方差来限制W的大小。最简单的思路就是,我们假设W的方差是1/n,如上图所示,与n成反比。

基于这种思路,我们可以在初始化时使用图中命令随机生成W,np.random.randn(shape)保证我们随机生成同样维度的矩阵,且其元素均满足0-1的均匀分布,而np.sqrt(1/n[L-1])是指1/n[L-1]的开方。我们知道,第L层的Z值是由第L层的W和第(L-1)层的X求解而得,所以这里影响第L层W的方差的n是指上一层的节点数。0-1均匀分布的方差我们知道是1/12,乘上np.sqrt(1/n[L-1]),我们知道W[L]方差变为1/12*(1/n[L-1]),与我们的期望值成正比,且与n[L-1]成反比,达到我们的要求。

方差设为1/n是我们对于这类问题的直觉,但实际证明,当我们采用的激活函数是ReLU时,这时将W方差设为2/n[L-1]更加合理,除此之外,我们还可以在方差设定上做一些其他的优化,比如有一些学者提出对于激活函数tanh我们可以将方差设定为1/n[L-1],还有学者提出将方差设定为2/(n[L-1]+n[L])。

tip:

除了限制初始权重方差,不要忘记对数据做标准化处理,虽然这样做不会解决问题但确实可以降低梯度爆炸和消失问题,因为这样做给W设置了合理值,以致梯度没有爆炸或消失过快,因为我们知道W不能比1大太多,也不能比1小太多。

这些公式给出初始化权重矩阵的方差的默认值,是一个起点,你也可以添加超参数去改变方差,用你自己的方法去优化这个方差,但这个调参效果一般,虽然能起到一定作用,但相比调优其他超参数的重要性,可以将这个优先级放得低一些。

合理设置初始化权重矩阵,使其不会增长得太快,也不减小的太快(像梯度爆炸和消失那样),这也是提高神经网络训练速度的方法。

版权声明:尊重博主原创文章,转载请注明出处https://blog.csdn.net/kkkkkiko/article/details/81187368

猜你喜欢

转载自blog.csdn.net/kkkkkiko/article/details/81187368