为什么神经网络的权值要初始化为随机数?

我正在尝试从头开始建立一个神经网络。 Across all AI literature there is a consensus that weights should be initialized to random numbers in order for the network to converge faster.

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

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

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

除了希望权重在初始化时接近最佳值之外,随机化权重背后还有其他一些潜在的哲学吗?

61915 次浏览

答案很简单。基本的训练算法本质上是贪婪的——它们不会找到全局最优,而是找到“最近的”局部解。因此,从任何固定的初始化开始,都会使您的解决方案偏向于某个特定的权重集。如果你是随机的(可能是很多次) ,那么你就不太可能会陷入错误表面的某个奇怪的部分。

The same argument applies to other algorithms, which are not able to find a global optimum (k-means, EM, etc.) and does not apply to the global optimization techniques (like SMO algorithm for SVM).

Breaking symmetry is essential here, and not for the reason of performance. Imagine first 2 layers of multilayer perceptron (input and hidden layers):

enter image description here

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

enter image description here

That is, each hidden unit gets sum of inputs multiplied by the corresponding weight.

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

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

类比:

想象一下,有人把你从直升机上扔到一个不知名的山顶上,你被困在那里。到处都是雾。你只知道你应该设法下到海平面。下到 最低点应该走哪个方向?

如果你不能到达海平面,直升机会再次把你送到同一个山顶。你将不得不采取相同的方向再次,因为你是 “初始化”自己到相同的起始位置。

然而,每次直升机把你随机降落在山上的某个地方,你都会采取不同的方向和步骤。所以,你会有更好的机会到达最低点。

这就是 打破了对称性的含义。初始化是不对称的(这是不同的) ,所以您可以为同一个问题找到不同的解决方案。

在这个比喻中,你着陆的地方是 体重。因此,不同的重量,有一个更好的机会达到最低(或更低)点。

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

enter image description here

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

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

  2. 打破对称性如何使它学得更快?

如果将所有权值初始化为零,那么所有层的所有神经元执行相同的计算,通过生成 整个深网都没用得到相同的输出。如果权重为零,那么整个深层网络的复杂度将与 single neuron相同,预测结果也只能是随机的。

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

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

  1. 除了希望权重在初始化时接近最佳值之外,随机化权重背后还有其他一些潜在的哲学吗?

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

神经网络的搜索或学习的过程称为收敛。发现次优解或局部最优结果进入早熟收敛。

如果使用不同的随机权重多次运行算法,而不是依赖于一个局部最优解,那么找到全局最优解的可能性最大,而不会陷入局部最优解。

2015年后,由于机器学习研究的进步,引入了 初始化n 来取代 随机初始化

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

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

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

  1. 从本地乐队出来
  2. 打破对称
  3. 在进一步迭代中达到全局最优

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

Let be more mathematical. In fact, the reason I answer is that I found this bit lacking in the other answers. 假设你有2层。如果我们看看反向传播算法,

DZ2 = A2-Y

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

Let's ignore db2. (Sorry not sorry ;) )

DZ1 = W2.T * dZ2. * g1’(Z1)

...

你看到的问题是粗体的。计算 dZ1(这是计算 dW1所必需的)中的 W2是0。我们从来没有机会改变权重,以任何超过0,我们永远不会。基本上,神经网络学不到任何东西。我认为它比 Logit模型(单个单位)更糟糕。在 Logit模型的情况下,由于 x 的不同输入,你需要进行更多的迭代来学习。在这种情况下,其他层总是提供相同的输出,所以你根本不学习。

我学到了一件事: 如果你将权重初始化为零,很明显,同一层中的激活单元将是相同的,这意味着它们将具有相同的值。当你进行 backbrop 时,你会发现渐变 dW 的所有行都是相同的,因此权重矩阵 w 的所有行在梯度下降法更新后都是相同的。通常,将所有权值初始化为零会导致网络不能打破对称性。这意味着每一层中的每个神经元都会学习相同的东西,你也可以为每一层训练一个使用 n[l]=1n[l]=1的神经网络,而这个网络并不比线性分类器(如 Logit模型)更强大。 Andrew Ng course:

首先,有些算法即使初始权重为零也会收敛。一个简单的例子是线性感知器网络。当然,许多学习网络需要随机的初始权重(尽管这是 not a guarantee of getting the fastest and best的答案)。

神经网络采用反向传播的方法来学习和更新权值,但问题是这种方法的局部最小费用/损失不是全局最优的。

随机加权 帮助电视台抓住机会为每个方向的可用空间,逐步提高他们得到的答案和 不限于一个方向或答案比较好。

[下面的图片展示了一个一维的例子。给定初始位置,可以实现局部优化,但不能实现全局优化。在更高的维度,随机加权可以增加在正确的地方或开始更好的机会,导致权重收敛到更好的值。][1]

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

In the simplest case, the new weight is as follows:

W_new = W_old + D_loss

这里的成本函数梯度被添加到以前的权重,以获得一个新的权重。如果前面的所有权重都相同,那么在下一步中,所有权重可能都相等。因此,在这种情况下,从几何的角度来看,神经网络是倾向于一个方向,所有的权重是相同的。但是如果权重不同,则可以更新不同数量的权重。(视乎每个权重对结果的影响因素而定,它会影响权重的成本和更新。因此,即使初始随机加权的一个小误差也可以得到解决)。

这是一个非常简单的例子,但它显示了随机加权初始化对学习的影响。这使得神经网络能够去不同的空间,而不是去一边。因此,在学习的过程中,要充分利用这些空间