为啥要将神经网络的权重初始化为随机数? [关闭]

Posted

技术标签:

【中文标题】为啥要将神经网络的权重初始化为随机数? [关闭]【英文标题】:Why should weights of Neural Networks be initialized to random numbers? [closed]为什么要将神经网络的权重初始化为随机数? [关闭] 【发布时间】:2013-11-30 09:52:38 【问题描述】:

我正在尝试从头开始构建神经网络。 在所有 AI 文献中,一致认为应将权重初始化为随机数,以使网络更快地收敛。

但是为什么神经网络的初始权重会被初始化为随机数呢?

我在某处读到,这样做是为了“打破对称性”,这使神经网络学习得更快。打破对称性如何让它学得更快?

将权重初始化为 0 不是更好的主意吗?这样权重就能够更快地找到它们的值(无论是正值还是负值)?

除了希望权重在初始化时接近最佳值之外,在随机化权重背后是否还有其他一些基本理念?

【问题讨论】:

这似乎更适合Cross Validated。 【参考方案1】:

在这里打破对称性是必不可少的,而不是出于性能的原因。想象一下多层感知器的前 2 层(输入层和隐藏层):

在前向传播过程中,隐藏层中的每个单元都会获得信号:

也就是说,每个隐藏单元的输入总和乘以相应的权重。

现在假设您将所有权重初始化为相同的值(例如零或一)。在这种情况下,每个隐藏单元将获得完全相同的信号。例如。如果所有权重都初始化为 1,则每个单元都会获得等于输入总和的信号(并输出 sigmoid(sum(inputs)))。如果所有的权重都为零,更糟糕的是,每个隐藏单元都会得到零信号。 无论输入是什么 - 如果所有权重都相同,则隐藏层中的所有单元也将相同

这是对称性的主要问题,也是您应该随机初始化权重(或者至少使用不同的值)的原因。请注意,此问题会影响使用每个对每个连接的所有体系结构。

【讨论】:

很好的解释。但是为什么使用symmetry这个词而不是correlation呢?谁先用了这个词? @nn0p:相关性意味着 2 个信号以相似的方向变化,但并非总是如此,而且幅度也不完全相同。至少据我所知,对称性没有正式的定义,在这里用于表示节点之间所有链路上的完全相同的信号,这使得训练毫无用处。 @ffriend 与我们使用 dropout 的情况相比,不需要随机化。我错了吗? @emanuele Dropout 本身就是一种随机化,所以是的,它应该可以工作。然而,在每次迭代中没有“退出”的所有连接仍然会得到对称更新,所以我猜学习会很慢,因此建议在任何实际网络中仍然使用随机初始化。 这很好地解释了正向传播,但是反向传播呢?【参考方案2】:

类比:

想象一下,有人把你从直升机上扔到了一个未知的山顶,你被困在那里。到处都是雾气。您唯一知道的是,您应该以某种方式下降到海平面。您应该采取哪个方向才能到达最低点?

如果您找不到通往海平面的路,那么直升机会再次带您到同一山顶位置。您将不得不再次采取相同的方向,因为您将自己“初始化”到相同的起始位置

但是,每次直升机将您降落在山上随机的某个地方时,您都会采取不同的方向和步骤。因此,您将有更好的机会达到最低点。

这就是打破对称性的意思。初始化是不对称这是不同的),因此您可以为同一问题找到不同的解决方案。

在这个类比中,你降落的地方是重量。因此,使用不同的权重,到达最低(或更低)点的机会更大。

此外,它增加了系统中的,因此系统可以创建更多信息来帮助您找到较低的点(局部或全局最小值)。

【讨论】:

似乎直升机在山上的某个地方随机降落了几次,但是在深度学习中,我们只是随机初始化权重一次。 这是一个真正直观的解释。我们还应该注意 NN 几乎从不凸 - 所以随机化是理想的方法 - 但是如果你有一个凸损失函数,那么你将权重初始化为什么当然无关紧要。 这是一个很好的类比——但假设你和你的朋友被丢在山上(即网络中的节点)更有意义——无论是在同一个地方,还是在不同地方的不同人.并假设你们都可以相互交流。具有通信的不同地点将允许更快的下降。同一地点意味着每个人都可能走同一条路。【参考方案3】:

答案很简单。基本的训练算法本质上是贪心的——它们没有找到全局最优解,而是——“最近的”局部解。结果,从任何固定的初始化开始,您的解决方案都会偏向于一组特定的权重。如果您随机执行(并且可能多次执行),那么您被卡在错误表面的某些奇怪部分的可能性要小得多。

同样的论点适用于其他无法找到全局最优值的算法(k-means、EM 等),也不适用于全局优化技术(如 SVM 的 SMO 算法)。

【讨论】:

那么,不能保证仅仅通过随机化就不会陷入局部最小值吗?但是在使用不同的随机权重多次运行后,它可能会得到全局最小值? 无法保证,但多次初始化至少可以帮助接近真正的最优值。 是否有任何标准公式或规​​则来设置值以初始化权重?我有前馈、多层、反向传播神经网络,其中使用了 sigmoid 函数。 在 S.Haykin 的书“神经网络”中有一些经验法则 这不是人们使用随机初始化的原因,因为大多数人不会使用不同的随机初始化多次重新开始训练,并且网络仍然能够达到良好的局部最优。【参考方案4】:

正如您所提到的,关键是打破对称性。因为如果将所有权重初始化为零,那么神经网络中的所有隐藏神经元(单元)都将进行完全相同的计算。这不是我们想要的,因为我们想要不同的隐藏单元来计算不同的函数。但是,如果将全部初始化为相同的值,则这是不可能的。

