我刚刚听说,从范围内选择神经网络的初始权重是个好主意,其中是给定神经元的输入数量。假设集合是标准化的 - 均值 0,方差 1(不知道这是否重要)。
为什么这是个好主意?
我刚刚听说,从范围内选择神经网络的初始权重是个好主意,其中是给定神经元的输入数量。假设集合是标准化的 - 均值 0,方差 1(不知道这是否重要)。
为什么这是个好主意?
我假设您正在使用逻辑神经元,并且您正在通过梯度下降/反向传播进行训练。
对于大的正输入或负输入,逻辑函数接近平坦。输入为时的导数约为,但在时,导数约为。这意味着如果逻辑神经元的输入为,那么对于给定的训练信号,神经元的学习速度将比输入为倍。
如果您希望神经元快速学习,您要么需要产生巨大的训练信号(例如使用交叉熵损失函数),要么希望导数很大。为了使导数变大,您可以设置初始权重,以便您经常获得范围内的输入。
您给出的初始权重可能有效,也可能无效。这取决于输入的标准化方式。如果输入被归一化为均值和标准差,则项的随机总和具有均匀的权重将具有均值和方差,独立于。之外的总和的概率很小。这意味着当你增加时,你不会导致神经元开始饱和,以至于它们不会学习。
对于未标准化的输入,这些权重可能无法有效避免饱和。
[1] 解决了这个问题:
首先,为了在反向传播时打破对称性,不应将权重设置为零:
偏差通常可以初始化为零,但需要仔细初始化权重以破坏同一层隐藏单元之间的对称性。因为不同的输出单元接收不同的梯度信号,这个对称性破坏问题不涉及输出权重(进入输出单元),因此也可以设置为零。
一些初始化策略:
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 年。
以下解释摘自 Christopher Bishop 所著的《Neural Networks for Pattern Recognition》一书。好书!假设您之前已经白化了输入单元的输入,即和
问题是:如何最好地选择权重?这个想法是在一个分布之后随机选择权重值,这有助于优化过程收敛到一个有意义的解决方案。
您必须激活第一层中的单元其中。现在,由于您独立于输入选择权重, 和其中 sigma 是权重分布的方差。要得出这个结果,您需要记住权重是彼此独立初始化的,即
就像更新一样,深入研究整流器:超越人类水平的性能 n ImageNet 分类 He 等人介绍了一个初始化,专门用于初始化w = U([0,n]) * sqrt(2.0/n)
,其中n
NN 的输入数量。我已经在最近的许多作品中看到了这种初始化(也与 ReLU 一起使用)。他们实际上展示了这如何开始比您提到的 (-1/n, 1/n) 更快地降低错误率。有关详尽的解释,请参阅论文,但这里是它的收敛速度: