神经网络之权重初始化(附代码)

摘要

神经网络/深度学习模型训练的过程本质是对权重进行更新,在对一个新的模型进行训练之前,需要每个参数有相应的初始值。对于多层神经网络/深度学习而言,如何选择参数初始值便成为一个值得探讨的问题。本文从实现激活值的稳定分布角度来探讨神经网络的效率优化问题


权重在神经网络/深度学习中的作用(个人领受)

神经网络的作用是从大量不同的待训练数据中发现数据本身的内在规律(提取特征数据)。这就要求输入数据不能过于集中,数据相对来说要有一定的分散空间,这样神经网络才能发挥它不断学习和归类的优势。数据过于集中要么说明数据集本身分布就不全面,要么说明数据已经分类得比较好了,作为训练数据会误导神经网络。这样神经网络也就失去了意义,甚至会起反作用

按照上述推导,在多层神经网络中,因为存在各层级联的情况,前一层的输出会成为下一层的输入。所以为了使各层神经网络真正的发挥作用,就要求各层(非输出层)的输出符合数据本身的分布特性,而不能过于集中。不然下一级的神经网络就失去了意义,甚至会起反作用

为了使各层(非输出层)的输出符合某种分布,而不过于集中。f(wx+b)中的每一项都需要研究和优化。包括激活函数f、权重w和偏置b。本文主要讨论权重w初始值对神经网络的影响

神经网络一个理想的初始状态应该是各层输出值比较分散,而且能反映输入数据本身的分布特性。这样在反向传播时,各权重值的变化方向和大小也能呈现出离散性,有利于网络的快速收敛

什么样的初始状态利于学习和调整

学习和调整实际上是反向传播的过程,通过梯度下降法调整权重和偏置。那么有利于使用梯度下降法改善权重和偏置的状态就是一个比较好的状态。如何有利于使用梯度下降法?梯度大的地方收敛就快。这就需要看具体的激活函数特性
为了使得网络中信息更好的流动,每一层输出分布应当尽量与输入一致,方差应该尽量相等
在初始化的时候使各层神经元的方差保持不变, 即使各层有着相同的分布. 很多初始化策略都是为了保持每层的分布不变。

[外链图片转存失败(img-lN7GILxu-1562291209620)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/v2-f088788a94fd5f425fb3ef1acd3d5a8d_r.jpg)]

梯度爆炸与梯度消失

针对多次神经网络,在神经网络的反向传播过程中,根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话,那么即使这个结果是0.99,在经过足够多层传播之后,误差对输入层的偏导会趋于0。都大于1的话,梯度会随着反向传播层数的增加而呈指数增长,导致梯度爆炸。

权重初始化方法

附图为输入0均值,1标准差,10层网络,经过初始态,一次正向传播后各层输出分布。具体代码见GITHUB

固定值(0值)

极不建议。因为如果网络中的每个神经元都计算出同样的输出,然后它们就会在反向传播中计算出同样的梯度,从而进行同样的参数更新。换句话说,如果权重被初始化为同样的值,神经元之间就失去了不对称性的源头
经过10层网络后各层的输出分布

[外链图片转存失败(img-t7INHMUP-1562291209621)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/Figure_1.png)]

随机化

经过10层网络后各层的输出分布

[外链图片转存失败(img-MfoRUCDv-1562291209621)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/Figure_2.png)]

  • 小随机数

根据激活函数的特性,选择小随机数

[外链图片转存失败(img-MhbrHdCB-1562291209621)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/v2-83469109cd362f5fcf1decf109007fbd_r.jpg)]
[外链图片转存失败(img-07QmE574-1562291209621)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/v2-a39596b282f6333bced6e7bfbfe04dcd_r.jpg)]

只适用于小型网络。
权重初始值要非常接近0又不能等于0。解决方法就是将权重初始化为很小的数值,以此来打破对称性。其思路是:如果神经元刚开始的时候是随机且不相等的,那么它们将计算出不同的更新,并将自身变成整个网络的不同部分。小随机数权重初始化的实现方法是:W = 0.01 * np.random.randn(D,H)来生成随机数的。根据这个式子,每个神经元的权重向量都被初始化为一个随机向量,而这些随机向量又服从一个多变量高斯分布,这样在输入空间中,所有的神经元的指向是随机的。
如果每层都用N(0, 0.01)随机初始化的话, 各层的数据分布不一致, 随着层度的增加, 神经元将集中在很大的值或很小的值, 不利于传递信息.

经过10层网络后各层的输出分布

[外链图片转存失败(img-CXWssj2j-1562291209622)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/Figure_3.png)]

  • Xavier

最为常用的神经网络权重初始化方法
神经网络分布的方差随着输入数量的增大而增大,可以通过正则化方差来提高权重收敛速率.不合适的权重初始化会使得隐藏层的输入的方差过大,从而在经过sigmoid这种非线性层时离中心较远(导数接近0),因此过早地出现梯度消失
前向传播推导

