XOR 神经网络误差在训练期间停止减少
Posted
技术标签:
【中文标题】XOR 神经网络误差在训练期间停止减少【英文标题】:XOR neural network error stops decreasing during training 【发布时间】:2011-12-24 05:14:39 【问题描述】:我正在使用随机梯度下降通过反向传播训练 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
当我阅读神经网络时,我遇到了一个关于局部最小值和全局最小值的讨论,以及神经网络如何并不真正“知道”它应该走向哪个最小值。
我的网络是否陷入了局部最小值而不是全局最小值?
【问题讨论】:
【参考方案1】:是的,神经网络可能会陷入局部最小值,具体取决于误差面。然而this abstract 表明 XOR 问题的误差面中没有局部最小值。但是我无法获得全文,因此我无法验证作者为证明这一点所做的工作以及它如何应用于您的问题。
也可能有其他因素导致此问题。例如,如果您在某个陡峭的山谷非常快速地下降,如果您只使用一阶梯度下降,您可能会到达相反的斜坡并一直来回反弹。您还可以尝试在每次迭代中给出所有权重的平均变化,以测试您是否真的有一个“卡住”网络,或者更确切地说是一个刚刚进入极限循环的网络。
您应该首先尝试调整您的参数(学习率、动量(如果已实施)等)。如果您可以通过更改参数来解决问题,那么您的算法可能就可以了。
【讨论】:
谢谢!你的回答让事情变得更清楚了。看起来神经网络并不精确,并且涉及到一定程度的模糊性。我将尝试更改参数并尝试使问题消失。 我遇到了this paper(发表于 99 年,比你引用的那个晚一年)说 2-3-1 XOR 网络有一个本地最小值(我正在使用3-3-1 XOR 网络;不确定输入层上的偏差是否必要)。同样,就像您的情况一样,这是一个摘要。 我还看到 this paper 说最简单的 XOR 网络没有最小值,但这似乎不是 2-3-1 或 3-3-1 网络。 【参考方案2】: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
【讨论】:
【参考方案3】:我遇到了同样的问题,发现使用LeCun's "Efficient Backprop" paper 中描述的激活函数 1.7159*tanh(2/3*x) 会有所帮助。这可能是因为该函数不会在目标值 -1, 1 附近饱和,而常规 tanh 会。
【讨论】:
【参考方案4】:@LiKao 的回答中引用的 Hamey 的论文证明,2-2-1 神经网络中的 XOR 没有严格的“区域局部最小值”。然而,它承认“渐近最小值”,其中误差表面随着一个或多个权重接近无穷大而变平。
在实践中,权重甚至不需要太大就可以发生这种情况,而且 2-2-1 网卡在这个平坦的渐近区域中是很常见的。造成这种情况的原因是饱和:随着权重变大,sigmoid 激活的梯度接近 0,因此网络无法继续学习。
请参阅我的 notebook experiment - 通常 10 个网络中大约有 2 或 3 个最终会卡住,即使在 10,000 个 epoch 之后也是如此。如果您更改学习率、批量大小、激活或损失函数、初始权重、输入是随机创建还是按固定顺序创建等,结果会略有不同,但通常网络有时会卡住。
【讨论】:
以上是关于XOR 神经网络误差在训练期间停止减少的主要内容,如果未能解决你的问题,请参考以下文章