1.Xaiver初始化
1.1 目标
每一层输出的方差应该尽量相等,每一层的梯度的方差也应该保持相同。那么,每一层的权重应该满足哪种条件。
1.2 结论
权重的方差应该满足:∀i,Var[Wi]=2nin+nout∀i,Var[Wi]=2nin+nout。其中,ninnin表示输入维度(n=channel×kernelh×kernelwn=channel×kernelh×kernelw),noutnout表示输出维度。
设计一个用于初始化参数的概率分布,这里使用均匀分布进行参数初始化。假设随机变量服从范围为[a,b][a,b]的均匀分布,那么它的方差为:σ=(b−a)212σ=(b−a)212。可以求得,最终把参数初始化成W→U[−6√nin+nout√,6√nin+nout√]W→U[−6nin+nout,6nin+nout]范围内的均匀分布。
2.MSRA初始化
2.1 目标
和Xavier初始化方法类似,只不过Xavier初始化方法假设激活函数是线性的,显然我们目前常用的ReLU和PReLU并不满足这一条件。
2.2 结论
MSRA初始化是高斯分布:W→G[0,4nin+nout−−−−−−√]W→G[0,4nin+nout]
3.应用
3.1结论
- sigmoid激活函数 + 均值0,方差1的高斯分布的权重初始化。
- ReLU激活函数 + xavier权重初始化/MSRA权重初始化。
- PReLU激活函数 + xavier权重初始化/MSRA权重初始化。
3.2 理由
sigmoid函数能够控制数据的幅度,在深层模型中,保证数据幅度不会太大。但sigmoid存在梯度消失问题,反向传播上有劣势。
ReLU函数不能控制数据的幅度,在深层模型中,数据的幅度有可能产生一定的不平衡,最终会影响模型的表现。但ReLU在反向传播方面可以把梯度传给后面的参数,优化效果更好。通过Xavier和MSRA的权重初始化,可以解决数值范围不稳定的问题。