如何开始一个网络训练,参数初始化方法。了解就行不是很重要。
初始化方法initialization Methods
如何开始一个训练?参数初始化是怎么进行的?
1.Gaussian N(0,1)
将CNN网络的所有参数都初始化为均值为0,标准差为1且符合高斯分布的方法,这种方法是十分naive的。同样的方法还有:
- 初始化为0;所有神经元梯度相同,参数最终相同
- 初始化均值为0,方差为1,且控制量纲 * 0.001;只适合浅层网络,随着网络层的传递,方差会减小,维持不住学习需要的信息量,出现数据塌缩
2.Xavier[2010]
2010年出现,最开始是为了无激活函数的网络和tanh来选的
s t d = 2 n u m i n + n u m o u t 方 差 由 c h a n n e l i n 和 c h a n n e l o u t 决 定 std = \sqrt {\frac {2}{num_{in} + num_{out}}} 方差由 channel_{in}和channel_{out}决定 std=numin+numout2方差由channelin和channelout决定
3.Kaiming(MSRA/He) [2015]
s t d = 2 n u m i n 方 差 由 c h a n n e l i n 决 定 std = \sqrt {\frac {2}{num_{in} }}方差由 channel_{in}决定 std=numin2方差由channelin决定
注:好的方法都是为了维护训练过程中保持足够的数据量,数据量就是由方差决定的,方差到0后将会失去梯度(偏离非线性层的中心位置),要保证一直有var。