参数初始化

神经网络的参数初始化

在有 BN 层之后,网络的梯度弥散问题得到了缓解,但在 BN 层出现之前,缓解神经网络的梯度消失问题都要靠一个恰当的神经网络的初始值。

Xavier 初始化

注:本文符号均来自本人的带作:前馈神经网络

另:$n^{(l)}$ 表示 $l$ 层神经元个数

在 Xavier Glorot 的论文中,揭示了随着网络的加深,每一层的输出方差会不断减小,当方差小道一定程度时会出现梯度弥散的情况(如下式),训练难以继续。

为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等,即

假设激活函数为线性函数:

针对上式的一项求方差:

我们假设 $\mathbb E(\theta_i)=0,\mathbb E(w_i)=0$,则

那么

为了 $\text{Var}(a^{(l-1)})=\text{Var}(a^{(l)})$,则可以求出

而在反向传播中,也要保证

即:

则可以得出

有时,输入与输出的层数不一样,折中一下,最后我们令

根据方差,如果我们想令参数服从均匀分布 $\mathcal U$,根据均匀分布的性质,则可以得到:

Kaiming

差不多一个意思,只不过经过 ReLU 函数激活之后的 $a$,期望肯定不为 $0$,假设属于弱了一点。

推导过程可以看 👉这个

最后得出的结论是:均值为 $0$ 方差为 $2/n^{(l-1)} $ 或者均值为 $0$ 方差为 $2/n^{(l)} $ 的高斯分布。

激活函数的增益

激活函数几乎都不是线性的,那么就需要增益(Gain)来衡量 $\text{Var}(a^{(l})\&\text{Var}(z^{(l)})$ 之间的关系,主要用来修正Xavier 初始化参数的,详细看 👉这个