Neural network 我如何判断我的神经网络正在收敛到局部极小值?

Neural network 我如何判断我的神经网络正在收敛到局部极小值?,neural-network,backpropagation,Neural Network,Backpropagation,我建立了一个相对简单的人工神经网络,试图对Q-学习问题中的值函数进行建模,但为了验证我的网络实现是正确的,我正在尝试解决XOR问题 我的网络架构使用两层,tanh激活,学习因子为.001,偏差单位,动量设置为.9。在每次训练迭代之后,我打印错误项(使用平方误差),并运行直到我的错误收敛到~.001。这在75%的时间内有效,但另外25%的时间我的网络将收敛到约0.5的误差,这对于这个问题来说是相当大的 以下是错误项的打印输出示例: 0.542649 0.530637 0.521523 0.5091

我建立了一个相对简单的人工神经网络,试图对Q-学习问题中的值函数进行建模,但为了验证我的网络实现是正确的,我正在尝试解决XOR问题

我的网络架构使用两层,tanh激活,学习因子为.001,偏差单位,动量设置为.9。在每次训练迭代之后,我打印错误项(使用平方误差),并运行直到我的错误收敛到~.001。这在75%的时间内有效,但另外25%的时间我的网络将收敛到约0.5的误差,这对于这个问题来说是相当大的

以下是错误项的打印输出示例:

0.542649
0.530637
0.521523
0.509143
0.504623
0.501864
0.501657
0.500268
0.500057
0.500709
0.501979
0.501456
0.50275
0.507215
0.517656
0.530988
0.535493
0.539808
0.543903
误差会一直振荡到无穷大


所以问题是:我的实现是否被破坏了,或者我是否有可能达到了当地的最低要求?

请参阅:尤其是@zergylord对第三季度的回答。啊,是的,我读了很多这篇文章。我尝试了许多建议,例如使用线性输出层、ReLu层等(即使是Maxout,尽管我的实现仍在进行中[aka breaked])。但我所有的尝试都导致了同样的问题,即我的误差围绕某个大值振荡,并且永远不会完全收敛到0。我担心我的实现不好,但这可能只是局部最小收敛的症状。我只是没有足够的经验来分辨差异。我建议做两件事:1)使用数值微分例程(obv.用于测试,而不是训练时用于实际)验证backprop中每个样本的导数计算,以确保没有bug,2)尝试使用一些已知的正确的非线性优化例程进行训练,该例程执行定向线搜索(比如BFGS),而不是Q-学习方案-这类算法只有一步“前进”-如果实现正确,您永远不会看到
J_{t+1}>=J_t
。感谢您的建议!我测试了导数,还实现了交叉熵,并以更低的概率遇到了同样的问题。然而,当在线性例程上训练我的网络时,误差单调地减小(如预期的那样)。我将检查它与BFGS的行为。