网络权重初始化方法总结(下):Lecun、Xavier与He Kaiming


博客:blog.shinelee.me | 博客园 | CSDN

权重初始化最佳实践

前向传播

反向传播

书接上回,全0、常数、过大、过小的权重初始化都是不好的,那我们需要什么样的初始化?

  • 因为对权重ww的大小和正负缺乏先验,所以应初始化在0附近,但不能为全0或常数,所以要有一定的随机性,即数学期望E(w)=0E(w)=0

  • 因为梯度消失和梯度爆炸,权重不易过大或过小,所以要对权重的方差Var(w)Var(w)有所控制

  • 深度神经网络的多层结构中,每个激活层的输出对后面的层而言都是输入,所以我们希望不同激活层输出的方差相同,即Var(a[l])=Var(a[l1])Var(a^{[l]})=Var(a^{[l-1]}),这也就意味不同激活层输入的方差相同,即Var(z[l])=Var(z[l1])Var(z^{[l]})=Var(z^{[l-1]})

  • 如果忽略激活函数,前向传播和反向传播可以看成是权重矩阵(转置)的连续相乘。数值太大,前向时可能陷入饱和区,反向时可能梯度爆炸,数值太小,反向时可能梯度消失。所以初始化时,权重的数值范围(方差)应考虑到前向和后向两个过程

权重的随机初始化过程可以看成是从某个概率分布随机采样的过程,常用的分布有高斯分布、均匀分布等,对权重期望和方差的控制可转化为概率分布的参数控制,权重初始化问题也就变成了概率分布的参数设置问题

在上回中,我们知道反向传播过程同时受到权重矩阵和激活函数的影响,那么,在激活函数不同以及每层超参数配置不同(输入输出数量)的情况下,权重初始化该做怎样的适配?这里,将各家的研究成果汇总如下,

weight initialization

其中,扇入fan_infan\_in和扇出fan_outfan\_out分别为当前全连接层的输入和输出数量,更准确地说,1个输出神经元与fan_infan\_in个输入神经元有连接(the number of connections feeding into the node),1个输入神经元与fan_outfan\_out个输出神经元有连接(the number of connections flowing out of the node),如下图所示(来自链接),

MW33zn.png

对于卷积层而言,其权重为nnc×h×wc\times h \times w大小的卷积核,则一个输出神经元与c×h×wc\times h \times w个输入神经元有连接,即fan_in=c×h×wfan\_in = c\times h \times w,一个输入神经元与n×h×wn\times h \times w个输出神经元有连接,即fan_out=n×h×wfan\_out=n\times h \times w

期望与方差的相关性质

接下来,首先回顾一下期望与方差计算的相关性质。

对于随机变量XX,其方差可通过下式计算,
Var(X)=E(X2)(E(X))2 Var(X) = E(X^2) - (E(X))^2
若两个随机变量XXYY,它们相互独立,则其协方差为0,
Cov(X,Y)=0 Cov(X, Y) = 0
进一步可得E(XY)=E(X)E(Y)E(XY)=E(X)E(Y),推导如下,
Cov(X,Y)=E((XE(X))(YE(Y)))=E(XY)E(X)E(Y)=0 \begin{aligned} Cov(X, Y) &= E((X-E(X))(Y-E(Y))) \\ &= E(XY)-E(X)E(Y) =0 \end{aligned}
两个独立随机变量和的方差,
Var(X+Y)=E((X+Y)2)(E(X+Y))2=E(X2+Y2+2XY)(E(X)+E(Y))2=(E(X2)+E(Y2)+2E(XY))((E(X))2+(E(Y))2+2E(X)E(Y))=(E(X2)+E(Y2)+2E(X)E(Y))((E(X))2+(E(Y))2+2E(X)E(Y))=E(X2)(E(X))2+E(Y2)(E(Y))2=Var(X)+Var(Y) \begin{aligned} \operatorname{Var}(X+Y) &=E\left((X+Y)^{2}\right)-(E(X+Y))^{2} \\ &=E\left(X^{2}+Y^{2}+2 X Y\right)-(E(X)+E(Y))^{2} \\ &=\left(E\left(X^{2}\right)+E\left(Y^{2}\right)+2 E(X Y)\right)-\left((E(X))^{2}+(E(Y))^{2}+2 E(X) E(Y)\right) \\ &=\left(E\left(X^{2}\right)+E\left(Y^{2}\right)+2 E(X) E(Y)\right)-\left((E(X))^{2}+(E(Y))^{2}+2 E(X) E(Y)\right) \\ &=E\left(X^{2}\right)-(E(X))^{2}+E\left(Y^{2}\right)-(E(Y))^{2} \\ &=\operatorname{Var}(X)+\operatorname{Var}(Y) \end{aligned}
两个独立随机变量积的方差,
Var(XY)=E((XY)2)(E(XY))2=E(X2)E(Y2)(E(X)E(Y))2=(Var(X)+(E(X))2)(Var(Y)+(E(Y))2)(E(X))2(E(Y))2=Var(X)Var(Y)+(E(X))2Var(Y)+Var(X)(E(Y))2 \begin{aligned} \operatorname{Var}(X Y) &=E\left((X Y)^{2}\right)-(E(X Y))^{2} \\ &=E\left(X^{2}\right) E\left(Y^{2}\right)-(E(X) E(Y))^{2} \\ &=\left(\operatorname{Var}(X)+(E(X))^{2}\right)\left(\operatorname{Var}(Y)+(E(Y))^{2}\right)-(E(X))^{2}(E(Y))^{2} \\ &=\operatorname{Var}(X) \operatorname{Var}(Y)+(E(X))^{2} \operatorname{Var}(Y)+\operatorname{Var}(X)(E(Y))^{2} \end{aligned}

