权重初始化的合理与否常常决定了训练时网络能否收敛。常用的神经网络权重初始化方法有xavier和msra。由于基于的激活函数的假设不一样,msra的方差是xavier的2倍。
xavier初始化基于线性激活函数,线性激活函数相当于没有激活函数。原始论文发表于2010年,当时卷积神经网络尚未被引爆,因此是基于多层感知器网络的。假使论文的读者以为是基于卷积神经网络,可能对其中的个别符号会有误解。例如在论文中,fin_in被标记为n(l)和n(l+1),这个标记默认了这一层fin_out等于下一层的fin_in。对于CNN中的某一个卷积层:
fin_in = k_h*k_w*c_in
fin_out=k_h*k_w*c_out(注:fin_out在卷积层的stride大于1时存疑)
前后层的卷积核尺寸差异会导致上面的条件不满足。只有在全连接网络,输入和输出特征图的空间尺寸是1x1,使得:
k_h=k_w=1
fin_in=c_in=n(l)
fin_out=c_out=n(l+1)
xavier初始化使用的是均匀分布:
对应的caffe实现代码: