深度学习——MSRA初始化

本文介绍了MSRA初始化方法,该方法适用于ReLU和PReLU等非线性激活函数,通过调整权重初始化方差,解决深层网络训练时梯度消失或爆炸问题。文章还详细解释了MSRA初始化的推导过程,并与Xavier初始化进行了对比。

转载自:MSRA初始化

本次简单介绍一下MSRA初始化方法,方法同样来自于何凯明paper 《Delving Deep into Rectifiers:Surpassing Human-Level Performance on ImageNet Classification》.

Motivation

网络初始化是一件很重要的事情。但是,传统的固定方差的高斯分布初始化,在网络变深的时候使得模型很难收敛。此外,VGG团队是这样处理初始化的问题的:他们首先训练了一个8层的网络,然后用这个网络再去初始化更深的网络。

“Xavier”是一种相对不错的初始化方法,我在我的另一篇博文“深度学习——Xavier初始化方法”中有介绍。但是,Xavier推导的时候假设激活函数是线性的,显然我们目前常用的ReLU和PReLU并不满足这一条件。

MSRA初始化

只考虑输入个数时,MSRA初始化是一个均值为0方差为2/n的高斯分布:

MSRA初始化方法

推导证明

推导过程与Xavier类似。

首先,用下式表示第L层卷积:

卷积表示

则其方差为:(假设x和w独立,且各自的每一个元素都同分布,即下式中的n_l表示输入元素个数,x_l和w_l都表示单个元素)

方差

当权重W满足0均值时,上述方差可以进一步写为:

方差整理

对于ReLU激活函数,我们有:(其中f是激活函数)

ReLU激活方差

带入之前的方差公式则有:

最终方差

由上式易知,为了使每一层数据的方差保持一致,则权重应满足:

结论

补充说明

(1) 对于第一层数据,由于其之前没有经过ReLU,因此理论上这一层的初始化方差应为1/n。但是,因为只有一层,系数差一点影响不大,因此为了简化操作整体都采用2/n的方差;

(2) 反向传播需要考虑的情况完全类似于“Xavier”。对于反向传播,可以同样进行上面的推导,最后的结论依然是方差应为2/n,只不过因为是反向,这里的n不再是输入个数,而是输出个数。文章中说,这两种方法都可以帮助模型收敛。

(3) 对于PReLU激活函数来说,条件变成了:

PReLU条件

因此初始化和PReLU有关,但是目前caffe的代码并不在支持在MSRA初始化时手动指定a的值。

(4) 文章做了一些对比试验,表明在网络加深后,MSRA初始化明显优于Xavier初始化。

对比

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

对比

### 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) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值