13

我正在使用随机梯度下降通过反向传播训练 XOR 神经网络。神经网络的权重被初始化为 -0.5 到 0.5 之间的随机值。神经网络在大约 80% 的时间内成功地训练了自己。然而,有时它在反向传播时会“卡住”。通过“卡住”,我的意思是我开始看到错误纠正率下降。例如,在成功的训练过程中,随着网络的学习,总误差会迅速减少,如下所示:

...
...
Total error for this training set: 0.0010008071327708653
Total error for this training set: 0.001000750550254843
Total error for this training set: 0.001000693973929822
Total error for this training set: 0.0010006374037948094
Total error for this training set: 0.0010005808398488103
Total error for this training set: 0.0010005242820908169
Total error for this training set: 0.0010004677305198344
Total error for this training set: 0.0010004111851348654
Total error for this training set: 0.0010003546459349181
Total error for this training set: 0.0010002981129189812
Total error for this training set: 0.0010002415860860656
Total error for this training set: 0.0010001850654351723
Total error for this training set: 0.001000128550965301
Total error for this training set: 0.0010000720426754587
Total error for this training set: 0.0010000155405646494
Total error for this training set: 9.99959044631871E-4

Testing trained XOR neural network
0 XOR 0: 0.023956746649767453
0 XOR 1: 0.9736079194769579
1 XOR 0: 0.9735670067093437
1 XOR 1: 0.045068688874314006

然而,当它卡住时,总错误正在减少,但它似乎正在下降:

...
...
Total error for this training set: 0.12325486644721295
Total error for this training set: 0.12325486642503929
Total error for this training set: 0.12325486640286581
Total error for this training set: 0.12325486638069229
Total error for this training set: 0.12325486635851894
Total error for this training set: 0.12325486633634561
Total error for this training set: 0.1232548663141723
Total error for this training set: 0.12325486629199914
Total error for this training set: 0.12325486626982587
Total error for this training set: 0.1232548662476525
Total error for this training set: 0.12325486622547954
Total error for this training set: 0.12325486620330656
Total error for this training set: 0.12325486618113349
Total error for this training set: 0.12325486615896045
Total error for this training set: 0.12325486613678775
Total error for this training set: 0.12325486611461482
Total error for this training set: 0.1232548660924418
Total error for this training set: 0.12325486607026936
Total error for this training set: 0.12325486604809655
Total error for this training set: 0.12325486602592373
Total error for this training set: 0.12325486600375107
Total error for this training set: 0.12325486598157878
Total error for this training set: 0.12325486595940628
Total error for this training set: 0.1232548659372337
Total error for this training set: 0.12325486591506139
Total error for this training set: 0.12325486589288918
Total error for this training set: 0.12325486587071677
Total error for this training set: 0.12325486584854453

当我阅读神经网络时,我遇到了关于局部最小值和全局最小值的讨论,以及神经网络如何并不真正“知道”它应该走向哪个最小值。

我的网络是否陷入局部最小值而不是全局最小值?

4

4 回答 4

7

是的,神经网络可能会陷入局部最小值,这取决于误差面。然而,该摘要表明 XOR 问题的误差面中没有局部最小值。但是我无法获得全文,因此我无法验证作者为证明这一点所做的工作以及它如何应用于您的问题。

也可能有其他因素导致这个问题。例如,如果您在某个陡峭的山谷非常快速地下降,如果您只使用一阶梯度下降,您可能会到达相反的斜坡并一直来回反弹。您还可以尝试在每次迭代中给出所有权重的平均变化,以测试您是否真的有一个“卡住”的网络,或者更确切地说是一个刚刚进入极限循环的网络。

你应该首先尝试调整你的参数(学习率,如果你实现了动力等)。如果您可以通过更改参数使问题消失,那么您的算法可能就可以了。

于 2011-11-08T07:32:25.260 回答
4

正如 LiKao 所描述的那样,步长过大的梯度下降不良是一个可能的问题。另一个是 XOR 错误区域非常平坦,这意味着需要很长时间才能收敛,实际上梯度可能非常弱,以至于下降算法无法将您拉向正确的方向。

这两篇论文着眼于 2-1-1 和 2-2-1 XOR 情况。一个使用我不知道的“交叉熵”误差函数。在第一个中,他们声明没有局部最小值,但在第二个中,他们说在无穷大处存在局部最小值 - 基本上是当权重运行到非常大的值时。因此,对于第二种情况,他们的结果表明,如果您没有从“足够”真实最小值附近开始,您可能会陷入无限点。他们还说,由于特定定义,其他没有显示局部最小值的 2-2-1 XOR 网络分析与他们的结果并不矛盾。

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.31.4770

http://www.ncbi.nlm.nih.gov/pubmed/12662806

于 2012-09-06T03:35:25.533 回答
2

我遇到了同样的问题,发现使用LeCun 的“Efficient Backprop”论文中描述的激活函数 1.7159*tanh(2/3*x) 会有所帮助。这可能是因为该函数不会在目标值 {-1, 1} 附近饱和,而常规 tanh 会。

于 2015-09-05T00:32:21.303 回答
1

@LiKao 的回答中引用的 Hamey 的论文证明,2-2-1 神经网络中的 XOR 没有严格的“区域局部最小值”。然而,它承认“渐近最小值”,其中误差表面随着一个或多个权重接近无穷大而变平。

在实践中,权重甚至不需要太大就可以发生这种情况,而且 2-2-1 网卡在这个平坦的渐近区域中是很常见的。原因是饱和:随着权重变大,sigmoid 激活的梯度接近 0,因此网络无法继续学习。

请参阅我的笔记本实验- 通常 10 个网络中大约有 2 个或 3 个最终会卡住,即使在 10,000 个 epoch 之后也是如此。如果您更改学习率、批量大小、激活或损失函数、初始权重、输入是随机创建还是按固定顺序创建等,结果会略有不同,但通常网络有时会卡住。

于 2021-12-15T23:13:01.207 回答