【讨论】:

【参考方案5】:

    将权重初始化为 0 不是更好的主意吗?这样权重就能够更快地找到它们的值(无论是正值还是负值)?

    打破对称性如何让它学得更快?

如果将所有权重初始化为零,则所有层的所有神经元都会执行相同的计算,从而提供相同的输出,从而使整个深度网络无用。如果权重为零,则整个深度网络的复杂度将与单个神经元的复杂度相同,并且预测将无异于随机。

在连接到相同输入的隐藏层中并排的节点必须具有不同的权重,以便学习算法更新权重。

通过将权重设为非零(但接近 0,如 0.1 等),该算法将在下一次迭代中学习权重并且不会卡住。这样一来,对称性就被打破了。

    除了希望权重在初始化时接近最佳值之外,在随机化权重背后是否还有其他一些基本理念?

随机优化算法(如随机梯度下降)在选择搜索起点和搜索过程中使用随机性。

神经网络的搜索或学习过程称为收敛。发现次优解或局部最优会导致过早收敛。

如果您使用不同的随机权重多次运行算法,而不是依赖于一个局部最优值,则很有可能找到全局最优值而不会陷入局部最优值。

2015 年后,由于机器学习研究的进步,He-et-al Initialization 被引入以取代 随机初始化

w=np.random.randn(layer_size[l],layer_size[l-1])*np.sqrt(2/layer_size[l-1])

权重仍然是随机的,但范围取决于前一层神经元的大小。

总之,非零随机权重对我们有帮助

    走出局部最优 打破对称性 在进一步的迭代中达到全局最优

【讨论】:

【参考方案6】:

让我们更加数学化。事实上,我回答的原因是我发现其他答案中缺少这一点。 假设你有 2 层。如果我们看一下反向传播算法,

dZ2 = A2 - Y

dW2 = (1/m) * dZ2 * A2.T

让我们忽略 db2。 (对不起,对不起;))

dZ1 = W2.T * dZ2 .* g1'(Z1)

...

您看到的问题以粗体显示。计算 dZ1(计算 dW1 需要它)有 W2,它是 0。我们从来没有机会将权重更改为 0 以外的任何值,而且我们永远也不会。所以本质上,神经网络并没有学到任何东西。我认为它比逻辑回归(单个单元)更糟糕。在逻辑回归的情况下,由于 X 得到不同的输入,您可以通过更多的迭代来学习。在这种情况下,其他层总是给出相同的输出,所以您根本不需要学习。

【讨论】:

【参考方案7】:

除了用随机值初始化外,初始权重不应以大值开始。这是因为我们经常在隐藏层和输出层使用 tanh 和 sigmoid 函数。如果您查看这两个函数的图,在第一次迭代的前向传播之后会产生更高的值,并且这些值对应于 sigmoid 和 tanh 函数中将导数收敛到零的位置。这导致学习过程的冷启动和学习时间的增加。因此,如果您随机开始权重,则可以通过将这些值乘以“0.01”或“0.001”等值来避免这些问题。

【讨论】:

【参考方案8】:

首先,一些算法即使在初始权重为零的情况下也会收敛。一个简单的例子是线性感知器网络。当然,许多学习网络需要随机初始权重(尽管这不能保证获得最快和最好的答案)。

神经网络使用反向传播来学习和更新权重,问题是在这种方法中,权重收敛到局部最优(局部最小成本/损失),而不是全局最优.

随机加权帮助网络在可用空间中为每个方向抓住机会并逐渐改进它们以得出更好的答案,并且不限于一个方向或回答。

[下图显示了如何收敛的一维示例。给定初始位置,实现了局部优化,但不是全局优化。在更高的维度上,随机加权可以增加处于正确位置或更好地开始的机会,从而使权重收敛到更好的值。][1]

[1]:https://i.stack.imgur.com/2dioT.png [Kalhor, A. (2020)。分类和回归神经网络。讲座。]

最简单的情况下,新的权重如下:

W_new = W_old + D_loss

这里将代价函数梯度与之前的权重相加得到新的权重。如果之前的所有权重都相同,那么在下一步中所有权重可能相等。结果,在这种情况下,从几何的角度来看,神经网络向一个方向倾斜,并且所有的权重都相同。但如果权重不同,则可以按不同的量更新权重。 (取决于每个权重对结果的影响因子,它会影响权重的成本和更新。所以即使初始随机权重的一个小错误也可以解决)。

这是一个非常简单的例子,但它显示了随机加权初始化对学习的影响。这使神经网络能够去不同的空间而不是去一侧。结果,在学习的过程中,去这些空间中发挥最大的作用

【讨论】:

【参考方案9】:

我学到了一件事:如果将权重初始化为零,很明显同一层中的激活单元将是相同的,这意味着它们将具有相同的值。当你进行 backbrop 时,你会发现梯度 dW 的所有行也是相同的,因此在梯度下降更新后权重矩阵 W 的所有行都是相同的。一般来说,将所有权重初始化为零会导致网络无法打破对称性。这意味着每一层中的每个神经元都将学习相同的东西,并且您还不如为每一层使用n[l]=1n[l]=1 训练一个神经网络,并且该网络并不比逻辑回归等线性分类器强大。 吴恩达课程:

【讨论】:

以上是关于为啥要将神经网络的权重初始化为随机数? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

谈谈神经网络权重为什么不能初始化为0

粒子群算法用matlab做,要把粒子初始化为矩阵要怎么做

权重初始化的常见方法

深度学习训练技巧---权重初始化

机器学习随机初始化思想神经网络总结

在C语言中,为啥定义变量的时候总是初始化为0呢?该怎么理解。