Backto DeepCV
模型选好了,在训练之前,那么多的 w w w 和 b b b 该如何初始化呢?trial & error,试错中前行
全部置为 0
超级省事,但是 absolutely wrong!所有参数都是 0 ,还是所有的神经元步调完全一致,怎么训练,怎么梯度下降?
随机初始化为近 0 值
哎,这还靠谱些。比如指定, w ∼ N ( 0 , 1 ) w \sim N(0,1) w∼N(0,1), N ( 0 , 1 ) N(0,1) N(0,1) 是均值为0,方差为1 的高斯分布或正太分布(差别不大)。
校准方差
上面的建议不错,但是神经元output的方差正比于input的个数。这个影响还是蛮大的,需要校准一下。
# calibrating the variances with 1/sqrt(n)
w = np.random.randn(n) / sqrt(n)
对于使用 ReLU 作为激活函数的形式,建议采用
# current recommendation
w = np.random.randn(n) * sqrt(2.0/n)
至于为什么ReLU 中是这样,移步 Kaiming He 大神的论文.