全连接层方差分析

对线性组合层+非线性激活层,计算如下所示,其中zi[l1]z_i^{[l-1]}l1l-1层第ii个激活函数的输入,ai[l1]a_i^{[l-1]}为其输出,wij[l]w_{ij}^{[l]}为第ll层第ii个输出神经元与第jj个输入神经元连接的权重,b[l]b^{[l]}为偏置,计算方式如下
ai[l1]=f(zi[l1])zi[l]=j=1fan_inwij[l] aj[l1]+b[l]ai[l]=f(zi[l]) \begin{aligned}a_i^{[l-1]} &= f(z_i^{[l-1]}) \\z_i^{[l]} &= \sum_{j=1}^{fan\_in} w_{ij}^{[l]} \ a_j^{[l-1]}+b^{[l]} \\a_i^{[l]} &= f(z_i^{[l]})\end{aligned}
在初始化阶段,将每个权重以及每个输入视为随机变量,可做如下假设和推断,

  • 网络输入的每个元素x1,x2,x_1, x_2, \dots独立同分布
  • 每层的权重随机初始化,同层的权重wi1,wi2,w_{i1}, w_{i2}, \dots独立同分布,且期望E(w)=0E(w)=0
  • 每层的权重ww和输入aa随机初始化且相互独立,所以两者之积构成的随机变量wi1a1,wi2a2,w_{i1}a_1, w_{i2}a_2, \dots亦相互独立,且同分布;
  • 根据上面的计算公式,同层的z1,z2,z_1,z_2,\dots独立同分布,同层的 a1,a2,a_1, a_2, \dots也为独立同分布

需要注意的是,上面独立同分布的假设仅在初始化阶段成立,当网络开始训练,根据反向传播公式,权重更新后不再相互独立。

在初始化阶段,输入aa与输出zz方差间的关系如下,令b=0b=0
Var(z)=Var(j=1fan_inwij aj)=fan_in×(Var(wa))=fan_in×(Var(w) Var(a)+E(w)2Var(a)+Var(w)E(a)2)=fan_in×(Var(w) Var(a)+Var(w)E(a)2) \begin{aligned} Var(z) &=Var(\sum_{j=1}^{fan\_in} w_{ij} \ a_j) \\ &= fan\_in \times (Var(wa)) \\ &= fan\_in \times (Var(w) \ Var(a) + E(w)^2 Var(a) + Var(w) E(a)^2) \\ &= fan\_in \times (Var(w) \ Var(a) + Var(w) E(a)^2) \end{aligned}

tanh下的初始化方法

若激活函数为线性恒等映射,即f(x)=xf(x)=x,则a=za = z,自然E(a)=E(z)E(a)=E(z)Var(a)=Var(z)Var(a) = Var(z)

因为网络输入的期望E(x)=0E(x)=0,每层权重的期望E(w)=0E(w) = 0,在前面相互独立的假设下,根据公式E(XY)=E(X)E(Y)E(XY)=E(X)E(Y),可知E(a)=E(z)=E(wa)=E(w)E(a)=0E(a)=E(z)=\sum E(wa)=\sum E(w)E(a)=0。由此可得,
Var(a[l])=Var(z[l])=fan_in×Var(w)×Var(a[l1]) Var(a^{[l]}) = Var(z^{[l]}) = fan\_in \times Var(w) \times Var(a^{[l-1]})
更进一步地,令n[l]n^{[l]}为第ll层的输出数量(fan_outfan\_out),则第ll层的输入数量($fan_in )即前一层的输出数量为n^{[l-1]}。第L$层输出的方差为

Var(aL)=Var(z[L])=n[L1]Var(w[L])Var(a[L1])=[l=1Ln[l1]Var(w[l])]Var(x) \begin{aligned} Var(a^{L}) = Var(z^{[L]}) &= n^{[L-1]} Var(w^{[L]}) Var(a^{[L-1]}) \\ &=\left[\prod_{l=1}^{L} n^{[l-1]} Var(w^{[l]})\right] {Var}(x) \end{aligned}

反向传播时,需要将上式中的n[l1]n^{[l-1]}替换为n[l]n^{[l]}(即fan_infan\_in替换为fan_outfan\_out),同时将xx替换为损失函数对网络输出的偏导。

所以,经过tt层,前向传播和反向传播的方差,将分别放大或缩小
tn[l1]Var(w[l])tn[l]Var(w[l]) \prod^{t} n^{[l-1]} Var(w^{[l]}) \\ \prod^{t} n^{[l]} Var(w^{[l]})
为了避免梯度消失和梯度爆炸,最好保持这个系数为1。

需要注意的是,上面的结论是在激活函数为恒等映射的条件下得出的,而tanh激活函数在0附近可近似为恒等映射,即$tanh(x) \approx x $。

Lecun 1998

Lecun 1998年的paper Efficient BackProp ,在输入Standardization以及采用tanh激活函数的情况下,令n[l1]Var(w[l])=1n^{[l-1]}Var(w^{[l]})=1,即在初始化阶段让前向传播过程每层方差保持不变,权重从如下高斯分布采样,其中第ll层的fan_in=n[l1]fan\_in = n^{[l-1]}
WN(0,1fan_in) W \sim N(0, \frac{1}{fan\_in})

Xavier 2010

在paper Xavier-2010-Understanding the difficulty of training deep feedforward neural networks中,Xavier和Bengio同时考虑了前向过程和反向过程,使用fan_infan\_infan_outfan\_out的平均数对方差进行归一化,权重从如下高斯分布中采样,
WN(0,2fan_in+fan_out) W \sim N(0, \frac{2}{fan\_in + fan\_out})
同时文章中还提及了从均匀分布中初始化的方法,因为均匀分布的方差与分布范围的关系为
Var(U(n,n))=n23 Var(U(-n, n)) = \frac{n^2}{3}
若令Var(U(n,n))=2fan_in+fan_outVar(U(-n, n)) = \frac{2}{fan\_in + fan\_out},则有
n=6fan_in+fan_out n = \frac{\sqrt{6}}{\sqrt{fan\_in + fan\_out}}
即权重也可从如下均匀分布中采样,
WU(6fan_in+fan_out,6fan_in+fan_out) W \sim U(-\frac{\sqrt{6}}{\sqrt{fan\_in + fan\_out}}, \frac{\sqrt{6}}{\sqrt{fan\_in + fan\_out}})
在使用不同激活函数的情况下,是否使用Xavier初始化方法对test error的影响如下所示,图例中带NN的表示使用Xavier初始化方法,Softsign一种为类tanh但是改善了饱和区的激活函数,图中可以明显看到tanh 和tanh N在test error上的差异。

test error

论文还有更多训练过程中的权重和梯度对比图示,这里不再贴出,具体可以参见论文。

ReLU/PReLU下的初始化方法

搬运一下上面的公式,
Var(z)=fan_in×(Var(w) Var(a)+Var(w)E(a)2) Var(z)= fan\_in \times (Var(w) \ Var(a) + Var(w) E(a)^2)
因为激活函数tanh在0附近可近似为恒等映射,所以在初始化阶段可以认为E(a)=0E(a) = 0,但是对于ReLU激活函数,其输出均大于等于0,不存在负数,所以E(a)=0E(a) = 0的假设不再成立。

activation functions

