据我所知,您给出的两个公式几乎都是标准初始化。我之前进行过文献综述,如果有兴趣,请在下面将其复制。
[1]解决了这个问题:
首先,权重不应设置为零,以免反向传播时破坏对称性:
偏移通常可以初始化为零,但是权重需要仔细初始化以打破同一层隐藏单元之间的对称性。因为不同的输出单元接收不同的梯度信号,所以这种对称破坏问题与输出权重(进入输出单元)无关,因此也可以将其设置为零。
一些初始化策略:
- [2]和[3]建议按扇入平方根的倒数进行缩放
- Glorot和Bengio(2010)以及《深度学习教程》结合了扇入和扇出:
- 对于S型单位:对具有的Uniform(-r,r)进行采样(fan-in是单位的输入)。r=6fan-in+fan-out−−−−−−−−−√
- 对于双曲正切单元:采样的Uniform(-r,r)(fan-in是单元的输入数量)。r=46fan-in+fan-out−−−−−−−−−√
- 对于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] Bengio,Yoshua。“ 基于梯度的深度架构培训的实用建议。 ”神经网络:交易技巧。Springer Berlin Heidelberg,2012年。437-478。
[2] LeCun,Y.,Bottou,L.,Orr,GB和Muller,K.(1998a)。高效的反向传播。在神经网络中,交易技巧。
[3] Glorot,Xavier和Yoshua Bengio。“ 了解训练深度前馈神经网络的难度。” 国际人工智能和统计会议。2010。