当前位置:   article > 正文

关于权重初始值的设定_输入层权重梯度为0

输入层权重梯度为0

本文参考:深度学习入门:基于Python的理论与实现 斋藤康毅(作者)

首先明确权重初始值不能设置为0,或者相同的值。

这是因为在误差反向传播法中,所有的权重值都会进行相同的更新。比如,在 2 层神经网络中,假设第 1 层和第 2 层的权重为 0。这样一来,正向传播时,因为输入层的权重为 0,所以第 2 层的神经元全部会被传递相同的值。第 2 层的神经元中全部输入相同的值,这意味着反向传播时第 2 层的权重全部都会进行相同的更新。因此,权重被更新为相同的值,并拥有了对称的值(重复的值)。这使得神经网络拥有许多不同的权重的意义丧失了。为了防止“权重均一化”(严格地讲,是为了瓦解权重的对称结构),必须随机生成初始值。

翻译成人话就是权重如果都是0的话,每次输入值和上一个节点的结果在进入下一个结点的时候都会变成0,最终结果也将全是0,这个模型将不具备学习能力。如果全身都是一样的值的话,每次反向传播更新权重时,按照权重占比分配,每个权重都将更新相同的值,所有的权重都将做相同的变换,最终我们将得到一个所有值都一样的权重矩阵。

 

做个小实验(参照斯坦福大学课程CS231n):

有一个五层的神经网络,每层一百个神经元,然后用高斯分布随机生成1000个数据并传入网络,激活函数使用sigmoid,每一层经过激活函数后的输出值我们做成直方图。

当标准差为1时:

发现各层的值集中在0和1附近,随着输出不断靠近0或1,他的导数的值逐渐接近0。

关于梯度消失:

对一个神经网络而言,每一层经过激活函数(尤其是sigmoid函数)之后,输出的值都会愈加靠近0或1,根据sigmoid函数的图像可以很明显的看出,输出值的导数值会逐渐接近0,因此,偏向0和1的数据分布会造成反向传播中梯度的值不断下降,最后消失,即所谓的梯度消失。层次加深的深度学习中,梯度消失的问题可能会格外严重。

 

当标准差为0.01时:

这次集中分布在0.5附近,没有发生梯度消失现象。但是激活函数输出的值有所偏向,说明在表现力上存在很大问题,即因为有很多神经元输出几乎相同的值,那么他们就没有存在的意义了,一个神经元也可以代替那一堆神经元。即表现力受限。

 

关于Xavier 初始值”:

Xavier Glorot 等人的论文 [9] 中推荐的权重初始值俗称“Xavier 初始值”。

avier 的论文中,为了使各层的激活值呈现出具有相同广度的分布,推导了合适的权重尺度。推导出的结论是,如果前一层的节点数为 n ,则初始值使用标准差为1/√n的分布(简化版,原论文中还考虑了下一层的输出节点数量),如图。

使用 Xavier 初始值后,前一层的节点数越多,要设定为目标节点的初始值的权重尺度就越小。

使用Xavier 初始值后的结果如图所示,从这个结果可知,越是后面的层,图像变得越歪斜,但是呈现了比之前更有广度的分布。因为各层间传递的数据有适当的广度,所以 sigmoid 函数的表现力不受限制,有望进行高效的学习。

后面的层的分布呈稍微歪斜的形状。如果用 tanh 函数(双曲线函数)代替 sigmoid 函数,这个稍微歪斜的问题就能得到改善。实际上,使用 tanh 函数后,会呈漂亮的吊钟型分布。tanh 函数和 sigmoid 函数同是 S 型曲线函数,但 tanh 函数是关于原点 (0, 0) 对称的 S 型曲线,而 sigmoid 函数是关于 (x , y)=(0, 0.5) 对称的 S 型曲线。众所周知,用作激活函数的函数最好具有关于原点对称的性质。

 

 

 

关于ReLU的初始权重:

当激活函数使用 ReLU 时,一般推荐使用 ReLU 专用的初始值,也就是 Kaiming He 等人推荐的初始值,也称为“He 初始值”[10] 。当前一层的节点数为 n 时,He 初始值使用标准差为√(2/n)的高斯分布,当 Xavier 初始值是√(2/n)时,(直观上)可以解释为,因为 ReLU 的负值区域的值为 0,为了使它更有广度,所以需要 2 倍的系数。

下面依次是权重初始值为0.01的高斯分布、初始值为Xavier初始值、初始值为ReLU专用“He初始值”时的结果。

观察实验结果可知,当“std = 0.01”时,各层的激活值非常小 4 。神经网络上传递的是非常小的值,说明逆向传播时权重的梯度也同样很小。这是很严重的问题,实际上学习基本上没有进展。

在Xavier情况下,随着层的加深,偏向一点点变大。实际上,层加深后,激活值的偏向变大,学习时会出现梯度消失的问题。而当初始值为 He 初始值时,各层中分布的广度相同。由于即便层加深,数据的广度也能保持不变,因此逆向传播时,也会传递合适的值。

总结一下,当激活函数使用 ReLU 时,权重初始值使用 He 初始值,当激活函数为 sigmoid 或 tanh 等 S 型曲线函数时,初始值使用 Xavier 初始值。这是目前的最佳实践。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/117908
推荐阅读
相关标签
  

闽ICP备14008679号