权重初始化

错误:全零初始化
如果网络中的每个神经元都计算出同样的输出,然后它们就会在反向传播中计算出同样的梯度,从而进行同样的参数更新。换句话说,如果权重被初始化为同样的值,神经元之间就失去了不对称性的源头。

小随机数初始化
因此,权重初始值要非常接近0又不能等于0。
常用实现:W = 0.01 * np.random.randn(D,H),其中randn函数是均值为 0 的一个高斯分布

使用 1n 校准方差
上面做法存在一个问题,随着输入数据量的增长,随机初始化的神经元的输出数据的分布中的方差也在增大。我们可以除以输入数据量的平方根来调整其数值范围,这样神经元输出的方差就归一化到1了。
具体实现:W = np.random.randn(n) / sqrt(n)-

适用于 ReLU 神经元的初始化方法
根据论文 [1502.01852] Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification (arxiv.org) ,ReLU 网络中神经元的方差应该为 2n ,代码实现:
W = np.random.randn(n) * sqrt(2.0/n)

稀疏初始化(Sparse initialization
将所有权重矩阵设为0,同时每个神经元都同下一层固定数目的神经元随机连接(打破对称性)

偏置(biases)的初始化
通常将偏置初始化为 0,偶尔采用 0.01 这样的小数值常量

参考资料:CS231n课程笔记翻译:神经网络笔记 2 - 知乎 (zhihu.com)