【机器学习与深度学习理论要点】12.神经网络权重初始值如何设置?

在神经网络的学习中,权重的初始值特别重要。实际上,设定什么样的权重初始值,经常关系到神经网络的学习能否成功。

1)权重初始值不能设置为0

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

2)隐藏层激活值的分布

使用一个包含5层的神经网络,每层有100个神经元。然后,用高斯分布随机生成1000个数据作为输入数据,并把它们传给5层神经网络,观察激活值的分布并绘制直方图,从而反映激活值的分布情况。

① Sigmoid激活函数的参数分布

  • 高斯权重初始值

在这里插入图片描述

上图显示的是标准差为1的随机权重激活值分布。由图可见,各层激活值呈偏向0和1的分布,偏向0和1的数据分布会造成反向传播中梯度的值不断变小,最后消失。这个问题称为梯度消失(gradient vanishing)。将参数初始值的标准差设置为0.01,各层激活值分布如下图所示:

在这里插入图片描述

由图可见,当初始化权重参数时,标准差为0.01,激活值集中在0.5附近分布。虽然没有出现梯度消失情况,但激活值的分布有所偏向,说明在表现力上会有很大问题。因为如果有多个神经元都输出几乎相同的值,那它们就没有存在的意义了。

  • Xavier初始值

Xavier Glorot和Yushua Bengio等人的论文《Understanding the difficulty of training deep feedforward neural networks》(2010年)中推荐的权重初始值(俗称“Xavier初始值”)。现在,在一般的深度学习框架中,Xavier初始值已被作为标准使用。为了使各层的激活值呈现出具有相同广度的分布,论文建议,如果前一层的节点数为n,则初始值使用 1 n \frac{1}{\sqrt n} n 1标准差为的分布。使用Xavier初始值后,前一层的节点数越多,要设定为目标节点的初始值的权重尺度就越小。
在这里插入图片描述

由图可见,Xavier初始值,后面的隐藏层的分布呈稍微歪斜的形状。如果用tanh函数(双曲线函数)代替sigmoid函数,这个稍微歪斜的问题就能得到改善,呈漂亮的吊钟型分布。

② Relu激活函数参数分布

Xavier初始值同样适合Relu激活函数,但当激活函数使用ReLU时,一般推荐使用ReLU专用的初始值,也就是Kaiming He等人推荐的初始值,也称为“He初始值”。当前一层的节点数为n时,He初始值使用标准差为 2 n \sqrt{\frac{2}{n}} n2 的高斯分布。可以直观理解为,ReLU的负值区域的值为0,为了使它更有广度,所以需要2倍的系数。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

由上图可知,当“std = 0.01”时,各层的激活值非常小。神经网络上传递的是非常小的值,说明逆向传播时权重的梯度也同样很小。使用Xavier初始值,随着层的加深,偏向一点点变大,层次较深时会出现梯度消失问题。而当初始值为He初始值时,各层中分布的广度相同。由于即便层加深,数据的广度也能保持不变,因此逆向传播时,也会传递合适的值。

作者:野哥李
微信公众号:AI算法学习社
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
本文章不做任何商业用途,仅作为自学所用,文章后面会有参考链接,我可能会复制原作者的话,如果介意,我会修改或者删除。

posted @   野哥李  阅读(71)  评论(0编辑  收藏  举报  
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示