[外链图片转存失败(img-Hnzu8dKE-1562291209622)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/20160507180252629.png)]

2

[外链图片转存失败(img-pq6JQgrX-1562291209622)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/20160507181258399.png)]

4

5

反向传播推导

6

最终分布条件

[外链图片转存失败(img-exWg0bmf-1562291209623)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/20160507182402488.png)]

[外链图片转存失败(img-NS7h7FRV-1562291209623)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/20160507182552982.png)]

本次仅使用前向传播类进行类比
经过10层网络后各层的输出分布

Xavier

  • HE/MSRA

Xavier推导的时候假设激活函数是线性的。HE/MSRA是沿用Xavier的思想,针对relu类型的激活函数做的进一步优化
Xavier初始化经过10层网络RELU激活后各层的输出分布

[外链图片转存失败(img-Vel02tM9-1562291209623)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/Figure_5.png)]

HE/MSRA初始化经过10层网络RELU激活后各层的输出分布

[外链图片转存失败(img-2XMMsie4-1562291209624)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/Figure_6.png)]

  • 稀疏初始化

将所有权重矩阵设为0,但是为了打破对称性,每个神经元都同下一层固定数目的神经元随机连接(其权重数值由一个小的高斯分布生成)。一个比较典型的连接数目是10个。

fine-turning

首先使用一个方法(贪婪算法、无监督学习。。。)针对每一层的权重进行优化,用于提取有效的特征值,然后用优化好的权重进行训练

  • Transfer Learning

用当前已训练好的比较稳定的神经网络。这一块研究文章较多,后面作为专题研究

另辟蹊径-跳过权重问题————批量归一化

在每次前向传播过程中,都将输入数据进行归一化整理,使得输入数据满足某种分布规律
公式

批量归一化公式

随机初始化经过10层网络批量归一化后各层的输出分布

[外链图片转存失败(img-5oMc81e0-1562291209624)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/Figure_7.png)]

实例

具体代码见GITHUB

  • 训练框架:TensorFlow
  • 数据集:MNIST手写识别
  • 神经网络类型:4隐藏层,sigmoid激活
  • 针对全零初始化、小随机数初始化、Xavier初始化和批量归一化进行训练次数和准确率对比
序号初始化方法达到80%的训练次数最终精确度
1全零初始化无法达到11%
2小随机数初始化无法达到11%
3Xavier初始化600095%
4小随机数初始化+批量归一化100095%

全零初始化

全零初始化

小随机数初始化

[外链图片转存失败(img-5yQCDVs4-1562291209625)(https://raw.githubusercontent.com/gdyshi/bp_weight_init/master/md_pic/training2.png)]

Xavier初始化

Xavier初始化

小随机数初始化+批量归一化

小随机数初始化+批量归一化

结论

  • 优先使用批量归一化
  • 优先使用Xavier初始化方法
  • ReLU激活函数优先使用HE/MSRA初始化方法

参考资料

  • 7
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 神经网络权重初始化方法对模型的收敛速度和性能有着至关重要的影响。在深度神经网络中,随着层数的增多,梯度消失或梯度爆炸的问题容易出现。因此,权重初始化非常重要。一般来说,有四种常见的权重初始化方法:初始化为0、随机初始化、Xavier初始化和He初始化。\[2\] 首先,将权重初始化为0是不可行的。因为在误差反向传播法中,所有的权重值都会进行相同的更新。这会导致权重被更新为相同的值,并且失去了不同权重的意义。为了防止权重均一化,必须随机生成初始值。\[3\] 其次,随机初始化是一种常见的权重初始化方法。通过从某个分布中随机选择初始值,可以打破权重的对称性,避免梯度消失或梯度爆炸的问题。常见的随机初始化方法包括在一定范围内均匀分布或正态分布的随机数。这样可以使得每个神经元的初始权重值不同,有利于模型的学习和收敛。\[2\] 另外,Xavier初始化和He初始化是两种常用的权重初始化方法。Xavier初始化是根据输入和输出神经元的数量来确定初始权重的范围,以保持梯度的稳定性。He初始化是在Xavier初始化的基础上,将初始权重的范围缩小一半,适用于使用ReLU激活函数的神经网络。这两种方法都能有效地解决梯度消失和梯度爆炸的问题,提高模型的性能和收敛速度。\[2\] 综上所述,神经网络权重初始化方法对模型的性能和收敛速度有着重要的影响。随机初始化、Xavier初始化和He初始化是常用的权重初始化方法,可以有效地解决梯度消失和梯度爆炸的问题,提高模型的学习能力和收敛速度。\[2\] #### 引用[.reference_title] - *1* *3* [神经网络中的权重初始化](https://blog.csdn.net/A496608119/article/details/115529061)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [神经网络权重初始化](https://blog.csdn.net/weixin_44058333/article/details/99684821)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值