为什么用零初始化权重很危险?有没有简单的例子来证明它?
在反向传播中将所有初始权重设置为零的危险
编辑见下面阿尔法的评论。我不是神经网络方面的专家,所以我会听从他的意见。
我的理解与此处发布的其他答案不同。
我很确定反向传播涉及增加现有权重,而不是相乘。您添加的数量由delta 规则指定。请注意,wij 不会出现在等式的右侧。
我的理解是,至少有两个充分的理由不将初始权重设置为零:
首先,神经网络往往会陷入局部最小值,因此给它们提供许多不同的起始值是个好主意。如果它们都从零开始,你就不能这样做。
其次,如果神经元以相同的权重开始,那么所有神经元将遵循相同的梯度,并且最终总是会彼此做同样的事情。
如果您将权重视为先验,就像在贝叶斯网络中一样,那么您已经排除了这些输入可能影响系统的任何可能性。另一种解释是,反向传播确定了一组权重,它使目标值和观测值 (E) 之间的加权平方差最小化。那么任何梯度下降算法如何在确定系统方向方面进行定向呢?您将自己置于参数空间的鞍点上。
这是一个坏主意,原因有两个:
如果你有 sigmoid 激活,或者任何那么它会导致权重“一起”移动,限制反向传播的能力来搜索整个空间以找到降低损失/成本的最佳权重.
如果你有或 ReLu 激活,或者的任何东西,那么所有的输出都将为 0,权重的梯度将始终为 0。因此你根本不会有任何学习。
让我们演示一下(为简单起见,我假设最终输出层为 1 个神经元):
前馈:如果所有权重均为 0,则第二层的输入对于所有节点都是相同的。节点的输出将是相同的,尽管它们将乘以下一组权重为 0,因此下一层的输入将为 0 等等。所以所有的输入(除了第一个接受实际输入的层)将为 0,所有输出都将相同(sigmoid 激活为 0.5,和 ReLu 激活为 0)。
反向传播:让我们只检查最后一层。最终损失 ( ) 取决于网络的最终输出 (,其中 L 表示最后一层),这取决于激活前的最终输入 (),这取决于最后一层的权重()。现在我们要找到:
是成本函数的导数,是激活函数的导数。不管他们(
第 2 点可以从将等于零的事实证明。因此,您的向量将充满零,并且无法实现学习。
在反向传播算法的每次迭代中,您将通过将现有权重乘以反向传播确定的增量来更新权重。如果初始权重值为 0,则将其乘以 delta 的任何值都不会改变权重,这意味着每次迭代对您尝试优化的权重没有影响。