在反向传播中将所有初始权重设置为零的危险


30

为什么用零初始化权重是危险的?有没有简单的例子可以证明这一点?


似乎经典的XOR 2-1网络就是一个很好的例子,但是我会喜欢一些理论上的推理。
user8078 2012年

1
一个非常普遍的答案(在这里可能适用或可能不适用)是,每当新权重是旧权重的倍数时,就不能更改零权重。这对学习是致命的。
尼克·考克斯

为什么不将权重初始化为零,已经有很好的答案。以下链接进一步阐明了“应如何选择初始权重?”。staff.itee.uq.edu.au/janetw/cmc/chapters/BackProp/index2.html希望对其他读者有所帮助。
doer_uvc'2

@NickCox此处的权重是下一层权重的倍数,而最后一层不是其他任何权重的倍数-因此此处不适用。
David Refaeli

Answers:


21

编辑请参见下面的alfa评论。我不是神经网络方面的专家,所以请顺便告诉他。

我的理解与此处发布的其他答案不同。

我很确定反向传播会涉及增加现有权重,而不是相乘。您添加的数量由增量规则指定。请注意,wij不会出现在等式的右侧。

我的理解是,至少有两个充分的理由不将初始权重设置为零:

  • 首先,神经网络倾向于陷入局部极小值,因此为它们提供许多不同的初始值是一个好主意。如果它们都从零开始,则不能这样做。

  • 其次,如果神经元以相同的权重开始,则所有神经元将遵循相同的梯度,并且最终总是会做彼此相同的事情。


6
“您添加的数量由增量规则指定。请注意,wij不会出现在等式的右侧。” -这仅适用于没有隐藏层的神经网络!但是您提到了另外两点,这是反对以相等权重初始化ANN的良好论据。
alfa 2012年

1
我认为这主要是第二个原因-例如,在基本的完全连接的前馈网络中,如果每个层都使用相同的权重进行初始化,那么正如您所建议的,所有节点都遵循相同的路径并且是冗余的。我的印象是,大多数具有少数功能的网络都不会在局部极小的情况下挣扎。另外,仅凭随机初始化并不能防止网络阻塞,但是反复使用不同的随机初始化将提示您特定的迭代是否存在局部最小值问题(我认为这是隐含的,但不是明确的)。
塔罗尔

第二个原因是假的?open.wolframcloud.com/env/...
user3180

不同的输入打破了重量的对称性
user3180

添加导数,则导数是通过链规则使用的乘法。
David Refaeli

7

如果您认为权重是先验的,例如在贝叶斯网络中,那么您就排除了那些输入可能影响系统的任何可能性。另一个解释是,反向传播可以识别一组权重,以最小化目标值和观测值(E)之间的加权平方差。那么,如何在确定系统方向方面定向任何梯度下降算法?您将自己置于参数空间的鞍点上。


1
这是最好的答案。这是一个鞍点。基于反向传播的优化算法通常会立即停止。为了计算梯度,我们将增量与权重相乘,结果将始终为零。
alfa 2012年

我认为这是一个很好的答案,为什么不应该将任何特定的权重初始化为0。但是增量可能仍会传播回来-输出层中的权重并不取决于权重,因此这里的权重将为非零第一次更新后。在下一次更新之后,这些非零权重将与增量一起使用,以调整上一层的权重,依此类推。我认为初始化全0的网络的更大问题是它们的权重相同,在您的基本完全连接的前馈网络中,等效于每层1个节点。
塔罗尔

6

在反向传播算法的每次迭代中,您将通过将现有权重乘以由反向传播确定的增量来更新权重。如果初始权重值为0,则将其乘以任何增量值都不会更改权重,这意味着每次迭代都不会影响您要优化的权重。


2
>您将通过将现有权重乘以反向传播确定的值来更新权重-我认为并非如此,这不只是乘法。
user8078'4

1
我的一般观点是,如果初始权重为零,则在每次反向传播迭代后它们将保持为零。
Idr 2012年

“通过反向传播确定的值”是一个增量(例如参见原始论文“通过反向传播误差学习表示”,等式7)。答案措辞很差,但这不是完全错误的。
alfa 2012年

1
这只是一个错误的答案。权重会改变,但它们会一起改变。这很不好,因为在整个训练过程中所有隐藏的单元都将是相同的,并且不会发生学习。
Amin Sammara

我认为这取决于激活功能。如果选择tanh,则最终输出将为0,因此最终图层权重将为0,所有其他权重也将为0。但是,如果你选择一个对数,最终输出将是,因而权重的最终梯度不会是0,最终所有其他权重将也不会是0θ(0)=0.5
大卫Refaeli

2

在我看来,将权重初始化为相同值(不只是零)很不好的一个原因是,对于任何特定的隐藏层,该层中的所有节点将具有完全相同的输入,因此将保持与每个相同其他。


1

答案不完全是“局部最小值/最大值”。

当您有1个以上的“隐藏层”并且每个权重均为0时,无论Weight_i的大小是多少,都不会导致输出的变化。

这是因为增量Weight_i将被下一个隐藏层吸收。

当输出没有变化时,就没有梯度,因此就没有方向。

这与“局部最小值/最大值”具有相同的特征,但实际上是由于0的原因,这在技术上有所不同


0

将所有权重初始化为零的主要问题是数学上导致神经元值为零(对于多层)或增量为零。@alfa在上述答案中的评论之一中已经提供了提示,其中提到权重和增量的乘积需要为零。这实质上意味着,对于梯度下降而言,它位于山峰顶部的山顶上,并且无法破坏对称性。随机性将打破这种对称性,并且将达到局部最小值。即使我们稍微干扰一下重量,我们也会步入正轨。参考:从数据中学习第10课。


0

这是个坏主意,原因有两个:

  1. g(0)0

  2. tanhg(0)=0

让我们演示一下(为简单起见,我假设最终输出层为1个神经元):

tanh

LaLzL=WLaL1WL

dWL:=LWL=LaLaLzLzLWL
La is the derivative of the cost function, az is the derivative of the activation function. Regardless of what their (Laaz) value is, zW simply equals to the previous layer outputs, i.e. to aL1, but since they are all the same, you get that the final result dWL is a vector with all element equal. So, when you'll update WL=WLαdWL it will move in the same direction. And the same goes for the previous layers.

Point 2 can be shown from the fact that aL1 will be equal to zero's. Hence your dWL vector will be full of zeros, and no learning can be achieved.

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.