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


105

我正在尝试从头开始构建神经网络。在所有AI文献中都达成共识,即权重应初始化为随机数,以使网络收敛更快。

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

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

将权重初始化为0会不是一个更好的主意?这样,权重就能更快地找到其值(正负)。

除了希望权重在初始化时会接近最佳值之外,还有其他一些潜在的基本原理吗?


7
这似乎更适合交叉验证
Sycorax

Answers:


140

此处,打破对称性至关重要,而不是出于性能原因。想象一下多层感知器的前2层(输入层和隐藏层):

在此处输入图片说明

在正向传播期间,隐藏层中的每个单元都会收到信号:

在此处输入图片说明

即,每个隐藏单元获得的输入总和乘以相应的权重。

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

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


1
很好的解释。但是,为什么用这个词symmetry不是correlation?谁首先使用了这个词?
nn0p '16

1
@ nn0p:相关性意味着2个信号沿相似方向变化,但并不总是且幅度也不完全相同。至少据我所知,对称性没有形式上的定义,在这里用来表示节点之间所有链路上完全相同的信号,这使得训练毫无用处。
ffriend

@ffriend比在我们使用辍学的情况下,不再需要随机化。我错了吗?
emanuele

1
@emanuele Dropout本身是一种随机化,所以是的,它应该起作用。但是,所有在每次迭代中都不会“丢失”的连接仍将得到对称更新,因此我认为学习会很慢,因此建议在任何实际网络中仍使用随机初始化。
ffriend

这很好地解释了前向道具,但是后向道具呢?
泽尔

74

比喻:

我希望这是一个很好的类比。我试图解释得尽可能简单。

想象一下有人将您从直升飞机上摔落到一个未知的山顶上,而您被困在那里。到处都是雾。您唯一知道的就是应该以某种方式下降到海平面。您应该朝哪个方向下降到最低点?

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

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

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

用这个比喻,重量就是您着陆的地方。因此,使用不同的权重,有更好的机会达到最低(或更低)的点。

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

在此处输入图片说明


10
看来,直升机会几次随机将您降落在山上的某个地方,但是在深度学习中,我们只是随机地将砝码初始化一次。

1
这是一个真正的直观解释。我们还应该注意,NN几乎永远不会是凸的-因此,进行随机化是理想的方法-但是,如果您具有凸损失函数,那么将权重初始化为什么当然都没关系。
金兹

4
这是一个很好的类比-但假设您和您的朋友被丢在山上(即网络中的节点)(在同一地点或在不同地点的不同人)更有意义。并假设你们都可以互相交流。与通信的不同地点将允许更快的下降。同一地点意味着每个人都可能走同一条路。
ahmedhosny

26

答案很简单。基本训练算法本质上是贪婪的-它们没有找到全局最优值,而是“最接近”的局部解。结果,从任何固定的初始化开始,会使您的解决方案偏向一组特定的权重。如果您随机(并且可能多次)执行此操作,那么您将更难陷入错误表面的某些怪异部分。

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


因此,不能保证仅通过随机化就不会陷入局部最小值吗?但是在以不同的随机权重进行多次运行后,它可能会获得全局最小值吗?
Shayan RC

1
没有保证,但是多次初始化至少可以帮助达到真正的最佳值。
lejlot

是否有任何标准公式或规​​则来设置值以初始化权重?我有前馈,多层,反向传播神经网络,其中使用了S型函数。
lkkkk 2014年

在S.Haykin的书“神经网络”中有一些经验法则
lejlot 2014年

3
这不是人们使用随机初始化的原因,因为大多数人不会使用不同的随机初始化多次重启训练,并且网络仍然能够达到良好的局部最优。
cesarsalgado 2015年

4

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


2
  1. 将权重初始化为0会不是一个更好的主意?这样,权重就能更快地找到其值(正负)。

  2. 如何打破对称性使其学习更快?

如果将所有权重初始化为零,则所有层的所有神经元都会执行相同的计算,并通过使整个深网变得用来提供相同的输出。如果权重为零,则整个深网的复杂度将与单个神经元的复杂度相同并且预测将不会比随机更好。

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

通过将权重设置为非零值(但接近零,例如0.1等),该算法将在下一次迭代中学习权重,并且不会卡住。这样,发生了破坏对称的情况。

  1. 除了希望权重在初始化时会接近最佳值之外,还有其他一些潜在的基本原理吗?

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

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

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

2015年后,由于机器学习研究的进步, 引入了He-et-al Initializatio n来代替随机初始化

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

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

总之,非零随机权重可以帮助我们

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

1

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


1

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

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

随机加权可帮助网络把握可用空间中每个方向的机会,并逐步改善它们以获得更好的答案,而不仅限于一个方向或答案。

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

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

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

W_new = W_old + D_loss

在这里,成本函数梯度将添加到先前的权重中以获得新的权重。如果所有先前的权重都相同,则在下一步中所有权重都可以相等。结果,在这种情况下,从几何角度来看,神经网络在一个方向上倾斜并且所有权重都相同。但是,如果权重不同,则可以将权重更新不同的数量。(取决于每个权重对结果的影响因素,它会影响成本和权重的更新。因此,甚至可以解决初始随机权重中的一个小误差)。

这是一个非常简单的示例,但是它显示了随机加权初始化对学习的影响。这使神经网络可以转到不同的空间,而不是一侧。结果,在学习过程中,请充分利用这些空间


0

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

dZ2 = A2-Y

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

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

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

...

您看到的问题以粗体显示。计算dZ1(计算dW1所需)的W2为0。我们永远没有机会将权重更改为大于0的任何值,而我们永远也不会。因此,从本质上讲,神经网络不会学习任何东西。我认为这比逻辑回归(单个单元)差。在逻辑回归的情况下,由于使用X获得不同的输入,因此您可以进行更多的迭代学习。在这种情况下,其他层始终提供相同的输出,因此您根本不会学习。


0

我学到了一件事:如果将权重初始化为零,很显然同一层中的激活单位将相同,这意味着它们将具有相同的值。当您进行反向跳转时,您会发现梯度dW的所有行也都相同,因此权重矩阵W的所有行在梯度下降后都相同。通常,将所有权重初始化为零会导致网络无法打破对称性。这意味着每一层中的每个神经元都将学习相同的东西,并且您可能还需要n[l]=1n[l]=1为每一层训练一个神经网络,并且该网络没有像逻辑回归这样的线性分类器强大。吴镇宇课程:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.