Xavier 初始化方法

Standard Init

WU[1n,1n]W \sim U[-\frac{1}{\sqrt{n}}, \frac{1}{\sqrt{n}}]

其中 nin_i 是第 i 层的输入节点。

在 Xavier Init 提出前,一般用 unsupervised pre-trainning 和 greedy layer-wise procedure 来训练神经网络。

Xavier Init

WU[6ni+ni+1,6ni+ni+1]W \sim U[-\frac{\sqrt 6}{\sqrt{n_i + n_{i+1}}}, \frac{\sqrt 6}{\sqrt{n_i + n_{i+1}}}]

其中 nin_i, n_{i+1}​ 是第 i 层的输入、输出节点,以下是推导过程。

推导过程

卷积层的输入层 zi=iwixi+bz_i = \sum_i w_i \cdot x_i + b,输出为 yi=f(zi)y_i = f(z_i)

根据概率公式,w_i x_i​ 的方差可以展开为

Var(wixi)=E[wi]2Var(xi)+E[xi]2Var(wi)+Var(wi)Var(xi)Var(w_ix_i)=E[w_i]^2Var(x_i)+E[x_i]^2Var(w_i)+Var(w_i)Var(x_i)

假设输入xix_i 和权重 wiw_i 的均值都为 0,上式可以简化为

Var(wixi)=Var(wi)Var(xi)Var(w_i x_i) = Var(w_i)Var(x_i)

假设输入 xx 和权重 ww 独立同分布,则有

Var(y)=niVar(wi)Var(xi)Var(y) = n_i Var(w_i)Var(x_i)

由约束条件:【输入输出方差一致】,推导出

Var(wi)=1niVar(w_i)=\frac{1}{n_i}

对一个多层网络,某一层的方差,可以用累积的形式表达

Var[zi]=Var[x]i=0i1niVar[Wi]Var[z^i] = Var[x] \prod_{i'=0}^{i-1}n_{i'}Var[W^{i'}]

反向传播计算梯度,也有类似的形式

Var[Costyi]=Var[Costyd]i=idni+1Var[Wi]Var[\frac{\partial Cost}{\partial y^i}] = Var[\frac{\partial Cost}{\partial y^d}] \prod_{i'=i}^{d}n_{i'+1} Var[W^{i'}]

由约束条件:【前向传播与反向传播每一层的方差一致】,推导出

i,niVar[Wi]=1i,ni+1Var[Wi+1]=1\begin{aligned} \forall i, n_i &Var[W^i]=1\\ \forall i, n_{i+1} &Var[W^{i+1}]=1 \end{aligned}

一般输入输出节点不相等,作为权衡有

i,Var[Wi]=2ni+ni+1\forall i, Var[W^i]=\frac{2}{n_i + n_{i+1}}

由统计学定公式,X​ 在 [a,b]​ 区间均匀分布,方差为

Var[X]=(ba)212Var[X]=\frac{(b-a)^2}{12}

推导出 Xavier 初始化公式,符合正态分布

WU[6ni+ni+1,6ni+ni+1]W \sim U[-\frac{\sqrt 6}{\sqrt{n_i + n_{i+1}}}, \frac{\sqrt 6}{\sqrt{n_i + n_{i+1}}}]

本文有帮助?