什么是神经网络中好的初始权重?

机器算法验证 神经网络 正常化
2022-01-22 00:23:45

我刚刚听说,从范围内选择神经网络的初始权重是个好主意,其中是给定神经元的输入数量。假设集合是标准化的 - 均值 0,方差 1(不知道这是否重要)。(1d,1d)d

为什么这是个好主意?

4个回答

我假设您正在使用逻辑神经元,并且您正在通过梯度下降/反向传播进行训练。

对于大的正输入或负输入,逻辑函数接近平坦。输入为时的导数约为,但在时,导数约为这意味着如果逻辑神经元的输入为,那么对于给定的训练信号,神经元的学习速度将比输入为倍。21/10101/220001022002

如果您希望神经元快速学习,您要么需要产生巨大的训练信号(例如使用交叉熵损失函数),要么希望导数很大。为了使导数变大,您可以设置初始权重,以便您经常获得范围内的输入。[4,4]

您给出的初始权重可能有效,也可能无效。这取决于输入的标准化方式。如果输入被归一化为均值和标准差,则项的随机总和具有均匀的权重将具有均值和方差,独立于之外的总和的概率很小。这意味着当你增加时,你不会导致神经元开始饱和,以至于它们不会学习。01d(1d,1d)013d[4,4]d

对于未标准化的输入,这些权重可能无法有效避免饱和。

[1] 解决了这个问题:

首先,为了在反向传播时打破对称性,不应将权重设置为零:

偏差通常可以初始化为零,但需要仔细初始化权重以破坏同一层隐藏单元之间的对称性。因为不同的输出单元接收不同的梯度信号,这个对称性破坏问题不涉及输出权重(进入输出单元),因此也可以设置为零。

一些初始化策略:

  • [2] 和 [3] 建议按扇入平方根的倒数进行缩放
  • Glorot 和 Bengio (2010) 以及深度学习教程使用了扇入和扇出的组合:
    • 对 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] 本吉奥,约书亚。基于梯度的深度架构训练的实用建议。 ”神经网络:交易技巧。施普林格柏林海德堡,2012. 437-478。

[2] LeCun, Y.、Bottou, L.、Orr, GB 和 Muller, K. (1998a)。高效的反向传播。在神经网络中,交易技巧

[3] 格洛罗特、泽维尔和约书亚·本吉奥。了解训练深度前馈神经网络的难度。” 人工智能与统计国际会议。2010 年。

以下解释摘自 Christopher Bishop 所著的《Neural Networks for Pattern Recognition》一书。好书!假设您之前已经白化了输入单元的输入,即

<xi>=0
<xi2>=1

问题是:如何最好地选择权重?这个想法是在一个分布之后随机选择权重值,这有助于优化过程收敛到一个有意义的解决方案。

您必须激活第一层中的单元其中现在,由于您独立于输入选择权重, 其中 sigma 是权重分布的方差。要得出这个结果,您需要记住权重是彼此独立初始化的,即

y=g(a)
a=i=0dwixi
<a>=i=0d<wixi>=i=0d<wi><xi>=0
<a2>=(i=0dwixi)(i=0dwixi)=i=0d<wi2><xi2>=σ2d
<wiwj>=δij

就像更新一样,深入研究整流器:超越人类水平的性能 n ImageNet 分类 He 等人介绍了一个初始化,专门用于初始化w = U([0,n]) * sqrt(2.0/n),其中nNN 的输入数量。我已经在最近的许多作品中看到了这种初始化(也与 ReLU 一起使用)。他们实际上展示了这如何开始比您提到的 (-1/n, 1/n) 更快地降低错误率。有关详尽的解释,请参阅论文,但这里是它的收敛速度: 22层大模型的收敛