但是,我们可以进一步推导得到,
Var(z)=fan_in×(Var(w) Var(a)+Var(w)E(a)2)=fan_in×(Var(w)(E(a2)E(a)2)+Var(w)E(a)2)=fan_in×Var(w)×E(a2) \begin{aligned} Var(z) &= fan\_in \times (Var(w) \ Var(a) + Var(w) E(a)^2) \\ &= fan\_in \times (Var(w) (E(a^2) - E(a)^2)+Var(w)E(a)^2) \\ &= fan\_in \times Var(w) \times E(a^2) \end{aligned}

He 2015 for ReLU

对于某个具体的层ll则有,
Var(z[l])=fan_in×Var(w[l])×E((a[l1])2) Var(z^{[l]}) = fan\_in \times Var(w^{[l]}) \times E((a^{[l-1]})^2)
如果假定w[l1]w{[l-1]}来自某个关于原点对称的分布,因为E(w[l1])=0E(w^{[l-1]}) = 0,且b[l1]=0b^{[l-1]} = 0,则可以认为z[l1]z^{[l-1]}分布的期望为0,且关于原点0对称。

对于一个关于原点0对称的分布,经过ReLU后,仅保留大于0的部分,则有
Var(x)=+(x0)2p(x)dx=20+x2p(x)dx=2E(max(0,x)2) \begin{aligned}Var(x) &= \int_{-\infty}^{+\infty}(x-0)^2 p(x) dx \\&= 2 \int_{0}^{+\infty}x^2 p(x) dx \\&= 2 E(\max(0, x)^2)\end{aligned}
所以,上式可进一步得出,
Var(z[l])=fan_in×Var(w[l])×E((a[l1])2)=12×fan_in×Var(w[l])×Var(z[l1]) \begin {aligned}Var(z^{[l]}) &= fan\_in \times Var(w^{[l]}) \times E((a^{[l-1]})^2) \\&= \frac{1}{2} \times fan\_in \times Var(w^{[l]}) \times Var(z^{[l-1]}) \end{aligned}
类似地,需要放缩系数为1,即
12×fan_in×Var(w[l])=1Var(w)=2fan_in \frac{1}{2} \times fan\_in \times Var(w^{[l]}) = 1 \\ Var(w) = \frac{2}{fan\_in}
即从前向传播考虑,每层的权重初始化为
WN(0,2fan_in) W \sim N(0, \frac{2}{fan\_in})
同理,从后向传播考虑,每层的权重初始化为
WN(0,2fan_out) W \sim N(0, \frac{2}{fan\_out})
文中提到,单独使用上面两个中的哪一个都可以,因为当网络结构确定之后,两者对方差的放缩系数之比为常数,即每层扇入扇出之比的连乘,解释如下,

He initialization

使用Xavier和He初始化,在激活函数为ReLU的情况下,test error下降对比如下,22层的网络,He的初始化下降更快,30层的网络,Xavier不下降,但是He正常下降。

Xavier vs He

He 2015 for PReLU

对于PReLU激活函数,负向部分为f(x)=axf(x) = ax,如下右所示,

ReLU and PReLU

对于PReLU,求取E((a[l1])2)E((a^{[l-1]})^2)可对正向和负向部分分别积分,不难得出,
12(1+a2)×fan_in×Var(w[l])=1Var(w)=2(1+a2)fan_inWN(0,2(1+a2)fan_in)WN(0,2(1+a2)fan_out) \frac{1}{2} (1 + a^2) \times fan\_in \times Var(w^{[l]}) = 1 \\Var(w) = \frac{2}{(1 + a^2) fan\_in} \\W \sim N(0, \frac{2}{(1 + a^2) fan\_in}) \\W \sim N(0, \frac{2}{(1 + a^2) fan\_out})

caffe中的实现

尽管He在paper中说单独使用fan_infan\_infan_outfan\_out哪个都可以,但是,在Caffe的实现中,还是提供了两者平均值的方式,如下所示,当然默认是使用fan_infan\_in

MSRA in Caffe

小结

至此,对深度神经网络权重初始化方法的介绍已告一段落。虽然因为BN层的提出,权重初始化可能已不再那么紧要。但是,对经典权重初始化方法经过一番剖析后,相信对神经网络运行机制的理解也会更加深刻。

以上。

参考

发布了55 篇原创文章 · 获赞 77 · 访问量 9万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览