神经网络参数初始化(MSRA、Xavier)

转载文章:神经网路权重初始化(讲的比较详细)

再推荐一篇感觉原理讲的很好的文章:https://blog.youkuaiyun.com/u014696921/article/details/53819512


网络权重初始化相关

理想的网络参数初始化使模型训练事半功倍,相反,糟糕的初始化方案不仅会影响网络收敛,甚至会导致梯度弥散或爆炸。参数初始化的理想状态是参数正负各半,期望为0。

 

1、过大或者过小的初始化

如果权值的初始值过大,则会导致梯度爆炸,使得网络不收敛;过小的权值初始值,则会导致梯度消失,会导致网络收敛缓慢或者收敛到局部极小值。

如果权值的初始值过大,则loss function相对于权值参数的梯度值很大,每次利用梯度下降更新参数的时,参数更新的幅度也会很大,这就导致loss function的值在其最小值附近震荡。

而过小的初值值则相反,loss关于权值参数的梯度很小,每次更新参数时,更新的幅度也很小,着就会导致loss的收敛很缓慢,或者在收敛到最小值前在某个局部的极小值收敛了。

 

2、所有的参数初始化为0或者相同的常数

最简单的初始化方法就是将权值参数全部初始化为0或者一个常数,但是使用这种方法会导致网络中所有的神经元学习到的是相同的特征。

当网络达到稳定状态时, 参数(权值)在理想情况下应该保持正负各半(此时期望为0)。因此一种看起来简单的方法,干脆将所有参数都初始化为0, 因为这样可以使得初始化全零时参数的期望与网络稳定时参数期望一致。

但是,参数全是零时网络不同神经元的输出必然相同,相同的输出必然导致梯度更新完全一样,这样会令更新后的参数仍然保持一样的状态。换句话说,如果参数进行了全零的参数化,那么网络神经元将无法训练模型。例如,对于y=WX+by=WX+b,由于参数W需要和X乘积,因此不能初始化为0,而b可以。

 

 

首先介绍一下Xavier等初始化方法比直接用高斯分布进行初始化W的优势所在: 一般的神经网络在前向传播时神经元输出值的方差会不断增大,而使用Xavier等方法理论上可以保证每层神经元输入输出方差一致。

为什么要保证输入和输出的方差一致:如果不一致,则会造成方差越来越大,或是越来越小

 

3、Xavier

初始化方法由Bengio等人在2010年的论文《Understanding the difficulty of training deep feedforward neural networks》中提出。

它为了保证前向传播和反向传播时每一层的方差一致:在正向传播时,每层的激活值的方差保持不变;在反向传播时,每层的梯度值的方差保持不变。根据每层的输入个数和输出个数来决定参数随机初始化的分布范围,是一个通过该层的输入和输出参数个数得到的分布范围内的均匀分布。

 

Xavier的有它自身的限制

对于权值的初始化,该方法提出两个准则:各个层激活值的方差保持不变(正向传播);各个层的梯度值的方差保持不变(反向传播),这也是这个初始化函数要做的事。在Xavier的推导的过程中,做了以下假设:权值矩阵w是独立同分布的,且其均值为0;每一层的输入a是独立同分布的,且均值也为0;w和a是相互独立的。除了以上,对Xavier限制最大的则是,其是基于tanh作为激活函数的。Xavier的初始化有个假设条件,激活函数关于0对称,且主要针对于全连接神经网络。适用于tanh和softsign

Xavier可以使用正态分布或者均匀分布来取得初始的权值矩阵的值

 

 

4、MSRA

由何凯明在论文Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification提出,由于Xavier的假设条件是激活函数是关于0对称的,而常用的ReLU激活函数并不能满足该条件。

和Xavier的方法,MSRA也可以使用正态分布或者均匀分布来取得初始的权值矩阵的值。

Xavier与MSRA的效果对比:

特别当网络增加到33层之后,对比效果更加明显

总结:

正确的初始化方法应该避免指数级地减小或放大输入值的大小,防止梯度“饱和”。 Glorot提出两个准则:各个层激活值的方差保持不变(正向传播);各个层的梯度值的方差保持不变(反向传播)

通常初始的权值矩阵的均值为0.

这这些条件的基础上,Glorot 使用(tanh)作为激活函数,并假设输入值的均值为0,提出了Xavier初始化的方法。

而Kaiming使用ReLU作为激活函数,就无法满足数值的均值为0的条件,因此使用Xavier来初始化ReLU作为激活函数的网络,效果也就不是那么理想。其提出了MSRA的初始化方法,来解决该问题。

 

pytorch中的网络权重初始化函数总结:

https://blog.youkuaiyun.com/qq_37705280/article/details/105772967

### MSRA 初始化Xavier 初始化的差异 两种初始化方法的主要区别在于如何计算权重的标准差,这取决于所使用的激活函数以及网络结构。 #### 计算方式的不同 Xavier初始化假设每一层输入和输出变量具有相同的分布特性,并基于此设定初始权重范围。具体来说,如果一层神经网络有n_in个输入单元和n_out个输出单元,则该层权重矩阵W应从均匀分布U(-sqrt(6/(n_in+n_out)), sqrt(6/(n_in+n_out))) 或者正态分布N(0,sqrt(2/(n_in+n_out)))[^1] 中抽取样本作为初始值。 相比之下,MSRA(也称为Kaiming)初始化特别针对ReLU及其变体进行了优化调整。它考虑到ReLU类型的非线性变换会使信号通过网络传播时逐渐缩小一半左右的比例关系;因此,在这种情况下更倾向于采用较大的方差来补偿这一现象带来的影响。对于使用ReLU类激活函数的情况,推荐按照 N(0,\(\sqrt{2/n_{in}}\))[^2] 的形式设置权重。 #### 适用场景分析 当涉及到深层架构尤其是那些依赖于ReLU家族成员作为主要激活机制的设计方案时,MSRA往往表现得更为出色。这是因为随着层数增加,传统方法可能导致梯度消失或爆炸问题加剧,而经过改进后的MSRA能够有效缓解这些问题的发生几率并促进更快更好的模型收敛性能[^3]。 另一方面,Xavier初始化适用于多种不同种类的传统激活函数(如Sigmoid、Tanh),并且在某些特定条件下也能很好地支持浅层至中等规模深度的学习任务。然而面对非常深或者专门采用了其他特殊组件构建而成的新颖框架时,可能就需要考虑更加定制化的解决方案了[^4]。 ```python import torch.nn as nn # 使用Xavier初始化 nn.init.xavier_uniform_(tensor) # 使用MSRA/He初始化 nn.init.kaiming_normal_(tensor) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值