神经网络的参数初始化
在有 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 初始化参数的,详细看 👉这个。