深度学习——MSRA初始化

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

    • Motivation
    • MSRA初始化
    • 推导证明
    • 补充说明

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初始化。

深度学习——MSRA初始化_第1张图片

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

深度学习——MSRA初始化_第2张图片

你可能感兴趣的:(深度学习——MSRA初始化)