ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于权重初始值的设定

2020-01-21 09:41:02  阅读:581  来源: 互联网

标签:设定 函数 权重 sigmoid 初始值 激活 Xavier


本文参考:深度学习入门:基于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 初始值。这是目前的最佳实践。

ts719796895 发布了12 篇原创文章 · 获赞 5 · 访问量 5164 私信 关注

标签:设定,函数,权重,sigmoid,初始值,激活,Xavier
来源: https://blog.csdn.net/ts719796895/article/details/104058604

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有