深度学习方法(二十一):常用权重初始化方法Xavier,He initialization的推导

Posted 大饼博士X

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习方法(二十一):常用权重初始化方法Xavier,He initialization的推导相关的知识,希望对你有一定的参考价值。

文章目录

交叉熵目标函数更陡峭

在论文[1]中给了一个图示,一定程度上说明了为什么Cross Entropy用的很多,效果很好。图中上面的曲面表示的是交叉熵代价函数,下面的曲面表示的是二次代价函数,W1和W2分别表示层与层之间的连接权值。

)

在1986年 Rumelhart 已经发现:logistic function 或者叫 conditional log-likelihood function: -log P(y|x) 的效果比 quadratic cost function(平方代价函数)的效果好很多的,原因在于 quadratic cost function(平方代价函数)在训练过程中会出现更多的 plateaus(平坦区域)。文章给出了一个两个参数下的图,图中采用的是具有单隐层的神经网络,激活函数使用的是 tanh 函数,对于输入信号进行随机初始化,可以看到二次代价函数具有更多的 plateaus (平坦区域)。

Xavier initialization [1][4]

早期的参数初始化方法普遍是将数据和参数初始化为标准高斯分布(均值0方差1),但随着神经网络深度的增加,这方法并不能解决梯度消失问题。


那么我们应该怎么通过初始化来缓解这个问题呢?
论文中首先给出了一个启发式的方法,想法是初始化值和神经元的输入个数有关:

We initialized the biases to be 0 and the weights Wij at each layer with the following commonly used heuristic, where U[−a, a] is the uniform distribution in the interval (−a, a) and n is the size of the previous layer (the number of columns of W)

W ∼ U [ − 1 n , 1 n ] V a r ( W ) = 1 3 n W \\sim U[-\\frac1\\sqrt n,\\frac1\\sqrt n]\\\\ Var(W) = \\frac13n WU[n 1,n 1]Var(W)=3n1

上面式子中, W ∼ W \\sim W表示其中的每一个元素 W i j W_ij Wij都是符合一个均匀分布的。其中n表示本层的输入size,也就是上一层的输出size。我们知道随机变量在[a,b] 间的均匀分布的方差为
V a r = ( b − a ) 2 12 Var= \\frac(b-a)^212 Var=12(ba)2
所以得到权重参数的方差是1/3n。先记一下,后面分析会讲到。

为了便于研究,作者假设使用线性激活函数 f ( x ) f(x) f(x),且在零点导数 f ′ ( 0 ) = 1 f'(0)=1 f(0)=1。实际上,作者研究的是参数的线性区域,可以认为是对任务的一个简化。

对于一层网络:
f ( x ) = ∑ i n w i x i + b f(\\textbf x) = \\sum_i^n w_ix_i + b f(x)=inwixi+b
输出的方差:
V a r ( f ( x ) ) = ∑ i n V a r ( w i x i ) Var(f(\\textbf x)) = \\sum_i^n Var(w_i x_i) Var(f(x))=inVar(wixi)
其中每一项:
V a r ( w i x i ) = E [ w i ] 2 V a r ( x i ) + E [ x i ] 2 V a r ( w i ) + V a r ( w i ) V a r ( x i ) Var(w_i x_i) = E[w_i]^2Var(x_i) + E[x_i]^2Var(w_i)+Var(w_i)Var(x_i) Var(wixi)=E[wi]2Var(xi)+E[xi]2Var(wi)+Var(wi)Var(xi)

当我们假设输入和权重都是0均值时(目前有了BN之后,每一层的输入也较容易满足),即 E [ x i ] = E [ w i ] = 0 E[x_i] = E[w_i] = 0 E[xi]=E[wi]=0,上式可以简化为:

V a r ( w i x i ) = V a r ( w i ) V a r ( x i ) Var(w_i x_i) =Var(w_i)Var(x_i) Var(wixi)=Var(wi)Var(xi)

由于w和x独立同分布,那么输出的方差就是

V a r ( f ( x ) ) = n V a r ( w i ) V a r ( x i ) Var(f(\\textbf x)) = n Var(w_i) Var(x_i) Var(f(x))=nVar(wi)Var(xi)

我们发现,输出的方差是和输入的方差是一个线性倍数关系。假设 z i z^i zi是第 i i i层的输入向量, s i s^i si是第 i i i层激活函数的输入, f f f表示激活函数

s i = z i W i + b i z i + 1 = f ( s i ) s i + 1 = z i + 1 W i + 1 + b i + 1 \\textbf s^i = \\textbf z^i W^i + \\textbf b^i \\\\ \\textbf z^i+1 = f(\\textbf s^i)\\\\ \\textbf s^i+1 = \\textbf z^i+1 W^i+1 + \\textbf b^i+1 si=ziWi+bizi+1=f(si)si+1=zi+1Wi+1+bi+1

可以得到:
对于一个多层的网络,某一层的方差可以用累积的形式表达:
V a r [ z i ] = V a r [ x ] ∏ i ′ = 0 i − 1 n i ′ V a r [ W i ′ ] Var[z^i] = Var[x] \\prod_i'=0^i-1n_i' Var[W^i'] Var[zi]=Var[x]i=0i1niVar[Wi]

求反向我们可以得到(假设 f ′ ( s k i ) ≈

以上是关于深度学习方法(二十一):常用权重初始化方法Xavier,He initialization的推导的主要内容,如果未能解决你的问题,请参考以下文章

深度学习方法(二十一):常用权重初始化方法Xavier,He initialization的推导

深度学习完全攻略(连载二十一:目标检测方向深度学习技术路线总结)

常用深度学习模型调优方法

常用深度学习模型调优方法

python接口自动化测试二十一:类和方法

第二十一篇 数据增强