据我所知,您给出的两个公式几乎是标准初始化。前段时间我做了一篇文献综述,如果有兴趣,我将其复制在下面。
[1] 解决了这个问题:
首先,为了在反向传播时打破对称性,不应将权重设置为零:
偏差通常可以初始化为零,但需要仔细初始化权重以破坏同一层隐藏单元之间的对称性。因为不同的输出单元接收不同的梯度信号,这个对称性破坏问题不涉及输出权重(进入输出单元),因此也可以设置为零。
一些初始化策略:
- [2] 和 [3] 建议按扇入平方根的倒数进行缩放
- Glorot 和 Bengio (2010) 以及深度学习教程使用了扇入和扇出的组合:
- 对于 sigmoid 单元:使用 Uniform(-r, r) 采样 r =6扇入+扇出---------√ (扇入是单元的输入数量)。
- 对于双曲正切单位:使用 Uniform(-r, r) 采样 r = 46扇入+扇出---------√ (扇入是单元的输入数量)。
- 在 RBM 的情况下,具有大约 0.1 或 0.01 的小标准偏差的零均值高斯函数可以很好地初始化权重(Hinton,2010)。
- 正交随机矩阵初始化,即
W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)
然后u
用作您的初始化矩阵。
此外,在某些情况下,无监督的预训练可能会有所帮助:
一个重要的选择是是否应该使用无监督预训练(以及使用哪种无监督特征学习算法)来初始化参数。在大多数情况下,我们发现无监督的预训练会有所帮助,但很少会造成伤害,但这当然意味着额外的训练时间和额外的超参数。
一些 ANN 库也有一些有趣的列表,例如Lasagne:
Constant([val]) Initialize weights with constant value.
Normal([std, mean]) Sample initial weights from the Gaussian distribution.
Uniform([range, std, mean]) Sample initial weights from the uniform distribution.
Glorot(initializer[, gain, c01b]) Glorot weight initialization.
GlorotNormal([gain, c01b]) Glorot with weights sampled from the Normal distribution.
GlorotUniform([gain, c01b]) Glorot with weights sampled from the Uniform distribution.
He(initializer[, gain, c01b]) He weight initialization.
HeNormal([gain, c01b]) He initializer with weights sampled from the Normal distribution.
HeUniform([gain, c01b]) He initializer with weights sampled from the Uniform distribution.
Orthogonal([gain]) Intialize weights as Orthogonal matrix.
Sparse([sparsity, std]) Initialize weights as sparse matrix.
[1] 本吉奥,约书亚。“基于梯度的深度架构训练的实用建议。 ”神经网络:交易技巧。施普林格柏林海德堡,2012. 437-478。
[2] LeCun, Y.、Bottou, L.、Orr, GB 和 Muller, K. (1998a)。高效的反向传播。在神经网络中,交易技巧。
[3] 格洛罗特、泽维尔和约书亚·本吉奥。“了解训练深度前馈神经网络的难度。” 人工智能与统计国际会议。2010 年。